<feed xmlns='http://www.w3.org/2005/Atom'>
<title>delta/openstack/taskflow.git/taskflow/tests/utils.py, branch master</title>
<subtitle>opendev.org: openstack/taskflow.git
</subtitle>
<link rel='alternate' type='text/html' href='http://91.123.203.49/cgit/delta/openstack/taskflow.git/'/>
<entry>
<title>Merge "Change StrictRedis usage to Redis"</title>
<updated>2023-02-17T13:27:20+00:00</updated>
<author>
<name>Zuul</name>
<email>zuul@review.opendev.org</email>
</author>
<published>2023-02-17T13:27:20+00:00</published>
<link rel='alternate' type='text/html' href='http://91.123.203.49/cgit/delta/openstack/taskflow.git/commit/?id=e5e572ab8e407d2779b96d3aac333713f79b3533'/>
<id>e5e572ab8e407d2779b96d3aac333713f79b3533</id>
<content type='text'>
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
</pre>
</div>
</content>
</entry>
<entry>
<title>Change StrictRedis usage to Redis</title>
<updated>2022-09-29T08:37:05+00:00</updated>
<author>
<name>Tobias Urdin</name>
<email>tobias.urdin@binero.com</email>
</author>
<published>2022-09-28T10:21:46+00:00</published>
<link rel='alternate' type='text/html' href='http://91.123.203.49/cgit/delta/openstack/taskflow.git/commit/?id=4ff2d00178c1c5f3fe65c0ba6b0986df618cab78'/>
<id>4ff2d00178c1c5f3fe65c0ba6b0986df618cab78</id>
<content type='text'>
The StrictRedis class is only an alias for
Redis in &gt;= 3.0.0

Change-Id: Ief27531f120a50805053c214cb61bb4151678d70
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
The StrictRedis class is only an alias for
Redis in &gt;= 3.0.0

Change-Id: Ief27531f120a50805053c214cb61bb4151678d70
</pre>
</div>
</content>
</entry>
<entry>
<title>Remove six</title>
<updated>2022-05-18T07:12:37+00:00</updated>
<author>
<name>Takashi Kajinami</name>
<email>tkajinam@redhat.com</email>
</author>
<published>2022-05-17T13:56:45+00:00</published>
<link rel='alternate' type='text/html' href='http://91.123.203.49/cgit/delta/openstack/taskflow.git/commit/?id=44f17d005ff53008144ca7c509bcb1307d66b23f'/>
<id>44f17d005ff53008144ca7c509bcb1307d66b23f</id>
<content type='text'>
This library no longer supports Python 2, thus usage of six can be
removed. This also removes workaround about pickle library used in
Python 2 only.

Change-Id: I19d298cf0f402d65f0b142dea0bf35cf992332a9
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
This library no longer supports Python 2, thus usage of six can be
removed. This also removes workaround about pickle library used in
Python 2 only.

Change-Id: I19d298cf0f402d65f0b142dea0bf35cf992332a9
</pre>
</div>
</content>
</entry>
<entry>
<title>Fix process based executor task proxying-back events</title>
<updated>2017-07-11T03:14:04+00:00</updated>
<author>
<name>Joshua Harlow</name>
<email>harlowja@yahoo-inc.com</email>
</author>
<published>2016-01-25T23:56:07+00:00</published>
<link rel='alternate' type='text/html' href='http://91.123.203.49/cgit/delta/openstack/taskflow.git/commit/?id=84c7a7b2c7dcbade1bc802cac7c93ccd9b746cb3'/>
<id>84c7a7b2c7dcbade1bc802cac7c93ccd9b746cb3</id>
<content type='text'>
Let's dive into what the problem is here.

First a description of what happens to a task that
is to be executed in a external (but local) process
via the process executor mechanism.

When a task is about to be sent to execute in the
external (but local) process its first cloned, this
is mainly done so that its notification callbacks can
be altered in a safe manner (ie not altering the
original task object to do this) and that clone has
its notifier emptied out.

What replaces the clone's notifier callbacks though
is a new object (that has a __call__ method so it
looks like just another callback) that will send
messages to the parent process (the one that has
the engine in it) over a secure(ish) channel whenever
the local task triggers its notifier notify() method.

This allows for callbacks in the parent process to
get triggered because once the messages recieved the
original tasks notifier object has its notify() method
called (therefore those callbacks do not really know
the task they are getting messages from is executing out
of process).

The issue though is that if the ANY(*) event type is registered
due to how it works in the notifier is that if the child/cloned
notifier has the ANY event type registered and the cloned task
calls notify() with a specific event this will cause the ANY
callback (in the clone) to transmit a message *and* it will
cause the *specific* event callback to also transmit a message
back to the parent process.

On the engine process side it will get 2 messages and trigger
the callbacks 3 times (twice for the specific event callback
because how the local notifier has the ANY callback registered
and one more time when the local process also sends the same
event based on its registration of the ANY event in the child
process).

This is not what is expected (the message rcved on the engine
process should only trigger one callback to get triggered
if the engine process task has no ANY callback registered or two
engine process callbacks to get triggered if the engine process
task has the ANY callback registered).

Closes-Bug: #1537948

Change-Id: I271bf1f23ad73df6c177cf00fd902c4881ba44ae
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Let's dive into what the problem is here.

First a description of what happens to a task that
is to be executed in a external (but local) process
via the process executor mechanism.

When a task is about to be sent to execute in the
external (but local) process its first cloned, this
is mainly done so that its notification callbacks can
be altered in a safe manner (ie not altering the
original task object to do this) and that clone has
its notifier emptied out.

What replaces the clone's notifier callbacks though
is a new object (that has a __call__ method so it
looks like just another callback) that will send
messages to the parent process (the one that has
the engine in it) over a secure(ish) channel whenever
the local task triggers its notifier notify() method.

This allows for callbacks in the parent process to
get triggered because once the messages recieved the
original tasks notifier object has its notify() method
called (therefore those callbacks do not really know
the task they are getting messages from is executing out
of process).

The issue though is that if the ANY(*) event type is registered
due to how it works in the notifier is that if the child/cloned
notifier has the ANY event type registered and the cloned task
calls notify() with a specific event this will cause the ANY
callback (in the clone) to transmit a message *and* it will
cause the *specific* event callback to also transmit a message
back to the parent process.

On the engine process side it will get 2 messages and trigger
the callbacks 3 times (twice for the specific event callback
because how the local notifier has the ANY callback registered
and one more time when the local process also sends the same
event based on its registration of the ANY event in the child
process).

This is not what is expected (the message rcved on the engine
process should only trigger one callback to get triggered
if the engine process task has no ANY callback registered or two
engine process callbacks to get triggered if the engine process
task has the ANY callback registered).

Closes-Bug: #1537948

Change-Id: I271bf1f23ad73df6c177cf00fd902c4881ba44ae
</pre>
</div>
</content>
</entry>
<entry>
<title>Some classes not define __ne__() built-in function</title>
<updated>2016-08-31T10:57:50+00:00</updated>
<author>
<name>Ji-Wei</name>
<email>ji.wei3@zte.com.cn</email>
</author>
<published>2016-08-31T10:23:25+00:00</published>
<link rel='alternate' type='text/html' href='http://91.123.203.49/cgit/delta/openstack/taskflow.git/commit/?id=e26f09e0d14d7a1a763596dd8a6029237e5ce530'/>
<id>e26f09e0d14d7a1a763596dd8a6029237e5ce530</id>
<content type='text'>
Some classes defines __eq__() built-in function, but does
not define __ne__() built-in function, so self.assertEqual works
but self.assertNotEqual does not work at all in this test case in
python2. This patch fixes it.

Change-Id: I3e4f213081268bad44583a63a84795d39094117f
Closes-Bug: #1586268
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Some classes defines __eq__() built-in function, but does
not define __ne__() built-in function, so self.assertEqual works
but self.assertNotEqual does not work at all in this test case in
python2. This patch fixes it.

Change-Id: I3e4f213081268bad44583a63a84795d39094117f
Closes-Bug: #1586268
</pre>
</div>
</content>
</entry>
<entry>
<title>Instead of a multiprocessing queue use sockets via asyncore</title>
<updated>2016-05-24T23:16:56+00:00</updated>
<author>
<name>Joshua Harlow</name>
<email>harlowja@yahoo-inc.com</email>
</author>
<published>2015-11-12T00:33:49+00:00</published>
<link rel='alternate' type='text/html' href='http://91.123.203.49/cgit/delta/openstack/taskflow.git/commit/?id=c5e9cf28df9dda763d146859b1472d8bbcf85665'/>
<id>c5e9cf28df9dda763d146859b1472d8bbcf85665</id>
<content type='text'>
For a local process based executor usage currently to ensure
that task emitted notifications are proxied we use the multi
processing library and use its queue concept. This sadly creates
a proxy process that gets associated, and this proxy process
handles the queue and messages sent to and from it. Instead of
doing this we can instead just create a temporary local socket
using a random socket and have tasks (which are running in
different processes) use that to communicate back any emitted
notifications instead (and we can use the asyncore module to handle
the emitted notifications since it handles the lower level socket
reading, polling and dispatching).

To ensure that the socket created is somewhat secure we use a
similar process as the multi-processing library uses where we
sign all messages with a hmac that uses a one time key that only
the main process and the child process know about (and reject
any messages that do not validate using this key).

Change-Id: Iff9180054bf14495e5667af00ae2fafbdbc23791
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
For a local process based executor usage currently to ensure
that task emitted notifications are proxied we use the multi
processing library and use its queue concept. This sadly creates
a proxy process that gets associated, and this proxy process
handles the queue and messages sent to and from it. Instead of
doing this we can instead just create a temporary local socket
using a random socket and have tasks (which are running in
different processes) use that to communicate back any emitted
notifications instead (and we can use the asyncore module to handle
the emitted notifications since it handles the lower level socket
reading, polling and dispatching).

To ensure that the socket created is somewhat secure we use a
similar process as the multi-processing library uses where we
sign all messages with a hmac that uses a one time key that only
the main process and the child process know about (and reject
any messages that do not validate using this key).

Change-Id: Iff9180054bf14495e5667af00ae2fafbdbc23791
</pre>
</div>
</content>
</entry>
<entry>
<title>Make conductor.stop stop the running engine gracefully</title>
<updated>2016-05-03T17:59:18+00:00</updated>
<author>
<name>Greg Hill</name>
<email>greg.hill@rackspace.com</email>
</author>
<published>2016-01-20T16:57:45+00:00</published>
<link rel='alternate' type='text/html' href='http://91.123.203.49/cgit/delta/openstack/taskflow.git/commit/?id=d1db445461ae714738bd4c4d73e043c481e1213d'/>
<id>d1db445461ae714738bd4c4d73e043c481e1213d</id>
<content type='text'>
Previously stopping the conductor would only prevent it from
accepting new jobs.  This change makes it abort the current job
by telling the engine to stop processing tasks after the current
ones finish.

This allows for conductors to gracefully exit when receiving a kill
signal (although the signal handling is not done automatically yet).

Change-Id: Ie6ddcbb2df4508ad1e3f6698c6f4cb2fc26a278f
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Previously stopping the conductor would only prevent it from
accepting new jobs.  This change makes it abort the current job
by telling the engine to stop processing tasks after the current
ones finish.

This allows for conductors to gracefully exit when receiving a kill
signal (although the signal handling is not done automatically yet).

Change-Id: Ie6ddcbb2df4508ad1e3f6698c6f4cb2fc26a278f
</pre>
</div>
</content>
</entry>
<entry>
<title>Allow for revert to have a different argument list from execute</title>
<updated>2016-02-26T19:45:33+00:00</updated>
<author>
<name>Greg Hill</name>
<email>greg.hill@rackspace.com</email>
</author>
<published>2016-01-21T14:20:58+00:00</published>
<link rel='alternate' type='text/html' href='http://91.123.203.49/cgit/delta/openstack/taskflow.git/commit/?id=e8d78e7aab7ed9c1180d9947ef484573eac1f606'/>
<id>e8d78e7aab7ed9c1180d9947ef484573eac1f606</id>
<content type='text'>
Also allows for people to create Atom's with a different rebind
or requires structure for the revert method, if desired.

Implements blueprint: seperate-revert-args

Change-Id: Ie7d13c8000ef08ff303481d486d1ba1cfbdeea44
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Also allows for people to create Atom's with a different rebind
or requires structure for the revert method, if desired.

Implements blueprint: seperate-revert-args

Change-Id: Ie7d13c8000ef08ff303481d486d1ba1cfbdeea44
</pre>
</div>
</content>
</entry>
<entry>
<title>Avoid adding 1 to a failure (if it gets triggered)</title>
<updated>2015-07-28T01:07:25+00:00</updated>
<author>
<name>Joshua Harlow</name>
<email>harlowja@yahoo-inc.com</email>
</author>
<published>2015-07-28T01:04:12+00:00</published>
<link rel='alternate' type='text/html' href='http://91.123.203.49/cgit/delta/openstack/taskflow.git/commit/?id=6dda5a55c06d71143915635260ff3a31783039ae'/>
<id>6dda5a55c06d71143915635260ff3a31783039ae</id>
<content type='text'>
Sometimes the CI gate times out and instead of returning
normal results a failure object is returned, so be more
careful on adding integers to those objects.

Closes-Bug: 1478744

Change-Id: Ibdb9d30266d2a7f3bfeacc39e74cf61b44025a56
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Sometimes the CI gate times out and instead of returning
normal results a failure object is returned, so be more
careful on adding integers to those objects.

Closes-Bug: 1478744

Change-Id: Ibdb9d30266d2a7f3bfeacc39e74cf61b44025a56
</pre>
</div>
</content>
</entry>
<entry>
<title>Retain atom 'revert' result (or failure)</title>
<updated>2015-07-11T01:12:48+00:00</updated>
<author>
<name>Joshua Harlow</name>
<email>harlowja@yahoo-inc.com</email>
</author>
<published>2015-06-17T18:28:57+00:00</published>
<link rel='alternate' type='text/html' href='http://91.123.203.49/cgit/delta/openstack/taskflow.git/commit/?id=a3fe3eb698e7bfa20b0b7fddd91c37a44c092f2c'/>
<id>a3fe3eb698e7bfa20b0b7fddd91c37a44c092f2c</id>
<content type='text'>
When a atom is reverted it can be useful to retain the
result of that 'revert' method being called, so that it
can be later analyzed (or used for various purposes) so
adjust the storage, and actions to enable it to be stored.

Change-Id: I38a9a5f3bf7550e924468bb4a86652cb8beb306c
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
When a atom is reverted it can be useful to retain the
result of that 'revert' method being called, so that it
can be later analyzed (or used for various purposes) so
adjust the storage, and actions to enable it to be stored.

Change-Id: I38a9a5f3bf7550e924468bb4a86652cb8beb306c
</pre>
</div>
</content>
</entry>
</feed>
