)]}'
{"taskflow/conductors/__init__.py":[{"author":{"_account_id":1297,"name":"Joshua Harlow","email":"jxharlow@godaddy.com","username":"harlowja"},"change_message_id":"744c013fc90de677d88260d80ba3d642563b3ad0","unresolved":false,"context_lines":[{"line_number":12,"context_line":"#    License for the specific language governing permissions and limitations"},{"line_number":13,"context_line":"#    under the License."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"from taskflow.conductors.base import Conductor"},{"line_number":16,"context_line":"from taskflow.conductors.single_threaded import SingleThreadedConductor"}],"source_content_type":"text/x-python","patch_set":3,"id":"7adec928_34b86110","line":15,"updated":"2014-05-19 20:14:25.000000000","message":"I think u might hit the hacking rules here :)\n\nhttp://docs.openstack.org/developer/hacking/#imports\n\nProbably ok to just leave this out and maybe later put a entrypoint fetching function here.","commit_id":"f56221ed4ea7017045401cd28afe762ebf545c5f"}],"taskflow/conductors/base.py":[{"author":{"_account_id":1297,"name":"Joshua Harlow","email":"jxharlow@godaddy.com","username":"harlowja"},"change_message_id":"a57d06414c56404a48dd5f062c033e63770e8399","unresolved":false,"context_lines":[{"line_number":27,"context_line":"        self._jobboard \u003d jobboard"},{"line_number":28,"context_line":"        self._engine_conf \u003d engine_conf"},{"line_number":29,"context_line":"        self._persistence \u003d persistence"},{"line_number":30,"context_line":"        self._timeout \u003d timeout or taskflow.utils.misc.Timeout(0.5)"},{"line_number":31,"context_line":"        self._connected \u003d False"},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"    def _engine_from_job(self, job):"}],"source_content_type":"text/x-python","patch_set":1,"id":"7adec928_191e430c","line":30,"updated":"2014-05-19 18:05:48.000000000","message":"Do u want to default to the taskflow.utils.misc.Timeout here? For a conductor that uses the run_iter functionality a timeout object like the above won\u0027t be so useful there. I think just keeping it as a double/float/None is fine and letting the child class use it as they want seems appropriate.","commit_id":"c93647e457b33423326eb3d68897fb5e2242c79a"},{"author":{"_account_id":1297,"name":"Joshua Harlow","email":"jxharlow@godaddy.com","username":"harlowja"},"change_message_id":"a57d06414c56404a48dd5f062c033e63770e8399","unresolved":false,"context_lines":[{"line_number":31,"context_line":"        self._connected \u003d False"},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"    def _engine_from_job(self, job):"},{"line_number":34,"context_line":"        return taskflow.engines.load_from_detail(list(job.book)[0],"},{"line_number":35,"context_line":"                                                 store\u003djob.details,"},{"line_number":36,"context_line":"                                                 engine_conf\u003dself._engine_conf,"},{"line_number":37,"context_line":"                                                 backend\u003dself._persistence)"}],"source_content_type":"text/x-python","patch_set":1,"id":"7adec928_d9b69bf8","line":34,"updated":"2014-05-19 18:05:48.000000000","message":"Ah the old list(job.book)[0] ;-)\n\nPerhaps the base class should be doing this [0] extraction also, and then this base class just defines what should be done here (translate a job to an engine).","commit_id":"c93647e457b33423326eb3d68897fb5e2242c79a"},{"author":{"_account_id":1297,"name":"Joshua Harlow","email":"jxharlow@godaddy.com","username":"harlowja"},"change_message_id":"4647f2a543af3df7b27be520a0dbd98618782b70","unresolved":false,"context_lines":[{"line_number":31,"context_line":"        self._connected \u003d False"},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"    def _engine_from_job(self, job):"},{"line_number":34,"context_line":"        return taskflow.engines.load_from_detail(list(job.book)[0],"},{"line_number":35,"context_line":"                                                 store\u003djob.details,"},{"line_number":36,"context_line":"                                                 engine_conf\u003dself._engine_conf,"},{"line_number":37,"context_line":"                                                 backend\u003dself._persistence)"}],"source_content_type":"text/x-python","patch_set":1,"id":"7adec928_9966d34f","line":34,"in_reply_to":"7adec928_d9b69bf8","updated":"2014-05-19 18:16:37.000000000","message":"should be \u0027should be doing this [0]\u0027 -\u003e \u0027shouldnt be doing this [0]\u0027","commit_id":"c93647e457b33423326eb3d68897fb5e2242c79a"},{"author":{"_account_id":1297,"name":"Joshua Harlow","email":"jxharlow@godaddy.com","username":"harlowja"},"change_message_id":"725380fbf25a0d1947213e37413d5f082f59ae4a","unresolved":false,"context_lines":[{"line_number":49,"context_line":""},{"line_number":50,"context_line":"    @abc.abstractmethod"},{"line_number":51,"context_line":"    def dispatch_job(self, job):"},{"line_number":52,"context_line":"        \"\"\"Accepts a single (already claimed) job and causes it to be run in"},{"line_number":53,"context_line":"        an engine. The job is consumed upon completion."},{"line_number":54,"context_line":""},{"line_number":55,"context_line":"        :param job: A Job instance that has already been claimed by the"}],"source_content_type":"text/x-python","patch_set":3,"id":"7adec928_54d6cd28","line":52,"updated":"2014-05-19 20:21:35.000000000","message":"Should this be public? Seems like it should be protected method (starting with a single underscore). The other ones seem like ok to be public and make sense, but this one seems odd to be a public \u0026 exposed API :)","commit_id":"f56221ed4ea7017045401cd28afe762ebf545c5f"},{"author":{"_account_id":1297,"name":"Joshua Harlow","email":"jxharlow@godaddy.com","username":"harlowja"},"change_message_id":"ab81f91d27cfdba1ea21c075b2b94696eb34c861","unresolved":false,"context_lines":[{"line_number":33,"context_line":"                                                 engine_conf\u003dself._engine_conf,"},{"line_number":34,"context_line":"                                                 backend\u003dself._persistence)"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"    def connect(self):"},{"line_number":37,"context_line":"        if not self._jobboard.connected:"},{"line_number":38,"context_line":"            self._jobboard.connect()"},{"line_number":39,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"7adec928_33621a17","line":36,"updated":"2014-05-20 20:01:18.000000000","message":"Seems like we need to add a connected property on the jobboard baseclass right?","commit_id":"7bd41ce61f66fd37b991383dfb98b174ecfcbca3"}],"taskflow/conductors/single_threaded.py":[{"author":{"_account_id":1297,"name":"Joshua Harlow","email":"jxharlow@godaddy.com","username":"harlowja"},"change_message_id":"91e960516d1849097ade17e229772d6891299b52","unresolved":false,"context_lines":[{"line_number":27,"context_line":"        LOG.info(\"Job completed: %s\" % job.uuid)"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"    def run(self):"},{"line_number":30,"context_line":"        self.connect()"},{"line_number":31,"context_line":"        while True:"},{"line_number":32,"context_line":"            if self._timeout.is_stopped():"},{"line_number":33,"context_line":"                break"}],"source_content_type":"text/x-python","patch_set":1,"id":"7adec928_2c8e9bd0","line":30,"updated":"2014-05-18 00:15:46.000000000","message":"What about making the caller do this connect (and associated close) and not having the run() method also do this (seems to be a caller responsiblity to do this correctly). Maybe u could raise an exception if connection didn\u0027t happen and run() was called?","commit_id":"c93647e457b33423326eb3d68897fb5e2242c79a"},{"author":{"_account_id":9648,"name":"Greg Hill","email":"greg.hill@rackspace.com","username":"jimbobhickville"},"change_message_id":"34bddd30df3a15e92d3ba5587a80b63e849f87cc","unresolved":false,"context_lines":[{"line_number":27,"context_line":"        LOG.info(\"Job completed: %s\" % job.uuid)"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"    def run(self):"},{"line_number":30,"context_line":"        self.connect()"},{"line_number":31,"context_line":"        while True:"},{"line_number":32,"context_line":"            if self._timeout.is_stopped():"},{"line_number":33,"context_line":"                break"}],"source_content_type":"text/x-python","patch_set":1,"id":"7adec928_99f4135c","line":30,"in_reply_to":"7adec928_2c8e9bd0","updated":"2014-05-19 18:25:26.000000000","message":"Concur.  Wouldn\u0027t this make it more difficult to pool connections, or does the underlying job board already handle that for us?  Not sure if I\u0027m missing something that would make it make sense to connect and disconnect on every run.","commit_id":"c93647e457b33423326eb3d68897fb5e2242c79a"},{"author":{"_account_id":9648,"name":"Greg Hill","email":"greg.hill@rackspace.com","username":"jimbobhickville"},"change_message_id":"34bddd30df3a15e92d3ba5587a80b63e849f87cc","unresolved":false,"context_lines":[{"line_number":39,"context_line":"                if self._timeout.is_stopped():"},{"line_number":40,"context_line":"                    break"},{"line_number":41,"context_line":"                try:"},{"line_number":42,"context_line":"                    LOG.warn(\"Trying to claim job: %s\" % job.uuid)"},{"line_number":43,"context_line":"                    self._jobboard.claim(job, self._name)"},{"line_number":44,"context_line":"                    LOG.warn(\"Trying to dispatch job: %s\" % job.uuid)"},{"line_number":45,"context_line":"                    self.dispatch_job(job)"}],"source_content_type":"text/x-python","patch_set":1,"id":"7adec928_f904374b","line":42,"updated":"2014-05-19 18:25:26.000000000","message":"warn seems a bit extreme here.  I would think info or debug would be more suitable.","commit_id":"c93647e457b33423326eb3d68897fb5e2242c79a"},{"author":{"_account_id":1297,"name":"Joshua Harlow","email":"jxharlow@godaddy.com","username":"harlowja"},"change_message_id":"4adc50492bf160dbbea71dfa586e08e70a99b7b6","unresolved":false,"context_lines":[{"line_number":39,"context_line":"                if self._timeout.is_stopped():"},{"line_number":40,"context_line":"                    break"},{"line_number":41,"context_line":"                try:"},{"line_number":42,"context_line":"                    LOG.warn(\"Trying to claim job: %s\" % job.uuid)"},{"line_number":43,"context_line":"                    self._jobboard.claim(job, self._name)"},{"line_number":44,"context_line":"                    LOG.warn(\"Trying to dispatch job: %s\" % job.uuid)"},{"line_number":45,"context_line":"                    self.dispatch_job(job)"}],"source_content_type":"text/x-python","patch_set":1,"id":"7adec928_a42c429a","line":42,"in_reply_to":"7adec928_f904374b","updated":"2014-05-19 18:31:07.000000000","message":"Agreed, good to check out:\n\nhttps://wiki.openstack.org/wiki/LoggingStandards\n\nThe above then I think should be debug and not warn according to those mostly agreed upon standards.","commit_id":"c93647e457b33423326eb3d68897fb5e2242c79a"},{"author":{"_account_id":9648,"name":"Greg Hill","email":"greg.hill@rackspace.com","username":"jimbobhickville"},"change_message_id":"34bddd30df3a15e92d3ba5587a80b63e849f87cc","unresolved":false,"context_lines":[{"line_number":41,"context_line":"                try:"},{"line_number":42,"context_line":"                    LOG.warn(\"Trying to claim job: %s\" % job.uuid)"},{"line_number":43,"context_line":"                    self._jobboard.claim(job, self._name)"},{"line_number":44,"context_line":"                    LOG.warn(\"Trying to dispatch job: %s\" % job.uuid)"},{"line_number":45,"context_line":"                    self.dispatch_job(job)"},{"line_number":46,"context_line":"                except (excp.UnclaimableJob, excp.NotFound) as e:"},{"line_number":47,"context_line":"                    LOG.warn(\"Job already claimed: %s\" % job.uuid)"}],"source_content_type":"text/x-python","patch_set":1,"id":"7adec928_39fbff47","line":44,"updated":"2014-05-19 18:25:26.000000000","message":"Ditto","commit_id":"c93647e457b33423326eb3d68897fb5e2242c79a"},{"author":{"_account_id":1297,"name":"Joshua Harlow","email":"jxharlow@godaddy.com","username":"harlowja"},"change_message_id":"626dc12d3441a02239f4503b6a9827580a74e678","unresolved":false,"context_lines":[{"line_number":45,"context_line":"                if self._timeout.is_stopped():"},{"line_number":46,"context_line":"                    break"},{"line_number":47,"context_line":"                try:"},{"line_number":48,"context_line":"                    LOG.debug(\"Trying to claim job: %s\" % job.uuid)"},{"line_number":49,"context_line":"                    self._jobboard.claim(job, self._name)"},{"line_number":50,"context_line":"                    self.dispatch_job(job)"},{"line_number":51,"context_line":"                except (excp.UnclaimableJob, excp.NotFound) as e:"}],"source_content_type":"text/x-python","patch_set":3,"id":"7adec928_34994179","line":48,"updated":"2014-05-19 20:24:17.000000000","message":"Can we switch to the non-interpolating call instead.\n\nLOG.debug(\"Trying to claim job: %s\", job.uuid) \n\nUsage of this ensures that the interpolation of the string + args only happens if the LOG level is active instead of the current way where it will always be interpolated (even if not output).","commit_id":"f56221ed4ea7017045401cd28afe762ebf545c5f"},{"author":{"_account_id":1297,"name":"Joshua Harlow","email":"jxharlow@godaddy.com","username":"harlowja"},"change_message_id":"626dc12d3441a02239f4503b6a9827580a74e678","unresolved":false,"context_lines":[{"line_number":52,"context_line":"                    LOG.debug(\"Job already claimed: %s\" % job.uuid)"},{"line_number":53,"context_line":"                    continue"},{"line_number":54,"context_line":"                except excp.WrappedFailure:"},{"line_number":55,"context_line":"                    LOG.error(\"Job failed: %s\" % job.uuid)"},{"line_number":56,"context_line":"                    continue"}],"source_content_type":"text/x-python","patch_set":3,"id":"7adec928_54a40db9","line":55,"updated":"2014-05-19 20:24:17.000000000","message":"Likely also useful to show the wrapped exception info.\n\nLOG.error(\"Job failed: %s, %s\", job.uuid, error)","commit_id":"f56221ed4ea7017045401cd28afe762ebf545c5f"},{"author":{"_account_id":9648,"name":"Greg Hill","email":"greg.hill@rackspace.com","username":"jimbobhickville"},"change_message_id":"f95040a238942a141598020cf7b31baaa13ca32b","unresolved":false,"context_lines":[{"line_number":52,"context_line":"                    LOG.debug(\"Job already claimed: %s\" % job.uuid)"},{"line_number":53,"context_line":"                    continue"},{"line_number":54,"context_line":"                except excp.WrappedFailure:"},{"line_number":55,"context_line":"                    LOG.error(\"Job failed: %s\" % job.uuid)"},{"line_number":56,"context_line":"                    continue"}],"source_content_type":"text/x-python","patch_set":3,"id":"7adec928_ea51b062","line":55,"in_reply_to":"7adec928_54a40db9","updated":"2014-05-19 21:54:53.000000000","message":"Doesn\u0027t openstack poo-poo on using multiple positional substitutions?  I personally find that rule completely silly, but I got called on it previously.","commit_id":"f56221ed4ea7017045401cd28afe762ebf545c5f"},{"author":{"_account_id":1297,"name":"Joshua Harlow","email":"jxharlow@godaddy.com","username":"harlowja"},"change_message_id":"a498536febcad2cf222d2fcd5c18ad1d8db3eca0","unresolved":false,"context_lines":[{"line_number":52,"context_line":"                    LOG.debug(\"Job already claimed: %s\" % job.uuid)"},{"line_number":53,"context_line":"                    continue"},{"line_number":54,"context_line":"                except excp.WrappedFailure:"},{"line_number":55,"context_line":"                    LOG.error(\"Job failed: %s\" % job.uuid)"},{"line_number":56,"context_line":"                    continue"}],"source_content_type":"text/x-python","patch_set":3,"id":"7adec928_c5cce5bd","line":55,"in_reply_to":"7adec928_ea51b062","updated":"2014-05-19 22:13:18.000000000","message":"I\u0027m fine with it, and that rule does sound completely silly, there is a reason they are used (to avoid tons of string interpolations all the time, even when not logging at that level).\n\nLet\u0027s do less silly things and not more in this case ;-)","commit_id":"f56221ed4ea7017045401cd28afe762ebf545c5f"},{"author":{"_account_id":1297,"name":"Joshua Harlow","email":"jxharlow@godaddy.com","username":"harlowja"},"change_message_id":"ab81f91d27cfdba1ea21c075b2b94696eb34c861","unresolved":false,"context_lines":[{"line_number":12,"context_line":"#    License for the specific language governing permissions and limitations"},{"line_number":13,"context_line":"#    under the License."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"import logging"},{"line_number":16,"context_line":"import taskflow.conductors.base"},{"line_number":17,"context_line":"from taskflow import exceptions as excp"},{"line_number":18,"context_line":"import taskflow.utils.misc"}],"source_content_type":"text/x-python","patch_set":7,"id":"7adec928_f356f229","line":15,"updated":"2014-05-20 20:01:18.000000000","message":"Another thing that hacking will probably hit u for.\n\nhttp://docs.openstack.org/developer/hacking/#human-alphabetical-order-examples\n\nBasically put std python modules before taskflow ones (logging being one of those) and seperate with newline.","commit_id":"7bd41ce61f66fd37b991383dfb98b174ecfcbca3"},{"author":{"_account_id":1297,"name":"Joshua Harlow","email":"jxharlow@godaddy.com","username":"harlowja"},"change_message_id":"a5d17b5d782b7e6d61b085cc93c4866c7d482d1b","unresolved":false,"context_lines":[{"line_number":35,"context_line":"            engine.run()"},{"line_number":36,"context_line":"            LOG.info(\"Job completed: %s\", job.uuid)"},{"line_number":37,"context_line":"        except excp.WrappedFailure as e:"},{"line_number":38,"context_line":"            LOG.error(\"Job failed: %s, %s\", job.uuid, e)"},{"line_number":39,"context_line":"        self._jobboard.consume(job, self._name)"},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"    def run(self):"}],"source_content_type":"text/x-python","patch_set":7,"id":"7adec928_990be52a","line":38,"updated":"2014-05-22 02:09:21.000000000","message":"Do u want to consume even if it fails? Or should consuming only happen in the \u0027happy path\u0027 where it doesn\u0027t fail? I would think the happy path.","commit_id":"7bd41ce61f66fd37b991383dfb98b174ecfcbca3"}]}
