)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"d37e335cece4a098678698455734d8e7a8540073","unresolved":false,"context_lines":[{"line_number":15,"context_line":""},{"line_number":16,"context_line":"[1] See -sf flags: http://www.haproxy.org/download/1.2/doc/haproxy-en.txt"},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"Related-Bug: #1565801"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"Change-Id: Ia2f67e742778cd99f2211c94782635652d9032c7"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"dada55a8_7ee6c7e8","line":18,"range":{"start_line":18,"start_character":0,"end_line":18,"end_character":11},"updated":"2016-07-21 12:54:45.000000000","message":"Are there other patches expected to come?","commit_id":"865eef323632d08985fd5002353f580407ef6dc2"},{"author":{"_account_id":6579,"name":"Nir Magnezi","email":"nmagnezi@redhat.com","username":"nmagnezi"},"change_message_id":"1c6e87c23ede61b959a6f2a87f022dcecb93cfc2","unresolved":false,"context_lines":[{"line_number":15,"context_line":""},{"line_number":16,"context_line":"[1] See -sf flags: http://www.haproxy.org/download/1.2/doc/haproxy-en.txt"},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"Related-Bug: #1565801"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"Change-Id: Ia2f67e742778cd99f2211c94782635652d9032c7"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"dada55a8_7ed087c9","line":18,"range":{"start_line":18,"start_character":0,"end_line":18,"end_character":11},"in_reply_to":"dada55a8_7ee6c7e8","updated":"2016-07-21 13:12:49.000000000","message":"yes: https://review.openstack.org/#/c/344658/","commit_id":"865eef323632d08985fd5002353f580407ef6dc2"}],"neutron/agent/linux/external_process.py":[{"author":{"_account_id":8788,"name":"Miguel Angel Ajo","email":"mangelajo@redhat.com","username":"mangelajo"},"change_message_id":"5df3dcd6d34a365d27caf1d4c1e6a3ace1e43aca","unresolved":false,"context_lines":[{"line_number":82,"context_line":"        common_utils.ensure_dir(os.path.dirname(self.get_pid_file_name()))"},{"line_number":83,"context_line":""},{"line_number":84,"context_line":"    def enable(self, cmd_callback\u003dNone, reload_cfg\u003dFalse,"},{"line_number":85,"context_line":"               custom_reload_callback\u003dNone):"},{"line_number":86,"context_line":"        if not self.active:"},{"line_number":87,"context_line":"            if not cmd_callback:"},{"line_number":88,"context_line":"                cmd_callback \u003d self.default_cmd_callback"}],"source_content_type":"text/x-python","patch_set":5,"id":"dada55a8_4c9b2f73","line":85,"updated":"2016-07-22 07:20:05.000000000","message":"may be, we should provide a default_reload_cmd_callback, and not provide those parameters here and on reload (which were provided to cover special cases).\n\nWe can provide them later if necessary.\n\nThis way you avoid handling the extra parameters on enable\u0026reload_cfg,  keeping the api a little blit cleaner.\n\nSorry, I didn\u0027t see this before.","commit_id":"95ea4e79f691fd70c28c7e50bff50f582bfda2ac"},{"author":{"_account_id":6579,"name":"Nir Magnezi","email":"nmagnezi@redhat.com","username":"nmagnezi"},"change_message_id":"2bae92c616ffd9ebf5299cb8268f32e437d34c1d","unresolved":false,"context_lines":[{"line_number":82,"context_line":"        common_utils.ensure_dir(os.path.dirname(self.get_pid_file_name()))"},{"line_number":83,"context_line":""},{"line_number":84,"context_line":"    def enable(self, cmd_callback\u003dNone, reload_cfg\u003dFalse,"},{"line_number":85,"context_line":"               custom_reload_callback\u003dNone):"},{"line_number":86,"context_line":"        if not self.active:"},{"line_number":87,"context_line":"            if not cmd_callback:"},{"line_number":88,"context_line":"                cmd_callback \u003d self.default_cmd_callback"}],"source_content_type":"text/x-python","patch_set":5,"id":"dada55a8_378368ce","line":85,"in_reply_to":"dada55a8_4c9b2f73","updated":"2016-07-24 10:14:14.000000000","message":"Sounds good. Done.\nThe default_reload_callback will be provided on init.\n\nI have tested locally and it worked with the following usage exmple: https://review.openstack.org/#/c/344658/3/neutron_lbaas/drivers/haproxy/namespace_driver.py --\u003e line 377","commit_id":"95ea4e79f691fd70c28c7e50bff50f582bfda2ac"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"c2c2774d54a43fb9084b5ff5d9063c3c8687afb9","unresolved":false,"context_lines":[{"line_number":82,"context_line":"        common_utils.ensure_dir(os.path.dirname(self.get_pid_file_name()))"},{"line_number":83,"context_line":""},{"line_number":84,"context_line":"    def enable(self, cmd_callback\u003dNone, reload_cfg\u003dFalse,"},{"line_number":85,"context_line":"               custom_reload_callback\u003dNone):"},{"line_number":86,"context_line":"        if not self.active:"},{"line_number":87,"context_line":"            if not cmd_callback:"},{"line_number":88,"context_line":"                cmd_callback \u003d self.default_cmd_callback"}],"source_content_type":"text/x-python","patch_set":5,"id":"dada55a8_bd5e5777","line":85,"in_reply_to":"dada55a8_4c9b2f73","updated":"2016-07-22 08:23:07.000000000","message":"You mean always have a callback? By default, it will be \u0027kill -1 \u003cpid\u003e\u0027? Yeah, that seems like a better approach :)","commit_id":"95ea4e79f691fd70c28c7e50bff50f582bfda2ac"},{"author":{"_account_id":6579,"name":"Nir Magnezi","email":"nmagnezi@redhat.com","username":"nmagnezi"},"change_message_id":"2bae92c616ffd9ebf5299cb8268f32e437d34c1d","unresolved":false,"context_lines":[{"line_number":82,"context_line":"        common_utils.ensure_dir(os.path.dirname(self.get_pid_file_name()))"},{"line_number":83,"context_line":""},{"line_number":84,"context_line":"    def enable(self, cmd_callback\u003dNone, reload_cfg\u003dFalse,"},{"line_number":85,"context_line":"               custom_reload_callback\u003dNone):"},{"line_number":86,"context_line":"        if not self.active:"},{"line_number":87,"context_line":"            if not cmd_callback:"},{"line_number":88,"context_line":"                cmd_callback \u003d self.default_cmd_callback"}],"source_content_type":"text/x-python","patch_set":5,"id":"dada55a8_776de031","line":85,"in_reply_to":"dada55a8_bd5e5777","updated":"2016-07-24 10:14:14.000000000","message":"default would be kill -9, right?","commit_id":"95ea4e79f691fd70c28c7e50bff50f582bfda2ac"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"9c812ead0f1837d1d0342d8e6ea816afb7b68ca6","unresolved":false,"context_lines":[{"line_number":96,"context_line":"            self.reload_cfg()"},{"line_number":97,"context_line":""},{"line_number":98,"context_line":"    def reload_cfg(self):"},{"line_number":99,"context_line":"        if not self.default_reload_callback:"},{"line_number":100,"context_line":"            self.disable(\u0027HUP\u0027)"},{"line_number":101,"context_line":"        else:"},{"line_number":102,"context_line":"            cmd \u003d self.default_reload_callback(self.get_pid_file_name())"}],"source_content_type":"text/x-python","patch_set":6,"id":"dada55a8_d7c63115","line":99,"range":{"start_line":99,"start_character":8,"end_line":99,"end_character":43},"updated":"2016-07-25 13:39:03.000000000","message":"I\u0027m not sure whether this is what Miguel wanted. Though my point was to create a callback that\u0027s always called. And the callback would have a default value (sending HUP) or can be defined. so the \u0027reaload_cfg\u0027 would just be really calling the reload callback.","commit_id":"41739b3411cd596c93b0de58b471b8094a55fedf"},{"author":{"_account_id":6579,"name":"Nir Magnezi","email":"nmagnezi@redhat.com","username":"nmagnezi"},"change_message_id":"25a0e9655c71199f151c6e6a44b65c5661e974f8","unresolved":false,"context_lines":[{"line_number":96,"context_line":"            self.reload_cfg()"},{"line_number":97,"context_line":""},{"line_number":98,"context_line":"    def reload_cfg(self):"},{"line_number":99,"context_line":"        if not self.default_reload_callback:"},{"line_number":100,"context_line":"            self.disable(\u0027HUP\u0027)"},{"line_number":101,"context_line":"        else:"},{"line_number":102,"context_line":"            cmd \u003d self.default_reload_callback(self.get_pid_file_name())"}],"source_content_type":"text/x-python","patch_set":6,"id":"dada55a8_bc41a765","line":99,"range":{"start_line":99,"start_character":8,"end_line":99,"end_character":43},"in_reply_to":"dada55a8_5ca09d9f","updated":"2016-07-26 12:03:36.000000000","message":"IMHO, we won\u0027t gain much with this.\n\ndef __init__(self, ... reload_callback\u003dNone):\n    self.reload_callback \u003d reload_callback or self.default_reload_callback\n\ndef default_reload_callback(self):\n    self.disable(\u0027HUP\u0027)\n\nsince the flow of a custom callback is different from just using HUP (since we need to construct the cmd and append the pid), reload_cfg will still look like this:\n\ndef reload_cfg(self):\n    if self.reload_callback is self.default_reload_callback:\n        self.reload_callback()\n    else:\n        cmd \u003d self.reload_callback(self.get_pid_file_name())\n        ip_wrapper \u003d ip_lib.IPWrapper(namespace\u003dself.namespace)\n        ip_wrapper.netns.execute(cmd, addl_env\u003dself.cmd_addl_env)\n\n\nAlternately, I could change default_reload_callback to construct a cmd with HUP (instead of calling self.disable), but i\u0027m not sure we want to remove the call for self.disable from reload_cfg completely, since self.disable checks cases where self.active\u003dTRUE etc. changing that flow might be risky and out of scope here.","commit_id":"41739b3411cd596c93b0de58b471b8094a55fedf"},{"author":{"_account_id":8788,"name":"Miguel Angel Ajo","email":"mangelajo@redhat.com","username":"mangelajo"},"change_message_id":"242d86c210a5ddb88872d6349d3fe2d31de9d8cb","unresolved":false,"context_lines":[{"line_number":96,"context_line":"            self.reload_cfg()"},{"line_number":97,"context_line":""},{"line_number":98,"context_line":"    def reload_cfg(self):"},{"line_number":99,"context_line":"        if not self.default_reload_callback:"},{"line_number":100,"context_line":"            self.disable(\u0027HUP\u0027)"},{"line_number":101,"context_line":"        else:"},{"line_number":102,"context_line":"            cmd \u003d self.default_reload_callback(self.get_pid_file_name())"}],"source_content_type":"text/x-python","patch_set":6,"id":"dada55a8_bcad2786","line":99,"range":{"start_line":99,"start_character":8,"end_line":99,"end_character":43},"in_reply_to":"dada55a8_5ca09d9f","updated":"2016-07-26 11:45:06.000000000","message":"No, I think Nir nailed it down, because it\u0027s a callback to construct a command line and not to do the real action.\n\n(we could have a commandl ine to call kill...) but wI wouldn\u0027t spend more time around this. The important part is there and we would add more lines (a new function) to save us from an if and else... :)","commit_id":"41739b3411cd596c93b0de58b471b8094a55fedf"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"60885708baf6d335f7c014991dfdfac124c8f457","unresolved":false,"context_lines":[{"line_number":96,"context_line":"            self.reload_cfg()"},{"line_number":97,"context_line":""},{"line_number":98,"context_line":"    def reload_cfg(self):"},{"line_number":99,"context_line":"        if not self.default_reload_callback:"},{"line_number":100,"context_line":"            self.disable(\u0027HUP\u0027)"},{"line_number":101,"context_line":"        else:"},{"line_number":102,"context_line":"            cmd \u003d self.default_reload_callback(self.get_pid_file_name())"}],"source_content_type":"text/x-python","patch_set":6,"id":"dada55a8_5ca09d9f","line":99,"range":{"start_line":99,"start_character":8,"end_line":99,"end_character":43},"in_reply_to":"dada55a8_b33e2cd8","updated":"2016-07-25 15:39:14.000000000","message":"You will call the callback always from reload_cfg. How do you distinguish it now? I meant something like:\n\n def __init__(self, ..., reload_callback):\n      ...\n      self.reload_callback \u003d reload_callback or self.default_reload_callback\n\n def default_reload_callback(self):\n      self.disable(signal.SIGHUP)\n\n def reload_cfg(self):\n      self.reload_callback()","commit_id":"41739b3411cd596c93b0de58b471b8094a55fedf"},{"author":{"_account_id":8788,"name":"Miguel Angel Ajo","email":"mangelajo@redhat.com","username":"mangelajo"},"change_message_id":"300c27ba2944751d0d4e75dc93e2722fa4a7e416","unresolved":false,"context_lines":[{"line_number":96,"context_line":"            self.reload_cfg()"},{"line_number":97,"context_line":""},{"line_number":98,"context_line":"    def reload_cfg(self):"},{"line_number":99,"context_line":"        if not self.default_reload_callback:"},{"line_number":100,"context_line":"            self.disable(\u0027HUP\u0027)"},{"line_number":101,"context_line":"        else:"},{"line_number":102,"context_line":"            cmd \u003d self.default_reload_callback(self.get_pid_file_name())"}],"source_content_type":"text/x-python","patch_set":6,"id":"dada55a8_f0f5d682","line":99,"range":{"start_line":99,"start_character":8,"end_line":99,"end_character":43},"in_reply_to":"dada55a8_bc41a765","updated":"2016-07-27 06:26:22.000000000","message":"Oh, right, the extra checks.","commit_id":"41739b3411cd596c93b0de58b471b8094a55fedf"},{"author":{"_account_id":6579,"name":"Nir Magnezi","email":"nmagnezi@redhat.com","username":"nmagnezi"},"change_message_id":"e9f1800824d41f6ed83d544c53e9ec005d92ee86","unresolved":false,"context_lines":[{"line_number":96,"context_line":"            self.reload_cfg()"},{"line_number":97,"context_line":""},{"line_number":98,"context_line":"    def reload_cfg(self):"},{"line_number":99,"context_line":"        if not self.default_reload_callback:"},{"line_number":100,"context_line":"            self.disable(\u0027HUP\u0027)"},{"line_number":101,"context_line":"        else:"},{"line_number":102,"context_line":"            cmd \u003d self.default_reload_callback(self.get_pid_file_name())"}],"source_content_type":"text/x-python","patch_set":6,"id":"dada55a8_b33e2cd8","line":99,"range":{"start_line":99,"start_character":8,"end_line":99,"end_character":43},"in_reply_to":"dada55a8_d7c63115","updated":"2016-07-25 14:55:03.000000000","message":"Maybe I got it wrong.. but here\u0027s a question:\nIn the case of haproxy, the reload callback would not look the same as the initial callback.\nThe reload callback has a suffix of \u0027-sf \u003cpid\u003e\u0027 where the pid is the currently active haproxy pid (who runs with the old config).\nHow would I distinguish between the initial process start callback and the reload callback?\nThis is what i was aiming for with default_reload_callback.","commit_id":"41739b3411cd596c93b0de58b471b8094a55fedf"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"c3dbcfbb3f1c2919e02c182b9f355574c770ea74","unresolved":false,"context_lines":[{"line_number":96,"context_line":"            self.reload_cfg()"},{"line_number":97,"context_line":""},{"line_number":98,"context_line":"    def reload_cfg(self):"},{"line_number":99,"context_line":"        if not self.default_reload_callback:"},{"line_number":100,"context_line":"            self.disable(\u0027HUP\u0027)"},{"line_number":101,"context_line":"        else:"},{"line_number":102,"context_line":"            cmd \u003d self.default_reload_callback(self.get_pid_file_name())"}],"source_content_type":"text/x-python","patch_set":6,"id":"dada55a8_00dbf37c","line":99,"range":{"start_line":99,"start_character":8,"end_line":99,"end_character":43},"in_reply_to":"dada55a8_f0f5d682","updated":"2016-07-27 08:51:34.000000000","message":"aha, I just think since we move it to constructor we could have avoided the check per every call. But I agree it\u0027s not a big deal.","commit_id":"41739b3411cd596c93b0de58b471b8094a55fedf"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"c3dbcfbb3f1c2919e02c182b9f355574c770ea74","unresolved":false,"context_lines":[{"line_number":99,"context_line":"        if not self.default_reload_callback:"},{"line_number":100,"context_line":"            self.disable(\u0027HUP\u0027)"},{"line_number":101,"context_line":"        else:"},{"line_number":102,"context_line":"            cmd \u003d self.default_reload_callback(self.get_pid_file_name())"},{"line_number":103,"context_line":"            ip_wrapper \u003d ip_lib.IPWrapper(namespace\u003dself.namespace)"},{"line_number":104,"context_line":"            ip_wrapper.netns.execute(cmd, addl_env\u003dself.cmd_addl_env)"},{"line_number":105,"context_line":""},{"line_number":106,"context_line":"    def disable(self, sig\u003d\u00279\u0027, get_stop_command\u003dNone):"},{"line_number":107,"context_line":"        pid \u003d self.pid"}],"source_content_type":"text/x-python","patch_set":6,"id":"dada55a8_e03fbf84","line":104,"range":{"start_line":102,"start_character":0,"end_line":104,"end_character":69},"updated":"2016-07-27 08:51:34.000000000","message":"Is there a reason why not calling:\n\n self.disable(get_stop_command\u003dself.deault_reload_callback)\n\nI assume we won\u0027t be calling reload on a process that is not active and it basically duplicates L111-L113","commit_id":"41739b3411cd596c93b0de58b471b8094a55fedf"},{"author":{"_account_id":6579,"name":"Nir Magnezi","email":"nmagnezi@redhat.com","username":"nmagnezi"},"change_message_id":"444ab038eefc3a7da84f20ee06979252e627b3be","unresolved":false,"context_lines":[{"line_number":99,"context_line":"        if not self.default_reload_callback:"},{"line_number":100,"context_line":"            self.disable(\u0027HUP\u0027)"},{"line_number":101,"context_line":"        else:"},{"line_number":102,"context_line":"            cmd \u003d self.default_reload_callback(self.get_pid_file_name())"},{"line_number":103,"context_line":"            ip_wrapper \u003d ip_lib.IPWrapper(namespace\u003dself.namespace)"},{"line_number":104,"context_line":"            ip_wrapper.netns.execute(cmd, addl_env\u003dself.cmd_addl_env)"},{"line_number":105,"context_line":""},{"line_number":106,"context_line":"    def disable(self, sig\u003d\u00279\u0027, get_stop_command\u003dNone):"},{"line_number":107,"context_line":"        pid \u003d self.pid"}],"source_content_type":"text/x-python","patch_set":6,"id":"bacf61ea_ee401b0a","line":104,"range":{"start_line":102,"start_character":0,"end_line":104,"end_character":69},"in_reply_to":"dada55a8_e03fbf84","updated":"2016-07-27 14:28:24.000000000","message":"Done :)","commit_id":"41739b3411cd596c93b0de58b471b8094a55fedf"},{"author":{"_account_id":7787,"name":"Kevin Benton","email":"kevin@benton.pub","username":"blak111"},"change_message_id":"485f3da8d7966f00f6890a63b35cddd302c398fe","unresolved":false,"context_lines":[{"line_number":72,"context_line":"        self.pids_path \u003d pids_path or self.conf.external_pids"},{"line_number":73,"context_line":"        self.pid_file \u003d pid_file"},{"line_number":74,"context_line":"        self.run_as_root \u003d run_as_root"},{"line_number":75,"context_line":"        self.default_reload_callback \u003d default_reload_callback"},{"line_number":76,"context_line":""},{"line_number":77,"context_line":"        if service:"},{"line_number":78,"context_line":"            self.service_pid_fname \u003d \u0027pid.\u0027 + service"}],"source_content_type":"text/x-python","patch_set":14,"id":"9ad45d7e_19f0cec8","line":75,"updated":"2016-08-10 13:01:22.000000000","message":"why is this being called \u0027default\u0027? If anything it\u0027s exactly the opposite of the default behavior...","commit_id":"25c57c525b84c8b1f292102b6185597d48bfc963"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"2d029dbbd377f99c301f15a7c5d6e28340ca5a09","unresolved":false,"context_lines":[{"line_number":72,"context_line":"        self.pids_path \u003d pids_path or self.conf.external_pids"},{"line_number":73,"context_line":"        self.pid_file \u003d pid_file"},{"line_number":74,"context_line":"        self.run_as_root \u003d run_as_root"},{"line_number":75,"context_line":"        self.default_reload_callback \u003d default_reload_callback"},{"line_number":76,"context_line":""},{"line_number":77,"context_line":"        if service:"},{"line_number":78,"context_line":"            self.service_pid_fname \u003d \u0027pid.\u0027 + service"}],"source_content_type":"text/x-python","patch_set":14,"id":"9ad45d7e_e54d4d3f","line":75,"in_reply_to":"9ad45d7e_19f0cec8","updated":"2016-08-10 14:02:01.000000000","message":"Nir is on PTO, I\u0027ll take care of renaming to \u0027custom\u0027.","commit_id":"25c57c525b84c8b1f292102b6185597d48bfc963"},{"author":{"_account_id":8788,"name":"Miguel Angel Ajo","email":"mangelajo@redhat.com","username":"mangelajo"},"change_message_id":"e4af36535ef0b3bcbce800c63c2835e8e33eb755","unresolved":false,"context_lines":[{"line_number":72,"context_line":"        self.pids_path \u003d pids_path or self.conf.external_pids"},{"line_number":73,"context_line":"        self.pid_file \u003d pid_file"},{"line_number":74,"context_line":"        self.run_as_root \u003d run_as_root"},{"line_number":75,"context_line":"        self.default_reload_callback \u003d default_reload_callback"},{"line_number":76,"context_line":""},{"line_number":77,"context_line":"        if service:"},{"line_number":78,"context_line":"            self.service_pid_fname \u003d \u0027pid.\u0027 + service"}],"source_content_type":"text/x-python","patch_set":14,"id":"9ad45d7e_7f3417fb","line":75,"in_reply_to":"9ad45d7e_e54d4d3f","updated":"2016-08-11 10:23:14.000000000","message":"Hmm, you\u0027re right, I suggested that following the pattern of default_cmd_callback.\n\nMay be custom_reload_callback or even just reload_callback?","commit_id":"25c57c525b84c8b1f292102b6185597d48bfc963"},{"author":{"_account_id":8788,"name":"Miguel Angel Ajo","email":"mangelajo@redhat.com","username":"mangelajo"},"change_message_id":"40d6ddb88df80adf96ca7ee9a8ed6bd4c936b5ab","unresolved":false,"context_lines":[{"line_number":62,"context_line":"    def __init__(self, conf, uuid, namespace\u003dNone, service\u003dNone,"},{"line_number":63,"context_line":"                 pids_path\u003dNone, default_cmd_callback\u003dNone,"},{"line_number":64,"context_line":"                 cmd_addl_env\u003dNone, pid_file\u003dNone, run_as_root\u003dFalse,"},{"line_number":65,"context_line":"                 custom_reload_callback\u003dNone):"},{"line_number":66,"context_line":""},{"line_number":67,"context_line":"        self.conf \u003d conf"},{"line_number":68,"context_line":"        self.uuid \u003d uuid"}],"source_content_type":"text/x-python","patch_set":15,"id":"9ad45d7e_02178448","line":65,"updated":"2016-08-11 10:24:27.000000000","message":"Thanks for changing this, this looks more reasonable as per kevin comments :)","commit_id":"ec929d9b1caaf970f431df10b10dc5fed6a9cc9f"}],"neutron/tests/unit/agent/linux/test_external_process.py":[{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"109b3fccb06c82723ec4cc8b39d8c519eada3258","unresolved":false,"context_lines":[{"line_number":164,"context_line":"                manager.enable(callback)"},{"line_number":165,"context_line":"                self.assertFalse(callback.called)"},{"line_number":166,"context_line":""},{"line_number":167,"context_line":"    def test_enable_reload_cfg_and_custom_reload_command(self):"},{"line_number":168,"context_line":"        custom_reload_callback \u003d mock.Mock()"},{"line_number":169,"context_line":"        custom_reload_callback.return_value \u003d [\u0027the\u0027, \u0027cmd\u0027]"},{"line_number":170,"context_line":"        fake_reload_cmds \u003d [custom_reload_callback, None]"}],"source_content_type":"text/x-python","patch_set":2,"id":"dada55a8_be995fc6","line":167,"range":{"start_line":167,"start_character":8,"end_line":167,"end_character":56},"updated":"2016-07-21 12:52:09.000000000","message":"I\u0027m not sure about usefullness of this test. The interaction should be tested on higher level and this will only cause burden when changing original code to some other implementation.","commit_id":"df496c2e2d940f6f17b55ea54edb2e3a2fe745a9"},{"author":{"_account_id":6579,"name":"Nir Magnezi","email":"nmagnezi@redhat.com","username":"nmagnezi"},"change_message_id":"6078030b958762642748d79b0d8473a87b11a940","unresolved":false,"context_lines":[{"line_number":164,"context_line":"                manager.enable(callback)"},{"line_number":165,"context_line":"                self.assertFalse(callback.called)"},{"line_number":166,"context_line":""},{"line_number":167,"context_line":"    def test_enable_reload_cfg_and_custom_reload_command(self):"},{"line_number":168,"context_line":"        custom_reload_callback \u003d mock.Mock()"},{"line_number":169,"context_line":"        custom_reload_callback.return_value \u003d [\u0027the\u0027, \u0027cmd\u0027]"},{"line_number":170,"context_line":"        fake_reload_cmds \u003d [custom_reload_callback, None]"}],"source_content_type":"text/x-python","patch_set":2,"id":"dada55a8_29cd3731","line":167,"range":{"start_line":167,"start_character":8,"end_line":167,"end_character":56},"in_reply_to":"dada55a8_be995fc6","updated":"2016-07-21 13:12:45.000000000","message":"test removed.","commit_id":"df496c2e2d940f6f17b55ea54edb2e3a2fe745a9"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"109b3fccb06c82723ec4cc8b39d8c519eada3258","unresolved":false,"context_lines":[{"line_number":165,"context_line":"                self.assertFalse(callback.called)"},{"line_number":166,"context_line":""},{"line_number":167,"context_line":"    def test_enable_reload_cfg_and_custom_reload_command(self):"},{"line_number":168,"context_line":"        custom_reload_callback \u003d mock.Mock()"},{"line_number":169,"context_line":"        custom_reload_callback.return_value \u003d [\u0027the\u0027, \u0027cmd\u0027]"},{"line_number":170,"context_line":"        fake_reload_cmds \u003d [custom_reload_callback, None]"},{"line_number":171,"context_line":""},{"line_number":172,"context_line":"        for fake_reload_cmd in fake_reload_cmds:"}],"source_content_type":"text/x-python","patch_set":2,"id":"dada55a8_e3f6a05b","line":169,"range":{"start_line":168,"start_character":0,"end_line":169,"end_character":60},"updated":"2016-07-21 12:52:09.000000000","message":"Nit: This can be grouped: mock.Mock(return_value\u003d[\u0027the\u0027, \u0027cmd\u0027])","commit_id":"df496c2e2d940f6f17b55ea54edb2e3a2fe745a9"},{"author":{"_account_id":6579,"name":"Nir Magnezi","email":"nmagnezi@redhat.com","username":"nmagnezi"},"change_message_id":"6078030b958762642748d79b0d8473a87b11a940","unresolved":false,"context_lines":[{"line_number":165,"context_line":"                self.assertFalse(callback.called)"},{"line_number":166,"context_line":""},{"line_number":167,"context_line":"    def test_enable_reload_cfg_and_custom_reload_command(self):"},{"line_number":168,"context_line":"        custom_reload_callback \u003d mock.Mock()"},{"line_number":169,"context_line":"        custom_reload_callback.return_value \u003d [\u0027the\u0027, \u0027cmd\u0027]"},{"line_number":170,"context_line":"        fake_reload_cmds \u003d [custom_reload_callback, None]"},{"line_number":171,"context_line":""},{"line_number":172,"context_line":"        for fake_reload_cmd in fake_reload_cmds:"}],"source_content_type":"text/x-python","patch_set":2,"id":"dada55a8_9e757bcc","line":169,"range":{"start_line":168,"start_character":0,"end_line":169,"end_character":60},"in_reply_to":"dada55a8_e3f6a05b","updated":"2016-07-21 13:12:45.000000000","message":"I copied it from other tests but you have a point. I will change that (in the remaining tests)","commit_id":"df496c2e2d940f6f17b55ea54edb2e3a2fe745a9"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"109b3fccb06c82723ec4cc8b39d8c519eada3258","unresolved":false,"context_lines":[{"line_number":175,"context_line":"                manager \u003d ep.ProcessManager(self.conf, \u0027uuid\u0027, namespace\u003d\u0027ns\u0027)"},{"line_number":176,"context_line":"                with mock.patch.object(ep.ProcessManager,"},{"line_number":177,"context_line":"                                       \u0027reload_cfg\u0027) as reload_cfg:"},{"line_number":178,"context_line":"                        manager.enable(reload_cfg\u003dTrue,"},{"line_number":179,"context_line":"                                       custom_reload_callback\u003dfake_reload_cmd)"},{"line_number":180,"context_line":"                        reload_cfg.assert_called_once_with(fake_reload_cmd)"},{"line_number":181,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"dada55a8_9e11fb54","line":178,"range":{"start_line":178,"start_character":20,"end_line":178,"end_character":24},"updated":"2016-07-21 12:52:09.000000000","message":"Indentation","commit_id":"df496c2e2d940f6f17b55ea54edb2e3a2fe745a9"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"109b3fccb06c82723ec4cc8b39d8c519eada3258","unresolved":false,"context_lines":[{"line_number":179,"context_line":"                                       custom_reload_callback\u003dfake_reload_cmd)"},{"line_number":180,"context_line":"                        reload_cfg.assert_called_once_with(fake_reload_cmd)"},{"line_number":181,"context_line":""},{"line_number":182,"context_line":"    def test_reload_cfg(self):"},{"line_number":183,"context_line":"        custom_reload_callback \u003d mock.Mock()"},{"line_number":184,"context_line":"        custom_reload_callback.return_value \u003d [\u0027the\u0027, \u0027cmd\u0027]"},{"line_number":185,"context_line":"        fake_reload_cmds \u003d [custom_reload_callback, None]"}],"source_content_type":"text/x-python","patch_set":2,"id":"dada55a8_3e3a8f99","line":182,"range":{"start_line":182,"start_character":8,"end_line":182,"end_character":23},"updated":"2016-07-21 12:52:09.000000000","message":"Let\u0027s split this test into two - per test case. The advantage is that if first test in a loop fails (custom_reload_callback), you won\u0027t get tested the second (None). Basically test once L192 and second test will call L194.","commit_id":"df496c2e2d940f6f17b55ea54edb2e3a2fe745a9"},{"author":{"_account_id":6579,"name":"Nir Magnezi","email":"nmagnezi@redhat.com","username":"nmagnezi"},"change_message_id":"6078030b958762642748d79b0d8473a87b11a940","unresolved":false,"context_lines":[{"line_number":179,"context_line":"                                       custom_reload_callback\u003dfake_reload_cmd)"},{"line_number":180,"context_line":"                        reload_cfg.assert_called_once_with(fake_reload_cmd)"},{"line_number":181,"context_line":""},{"line_number":182,"context_line":"    def test_reload_cfg(self):"},{"line_number":183,"context_line":"        custom_reload_callback \u003d mock.Mock()"},{"line_number":184,"context_line":"        custom_reload_callback.return_value \u003d [\u0027the\u0027, \u0027cmd\u0027]"},{"line_number":185,"context_line":"        fake_reload_cmds \u003d [custom_reload_callback, None]"}],"source_content_type":"text/x-python","patch_set":2,"id":"dada55a8_c94e1b3a","line":182,"range":{"start_line":182,"start_character":8,"end_line":182,"end_character":23},"in_reply_to":"dada55a8_3e3a8f99","updated":"2016-07-21 13:12:45.000000000","message":"Done","commit_id":"df496c2e2d940f6f17b55ea54edb2e3a2fe745a9"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"109b3fccb06c82723ec4cc8b39d8c519eada3258","unresolved":false,"context_lines":[{"line_number":180,"context_line":"                        reload_cfg.assert_called_once_with(fake_reload_cmd)"},{"line_number":181,"context_line":""},{"line_number":182,"context_line":"    def test_reload_cfg(self):"},{"line_number":183,"context_line":"        custom_reload_callback \u003d mock.Mock()"},{"line_number":184,"context_line":"        custom_reload_callback.return_value \u003d [\u0027the\u0027, \u0027cmd\u0027]"},{"line_number":185,"context_line":"        fake_reload_cmds \u003d [custom_reload_callback, None]"},{"line_number":186,"context_line":""},{"line_number":187,"context_line":"        for fake_reload_cmd in fake_reload_cmds:"}],"source_content_type":"text/x-python","patch_set":2,"id":"dada55a8_7e408707","line":184,"range":{"start_line":183,"start_character":0,"end_line":184,"end_character":60},"updated":"2016-07-21 12:52:09.000000000","message":"Nit: same as L168","commit_id":"df496c2e2d940f6f17b55ea54edb2e3a2fe745a9"},{"author":{"_account_id":6579,"name":"Nir Magnezi","email":"nmagnezi@redhat.com","username":"nmagnezi"},"change_message_id":"6078030b958762642748d79b0d8473a87b11a940","unresolved":false,"context_lines":[{"line_number":180,"context_line":"                        reload_cfg.assert_called_once_with(fake_reload_cmd)"},{"line_number":181,"context_line":""},{"line_number":182,"context_line":"    def test_reload_cfg(self):"},{"line_number":183,"context_line":"        custom_reload_callback \u003d mock.Mock()"},{"line_number":184,"context_line":"        custom_reload_callback.return_value \u003d [\u0027the\u0027, \u0027cmd\u0027]"},{"line_number":185,"context_line":"        fake_reload_cmds \u003d [custom_reload_callback, None]"},{"line_number":186,"context_line":""},{"line_number":187,"context_line":"        for fake_reload_cmd in fake_reload_cmds:"}],"source_content_type":"text/x-python","patch_set":2,"id":"dada55a8_6943af13","line":184,"range":{"start_line":183,"start_character":0,"end_line":184,"end_character":60},"in_reply_to":"dada55a8_7e408707","updated":"2016-07-21 13:12:45.000000000","message":"Done","commit_id":"df496c2e2d940f6f17b55ea54edb2e3a2fe745a9"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"81e44742735d5bf644c89e7969572b21eca37824","unresolved":false,"context_lines":[{"line_number":176,"context_line":"            manager \u003d ep.ProcessManager(self.conf, \u0027uuid\u0027, namespace\u003d\u0027ns\u0027)"},{"line_number":177,"context_line":"            manager.reload_cfg(custom_reload_callback)"},{"line_number":178,"context_line":"            self.assertFalse(disable.called)"},{"line_number":179,"context_line":""},{"line_number":180,"context_line":"    def test_disable_no_namespace(self):"},{"line_number":181,"context_line":"        with mock.patch.object(ep.ProcessManager, \u0027pid\u0027) as pid:"},{"line_number":182,"context_line":"            pid.__get__ \u003d mock.Mock(return_value\u003d4)"}],"source_content_type":"text/x-python","patch_set":4,"id":"dada55a8_6446367c","line":179,"updated":"2016-07-21 13:32:10.000000000","message":"Oh, we also need to make sure the callback was actually executed:\n\n cmd \u003d [\u0027the\u0027, \u0027cmd\u0027]\n custom_reload_callback \u003d mock.Mock(return_value\u003dcmd)\n ...\n self.assertIn(cmd, self.execute.call_args[0])","commit_id":"1c1717104a9d7d0f296852aec4a63c0a4cfbac85"},{"author":{"_account_id":6579,"name":"Nir Magnezi","email":"nmagnezi@redhat.com","username":"nmagnezi"},"change_message_id":"47fec0de31e74a17457190d9a1158f8e27a1a39a","unresolved":false,"context_lines":[{"line_number":176,"context_line":"            manager \u003d ep.ProcessManager(self.conf, \u0027uuid\u0027, namespace\u003d\u0027ns\u0027)"},{"line_number":177,"context_line":"            manager.reload_cfg(custom_reload_callback)"},{"line_number":178,"context_line":"            self.assertFalse(disable.called)"},{"line_number":179,"context_line":""},{"line_number":180,"context_line":"    def test_disable_no_namespace(self):"},{"line_number":181,"context_line":"        with mock.patch.object(ep.ProcessManager, \u0027pid\u0027) as pid:"},{"line_number":182,"context_line":"            pid.__get__ \u003d mock.Mock(return_value\u003d4)"}],"source_content_type":"text/x-python","patch_set":4,"id":"dada55a8_ee4200ad","line":179,"in_reply_to":"dada55a8_6446367c","updated":"2016-07-21 14:04:12.000000000","message":"Done","commit_id":"1c1717104a9d7d0f296852aec4a63c0a4cfbac85"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"632055edff19fc53879bd4afd537a1241999abd4","unresolved":false,"context_lines":[{"line_number":173,"context_line":""},{"line_number":174,"context_line":"    def test_reload_cfg_with_default_reload_callback(self):"},{"line_number":175,"context_line":"        cmd \u003d [\u0027the\u0027, \u0027cmd\u0027]"},{"line_number":176,"context_line":"        reload_callback \u003d mock.Mock(return_value\u003dcmd)"},{"line_number":177,"context_line":"        with mock.patch.object(ep.ProcessManager, \u0027disable\u0027) as disable:"},{"line_number":178,"context_line":"            manager \u003d ep.ProcessManager("},{"line_number":179,"context_line":"                    self.conf, \u0027uuid\u0027, namespace\u003d\u0027ns\u0027,"}],"source_content_type":"text/x-python","patch_set":10,"id":"bacf61ea_aedb9cec","line":176,"range":{"start_line":176,"start_character":26,"end_line":176,"end_character":53},"updated":"2016-07-28 08:02:21.000000000","message":"It seems like we actually don\u0027t even use cmd here. Let\u0027s try it just with\n\n reload_callback \u003d mock.sentinel.callback","commit_id":"c5440857e098a6047647dcb44b65f35bce994d0b"},{"author":{"_account_id":6579,"name":"Nir Magnezi","email":"nmagnezi@redhat.com","username":"nmagnezi"},"change_message_id":"e16f87325fc5f354d07baadf386adb5fa71f75cd","unresolved":false,"context_lines":[{"line_number":173,"context_line":""},{"line_number":174,"context_line":"    def test_reload_cfg_with_default_reload_callback(self):"},{"line_number":175,"context_line":"        cmd \u003d [\u0027the\u0027, \u0027cmd\u0027]"},{"line_number":176,"context_line":"        reload_callback \u003d mock.Mock(return_value\u003dcmd)"},{"line_number":177,"context_line":"        with mock.patch.object(ep.ProcessManager, \u0027disable\u0027) as disable:"},{"line_number":178,"context_line":"            manager \u003d ep.ProcessManager("},{"line_number":179,"context_line":"                    self.conf, \u0027uuid\u0027, namespace\u003d\u0027ns\u0027,"}],"source_content_type":"text/x-python","patch_set":10,"id":"bacf61ea_6199b56e","line":176,"range":{"start_line":176,"start_character":26,"end_line":176,"end_character":53},"in_reply_to":"bacf61ea_aedb9cec","updated":"2016-07-28 09:57:51.000000000","message":"Done","commit_id":"c5440857e098a6047647dcb44b65f35bce994d0b"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"cb8074b889164360442a616feb53826e0322bc08","unresolved":false,"context_lines":[{"line_number":176,"context_line":"        reload_callback \u003d mock.Mock(return_value\u003dcmd)"},{"line_number":177,"context_line":"        with mock.patch.object(ep.ProcessManager, \u0027disable\u0027) as disable:"},{"line_number":178,"context_line":"            manager \u003d ep.ProcessManager("},{"line_number":179,"context_line":"                    self.conf, \u0027uuid\u0027, namespace\u003d\u0027ns\u0027,"},{"line_number":180,"context_line":"                    default_reload_callback\u003dreload_callback)"},{"line_number":181,"context_line":"            manager.reload_cfg()"},{"line_number":182,"context_line":"            disable.assert_called_once_with(get_stop_command\u003dreload_callback)"}],"source_content_type":"text/x-python","patch_set":10,"id":"bacf61ea_849317a3","line":179,"range":{"start_line":179,"start_character":12,"end_line":179,"end_character":20},"updated":"2016-07-28 08:33:49.000000000","message":"shoule be 4 spaces :)","commit_id":"c5440857e098a6047647dcb44b65f35bce994d0b"},{"author":{"_account_id":6579,"name":"Nir Magnezi","email":"nmagnezi@redhat.com","username":"nmagnezi"},"change_message_id":"e16f87325fc5f354d07baadf386adb5fa71f75cd","unresolved":false,"context_lines":[{"line_number":176,"context_line":"        reload_callback \u003d mock.Mock(return_value\u003dcmd)"},{"line_number":177,"context_line":"        with mock.patch.object(ep.ProcessManager, \u0027disable\u0027) as disable:"},{"line_number":178,"context_line":"            manager \u003d ep.ProcessManager("},{"line_number":179,"context_line":"                    self.conf, \u0027uuid\u0027, namespace\u003d\u0027ns\u0027,"},{"line_number":180,"context_line":"                    default_reload_callback\u003dreload_callback)"},{"line_number":181,"context_line":"            manager.reload_cfg()"},{"line_number":182,"context_line":"            disable.assert_called_once_with(get_stop_command\u003dreload_callback)"}],"source_content_type":"text/x-python","patch_set":10,"id":"bacf61ea_d055c51d","line":179,"range":{"start_line":179,"start_character":12,"end_line":179,"end_character":20},"in_reply_to":"bacf61ea_849317a3","updated":"2016-07-28 09:57:51.000000000","message":"Done","commit_id":"c5440857e098a6047647dcb44b65f35bce994d0b"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"632055edff19fc53879bd4afd537a1241999abd4","unresolved":false,"context_lines":[{"line_number":183,"context_line":""},{"line_number":184,"context_line":"    def test_disable_get_stop_command(self):"},{"line_number":185,"context_line":"        cmd \u003d [\u0027the\u0027, \u0027cmd\u0027]"},{"line_number":186,"context_line":"        reload_callback \u003d mock.Mock(return_value\u003dcmd)"},{"line_number":187,"context_line":"        with mock.patch.object(ep.ProcessManager, \u0027pid\u0027) as pid:"},{"line_number":188,"context_line":"            pid.__get__ \u003d mock.Mock(return_value\u003d4)"},{"line_number":189,"context_line":"            with mock.patch.object(ep.ProcessManager, \u0027active\u0027) as active:"}],"source_content_type":"text/x-python","patch_set":10,"id":"bacf61ea_4eedc08a","line":186,"range":{"start_line":186,"start_character":26,"end_line":186,"end_character":35},"updated":"2016-07-28 08:02:21.000000000","message":"Here it makes sense to use Mock object as we care about cmd later.","commit_id":"c5440857e098a6047647dcb44b65f35bce994d0b"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"632055edff19fc53879bd4afd537a1241999abd4","unresolved":false,"context_lines":[{"line_number":185,"context_line":"        cmd \u003d [\u0027the\u0027, \u0027cmd\u0027]"},{"line_number":186,"context_line":"        reload_callback \u003d mock.Mock(return_value\u003dcmd)"},{"line_number":187,"context_line":"        with mock.patch.object(ep.ProcessManager, \u0027pid\u0027) as pid:"},{"line_number":188,"context_line":"            pid.__get__ \u003d mock.Mock(return_value\u003d4)"},{"line_number":189,"context_line":"            with mock.patch.object(ep.ProcessManager, \u0027active\u0027) as active:"},{"line_number":190,"context_line":"                active.__get__ \u003d mock.Mock(return_value\u003dTrue)"},{"line_number":191,"context_line":"                manager \u003d ep.ProcessManager("}],"source_content_type":"text/x-python","patch_set":10,"id":"bacf61ea_6ee8847d","line":188,"range":{"start_line":188,"start_character":12,"end_line":188,"end_character":51},"updated":"2016-07-28 08:02:21.000000000","message":"pid.__get__.return_value \u003d 4","commit_id":"c5440857e098a6047647dcb44b65f35bce994d0b"},{"author":{"_account_id":6579,"name":"Nir Magnezi","email":"nmagnezi@redhat.com","username":"nmagnezi"},"change_message_id":"e16f87325fc5f354d07baadf386adb5fa71f75cd","unresolved":false,"context_lines":[{"line_number":185,"context_line":"        cmd \u003d [\u0027the\u0027, \u0027cmd\u0027]"},{"line_number":186,"context_line":"        reload_callback \u003d mock.Mock(return_value\u003dcmd)"},{"line_number":187,"context_line":"        with mock.patch.object(ep.ProcessManager, \u0027pid\u0027) as pid:"},{"line_number":188,"context_line":"            pid.__get__ \u003d mock.Mock(return_value\u003d4)"},{"line_number":189,"context_line":"            with mock.patch.object(ep.ProcessManager, \u0027active\u0027) as active:"},{"line_number":190,"context_line":"                active.__get__ \u003d mock.Mock(return_value\u003dTrue)"},{"line_number":191,"context_line":"                manager \u003d ep.ProcessManager("}],"source_content_type":"text/x-python","patch_set":10,"id":"bacf61ea_9074edcf","line":188,"range":{"start_line":188,"start_character":12,"end_line":188,"end_character":51},"in_reply_to":"bacf61ea_15bbcfc5","updated":"2016-07-28 09:57:51.000000000","message":"Good stuff. Done.","commit_id":"c5440857e098a6047647dcb44b65f35bce994d0b"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"1cb929e4d7c50643e6ad0a42292e6a2bb09590e4","unresolved":false,"context_lines":[{"line_number":185,"context_line":"        cmd \u003d [\u0027the\u0027, \u0027cmd\u0027]"},{"line_number":186,"context_line":"        reload_callback \u003d mock.Mock(return_value\u003dcmd)"},{"line_number":187,"context_line":"        with mock.patch.object(ep.ProcessManager, \u0027pid\u0027) as pid:"},{"line_number":188,"context_line":"            pid.__get__ \u003d mock.Mock(return_value\u003d4)"},{"line_number":189,"context_line":"            with mock.patch.object(ep.ProcessManager, \u0027active\u0027) as active:"},{"line_number":190,"context_line":"                active.__get__ \u003d mock.Mock(return_value\u003dTrue)"},{"line_number":191,"context_line":"                manager \u003d ep.ProcessManager("}],"source_content_type":"text/x-python","patch_set":10,"id":"bacf61ea_15bbcfc5","line":188,"range":{"start_line":188,"start_character":12,"end_line":188,"end_character":51},"in_reply_to":"bacf61ea_6ee8847d","updated":"2016-07-28 09:33:52.000000000","message":"Aha, it fails, because pid is a property. So we should treat it as a property:\n\n with mock.patch.object(ep.ProcessManager, \u0027pid\u0027, mock.PropertyMock(return_value\u003d4):","commit_id":"c5440857e098a6047647dcb44b65f35bce994d0b"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"632055edff19fc53879bd4afd537a1241999abd4","unresolved":false,"context_lines":[{"line_number":187,"context_line":"        with mock.patch.object(ep.ProcessManager, \u0027pid\u0027) as pid:"},{"line_number":188,"context_line":"            pid.__get__ \u003d mock.Mock(return_value\u003d4)"},{"line_number":189,"context_line":"            with mock.patch.object(ep.ProcessManager, \u0027active\u0027) as active:"},{"line_number":190,"context_line":"                active.__get__ \u003d mock.Mock(return_value\u003dTrue)"},{"line_number":191,"context_line":"                manager \u003d ep.ProcessManager("},{"line_number":192,"context_line":"                    self.conf, \u0027uuid\u0027, namespace\u003d\u0027ns\u0027,"},{"line_number":193,"context_line":"                    default_reload_callback\u003dreload_callback)"}],"source_content_type":"text/x-python","patch_set":10,"id":"bacf61ea_8effb833","line":190,"range":{"start_line":190,"start_character":16,"end_line":190,"end_character":61},"updated":"2016-07-28 08:02:21.000000000","message":"ditto","commit_id":"c5440857e098a6047647dcb44b65f35bce994d0b"},{"author":{"_account_id":6579,"name":"Nir Magnezi","email":"nmagnezi@redhat.com","username":"nmagnezi"},"change_message_id":"e16f87325fc5f354d07baadf386adb5fa71f75cd","unresolved":false,"context_lines":[{"line_number":187,"context_line":"        with mock.patch.object(ep.ProcessManager, \u0027pid\u0027) as pid:"},{"line_number":188,"context_line":"            pid.__get__ \u003d mock.Mock(return_value\u003d4)"},{"line_number":189,"context_line":"            with mock.patch.object(ep.ProcessManager, \u0027active\u0027) as active:"},{"line_number":190,"context_line":"                active.__get__ \u003d mock.Mock(return_value\u003dTrue)"},{"line_number":191,"context_line":"                manager \u003d ep.ProcessManager("},{"line_number":192,"context_line":"                    self.conf, \u0027uuid\u0027, namespace\u003d\u0027ns\u0027,"},{"line_number":193,"context_line":"                    default_reload_callback\u003dreload_callback)"}],"source_content_type":"text/x-python","patch_set":10,"id":"bacf61ea_b07771d3","line":190,"range":{"start_line":190,"start_character":16,"end_line":190,"end_character":61},"in_reply_to":"bacf61ea_8effb833","updated":"2016-07-28 09:57:51.000000000","message":"Done","commit_id":"c5440857e098a6047647dcb44b65f35bce994d0b"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"cb8074b889164360442a616feb53826e0322bc08","unresolved":false,"context_lines":[{"line_number":194,"context_line":"                with mock.patch.object(ip_lib.IpNetnsCommand,"},{"line_number":195,"context_line":"                                       \u0027execute\u0027) as execute:"},{"line_number":196,"context_line":"                    manager.disable("},{"line_number":197,"context_line":"                            get_stop_command\u003dmanager.default_reload_callback)"},{"line_number":198,"context_line":"                    execute.assert_called_once_with(cmd, addl_env\u003dNone)"},{"line_number":199,"context_line":""},{"line_number":200,"context_line":"    def test_disable_no_namespace(self):"}],"source_content_type":"text/x-python","patch_set":10,"id":"bacf61ea_64f3830b","line":197,"range":{"start_line":197,"start_character":20,"end_line":197,"end_character":28},"updated":"2016-07-28 08:33:49.000000000","message":"just 4 spaces","commit_id":"c5440857e098a6047647dcb44b65f35bce994d0b"},{"author":{"_account_id":6579,"name":"Nir Magnezi","email":"nmagnezi@redhat.com","username":"nmagnezi"},"change_message_id":"e16f87325fc5f354d07baadf386adb5fa71f75cd","unresolved":false,"context_lines":[{"line_number":194,"context_line":"                with mock.patch.object(ip_lib.IpNetnsCommand,"},{"line_number":195,"context_line":"                                       \u0027execute\u0027) as execute:"},{"line_number":196,"context_line":"                    manager.disable("},{"line_number":197,"context_line":"                            get_stop_command\u003dmanager.default_reload_callback)"},{"line_number":198,"context_line":"                    execute.assert_called_once_with(cmd, addl_env\u003dNone)"},{"line_number":199,"context_line":""},{"line_number":200,"context_line":"    def test_disable_no_namespace(self):"}],"source_content_type":"text/x-python","patch_set":10,"id":"bacf61ea_f02f299f","line":197,"range":{"start_line":197,"start_character":20,"end_line":197,"end_character":28},"in_reply_to":"bacf61ea_64f3830b","updated":"2016-07-28 09:57:51.000000000","message":"Done","commit_id":"c5440857e098a6047647dcb44b65f35bce994d0b"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"632055edff19fc53879bd4afd537a1241999abd4","unresolved":false,"context_lines":[{"line_number":195,"context_line":"                                       \u0027execute\u0027) as execute:"},{"line_number":196,"context_line":"                    manager.disable("},{"line_number":197,"context_line":"                            get_stop_command\u003dmanager.default_reload_callback)"},{"line_number":198,"context_line":"                    execute.assert_called_once_with(cmd, addl_env\u003dNone)"},{"line_number":199,"context_line":""},{"line_number":200,"context_line":"    def test_disable_no_namespace(self):"},{"line_number":201,"context_line":"        with mock.patch.object(ep.ProcessManager, \u0027pid\u0027) as pid:"}],"source_content_type":"text/x-python","patch_set":10,"id":"bacf61ea_0e68e8f4","line":198,"range":{"start_line":198,"start_character":28,"end_line":198,"end_character":71},"updated":"2016-07-28 08:02:21.000000000","message":"I would avoid asserting exact call arguments. Let\u0027s just test what we\u0027re interested int, which is that command was executed in the given namespace - or better, let\u0027s not use namespace (as that should have separate test) and assert the cmd was called.\n\n self.assertIn(cmd, self.execute.call_args[0])","commit_id":"c5440857e098a6047647dcb44b65f35bce994d0b"},{"author":{"_account_id":6579,"name":"Nir Magnezi","email":"nmagnezi@redhat.com","username":"nmagnezi"},"change_message_id":"e16f87325fc5f354d07baadf386adb5fa71f75cd","unresolved":false,"context_lines":[{"line_number":195,"context_line":"                                       \u0027execute\u0027) as execute:"},{"line_number":196,"context_line":"                    manager.disable("},{"line_number":197,"context_line":"                            get_stop_command\u003dmanager.default_reload_callback)"},{"line_number":198,"context_line":"                    execute.assert_called_once_with(cmd, addl_env\u003dNone)"},{"line_number":199,"context_line":""},{"line_number":200,"context_line":"    def test_disable_no_namespace(self):"},{"line_number":201,"context_line":"        with mock.patch.object(ep.ProcessManager, \u0027pid\u0027) as pid:"}],"source_content_type":"text/x-python","patch_set":10,"id":"bacf61ea_41e2b104","line":198,"range":{"start_line":198,"start_character":28,"end_line":198,"end_character":71},"in_reply_to":"bacf61ea_0e68e8f4","updated":"2016-07-28 09:57:51.000000000","message":"That\u0027s actually a great tip, thanks! (Done)","commit_id":"c5440857e098a6047647dcb44b65f35bce994d0b"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"dcdc37273d59f7902399c8e485240d6618272787","unresolved":false,"context_lines":[{"line_number":190,"context_line":"                manager \u003d ep.ProcessManager("},{"line_number":191,"context_line":"                    self.conf, \u0027uuid\u0027, namespace\u003d\u0027ns\u0027,"},{"line_number":192,"context_line":"                    default_reload_callback\u003dreload_callback)"},{"line_number":193,"context_line":"                with mock.patch.object(ip_lib.IpNetnsCommand,"},{"line_number":194,"context_line":"                                       \u0027execute\u0027) as execute:"},{"line_number":195,"context_line":"                    manager.disable("},{"line_number":196,"context_line":"                        get_stop_command\u003dmanager.default_reload_callback)"}],"source_content_type":"text/x-python","patch_set":11,"id":"bacf61ea_3c47dbbc","line":193,"range":{"start_line":193,"start_character":39,"end_line":193,"end_character":60},"updated":"2016-07-28 10:39:23.000000000","message":"I think not using namespace would be actually sufficient as namespace usage is not target of this patch. But maybe it\u0027s just me :)","commit_id":"d94829bfea1fbcafb4536d1a6b5872edc0dfc2a7"},{"author":{"_account_id":8788,"name":"Miguel Angel Ajo","email":"mangelajo@redhat.com","username":"mangelajo"},"change_message_id":"deb625b69a472cc82b94a0e915d2a4f1c57f1ea8","unresolved":false,"context_lines":[{"line_number":190,"context_line":"                manager \u003d ep.ProcessManager("},{"line_number":191,"context_line":"                    self.conf, \u0027uuid\u0027, namespace\u003d\u0027ns\u0027,"},{"line_number":192,"context_line":"                    default_reload_callback\u003dreload_callback)"},{"line_number":193,"context_line":"                with mock.patch.object(ip_lib.IpNetnsCommand,"},{"line_number":194,"context_line":"                                       \u0027execute\u0027) as execute:"},{"line_number":195,"context_line":"                    manager.disable("},{"line_number":196,"context_line":"                        get_stop_command\u003dmanager.default_reload_callback)"}],"source_content_type":"text/x-python","patch_set":11,"id":"bacf61ea_cb0cf396","line":193,"range":{"start_line":193,"start_character":39,"end_line":193,"end_character":60},"in_reply_to":"bacf61ea_3c47dbbc","updated":"2016-07-28 12:05:20.000000000","message":"Yeah, that\u0027s a bit of a nit, but  makes sense, nmagnezi, can you do that final cleanup?","commit_id":"d94829bfea1fbcafb4536d1a6b5872edc0dfc2a7"},{"author":{"_account_id":6579,"name":"Nir Magnezi","email":"nmagnezi@redhat.com","username":"nmagnezi"},"change_message_id":"99df26036fc628e9d0aad7b87764b81b3248c091","unresolved":false,"context_lines":[{"line_number":190,"context_line":"                manager \u003d ep.ProcessManager("},{"line_number":191,"context_line":"                    self.conf, \u0027uuid\u0027, namespace\u003d\u0027ns\u0027,"},{"line_number":192,"context_line":"                    default_reload_callback\u003dreload_callback)"},{"line_number":193,"context_line":"                with mock.patch.object(ip_lib.IpNetnsCommand,"},{"line_number":194,"context_line":"                                       \u0027execute\u0027) as execute:"},{"line_number":195,"context_line":"                    manager.disable("},{"line_number":196,"context_line":"                        get_stop_command\u003dmanager.default_reload_callback)"}],"source_content_type":"text/x-python","patch_set":11,"id":"bacf61ea_0419ce88","line":193,"range":{"start_line":193,"start_character":39,"end_line":193,"end_character":60},"in_reply_to":"bacf61ea_cb0cf396","updated":"2016-07-28 15:31:48.000000000","message":"Done","commit_id":"d94829bfea1fbcafb4536d1a6b5872edc0dfc2a7"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"41f5921730017e0370f42cce66c638facacd16da","unresolved":false,"context_lines":[{"line_number":16,"context_line":"import os.path"},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"from neutron.agent.linux import external_process as ep"},{"line_number":19,"context_line":"from neutron.agent.linux import ip_lib"},{"line_number":20,"context_line":"from neutron.common import utils as common_utils"},{"line_number":21,"context_line":"from neutron.tests import base"},{"line_number":22,"context_line":"from neutron.tests import tools"}],"source_content_type":"text/x-python","patch_set":12,"id":"bacf61ea_bffd6b3c","line":19,"range":{"start_line":19,"start_character":32,"end_line":19,"end_character":38},"updated":"2016-07-28 15:42:21.000000000","message":"Hopefully pep8 will fail on this :)","commit_id":"3faa46635f139a4626938aabafa4013961db5d4f"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"aafe8827ca8eafe1f89b5baf845344755d3b655a","unresolved":false,"context_lines":[{"line_number":189,"context_line":"            with mock.patch.object(ep.ProcessManager, \u0027active\u0027,"},{"line_number":190,"context_line":"                                   mock.PropertyMock(return_value\u003dTrue)):"},{"line_number":191,"context_line":"                manager \u003d ep.ProcessManager("},{"line_number":192,"context_line":"                    self.conf, \u0027uuid\u0027, namespace\u003d\u0027ns\u0027,"},{"line_number":193,"context_line":"                    default_reload_callback\u003dreload_callback)"},{"line_number":194,"context_line":"                manager.disable("},{"line_number":195,"context_line":"                        get_stop_command\u003dmanager.default_reload_callback)"}],"source_content_type":"text/x-python","patch_set":12,"id":"bacf61ea_bf4f2bbc","line":192,"range":{"start_line":192,"start_character":39,"end_line":192,"end_character":54},"updated":"2016-07-28 15:41:57.000000000","message":"If you\u0027d remove this, L184 and \"netns_prefix +\" on L196, it would be what we meant :)","commit_id":"3faa46635f139a4626938aabafa4013961db5d4f"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"0d12cb3573a77c187437e00f9125d7c38820753d","unresolved":false,"context_lines":[{"line_number":190,"context_line":"                    self.conf, \u0027uuid\u0027,"},{"line_number":191,"context_line":"                    default_reload_callback\u003dreload_callback)"},{"line_number":192,"context_line":"                manager.disable("},{"line_number":193,"context_line":"                        get_stop_command\u003dmanager.default_reload_callback)"},{"line_number":194,"context_line":"                self.assertIn(cmd, self.execute.call_args[0])"},{"line_number":195,"context_line":""},{"line_number":196,"context_line":"    def test_disable_no_namespace(self):"}],"source_content_type":"text/x-python","patch_set":13,"id":"bacf61ea_85de586b","line":193,"range":{"start_line":193,"start_character":16,"end_line":193,"end_character":24},"updated":"2016-07-28 16:02:10.000000000","message":"Super duper nit: 4 spaces only","commit_id":"1fbf1d01dcaa518efceb2c10c611646fe8b0b5c4"}]}
