)]}'
{"etc/watcher/watcher.conf.sample":[{"author":{"_account_id":12394,"name":"David TARDIVEL","email":"David.TARDIVEL@b-com.com","username":"David.T"},"change_message_id":"4a0615210f59919f4f13952c810278d9abdfd4f4","unresolved":false,"context_lines":[{"line_number":1,"context_line":"[DEFAULT]"},{"line_number":2,"context_line":""},{"line_number":3,"context_line":"#"},{"line_number":4,"context_line":"# From oslo.log"}],"source_content_type":"application/octet-stream","patch_set":14,"id":"9a68dd71_de8321cb","line":1,"updated":"2016-01-21 13:03:53.000000000","message":"oslo sections has changed. Regarding to requirements.txt file, it should be not.","commit_id":"6b05875b63110f621044024f3e81177d0ea16778"},{"author":{"_account_id":16495,"name":"Jean-Emile DARTOIS","email":"jean-emile.dartois@b-com.com","username":"JeD"},"change_message_id":"452201d325a5d6c2136933e7cd99160c9f710880","unresolved":false,"context_lines":[{"line_number":1,"context_line":"[DEFAULT]"},{"line_number":2,"context_line":""},{"line_number":3,"context_line":"#"},{"line_number":4,"context_line":"# From oslo.log"}],"source_content_type":"application/octet-stream","patch_set":14,"id":"9a68dd71_bbcf5a7e","line":1,"in_reply_to":"9a68dd71_de8321cb","updated":"2016-01-21 14:09:29.000000000","message":"As you well know this file is automatically generated by the command \"tox -e config\".  \n\nSo, I didn\u0027t understand you point.","commit_id":"6b05875b63110f621044024f3e81177d0ea16778"},{"author":{"_account_id":12394,"name":"David TARDIVEL","email":"David.TARDIVEL@b-com.com","username":"David.T"},"change_message_id":"4a0615210f59919f4f13952c810278d9abdfd4f4","unresolved":false,"context_lines":[{"line_number":712,"context_line":""},{"line_number":713,"context_line":"# Number of workers for applier, default value is 1. (integer value)"},{"line_number":714,"context_line":"# Minimum value: 1"},{"line_number":715,"context_line":"#workers \u003d 1"},{"line_number":716,"context_line":""},{"line_number":717,"context_line":"# Select the engine to use to execute the workflow (string value)"},{"line_number":718,"context_line":"#workflow_engine \u003d taskflow"}],"source_content_type":"application/octet-stream","patch_set":14,"id":"9a68dd71_5e7891f2","line":715,"range":{"start_line":715,"start_character":0,"end_line":715,"end_character":12},"updated":"2016-01-21 13:03:53.000000000","message":"In several openstack modules (nova, glance, cinder, ....) using workers, the default value will be equal to the number of CPUs available.\n\nfrom oslo_concurrency import processutils\n\n    workers \u003d CONF.conductor.workers or processutils.get_worker_count()\n\n# Number of workers for applier. The default will be\n# equal to the number of CPUs available.\n#workers \u003d \u003cNone\u003e","commit_id":"6b05875b63110f621044024f3e81177d0ea16778"},{"author":{"_account_id":16495,"name":"Jean-Emile DARTOIS","email":"jean-emile.dartois@b-com.com","username":"JeD"},"change_message_id":"452201d325a5d6c2136933e7cd99160c9f710880","unresolved":false,"context_lines":[{"line_number":712,"context_line":""},{"line_number":713,"context_line":"# Number of workers for applier, default value is 1. (integer value)"},{"line_number":714,"context_line":"# Minimum value: 1"},{"line_number":715,"context_line":"#workers \u003d 1"},{"line_number":716,"context_line":""},{"line_number":717,"context_line":"# Select the engine to use to execute the workflow (string value)"},{"line_number":718,"context_line":"#workflow_engine \u003d taskflow"}],"source_content_type":"application/octet-stream","patch_set":14,"id":"9a68dd71_3b27eab7","line":715,"range":{"start_line":715,"start_character":0,"end_line":715,"end_character":12},"in_reply_to":"9a68dd71_5e7891f2","updated":"2016-01-21 14:09:29.000000000","message":"If you carefully take look at the code for this parameter I don\u0027t think this is a good idea.\n\nWe can do that for taskflow engine. But for the moment this parameter not exist.","commit_id":"6b05875b63110f621044024f3e81177d0ea16778"},{"author":{"_account_id":12394,"name":"David TARDIVEL","email":"David.TARDIVEL@b-com.com","username":"David.T"},"change_message_id":"4a0615210f59919f4f13952c810278d9abdfd4f4","unresolved":false,"context_lines":[{"line_number":717,"context_line":"# Select the engine to use to execute the workflow (string value)"},{"line_number":718,"context_line":"#workflow_engine \u003d taskflow"},{"line_number":719,"context_line":""},{"line_number":720,"context_line":"# The topic name used forcontrol events, this topic used for rpc call"},{"line_number":721,"context_line":"# (string value)"},{"line_number":722,"context_line":"#topic_control \u003d watcher.applier.control"},{"line_number":723,"context_line":""},{"line_number":724,"context_line":"# The identifier used by watcher module on the message broker (string"},{"line_number":725,"context_line":"# value)"}],"source_content_type":"application/octet-stream","patch_set":14,"id":"9a68dd71_be78ad2c","line":722,"range":{"start_line":720,"start_character":0,"end_line":722,"end_character":40},"updated":"2016-01-21 13:03:53.000000000","message":"blank char missing\n\nIn all modules, notifications are sent to openstack topic named \u0027notifications\u0027.  Why not for Watcher Applier ?\n\nAnd we find in all OpenStack core module the same definition for topic dedicated to  RPC call: \n\n# The topic that volume nodes listen on (string value)\n#volume_topic\u003dcinder-volume\n\n# The topic compute nodes listen on (string value)\n#compute_topic \u003d compute\n\nSo could we write this :\n\n# The topic the Watcher Applier nodes listen on (string value)\n#topic_control \u003d watcher-applier","commit_id":"6b05875b63110f621044024f3e81177d0ea16778"},{"author":{"_account_id":16495,"name":"Jean-Emile DARTOIS","email":"jean-emile.dartois@b-com.com","username":"JeD"},"change_message_id":"452201d325a5d6c2136933e7cd99160c9f710880","unresolved":false,"context_lines":[{"line_number":717,"context_line":"# Select the engine to use to execute the workflow (string value)"},{"line_number":718,"context_line":"#workflow_engine \u003d taskflow"},{"line_number":719,"context_line":""},{"line_number":720,"context_line":"# The topic name used forcontrol events, this topic used for rpc call"},{"line_number":721,"context_line":"# (string value)"},{"line_number":722,"context_line":"#topic_control \u003d watcher.applier.control"},{"line_number":723,"context_line":""},{"line_number":724,"context_line":"# The identifier used by watcher module on the message broker (string"},{"line_number":725,"context_line":"# value)"}],"source_content_type":"application/octet-stream","patch_set":14,"id":"9a68dd71_db648ee6","line":722,"range":{"start_line":720,"start_character":0,"end_line":722,"end_character":40},"in_reply_to":"9a68dd71_be78ad2c","updated":"2016-01-21 14:09:29.000000000","message":"This is not related to this topic.","commit_id":"6b05875b63110f621044024f3e81177d0ea16778"},{"author":{"_account_id":12394,"name":"David TARDIVEL","email":"David.TARDIVEL@b-com.com","username":"David.T"},"change_message_id":"4a0615210f59919f4f13952c810278d9abdfd4f4","unresolved":false,"context_lines":[{"line_number":740,"context_line":"# value)"},{"line_number":741,"context_line":"#publisher_id \u003d watcher.decision.api"},{"line_number":742,"context_line":""},{"line_number":743,"context_line":"# The topic name used forcontrol events, this topic used for rpc call"},{"line_number":744,"context_line":"# (string value)"},{"line_number":745,"context_line":"#topic_control \u003d watcher.decision.control"},{"line_number":746,"context_line":""}],"source_content_type":"application/octet-stream","patch_set":14,"id":"9a68dd71_3867f526","line":743,"range":{"start_line":743,"start_character":22,"end_line":743,"end_character":32},"updated":"2016-01-21 13:03:53.000000000","message":"ditto","commit_id":"6b05875b63110f621044024f3e81177d0ea16778"},{"author":{"_account_id":16495,"name":"Jean-Emile DARTOIS","email":"jean-emile.dartois@b-com.com","username":"JeD"},"change_message_id":"452201d325a5d6c2136933e7cd99160c9f710880","unresolved":false,"context_lines":[{"line_number":740,"context_line":"# value)"},{"line_number":741,"context_line":"#publisher_id \u003d watcher.decision.api"},{"line_number":742,"context_line":""},{"line_number":743,"context_line":"# The topic name used forcontrol events, this topic used for rpc call"},{"line_number":744,"context_line":"# (string value)"},{"line_number":745,"context_line":"#topic_control \u003d watcher.decision.control"},{"line_number":746,"context_line":""}],"source_content_type":"application/octet-stream","patch_set":14,"id":"9a68dd71_7b6322dd","line":743,"range":{"start_line":743,"start_character":22,"end_line":743,"end_character":32},"in_reply_to":"9a68dd71_3867f526","updated":"2016-01-21 14:09:29.000000000","message":"This is not related to this topic.","commit_id":"6b05875b63110f621044024f3e81177d0ea16778"},{"author":{"_account_id":12394,"name":"David TARDIVEL","email":"David.TARDIVEL@b-com.com","username":"David.T"},"change_message_id":"4a0615210f59919f4f13952c810278d9abdfd4f4","unresolved":false,"context_lines":[{"line_number":746,"context_line":""},{"line_number":747,"context_line":"# The maximum number of threads that can be used to execute strategies"},{"line_number":748,"context_line":"# (integer value)"},{"line_number":749,"context_line":"#max_workers \u003d 2"},{"line_number":750,"context_line":""},{"line_number":751,"context_line":"# The topic name used for status events, this topic is used so as to"},{"line_number":752,"context_line":"# notifythe others components of the system (string value)"}],"source_content_type":"application/octet-stream","patch_set":14,"id":"9a68dd71_a38adabd","line":749,"range":{"start_line":749,"start_character":15,"end_line":749,"end_character":16},"updated":"2016-01-21 13:03:53.000000000","message":"ditto\nwhy \u0027max_workers\u0027 and not \u0027workers\u0027 as applier ?","commit_id":"6b05875b63110f621044024f3e81177d0ea16778"},{"author":{"_account_id":16495,"name":"Jean-Emile DARTOIS","email":"jean-emile.dartois@b-com.com","username":"JeD"},"change_message_id":"452201d325a5d6c2136933e7cd99160c9f710880","unresolved":false,"context_lines":[{"line_number":746,"context_line":""},{"line_number":747,"context_line":"# The maximum number of threads that can be used to execute strategies"},{"line_number":748,"context_line":"# (integer value)"},{"line_number":749,"context_line":"#max_workers \u003d 2"},{"line_number":750,"context_line":""},{"line_number":751,"context_line":"# The topic name used for status events, this topic is used so as to"},{"line_number":752,"context_line":"# notifythe others components of the system (string value)"}],"source_content_type":"application/octet-stream","patch_set":14,"id":"9a68dd71_b85f6040","line":749,"range":{"start_line":749,"start_character":15,"end_line":749,"end_character":16},"in_reply_to":"9a68dd71_a38adabd","updated":"2016-01-21 14:09:29.000000000","message":"This is not related to this patchset.\nBut, in threadPoolExecutor the parameter is max workers.\nI think this the reason why I have chosen max workers.\nBut I prefer the term workers . You can create a bug if you want.\nclass ThreadPoolExecutor(_base.Executor): def __init__(self, max_workers):","commit_id":"6b05875b63110f621044024f3e81177d0ea16778"},{"author":{"_account_id":12394,"name":"David TARDIVEL","email":"David.TARDIVEL@b-com.com","username":"David.T"},"change_message_id":"4a0615210f59919f4f13952c810278d9abdfd4f4","unresolved":false,"context_lines":[{"line_number":748,"context_line":"# (integer value)"},{"line_number":749,"context_line":"#max_workers \u003d 2"},{"line_number":750,"context_line":""},{"line_number":751,"context_line":"# The topic name used for status events, this topic is used so as to"},{"line_number":752,"context_line":"# notifythe others components of the system (string value)"},{"line_number":753,"context_line":"#topic_status \u003d watcher.decision.status"},{"line_number":754,"context_line":""},{"line_number":755,"context_line":""},{"line_number":756,"context_line":"[watcher_goals]"}],"source_content_type":"application/octet-stream","patch_set":14,"id":"9a68dd71_1e053979","line":753,"range":{"start_line":751,"start_character":0,"end_line":753,"end_character":39},"updated":"2016-01-21 13:03:53.000000000","message":"ditto","commit_id":"6b05875b63110f621044024f3e81177d0ea16778"},{"author":{"_account_id":16495,"name":"Jean-Emile DARTOIS","email":"jean-emile.dartois@b-com.com","username":"JeD"},"change_message_id":"452201d325a5d6c2136933e7cd99160c9f710880","unresolved":false,"context_lines":[{"line_number":748,"context_line":"# (integer value)"},{"line_number":749,"context_line":"#max_workers \u003d 2"},{"line_number":750,"context_line":""},{"line_number":751,"context_line":"# The topic name used for status events, this topic is used so as to"},{"line_number":752,"context_line":"# notifythe others components of the system (string value)"},{"line_number":753,"context_line":"#topic_status \u003d watcher.decision.status"},{"line_number":754,"context_line":""},{"line_number":755,"context_line":""},{"line_number":756,"context_line":"[watcher_goals]"}],"source_content_type":"application/octet-stream","patch_set":14,"id":"9a68dd71_dbc00e7f","line":753,"range":{"start_line":751,"start_character":0,"end_line":753,"end_character":39},"in_reply_to":"9a68dd71_1e053979","updated":"2016-01-21 14:09:29.000000000","message":"This is not related to this topic.","commit_id":"6b05875b63110f621044024f3e81177d0ea16778"}],"watcher/applier/actions/base.py":[{"author":{"_account_id":12394,"name":"David TARDIVEL","email":"David.TARDIVEL@b-com.com","username":"David.T"},"change_message_id":"ed095ccd17a9405cfa5d01df36671748e451f8ca","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":14,"id":"9a68dd71_a29bab71","line":72,"updated":"2016-01-21 16:03:55.000000000","message":"Why it could be not have postcondition checking ?","commit_id":"6b05875b63110f621044024f3e81177d0ea16778"}],"watcher/applier/default.py":[{"author":{"_account_id":12394,"name":"David TARDIVEL","email":"David.TARDIVEL@b-com.com","username":"David.T"},"change_message_id":"ed095ccd17a9405cfa5d01df36671748e451f8ca","unresolved":false,"context_lines":[{"line_number":54,"context_line":"        return self._engine"},{"line_number":55,"context_line":""},{"line_number":56,"context_line":"    def execute(self, action_plan_uuid):"},{"line_number":57,"context_line":"        LOG.debug(\"Executing Action plan %s \", action_plan_uuid)"},{"line_number":58,"context_line":"        action_plan \u003d objects.ActionPlan.get_by_uuid(self.context,"},{"line_number":59,"context_line":"                                                     action_plan_uuid)"},{"line_number":60,"context_line":"        # todo(jed) remove direct access to dbapi need filter in object"}],"source_content_type":"text/x-python","patch_set":14,"id":"9a68dd71_427aeff2","line":57,"range":{"start_line":57,"start_character":29,"end_line":57,"end_character":40},"updated":"2016-01-21 16:03:55.000000000","message":"action plan","commit_id":"6b05875b63110f621044024f3e81177d0ea16778"}],"watcher/applier/execution/taskflow_executor.py":[{"author":{"_account_id":1297,"name":"Joshua Harlow","email":"jxharlow@godaddy.com","username":"harlowja"},"change_message_id":"c27477637d4b1c7299d33d64823bba36982725bf","unresolved":false,"context_lines":[{"line_number":47,"context_line":"        LOG.debug(\"Running %s\" % self.action)"},{"line_number":48,"context_line":"        try:"},{"line_number":49,"context_line":"            self.action_plan_executor.notify(self._db_action, Status.ONGOING)"},{"line_number":50,"context_line":"            result \u003d self.action.execute()"},{"line_number":51,"context_line":"            if result is not True:"},{"line_number":52,"context_line":"                print(\"FAILED %s \", result)"},{"line_number":53,"context_line":"                self.notify(self._db_action, Status.FAILED)"}],"source_content_type":"text/x-python","patch_set":5,"id":"da6ed579_f9a79aba","line":50,"updated":"2016-01-15 01:15:26.000000000","message":"What\u0027s the difference between this action and the taskflow task, seems like they are sorta the same (just one has `undo` instead of `revert`)?","commit_id":"506643c12402fa2f780d1a7313f9a02881abbd90"},{"author":{"_account_id":1297,"name":"Joshua Harlow","email":"jxharlow@godaddy.com","username":"harlowja"},"change_message_id":"f4cbcc56c11d001c798a456816a5aa9ff005e712","unresolved":false,"context_lines":[{"line_number":47,"context_line":"        LOG.debug(\"Running %s\" % self.action)"},{"line_number":48,"context_line":"        try:"},{"line_number":49,"context_line":"            self.action_plan_executor.notify(self._db_action, Status.ONGOING)"},{"line_number":50,"context_line":"            result \u003d self.action.execute()"},{"line_number":51,"context_line":"            if result is not True:"},{"line_number":52,"context_line":"                print(\"FAILED %s \", result)"},{"line_number":53,"context_line":"                self.notify(self._db_action, Status.FAILED)"}],"source_content_type":"text/x-python","patch_set":5,"id":"ba63e191_177229e6","line":50,"in_reply_to":"da6ed579_1bd29828","updated":"2016-01-19 03:53:38.000000000","message":"Interesting, any idea what the alternatives are?","commit_id":"506643c12402fa2f780d1a7313f9a02881abbd90"},{"author":{"_account_id":16495,"name":"Jean-Emile DARTOIS","email":"jean-emile.dartois@b-com.com","username":"JeD"},"change_message_id":"509db9a3ccc3719cc9b86a2cb5adf4e0e238446e","unresolved":false,"context_lines":[{"line_number":47,"context_line":"        LOG.debug(\"Running %s\" % self.action)"},{"line_number":48,"context_line":"        try:"},{"line_number":49,"context_line":"            self.action_plan_executor.notify(self._db_action, Status.ONGOING)"},{"line_number":50,"context_line":"            result \u003d self.action.execute()"},{"line_number":51,"context_line":"            if result is not True:"},{"line_number":52,"context_line":"                print(\"FAILED %s \", result)"},{"line_number":53,"context_line":"                self.notify(self._db_action, Status.FAILED)"}],"source_content_type":"text/x-python","patch_set":5,"id":"da6ed579_1bd29828","line":50,"in_reply_to":"da6ed579_f9a79aba","updated":"2016-01-18 09:50:54.000000000","message":"The main reason for having the \u0027watcher action\u0027 is to give the possibility to have several implementations of the Workflow Engine.We want to provide the \u0027taskflow\u0027 engine by default although we still want to leave the possibility for the users to change it.","commit_id":"506643c12402fa2f780d1a7313f9a02881abbd90"},{"author":{"_account_id":1297,"name":"Joshua Harlow","email":"jxharlow@godaddy.com","username":"harlowja"},"change_message_id":"e71d7403885331020ec665302d489a59f9b96ba0","unresolved":false,"context_lines":[{"line_number":97,"context_line":"                if previous is None:"},{"line_number":98,"context_line":"                    previous \u003d primitive"},{"line_number":99,"context_line":"                else:"},{"line_number":100,"context_line":"                    # decider \u003d\u003d guard (UML)"},{"line_number":101,"context_line":"                    flow.link(previous, primitive, decider\u003dself.allow)"},{"line_number":102,"context_line":"                    previous \u003d primitive"},{"line_number":103,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"da6ed579_392f7289","line":100,"updated":"2016-01-15 01:02:06.000000000","message":"Ya, something like that :)","commit_id":"506643c12402fa2f780d1a7313f9a02881abbd90"},{"author":{"_account_id":16495,"name":"Jean-Emile DARTOIS","email":"jean-emile.dartois@b-com.com","username":"JeD"},"change_message_id":"509db9a3ccc3719cc9b86a2cb5adf4e0e238446e","unresolved":false,"context_lines":[{"line_number":97,"context_line":"                if previous is None:"},{"line_number":98,"context_line":"                    previous \u003d primitive"},{"line_number":99,"context_line":"                else:"},{"line_number":100,"context_line":"                    # decider \u003d\u003d guard (UML)"},{"line_number":101,"context_line":"                    flow.link(previous, primitive, decider\u003dself.allow)"},{"line_number":102,"context_line":"                    previous \u003d primitive"},{"line_number":103,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"da6ed579_22cef283","line":100,"in_reply_to":"da6ed579_392f7289","updated":"2016-01-18 09:50:54.000000000","message":";-)","commit_id":"506643c12402fa2f780d1a7313f9a02881abbd90"},{"author":{"_account_id":1297,"name":"Joshua Harlow","email":"jxharlow@godaddy.com","username":"harlowja"},"change_message_id":"e71d7403885331020ec665302d489a59f9b96ba0","unresolved":false,"context_lines":[{"line_number":101,"context_line":"                    flow.link(previous, primitive, decider\u003dself.allow)"},{"line_number":102,"context_line":"                    previous \u003d primitive"},{"line_number":103,"context_line":""},{"line_number":104,"context_line":"            e \u003d engines.load(flow)"},{"line_number":105,"context_line":"            e.compile()"},{"line_number":106,"context_line":"            e.prepare()"},{"line_number":107,"context_line":"            e.run()"}],"source_content_type":"text/x-python","patch_set":5,"id":"da6ed579_f9531a15","line":104,"updated":"2016-01-15 01:02:06.000000000","message":"FYI, U don\u0027t have to call compile and prepare manually if u don\u0027t want to, just run will call them internally (if they haven\u0027t already been called).","commit_id":"506643c12402fa2f780d1a7313f9a02881abbd90"},{"author":{"_account_id":16495,"name":"Jean-Emile DARTOIS","email":"jean-emile.dartois@b-com.com","username":"JeD"},"change_message_id":"509db9a3ccc3719cc9b86a2cb5adf4e0e238446e","unresolved":false,"context_lines":[{"line_number":101,"context_line":"                    flow.link(previous, primitive, decider\u003dself.allow)"},{"line_number":102,"context_line":"                    previous \u003d primitive"},{"line_number":103,"context_line":""},{"line_number":104,"context_line":"            e \u003d engines.load(flow)"},{"line_number":105,"context_line":"            e.compile()"},{"line_number":106,"context_line":"            e.prepare()"},{"line_number":107,"context_line":"            e.run()"}],"source_content_type":"text/x-python","patch_set":5,"id":"da6ed579_c2a596b5","line":104,"in_reply_to":"da6ed579_f9531a15","updated":"2016-01-18 09:50:54.000000000","message":"Okay, thanks.","commit_id":"506643c12402fa2f780d1a7313f9a02881abbd90"}],"watcher/applier/workflow_engine/default.py":[{"author":{"_account_id":12394,"name":"David TARDIVEL","email":"David.TARDIVEL@b-com.com","username":"David.T"},"change_message_id":"ed095ccd17a9405cfa5d01df36671748e451f8ca","unresolved":false,"context_lines":[{"line_number":31,"context_line":"    def decider(self, history):"},{"line_number":32,"context_line":"        # FIXME(jed) the current implementation of the Watcher Planner didn\u0027t"},{"line_number":33,"context_line":"        # provided a function that will be expected to decide at runtime"},{"line_number":34,"context_line":"        # whether v should be allowed to execute"},{"line_number":35,"context_line":"        return True"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"    def execute(self, actions):"}],"source_content_type":"text/x-python","patch_set":14,"id":"9a68dd71_1d0d3637","line":34,"range":{"start_line":34,"start_character":18,"end_line":34,"end_character":19},"updated":"2016-01-21 16:03:55.000000000","message":"typo","commit_id":"6b05875b63110f621044024f3e81177d0ea16778"},{"author":{"_account_id":12394,"name":"David TARDIVEL","email":"David.TARDIVEL@b-com.com","username":"David.T"},"change_message_id":"ed095ccd17a9405cfa5d01df36671748e451f8ca","unresolved":false,"context_lines":[{"line_number":37,"context_line":"    def execute(self, actions):"},{"line_number":38,"context_line":"        try:"},{"line_number":39,"context_line":"            # We want to have a strong separation of concern"},{"line_number":40,"context_line":"            # between the Watcher planner and the Watcher Applier"},{"line_number":41,"context_line":"            # It\u0027s the reason for having the \u0027watcher action\u0027 is to give the"},{"line_number":42,"context_line":"            # possibility to have several implementations of the"},{"line_number":43,"context_line":"            # Workflow Engine.We want to provide the \u0027taskflow\u0027 engine by"}],"source_content_type":"text/x-python","patch_set":14,"id":"9a68dd71_dde31e04","line":40,"updated":"2016-01-21 16:03:55.000000000","message":".","commit_id":"6b05875b63110f621044024f3e81177d0ea16778"},{"author":{"_account_id":12394,"name":"David TARDIVEL","email":"David.TARDIVEL@b-com.com","username":"David.T"},"change_message_id":"ed095ccd17a9405cfa5d01df36671748e451f8ca","unresolved":false,"context_lines":[{"line_number":38,"context_line":"        try:"},{"line_number":39,"context_line":"            # We want to have a strong separation of concern"},{"line_number":40,"context_line":"            # between the Watcher planner and the Watcher Applier"},{"line_number":41,"context_line":"            # It\u0027s the reason for having the \u0027watcher action\u0027 is to give the"},{"line_number":42,"context_line":"            # possibility to have several implementations of the"},{"line_number":43,"context_line":"            # Workflow Engine.We want to provide the \u0027taskflow\u0027 engine by"},{"line_number":44,"context_line":"            # default although we still want to leave the possibility for"},{"line_number":45,"context_line":"            # the users to change it."},{"line_number":46,"context_line":"            # todo(jed) we need to change the way the actions are stored."}],"source_content_type":"text/x-python","patch_set":14,"id":"9a68dd71_c1d49cbe","line":43,"range":{"start_line":41,"start_character":14,"end_line":43,"end_character":29},"updated":"2016-01-21 16:03:55.000000000","message":"Maybe to reformulate :\n\nWe introduce a strong separation of concern between the Watcher Planner and the Watcher Applier. This gives now the \npossibility to support several workflow engine implementation.\nTaskflow is the default one.","commit_id":"6b05875b63110f621044024f3e81177d0ea16778"},{"author":{"_account_id":12394,"name":"David TARDIVEL","email":"David.TARDIVEL@b-com.com","username":"David.T"},"change_message_id":"ed095ccd17a9405cfa5d01df36671748e451f8ca","unresolved":false,"context_lines":[{"line_number":40,"context_line":"            # between the Watcher planner and the Watcher Applier"},{"line_number":41,"context_line":"            # It\u0027s the reason for having the \u0027watcher action\u0027 is to give the"},{"line_number":42,"context_line":"            # possibility to have several implementations of the"},{"line_number":43,"context_line":"            # Workflow Engine.We want to provide the \u0027taskflow\u0027 engine by"},{"line_number":44,"context_line":"            # default although we still want to leave the possibility for"},{"line_number":45,"context_line":"            # the users to change it."},{"line_number":46,"context_line":"            # todo(jed) we need to change the way the actions are stored."}],"source_content_type":"text/x-python","patch_set":14,"id":"9a68dd71_fdfe226a","line":43,"range":{"start_line":43,"start_character":29,"end_line":43,"end_character":31},"updated":"2016-01-21 16:03:55.000000000","message":"missing blank","commit_id":"6b05875b63110f621044024f3e81177d0ea16778"},{"author":{"_account_id":12394,"name":"David TARDIVEL","email":"David.TARDIVEL@b-com.com","username":"David.T"},"change_message_id":"ed095ccd17a9405cfa5d01df36671748e451f8ca","unresolved":false,"context_lines":[{"line_number":43,"context_line":"            # Workflow Engine.We want to provide the \u0027taskflow\u0027 engine by"},{"line_number":44,"context_line":"            # default although we still want to leave the possibility for"},{"line_number":45,"context_line":"            # the users to change it."},{"line_number":46,"context_line":"            # todo(jed) we need to change the way the actions are stored."},{"line_number":47,"context_line":"            # The current implementation only use a linked list of actions."},{"line_number":48,"context_line":"            # todo(jed) add olso conf for retry and name"},{"line_number":49,"context_line":"            flow \u003d gf.Flow(\"watcher_flow\")"},{"line_number":50,"context_line":"            previous \u003d None"}],"source_content_type":"text/x-python","patch_set":14,"id":"9a68dd71_1debf6b1","line":47,"range":{"start_line":46,"start_character":1,"end_line":47,"end_character":75},"updated":"2016-01-21 16:03:55.000000000","message":"Why not put it into a new BP now ?","commit_id":"6b05875b63110f621044024f3e81177d0ea16778"},{"author":{"_account_id":12394,"name":"David TARDIVEL","email":"David.TARDIVEL@b-com.com","username":"David.T"},"change_message_id":"ed095ccd17a9405cfa5d01df36671748e451f8ca","unresolved":false,"context_lines":[{"line_number":45,"context_line":"            # the users to change it."},{"line_number":46,"context_line":"            # todo(jed) we need to change the way the actions are stored."},{"line_number":47,"context_line":"            # The current implementation only use a linked list of actions."},{"line_number":48,"context_line":"            # todo(jed) add olso conf for retry and name"},{"line_number":49,"context_line":"            flow \u003d gf.Flow(\"watcher_flow\")"},{"line_number":50,"context_line":"            previous \u003d None"},{"line_number":51,"context_line":"            for a in actions:"}],"source_content_type":"text/x-python","patch_set":14,"id":"9a68dd71_9dd7e6ec","line":48,"range":{"start_line":48,"start_character":12,"end_line":48,"end_character":56},"updated":"2016-01-21 16:03:55.000000000","message":"ditto","commit_id":"6b05875b63110f621044024f3e81177d0ea16778"},{"author":{"_account_id":12394,"name":"David TARDIVEL","email":"David.TARDIVEL@b-com.com","username":"David.T"},"change_message_id":"ed095ccd17a9405cfa5d01df36671748e451f8ca","unresolved":false,"context_lines":[{"line_number":81,"context_line":"        self.loaded_action \u003d None"},{"line_number":82,"context_line":""},{"line_number":83,"context_line":"    @property"},{"line_number":84,"context_line":"    def action(self):"},{"line_number":85,"context_line":"        if self.loaded_action is None:"},{"line_number":86,"context_line":"            action \u003d self.engine.action_factory.make_action(self._db_action)"},{"line_number":87,"context_line":"            self.loaded_action \u003d action"}],"source_content_type":"text/x-python","patch_set":14,"id":"9a68dd71_24e82610","line":84,"range":{"start_line":84,"start_character":8,"end_line":84,"end_character":14},"updated":"2016-01-21 16:03:55.000000000","message":"method name is composed with a verb, so I prefer load_action(self)","commit_id":"6b05875b63110f621044024f3e81177d0ea16778"}],"watcher/locale/fr/LC_MESSAGES/watcher.po":[{"author":{"_account_id":12394,"name":"David TARDIVEL","email":"David.TARDIVEL@b-com.com","username":"David.T"},"change_message_id":"ed095ccd17a9405cfa5d01df36671748e451f8ca","unresolved":false,"context_lines":[{"line_number":78,"context_line":"#: watcher/applier/workflow_engine/default.py:69"},{"line_number":79,"context_line":"#, python-format"},{"line_number":80,"context_line":"msgid \"The WorkFlow Engine has failed to execute the action %s\""},{"line_number":81,"context_line":"msgstr \"Le moteur de workflow a echoué à executer l\u0027action %s\""},{"line_number":82,"context_line":""},{"line_number":83,"context_line":"#: watcher/applier/workflow_engine/default.py:77"},{"line_number":84,"context_line":"#, python-format"}],"source_content_type":"application/octet-stream","patch_set":14,"id":"9a68dd71_24c90679","line":81,"range":{"start_line":81,"start_character":39,"end_line":81,"end_character":49},"updated":"2016-01-21 16:03:55.000000000","message":"lors de l\u0027éxécution de l","commit_id":"6b05875b63110f621044024f3e81177d0ea16778"}]}
