)]}'
{"taskflow/engines/action_engine/analyzer.py":[{"author":{"_account_id":9648,"name":"Greg Hill","email":"greg.hill@rackspace.com","username":"jimbobhickville"},"change_message_id":"bc01f8b134f5d4de999b2cc02172be801f966cbc","unresolved":false,"context_lines":[{"line_number":29,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"class Happiness(enum.Enum):"},{"line_number":33,"context_line":"    \"\"\"Workflow overall execution happiness rating.\"\"\""},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"    #: All (non-ignored) atoms finished executing successfully."}],"source_content_type":"text/x-python","patch_set":11,"id":"1a122d0e_9a124457","line":32,"updated":"2016-05-03 18:33:51.000000000","message":"I literally LOL\u0027ed here, nice.","commit_id":"36cc0bdf5edd777e176e1fc45669bddf5af8bfbd"},{"author":{"_account_id":1297,"name":"Joshua Harlow","email":"jxharlow@godaddy.com","username":"harlowja"},"change_message_id":"5606a0c0160badf08bb37cac54883c82f0cadd41","unresolved":false,"context_lines":[{"line_number":29,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"class Happiness(enum.Enum):"},{"line_number":33,"context_line":"    \"\"\"Workflow overall execution happiness rating.\"\"\""},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"    #: All (non-ignored) atoms finished executing successfully."}],"source_content_type":"text/x-python","patch_set":11,"id":"1a122d0e_d329479d","line":32,"in_reply_to":"1a122d0e_9a124457","updated":"2016-05-03 20:33:02.000000000","message":"I aim to please :-P","commit_id":"36cc0bdf5edd777e176e1fc45669bddf5af8bfbd"}],"taskflow/engines/action_engine/completer.py":[{"author":{"_account_id":9648,"name":"Greg Hill","email":"greg.hill@rackspace.com","username":"jimbobhickville"},"change_message_id":"bc01f8b134f5d4de999b2cc02172be801f966cbc","unresolved":false,"context_lines":[{"line_number":52,"context_line":"        return base + \"(strategy\u003d%s)\" % (strategy_name)"},{"line_number":53,"context_line":""},{"line_number":54,"context_line":""},{"line_number":55,"context_line":"class NoopStrategy(Strategy):"},{"line_number":56,"context_line":"    \"\"\"Strategy that does nothing.\"\"\""},{"line_number":57,"context_line":""},{"line_number":58,"context_line":"    def apply(self):"}],"source_content_type":"text/x-python","patch_set":11,"id":"1a122d0e_da615cd5","line":55,"updated":"2016-05-03 18:33:51.000000000","message":"Was this merged in from that other review that implemented this same basic idea?","commit_id":"36cc0bdf5edd777e176e1fc45669bddf5af8bfbd"},{"author":{"_account_id":1297,"name":"Joshua Harlow","email":"jxharlow@godaddy.com","username":"harlowja"},"change_message_id":"5606a0c0160badf08bb37cac54883c82f0cadd41","unresolved":false,"context_lines":[{"line_number":52,"context_line":"        return base + \"(strategy\u003d%s)\" % (strategy_name)"},{"line_number":53,"context_line":""},{"line_number":54,"context_line":""},{"line_number":55,"context_line":"class NoopStrategy(Strategy):"},{"line_number":56,"context_line":"    \"\"\"Strategy that does nothing.\"\"\""},{"line_number":57,"context_line":""},{"line_number":58,"context_line":"    def apply(self):"}],"source_content_type":"text/x-python","patch_set":11,"id":"1a122d0e_ee4a9a54","line":55,"in_reply_to":"1a122d0e_da615cd5","updated":"2016-05-03 20:33:02.000000000","message":"I don\u0027t think so, but maybe :-P","commit_id":"36cc0bdf5edd777e176e1fc45669bddf5af8bfbd"},{"author":{"_account_id":9648,"name":"Greg Hill","email":"greg.hill@rackspace.com","username":"jimbobhickville"},"change_message_id":"d6bd69ed250690fdb43634a6598456a982e39497","unresolved":false,"context_lines":[{"line_number":184,"context_line":"    def _determine_resolution(self, atom, failure):"},{"line_number":185,"context_line":"        \"\"\"Determines which resolution strategy to activate/apply.\"\"\""},{"line_number":186,"context_line":"        if not self._runtime.is_critical(atom):"},{"line_number":187,"context_line":"            # NOTE(harlowja): this basically stops non-critical atoms"},{"line_number":188,"context_line":"            # from being affected by *any* retry strategy, which seems ok"},{"line_number":189,"context_line":"            # as the user marked those atoms as non-critical. We could"},{"line_number":190,"context_line":"            # allow them to be affected by the retry strategy in the future"}],"source_content_type":"text/x-python","patch_set":13,"id":"1a122d0e_e9e238d3","line":187,"updated":"2016-05-05 15:35:59.000000000","message":"I would personally expect it to exhaust retries before ignoring the failure of the non-critical task, but I can see how others might want this behavior.  Should we make it configurable?","commit_id":"ae4d88de1028dceb415b39751fe84b87eff26883"},{"author":{"_account_id":1297,"name":"Joshua Harlow","email":"jxharlow@godaddy.com","username":"harlowja"},"change_message_id":"da211ed254cd359fc8fad771e20069614becaa7e","unresolved":false,"context_lines":[{"line_number":184,"context_line":"    def _determine_resolution(self, atom, failure):"},{"line_number":185,"context_line":"        \"\"\"Determines which resolution strategy to activate/apply.\"\"\""},{"line_number":186,"context_line":"        if not self._runtime.is_critical(atom):"},{"line_number":187,"context_line":"            # NOTE(harlowja): this basically stops non-critical atoms"},{"line_number":188,"context_line":"            # from being affected by *any* retry strategy, which seems ok"},{"line_number":189,"context_line":"            # as the user marked those atoms as non-critical. We could"},{"line_number":190,"context_line":"            # allow them to be affected by the retry strategy in the future"}],"source_content_type":"text/x-python","patch_set":13,"id":"dab17558_dc548222","line":187,"in_reply_to":"1a122d0e_e9e238d3","updated":"2016-05-10 00:13:15.000000000","message":"Ya, I can see that viewpoint; although was mainly focusing on the critical stuff never stops forward progress aspec of this. The situation u are thinking would take some work, but would not be impossible to do.","commit_id":"ae4d88de1028dceb415b39751fe84b87eff26883"}],"taskflow/engines/action_engine/runtime.py":[{"author":{"_account_id":9648,"name":"Greg Hill","email":"greg.hill@rackspace.com","username":"jimbobhickville"},"change_message_id":"bc01f8b134f5d4de999b2cc02172be801f966cbc","unresolved":false,"context_lines":[{"line_number":135,"context_line":"                    \u0027edge_deciders\u0027: tuple(deciders_it),"},{"line_number":136,"context_line":"                    \u0027action\u0027: actions[node_kind],"},{"line_number":137,"context_line":"                    \u0027critical\u0027: (bool(node.critical)"},{"line_number":138,"context_line":"                                 if node_kind \u003d\u003d com.TASK"},{"line_number":139,"context_line":"                                 # Retry atoms are always critical."},{"line_number":140,"context_line":"                                 else True),"},{"line_number":141,"context_line":"                }"}],"source_content_type":"text/x-python","patch_set":11,"id":"1a122d0e_3a7e906a","line":138,"updated":"2016-05-03 18:33:51.000000000","message":"Shouldn\u0027t this just be in the Retry class definition to force it to always be critical is True?  Otherwise why even bother using polymorphism.","commit_id":"36cc0bdf5edd777e176e1fc45669bddf5af8bfbd"},{"author":{"_account_id":1297,"name":"Joshua Harlow","email":"jxharlow@godaddy.com","username":"harlowja"},"change_message_id":"5606a0c0160badf08bb37cac54883c82f0cadd41","unresolved":false,"context_lines":[{"line_number":135,"context_line":"                    \u0027edge_deciders\u0027: tuple(deciders_it),"},{"line_number":136,"context_line":"                    \u0027action\u0027: actions[node_kind],"},{"line_number":137,"context_line":"                    \u0027critical\u0027: (bool(node.critical)"},{"line_number":138,"context_line":"                                 if node_kind \u003d\u003d com.TASK"},{"line_number":139,"context_line":"                                 # Retry atoms are always critical."},{"line_number":140,"context_line":"                                 else True),"},{"line_number":141,"context_line":"                }"}],"source_content_type":"text/x-python","patch_set":11,"id":"1a122d0e_ae4a6225","line":138,"in_reply_to":"1a122d0e_3a7e906a","updated":"2016-05-03 20:33:02.000000000","message":"So I remember thinking about that, but then it made me wonder when is a retry atom allowed to be non-critical and what does that mean... Since I couldn\u0027t figure out what a non-critical retry atom would mean/imply that\u0027s why this is being done in a non-polymorphic manner (making all retry atoms critical and only allowing task atoms to choose whether they are critical). That was my reasoning from what I remember :-P","commit_id":"36cc0bdf5edd777e176e1fc45669bddf5af8bfbd"}],"taskflow/task.py":[{"author":{"_account_id":8895,"name":"Stanislav Kudriashev","email":"stas.kudriashev@gmail.com","username":"skudriashev"},"change_message_id":"ba1f934d76e55e27e5521baec2db95601ea150d5","unresolved":false,"context_lines":[{"line_number":60,"context_line":"    TASK_EVENTS \u003d (EVENT_UPDATE_PROGRESS,)"},{"line_number":61,"context_line":""},{"line_number":62,"context_line":"    critical \u003d True"},{"line_number":63,"context_line":"    \"\"\"Whether the failure of this task should trigger engine death."},{"line_number":64,"context_line":""},{"line_number":65,"context_line":"    By default all task are criticial and a failure of one (that is"},{"line_number":66,"context_line":"    not resolved, say by a retry strategy) will stop future engine"}],"source_content_type":"text/x-python","patch_set":9,"id":"7a5de9d1_300d88e8","line":63,"updated":"2016-01-29 13:07:19.000000000","message":"Isn\u0027t it better to put comment above the referenced line and use multi-line comments. Current comment may be a bit confusing.","commit_id":"33068ed4edee5c1343955e1ea8a5aad86425b85b"}],"taskflow/tests/unit/test_retries.py":[{"author":{"_account_id":8895,"name":"Stanislav Kudriashev","email":"stas.kudriashev@gmail.com","username":"skudriashev"},"change_message_id":"ba1f934d76e55e27e5521baec2db95601ea150d5","unresolved":false,"context_lines":[{"line_number":70,"context_line":"    def test_states_retry_revert_linear_flow_not_critical(self):"},{"line_number":71,"context_line":"        flow \u003d lf.Flow(\u0027flow-1\u0027, retry.Times(1)).add("},{"line_number":72,"context_line":"            utils.NotCriticalFailingTask(\"task1\"),"},{"line_number":73,"context_line":"            utils.ProgressingTask(\"task2\")"},{"line_number":74,"context_line":"        )"},{"line_number":75,"context_line":"        engine \u003d self._make_engine(flow)"},{"line_number":76,"context_line":"        with utils.CaptureListener(engine) as capturer:"}],"source_content_type":"text/x-python","patch_set":9,"id":"7a5de9d1_90c1dc56","line":73,"updated":"2016-01-29 13:07:19.000000000","message":"I would keep comma at the end.","commit_id":"33068ed4edee5c1343955e1ea8a5aad86425b85b"}]}
