)]}'
{"tripleo_ansible/ansible_plugins/strategy/tripleo_free.py":[{"author":{"_account_id":6816,"name":"Jesse Pretorius","email":"jesse@odyssey4.me","username":"jesse-pretorius"},"change_message_id":"f429c442dd6ccbb6f9318678789b475e05bab6d0","unresolved":false,"context_lines":[{"line_number":29,"context_line":""},{"line_number":30,"context_line":"DOCUMENTATION \u003d \u0027\u0027\u0027"},{"line_number":31,"context_line":"    strategy: tripleo_free"},{"line_number":32,"context_line":"    short_description: TripleO specific free strategry"},{"line_number":33,"context_line":"    description:"},{"line_number":34,"context_line":"        - Based on the \u0027free\u0027 and \u0027host_pinned\u0027 strategies from Ansible"},{"line_number":35,"context_line":"        - Logic broken up to allow for future improvements"}],"source_content_type":"text/x-python","patch_set":6,"id":"1f493fa4_16099b30","line":32,"range":{"start_line":32,"start_character":45,"end_line":32,"end_character":54},"updated":"2020-05-04 15:55:40.000000000","message":"spelling error","commit_id":"f445424eedbabe213d70cb6582f7fe86f18db8b1"},{"author":{"_account_id":6816,"name":"Jesse Pretorius","email":"jesse@odyssey4.me","username":"jesse-pretorius"},"change_message_id":"f429c442dd6ccbb6f9318678789b475e05bab6d0","unresolved":false,"context_lines":[{"line_number":189,"context_line":"        run_once \u003d (templar.template(task.run_once) or action"},{"line_number":190,"context_line":"                    and getattr(action, \u0027BYPASS_HOST_LOOP\u0027, False))"},{"line_number":191,"context_line":""},{"line_number":192,"context_line":"        # TODO(mwhahaha): make it work by caching it accross all hsots"},{"line_number":193,"context_line":"        if run_once:"},{"line_number":194,"context_line":"            if action and getattr(action, \u0027BYPASS_HOST_LOOP\u0027, False):"},{"line_number":195,"context_line":"                raise AnsibleError(\u0027Cannot bypass host loop with strategy\u0027)"}],"source_content_type":"text/x-python","patch_set":6,"id":"1f493fa4_19370ce6","line":192,"range":{"start_line":192,"start_character":53,"end_line":192,"end_character":70},"updated":"2020-05-04 15:55:40.000000000","message":"spelling errors","commit_id":"f445424eedbabe213d70cb6582f7fe86f18db8b1"},{"author":{"_account_id":6816,"name":"Jesse Pretorius","email":"jesse@odyssey4.me","username":"jesse-pretorius"},"change_message_id":"f429c442dd6ccbb6f9318678789b475e05bab6d0","unresolved":false,"context_lines":[{"line_number":285,"context_line":"                loader\u003dself._loader,"},{"line_number":286,"context_line":"                variable_manager\u003dself._variable_manager"},{"line_number":287,"context_line":"        )"},{"line_number":288,"context_line":"        # TODO(mwhahaha): fix include_failure uage"},{"line_number":289,"context_line":"        # include_failure \u003d False"},{"line_number":290,"context_line":"        if len(include_files) \u003d\u003d 0:"},{"line_number":291,"context_line":"            self._debug(\u0027No include files\u0027)"}],"source_content_type":"text/x-python","patch_set":6,"id":"1f493fa4_f95500fc","line":288,"range":{"start_line":288,"start_character":46,"end_line":288,"end_character":50},"updated":"2020-05-04 15:55:40.000000000","message":"usage?","commit_id":"f445424eedbabe213d70cb6582f7fe86f18db8b1"},{"author":{"_account_id":6926,"name":"Bogdan Dobrelya","email":"bdobreli@redhat.com","username":"bogdando"},"change_message_id":"b02dfa04e691c81b64239c4075a6f3a390eb12e4","unresolved":false,"context_lines":[{"line_number":31,"context_line":"    strategy: tripleo_free"},{"line_number":32,"context_line":"    short_description: TripleO specific free strategy"},{"line_number":33,"context_line":"    description:"},{"line_number":34,"context_line":"        - Based on the \u0027free\u0027 strategies from Ansible"},{"line_number":35,"context_line":"        - Logic broken up to allow for future improvements"},{"line_number":36,"context_line":"        - Will fail playbook if any hosts have a failure during the"},{"line_number":37,"context_line":"          execution and any_errors_fatal is true."}],"source_content_type":"text/x-python","patch_set":8,"id":"1f493fa4_245421ca","line":34,"range":{"start_line":34,"start_character":10,"end_line":34,"end_character":53},"updated":"2020-05-07 10:29:23.000000000","message":"what are the gaps there so we need a custom one?","commit_id":"882489ed38561d7a7732fbe0064b0088db1433c9"},{"author":{"_account_id":14985,"name":"Alex Schultz","email":"aschultz@next-development.com","username":"mwhahaha"},"change_message_id":"4d570289691d83109c342a05465faacb461885ce","unresolved":false,"context_lines":[{"line_number":31,"context_line":"    strategy: tripleo_free"},{"line_number":32,"context_line":"    short_description: TripleO specific free strategy"},{"line_number":33,"context_line":"    description:"},{"line_number":34,"context_line":"        - Based on the \u0027free\u0027 strategies from Ansible"},{"line_number":35,"context_line":"        - Logic broken up to allow for future improvements"},{"line_number":36,"context_line":"        - Will fail playbook if any hosts have a failure during the"},{"line_number":37,"context_line":"          execution and any_errors_fatal is true."}],"source_content_type":"text/x-python","patch_set":8,"id":"1f493fa4_fdd488eb","line":34,"range":{"start_line":34,"start_character":10,"end_line":34,"end_character":53},"in_reply_to":"1f493fa4_245421ca","updated":"2020-05-07 13:13:49.000000000","message":"1) free doesn\u0027t fail a playbook if there\u0027s a failure\n2) free doesn\u0027t support run_once (i plan on addressing that here)\n3) this sets us up to be able to implement failure allowance based on tripleo roles. e.g. max_failure_percentage based on tripleo role","commit_id":"882489ed38561d7a7732fbe0064b0088db1433c9"},{"author":{"_account_id":14985,"name":"Alex Schultz","email":"aschultz@next-development.com","username":"mwhahaha"},"change_message_id":"60cbb146a0ac28596a44f2a6f559c205fb19828d","unresolved":false,"context_lines":[{"line_number":31,"context_line":"    strategy: tripleo_free"},{"line_number":32,"context_line":"    short_description: TripleO specific free strategy"},{"line_number":33,"context_line":"    description:"},{"line_number":34,"context_line":"        - Based on the \u0027free\u0027 strategies from Ansible"},{"line_number":35,"context_line":"        - Logic broken up to allow for future improvements"},{"line_number":36,"context_line":"        - Will fail playbook if any hosts have a failure during the"},{"line_number":37,"context_line":"          execution and any_errors_fatal is true."}],"source_content_type":"text/x-python","patch_set":8,"id":"1f493fa4_c0c9db78","line":34,"range":{"start_line":34,"start_character":10,"end_line":34,"end_character":53},"in_reply_to":"1f493fa4_fdd488eb","updated":"2020-05-07 21:02:45.000000000","message":"So I tested, free does not stop playbook execution like the proposed tripleo_free. Meaning our deployment would continue to process rather than stopping after a failure occurs during a playbook being executed via free. \n\nExample: http://paste.openstack.org/show/793296/\n\nIn the example you see that for \u0027free\u0027, the \"Run another playbook\" executes on all the other hosts and so the overall playbook is not stopped after the first failure. We want it to not move on to the next playbook.\n\n\nNow this is likely some code that we can contribute upstream however I\u0027m uncertain if that would be wanted by the upstream ansible community. I find it odd that it didn\u0027t support that in the first place but who knows.\n\nThe second item which I had previously indicated that I wanted to fix is the run_once (similar issue). \n\nAnd the final item that will be addressed in a future revision is support for failures based on tripleo roles. \n\nThe first two issues could likely be addressed in future versions of ansible, however unlikely to be backportable to version we want. While today \u0027free\u0027 could be used and it\u0027ll pass if everything is OK, it won\u0027t fail correctly.\n\nAnsible is pushing for things in collections, so in general they are looking for folks to pick up and extend but not necessarily land in core. I personally feel that this is one of those improvements that should live in our world for now because it is closely tied to how we want our deployment framework to execute and I\u0027m uncertain of the external overlap. I will be looking to propose these types of fixes to upstream ansible once we\u0027ve vetted them but I\u0027m uncertain of their desire for them.\n\n\nIt should also be noted that the \u0027default\u0027 callback has assumptions around the use of \u0027free\u0027 so it completely hoses the output if you switch to something named other than \u0027free\u0027 which is where my callback improvement patches are coming from.","commit_id":"882489ed38561d7a7732fbe0064b0088db1433c9"},{"author":{"_account_id":6816,"name":"Jesse Pretorius","email":"jesse@odyssey4.me","username":"jesse-pretorius"},"change_message_id":"38583f50c274e1308f19a0bd6e6d7aa4bf1416d2","unresolved":false,"context_lines":[{"line_number":88,"context_line":"        \"\"\"Increment last host pointer"},{"line_number":89,"context_line":""},{"line_number":90,"context_line":"        If the last host pointer exceeds the number of hosts, we set it back to"},{"line_number":91,"context_line":"        zero so we can start checking again withthe first host"},{"line_number":92,"context_line":"        \"\"\""},{"line_number":93,"context_line":"        self._debug(\u0027_increment_last_host\u0027)"},{"line_number":94,"context_line":"        self._last_host +\u003d 1"}],"source_content_type":"text/x-python","patch_set":8,"id":"1f493fa4_f16222d8","line":91,"range":{"start_line":91,"start_character":44,"end_line":91,"end_character":51},"updated":"2020-05-05 13:47:39.000000000","message":"nit: missing a space","commit_id":"882489ed38561d7a7732fbe0064b0088db1433c9"},{"author":{"_account_id":14985,"name":"Alex Schultz","email":"aschultz@next-development.com","username":"mwhahaha"},"change_message_id":"a5cfc1f004b7b9a01bb000b8dcb1627acdbca926","unresolved":false,"context_lines":[{"line_number":88,"context_line":"        \"\"\"Increment last host pointer"},{"line_number":89,"context_line":""},{"line_number":90,"context_line":"        If the last host pointer exceeds the number of hosts, we set it back to"},{"line_number":91,"context_line":"        zero so we can start checking again withthe first host"},{"line_number":92,"context_line":"        \"\"\""},{"line_number":93,"context_line":"        self._debug(\u0027_increment_last_host\u0027)"},{"line_number":94,"context_line":"        self._last_host +\u003d 1"}],"source_content_type":"text/x-python","patch_set":8,"id":"1f493fa4_0062a33e","line":91,"range":{"start_line":91,"start_character":44,"end_line":91,"end_character":51},"in_reply_to":"1f493fa4_f16222d8","updated":"2020-05-07 21:13:40.000000000","message":"Done","commit_id":"882489ed38561d7a7732fbe0064b0088db1433c9"},{"author":{"_account_id":7144,"name":"James Slagle","email":"jslagle@redhat.com","username":"slagle"},"change_message_id":"90771d75f6c19ae14fc7f33a712488cb725a93a3","unresolved":false,"context_lines":[{"line_number":203,"context_line":"                raise AnsibleError(\u0027Cannot bypass host loop with strategy\u0027)"},{"line_number":204,"context_line":"            else:"},{"line_number":205,"context_line":"                display.warning(\"Using run_once does not work with the\""},{"line_number":206,"context_line":"                                \"tripleo_free strategy\")"},{"line_number":207,"context_line":""},{"line_number":208,"context_line":"        # handle role deduplication logic"},{"line_number":209,"context_line":"        if task._role and task._role.has_run(host):"}],"source_content_type":"text/x-python","patch_set":8,"id":"1f493fa4_c86bd91c","line":206,"updated":"2020-05-06 21:54:59.000000000","message":"have you checked to see what tasks no longer honor run_once because of this?\n\nwe use run_once a lot for performance reasons, and it accounted for reducing some of the biggest bottlenecks in the scale lab testing. These things wouldn\u0027t show up in CI.\n\ntripleo_ssh_known_hosts and tripleo_hosts_entries are the two that come to mind, and I see in the tht patch that those wouldn\u0027t be affected since they will still use the linear strategy.","commit_id":"882489ed38561d7a7732fbe0064b0088db1433c9"},{"author":{"_account_id":14985,"name":"Alex Schultz","email":"aschultz@next-development.com","username":"mwhahaha"},"change_message_id":"c28a3682ebc93b6e51d442756527bf4e6711528c","unresolved":false,"context_lines":[{"line_number":203,"context_line":"                raise AnsibleError(\u0027Cannot bypass host loop with strategy\u0027)"},{"line_number":204,"context_line":"            else:"},{"line_number":205,"context_line":"                display.warning(\"Using run_once does not work with the\""},{"line_number":206,"context_line":"                                \"tripleo_free strategy\")"},{"line_number":207,"context_line":""},{"line_number":208,"context_line":"        # handle role deduplication logic"},{"line_number":209,"context_line":"        if task._role and task._role.has_run(host):"}],"source_content_type":"text/x-python","patch_set":8,"id":"1f493fa4_a8076d1d","line":206,"in_reply_to":"1f493fa4_c86bd91c","updated":"2020-05-06 22:12:04.000000000","message":"My goal is to make run_once work as all tasks have a UUID so we should be able to check that it was at least triggered once. The issue comes does into ensuring it actually completed.  We\u0027re likely to see more improvements by switching to free than using run_once because they don\u0027t run in lockstep anymore.  I don\u0027t think we use run_once in the deployment steps themselves but yes my goal is to actually make it work correctly. I think if a task is run_once and it fails it should fail the playbook if it fails.","commit_id":"882489ed38561d7a7732fbe0064b0088db1433c9"},{"author":{"_account_id":3153,"name":"Emilien Macchi","email":"emilien@redhat.com","username":"emilienm"},"change_message_id":"5f3fe9331e1549dd20bb5d1215db5bea1b492899","unresolved":false,"context_lines":[{"line_number":231,"context_line":""},{"line_number":232,"context_line":"    def process_work(self):"},{"line_number":233,"context_line":"        \"\"\"Run pending tasks\"\"\""},{"line_number":234,"context_line":"        self._debug(\u0027process_work....\u0027)"},{"line_number":235,"context_line":"        result \u003d self._tqm.RUN_OK"},{"line_number":236,"context_line":"        start_host \u003d self._last_host"},{"line_number":237,"context_line":"        self._strat_results \u003d []"}],"source_content_type":"text/x-python","patch_set":8,"id":"1f493fa4_cd614c14","line":234,"range":{"start_line":234,"start_character":8,"end_line":234,"end_character":39},"updated":"2020-05-05 13:45:13.000000000","message":"is it a leftover?","commit_id":"882489ed38561d7a7732fbe0064b0088db1433c9"},{"author":{"_account_id":6816,"name":"Jesse Pretorius","email":"jesse@odyssey4.me","username":"jesse-pretorius"},"change_message_id":"e93a0929a8537d8352bb93632ff72f54ac451dd6","unresolved":false,"context_lines":[{"line_number":231,"context_line":""},{"line_number":232,"context_line":"    def process_work(self):"},{"line_number":233,"context_line":"        \"\"\"Run pending tasks\"\"\""},{"line_number":234,"context_line":"        self._debug(\u0027process_work....\u0027)"},{"line_number":235,"context_line":"        result \u003d self._tqm.RUN_OK"},{"line_number":236,"context_line":"        start_host \u003d self._last_host"},{"line_number":237,"context_line":"        self._strat_results \u003d []"}],"source_content_type":"text/x-python","patch_set":8,"id":"1f493fa4_71f29208","line":234,"range":{"start_line":234,"start_character":8,"end_line":234,"end_character":39},"in_reply_to":"1f493fa4_71a45209","updated":"2020-05-05 13:48:20.000000000","message":"And these are surprisingly useful when debugging. :)","commit_id":"882489ed38561d7a7732fbe0064b0088db1433c9"},{"author":{"_account_id":14985,"name":"Alex Schultz","email":"aschultz@next-development.com","username":"mwhahaha"},"change_message_id":"ae2da2c8609cfb75d870c4bee318adcd759fa608","unresolved":false,"context_lines":[{"line_number":231,"context_line":""},{"line_number":232,"context_line":"    def process_work(self):"},{"line_number":233,"context_line":"        \"\"\"Run pending tasks\"\"\""},{"line_number":234,"context_line":"        self._debug(\u0027process_work....\u0027)"},{"line_number":235,"context_line":"        result \u003d self._tqm.RUN_OK"},{"line_number":236,"context_line":"        start_host \u003d self._last_host"},{"line_number":237,"context_line":"        self._strat_results \u003d []"}],"source_content_type":"text/x-python","patch_set":8,"id":"1f493fa4_71a45209","line":234,"range":{"start_line":234,"start_character":8,"end_line":234,"end_character":39},"in_reply_to":"1f493fa4_cd614c14","updated":"2020-05-05 13:47:11.000000000","message":"No, -vvvv shows debug lines.  anything less than that -v, -vv, -vvv won\u0027t show these","commit_id":"882489ed38561d7a7732fbe0064b0088db1433c9"},{"author":{"_account_id":3153,"name":"Emilien Macchi","email":"emilien@redhat.com","username":"emilienm"},"change_message_id":"5f3fe9331e1549dd20bb5d1215db5bea1b492899","unresolved":false,"context_lines":[{"line_number":246,"context_line":"            self._print(\"host: {}, task: {}\".format(host, t))"},{"line_number":247,"context_line":""},{"line_number":248,"context_line":"            if host_name not in self._tqm._unreachable_hosts and t:"},{"line_number":249,"context_line":"                self._debug(\u0027{}  has work to do, has_work \u003d True\u0027.format("},{"line_number":250,"context_line":"                    host_name))"},{"line_number":251,"context_line":"                self._has_work \u003d True"},{"line_number":252,"context_line":"                if not self._blocked_hosts.get(host_name, False):"}],"source_content_type":"text/x-python","patch_set":8,"id":"1f493fa4_ad34c0fc","line":249,"range":{"start_line":249,"start_character":32,"end_line":249,"end_character":33},"updated":"2020-05-05 13:45:13.000000000","message":"extra space","commit_id":"882489ed38561d7a7732fbe0064b0088db1433c9"},{"author":{"_account_id":14985,"name":"Alex Schultz","email":"aschultz@next-development.com","username":"mwhahaha"},"change_message_id":"a5cfc1f004b7b9a01bb000b8dcb1627acdbca926","unresolved":false,"context_lines":[{"line_number":246,"context_line":"            self._print(\"host: {}, task: {}\".format(host, t))"},{"line_number":247,"context_line":""},{"line_number":248,"context_line":"            if host_name not in self._tqm._unreachable_hosts and t:"},{"line_number":249,"context_line":"                self._debug(\u0027{}  has work to do, has_work \u003d True\u0027.format("},{"line_number":250,"context_line":"                    host_name))"},{"line_number":251,"context_line":"                self._has_work \u003d True"},{"line_number":252,"context_line":"                if not self._blocked_hosts.get(host_name, False):"}],"source_content_type":"text/x-python","patch_set":8,"id":"1f493fa4_a0712f0f","line":249,"range":{"start_line":249,"start_character":32,"end_line":249,"end_character":33},"in_reply_to":"1f493fa4_ad34c0fc","updated":"2020-05-07 21:13:40.000000000","message":"Done","commit_id":"882489ed38561d7a7732fbe0064b0088db1433c9"},{"author":{"_account_id":3153,"name":"Emilien Macchi","email":"emilien@redhat.com","username":"emilienm"},"change_message_id":"5f3fe9331e1549dd20bb5d1215db5bea1b492899","unresolved":false,"context_lines":[{"line_number":271,"context_line":"                self._debug(\u0027We hit the start host, break our loop\u0027)"},{"line_number":272,"context_line":"                break"},{"line_number":273,"context_line":""},{"line_number":274,"context_line":"        self._debug(\u0027pending results....\u0027)"},{"line_number":275,"context_line":"        results \u003d self._process_pending_results(self._iterator)"},{"line_number":276,"context_line":"        self._debug(\u0027results: {}\u0027.format(results))"},{"line_number":277,"context_line":"        self._strat_results.extend(results)"}],"source_content_type":"text/x-python","patch_set":8,"id":"1f493fa4_2d09d030","line":274,"range":{"start_line":274,"start_character":8,"end_line":274,"end_character":42},"updated":"2020-05-05 13:45:13.000000000","message":"leftover?","commit_id":"882489ed38561d7a7732fbe0064b0088db1433c9"},{"author":{"_account_id":3153,"name":"Emilien Macchi","email":"emilien@redhat.com","username":"emilienm"},"change_message_id":"5f3fe9331e1549dd20bb5d1215db5bea1b492899","unresolved":false,"context_lines":[{"line_number":280,"context_line":"            result |\u003d self._tqm.RUN_FAILED_BREAK_PLAY"},{"line_number":281,"context_line":""},{"line_number":282,"context_line":"        self._workers_free +\u003d len(results)"},{"line_number":283,"context_line":"        self._debug(\u0027update connections....\u0027)"},{"line_number":284,"context_line":"        self.update_active_connections(results)"},{"line_number":285,"context_line":""},{"line_number":286,"context_line":"        return result"}],"source_content_type":"text/x-python","patch_set":8,"id":"1f493fa4_6d03d810","line":283,"range":{"start_line":283,"start_character":8,"end_line":283,"end_character":45},"updated":"2020-05-05 13:45:13.000000000","message":"leftover?","commit_id":"882489ed38561d7a7732fbe0064b0088db1433c9"},{"author":{"_account_id":3153,"name":"Emilien Macchi","email":"emilien@redhat.com","username":"emilienm"},"change_message_id":"5f3fe9331e1549dd20bb5d1215db5bea1b492899","unresolved":false,"context_lines":[{"line_number":291,"context_line":"        This function processes includes and adds them tasks to the hosts."},{"line_number":292,"context_line":"        It will return False if there was a failure during the include"},{"line_number":293,"context_line":"        \"\"\""},{"line_number":294,"context_line":"        self._debug(\u0027process_includes...\u0027)"},{"line_number":295,"context_line":"        include_files \u003d IncludedFile.process_include_results("},{"line_number":296,"context_line":"                host_results,"},{"line_number":297,"context_line":"                iterator\u003dself._iterator,"}],"source_content_type":"text/x-python","patch_set":8,"id":"1f493fa4_510dd635","line":294,"range":{"start_line":294,"start_character":8,"end_line":294,"end_character":42},"updated":"2020-05-05 13:45:13.000000000","message":"leftover?","commit_id":"882489ed38561d7a7732fbe0064b0088db1433c9"},{"author":{"_account_id":6816,"name":"Jesse Pretorius","email":"jesse@odyssey4.me","username":"jesse-pretorius"},"change_message_id":"38583f50c274e1308f19a0bd6e6d7aa4bf1416d2","unresolved":false,"context_lines":[{"line_number":373,"context_line":"                        \u0027v2_playbook_on_no_hosts_remaining\u0027)"},{"line_number":374,"context_line":"                    # check if we previously had an error..."},{"line_number":375,"context_line":"                    if result \u003d\u003d self._tqm.RUN_OK:"},{"line_number":376,"context_line":"                        # by seting this to false, the parent run function"},{"line_number":377,"context_line":"                        # will determine if the run was ok based on a check"},{"line_number":378,"context_line":"                        # of the unreachable/failed hosts."},{"line_number":379,"context_line":"                        result \u003d False"}],"source_content_type":"text/x-python","patch_set":8,"id":"1f493fa4_91aabecf","line":376,"range":{"start_line":376,"start_character":29,"end_line":376,"end_character":35},"updated":"2020-05-05 13:47:39.000000000","message":"nit: spelling error","commit_id":"882489ed38561d7a7732fbe0064b0088db1433c9"},{"author":{"_account_id":14985,"name":"Alex Schultz","email":"aschultz@next-development.com","username":"mwhahaha"},"change_message_id":"a5cfc1f004b7b9a01bb000b8dcb1627acdbca926","unresolved":false,"context_lines":[{"line_number":373,"context_line":"                        \u0027v2_playbook_on_no_hosts_remaining\u0027)"},{"line_number":374,"context_line":"                    # check if we previously had an error..."},{"line_number":375,"context_line":"                    if result \u003d\u003d self._tqm.RUN_OK:"},{"line_number":376,"context_line":"                        # by seting this to false, the parent run function"},{"line_number":377,"context_line":"                        # will determine if the run was ok based on a check"},{"line_number":378,"context_line":"                        # of the unreachable/failed hosts."},{"line_number":379,"context_line":"                        result \u003d False"}],"source_content_type":"text/x-python","patch_set":8,"id":"1f493fa4_60672753","line":376,"range":{"start_line":376,"start_character":29,"end_line":376,"end_character":35},"in_reply_to":"1f493fa4_91aabecf","updated":"2020-05-07 21:13:40.000000000","message":"Done","commit_id":"882489ed38561d7a7732fbe0064b0088db1433c9"},{"author":{"_account_id":14985,"name":"Alex Schultz","email":"aschultz@next-development.com","username":"mwhahaha"},"change_message_id":"60cbb146a0ac28596a44f2a6f559c205fb19828d","unresolved":false,"context_lines":[{"line_number":379,"context_line":"                        result \u003d False"},{"line_number":380,"context_line":"                    break"},{"line_number":381,"context_line":"                # do work"},{"line_number":382,"context_line":"                result \u003d self.process_work()"},{"line_number":383,"context_line":"                # handle includes"},{"line_number":384,"context_line":"                include_result \u003d self.process_includes(self._strat_results)"},{"line_number":385,"context_line":"                if self._any_errors_fatal and not include_result:"}],"source_content_type":"text/x-python","patch_set":8,"id":"1f493fa4_008aa319","line":382,"range":{"start_line":382,"start_character":16,"end_line":382,"end_character":24},"updated":"2020-05-07 21:02:45.000000000","message":"There\u0027s a bug here where it won\u0027t stop because result gets overwritten on subsequent loops (if we don\u0027t fail outright)","commit_id":"882489ed38561d7a7732fbe0064b0088db1433c9"},{"author":{"_account_id":8833,"name":"Rabi Mishra","email":"ramishra@redhat.com","username":"rabi"},"change_message_id":"720e7f8c41f77420cec7f30709c2f95958e85a65","unresolved":false,"context_lines":[{"line_number":62,"context_line":"        self._any_errors_fatal \u003d False"},{"line_number":63,"context_line":"        self._callback_sent \u003d False"},{"line_number":64,"context_line":"        self._has_work \u003d False"},{"line_number":65,"context_line":"        self._host_pinned \u003d False"},{"line_number":66,"context_line":"        self._hosts_left \u003d []"},{"line_number":67,"context_line":"        self._iterator \u003d None"},{"line_number":68,"context_line":"        self._last_host \u003d 0"}],"source_content_type":"text/x-python","patch_set":10,"id":"ff570b3c_0e24edc5","line":65,"range":{"start_line":65,"start_character":8,"end_line":65,"end_character":33},"updated":"2020-05-11 10:23:37.000000000","message":"Should we set this to True by default like \u0027host_pinned\u0027? i.e run all tasks in a play for a host without interruption? You seem to have the code for it in L266.","commit_id":"fc65185b21d69691e1d6a50ae65894c06f138635"},{"author":{"_account_id":14985,"name":"Alex Schultz","email":"aschultz@next-development.com","username":"mwhahaha"},"change_message_id":"915a3b4db60c3d15f9afc57c79a750345300acf9","unresolved":false,"context_lines":[{"line_number":62,"context_line":"        self._any_errors_fatal \u003d False"},{"line_number":63,"context_line":"        self._callback_sent \u003d False"},{"line_number":64,"context_line":"        self._has_work \u003d False"},{"line_number":65,"context_line":"        self._host_pinned \u003d False"},{"line_number":66,"context_line":"        self._hosts_left \u003d []"},{"line_number":67,"context_line":"        self._iterator \u003d None"},{"line_number":68,"context_line":"        self._last_host \u003d 0"}],"source_content_type":"text/x-python","patch_set":10,"id":"ff570b3c_1d7d41b1","line":65,"range":{"start_line":65,"start_character":8,"end_line":65,"end_character":33},"in_reply_to":"ff570b3c_0e24edc5","updated":"2020-05-11 13:47:55.000000000","message":"I\u0027m going to test if host_pinned \u003d true is better than just free.  This code is similar to the ansible free in that the host_pinned strategy just inherits from the free one and switch this value to true.  In my original testing I had host_pinned \u003d true but I did see some better results with host_pinned \u003d false.","commit_id":"fc65185b21d69691e1d6a50ae65894c06f138635"},{"author":{"_account_id":7353,"name":"Kevin Carter","email":"kevin@cloudnull.com","username":"cloudnull"},"change_message_id":"ca30b9da7eed5eb2b2ad4636fdd3c6a154ae1178","unresolved":false,"context_lines":[{"line_number":135,"context_line":"            action \u003d None"},{"line_number":136,"context_line":"        return action"},{"line_number":137,"context_line":""},{"line_number":138,"context_line":"    def _send_task_callback(self, task, templar):"},{"line_number":139,"context_line":"        \"\"\"Send task start callback\"\"\""},{"line_number":140,"context_line":"        self._debug(\u0027_send_task_callback...\u0027)"},{"line_number":141,"context_line":"        name \u003d task.name"},{"line_number":142,"context_line":"        try:"},{"line_number":143,"context_line":"            task.name \u003d to_text(templar.template(task.name,"},{"line_number":144,"context_line":"                                                 fail_on_undefined\u003dFalse),"},{"line_number":145,"context_line":"                                nonstring\u003d\u0027empty\u0027)"},{"line_number":146,"context_line":"        except Exception:"},{"line_number":147,"context_line":"            self._debug(\u0027templating failed\u0027)"},{"line_number":148,"context_line":"        self._tqm.send_callback(\u0027v2_playbook_on_task_start\u0027,"},{"line_number":149,"context_line":"                                task,"},{"line_number":150,"context_line":"                                is_conditional\u003dFalse)"},{"line_number":151,"context_line":"        task.name \u003d name"},{"line_number":152,"context_line":""},{"line_number":153,"context_line":"    def _advance_host(self, host, task):"},{"line_number":154,"context_line":"        \"\"\"Advance the host\u0027s task as necessary\"\"\""}],"source_content_type":"text/x-python","patch_set":16,"id":"ff570b3c_8a240cc8","line":151,"range":{"start_line":138,"start_character":0,"end_line":151,"end_character":24},"updated":"2020-05-28 18:14:39.000000000","message":"Why do all the name setting gymnastics? It doesn\u0027t seem like the redefined task name is used outside of send_callback?","commit_id":"6dde3c3b8162b444828b578c92eea01e47d82dd0"},{"author":{"_account_id":14985,"name":"Alex Schultz","email":"aschultz@next-development.com","username":"mwhahaha"},"change_message_id":"208bdd8414faf29d3463bfa2b4e0f11c7a8d5db7","unresolved":false,"context_lines":[{"line_number":135,"context_line":"            action \u003d None"},{"line_number":136,"context_line":"        return action"},{"line_number":137,"context_line":""},{"line_number":138,"context_line":"    def _send_task_callback(self, task, templar):"},{"line_number":139,"context_line":"        \"\"\"Send task start callback\"\"\""},{"line_number":140,"context_line":"        self._debug(\u0027_send_task_callback...\u0027)"},{"line_number":141,"context_line":"        name \u003d task.name"},{"line_number":142,"context_line":"        try:"},{"line_number":143,"context_line":"            task.name \u003d to_text(templar.template(task.name,"},{"line_number":144,"context_line":"                                                 fail_on_undefined\u003dFalse),"},{"line_number":145,"context_line":"                                nonstring\u003d\u0027empty\u0027)"},{"line_number":146,"context_line":"        except Exception:"},{"line_number":147,"context_line":"            self._debug(\u0027templating failed\u0027)"},{"line_number":148,"context_line":"        self._tqm.send_callback(\u0027v2_playbook_on_task_start\u0027,"},{"line_number":149,"context_line":"                                task,"},{"line_number":150,"context_line":"                                is_conditional\u003dFalse)"},{"line_number":151,"context_line":"        task.name \u003d name"},{"line_number":152,"context_line":""},{"line_number":153,"context_line":"    def _advance_host(self, host, task):"},{"line_number":154,"context_line":"        \"\"\"Advance the host\u0027s task as necessary\"\"\""}],"source_content_type":"text/x-python","patch_set":16,"id":"ff570b3c_af92bff4","line":151,"range":{"start_line":138,"start_character":0,"end_line":151,"end_character":24},"in_reply_to":"ff570b3c_8a240cc8","updated":"2020-05-28 20:11:50.000000000","message":"Since python is pass-by-reference, task may be used elsewhere and this might cause problems. This is how it\u0027s handled in the upstream strategy","commit_id":"6dde3c3b8162b444828b578c92eea01e47d82dd0"}]}
