)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":9970,"name":"John Kasperski","email":"jckasper@linux.vnet.ibm.com","username":"jckasper"},"change_message_id":"4e3fed8967f528b6f6c8ea424c706c79e67b00a0","unresolved":false,"context_lines":[{"line_number":12,"context_line":"The patch adds DaemonFixture that can be used for testing daemons"},{"line_number":13,"context_line":"running in namespaces. The daemon is based on existing"},{"line_number":14,"context_line":"agent/linux/daemon.py, however it is made to depend on pure Python"},{"line_number":15,"context_line":"only (otherwise it is not possible to run tests in virtualenv)."},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"Change-Id: I5efc7acd9a32786d36d724c6240af7b3876994b6"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"ba3cc151_cc833b02","line":15,"updated":"2015-07-08 14:06:08.000000000","message":"Bug or blueprint for this change for tracking purposes ?","commit_id":"1e8549fcbd7b6aabec3d22a57c13b5be045da83c"},{"author":{"_account_id":5950,"name":"Ilya Shakhat","email":"shakhat@gmail.com","username":"shakhat"},"change_message_id":"52618292cd746040a85820199b33d991eab60ab0","unresolved":false,"context_lines":[{"line_number":12,"context_line":"The patch adds DaemonFixture that can be used for testing daemons"},{"line_number":13,"context_line":"running in namespaces. The daemon is based on existing"},{"line_number":14,"context_line":"agent/linux/daemon.py, however it is made to depend on pure Python"},{"line_number":15,"context_line":"only (otherwise it is not possible to run tests in virtualenv)."},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"Change-Id: I5efc7acd9a32786d36d724c6240af7b3876994b6"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"ba3cc151_afcd8931","line":15,"in_reply_to":"ba3cc151_cc833b02","updated":"2015-07-08 14:28:30.000000000","message":"done, filed bug 1472634","commit_id":"1e8549fcbd7b6aabec3d22a57c13b5be045da83c"},{"author":{"_account_id":8976,"name":"shihanzhang","email":"ayshihanzhang@gmail.com","username":"shihanzhang"},"change_message_id":"70432ab8e49d0f1366d844b9ebc8ee3e5ec93c89","unresolved":false,"context_lines":[{"line_number":9,"context_line":"Extend functional test to check that daemon from DHCP namespace"},{"line_number":10,"context_line":"is killed by netns_cleanup utility."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"Closes bug 1472634"},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"Change-Id: I5efc7acd9a32786d36d724c6240af7b3876994b6"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"9a41bdd9_ae2ff9f4","line":12,"updated":"2015-07-14 09:40:30.000000000","message":"please use Closes-bug, it will automatically add patch status to the bug link","commit_id":"b5b1c0817b6f2973d3ece831f73115fbed04aea2"},{"author":{"_account_id":5950,"name":"Ilya Shakhat","email":"shakhat@gmail.com","username":"shakhat"},"change_message_id":"5398b7355475c9b1dc88d03d50f72d7b600419f2","unresolved":false,"context_lines":[{"line_number":9,"context_line":"Extend functional test to check that daemon from DHCP namespace"},{"line_number":10,"context_line":"is killed by netns_cleanup utility."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"Closes bug 1472634"},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"Change-Id: I5efc7acd9a32786d36d724c6240af7b3876994b6"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"9a41bdd9_39cb31a7","line":12,"in_reply_to":"9a41bdd9_ae2ff9f4","updated":"2015-07-14 09:53:31.000000000","message":"Done","commit_id":"b5b1c0817b6f2973d3ece831f73115fbed04aea2"}],"neutron/tests/common/daemon_helpers.py":[{"author":{"_account_id":8124,"name":"cbrandily","email":"zzelle@gmail.com","username":"cbrandily"},"change_message_id":"7223fa0cda0c15152f0a7049c0fa8a20b564ef8a","unresolved":false,"context_lines":[{"line_number":46,"context_line":""},{"line_number":47,"context_line":"    def _setUp(self):"},{"line_number":48,"context_line":"        self._child_process \u003d None"},{"line_number":49,"context_line":"        # self._process_monitor \u003d build_process_monitor()"},{"line_number":50,"context_line":"        self.addCleanup(self.cleanup_spawned_child)"},{"line_number":51,"context_line":"        self.spawn()"},{"line_number":52,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"ba3cc151_b8eab40d","line":49,"updated":"2015-07-08 13:35:15.000000000","message":"WIP?","commit_id":"1e8549fcbd7b6aabec3d22a57c13b5be045da83c"},{"author":{"_account_id":5950,"name":"Ilya Shakhat","email":"shakhat@gmail.com","username":"shakhat"},"change_message_id":"52618292cd746040a85820199b33d991eab60ab0","unresolved":false,"context_lines":[{"line_number":46,"context_line":""},{"line_number":47,"context_line":"    def _setUp(self):"},{"line_number":48,"context_line":"        self._child_process \u003d None"},{"line_number":49,"context_line":"        # self._process_monitor \u003d build_process_monitor()"},{"line_number":50,"context_line":"        self.addCleanup(self.cleanup_spawned_child)"},{"line_number":51,"context_line":"        self.spawn()"},{"line_number":52,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"ba3cc151_ae96eeed","line":49,"in_reply_to":"ba3cc151_b8eab40d","updated":"2015-07-08 14:28:30.000000000","message":"yep, fixed.","commit_id":"1e8549fcbd7b6aabec3d22a57c13b5be045da83c"},{"author":{"_account_id":8124,"name":"cbrandily","email":"zzelle@gmail.com","username":"cbrandily"},"change_message_id":"7223fa0cda0c15152f0a7049c0fa8a20b564ef8a","unresolved":false,"context_lines":[{"line_number":65,"context_line":"        self._child_process \u003d pm"},{"line_number":66,"context_line":""},{"line_number":67,"context_line":"    def cleanup_spawned_child(self):"},{"line_number":68,"context_line":"        self._child_process.disable()"},{"line_number":69,"context_line":""},{"line_number":70,"context_line":""},{"line_number":71,"context_line":"class DnsmasqFixture(DaemonFixture):"}],"source_content_type":"text/x-python","patch_set":1,"id":"ba3cc151_58c36889","line":68,"updated":"2015-07-08 13:35:15.000000000","message":"cleanup_spawn_child fails if _setUp fails before L65, i would prefer you check self._child_process to increase traceback readability","commit_id":"1e8549fcbd7b6aabec3d22a57c13b5be045da83c"},{"author":{"_account_id":5950,"name":"Ilya Shakhat","email":"shakhat@gmail.com","username":"shakhat"},"change_message_id":"52618292cd746040a85820199b33d991eab60ab0","unresolved":false,"context_lines":[{"line_number":65,"context_line":"        self._child_process \u003d pm"},{"line_number":66,"context_line":""},{"line_number":67,"context_line":"    def cleanup_spawned_child(self):"},{"line_number":68,"context_line":"        self._child_process.disable()"},{"line_number":69,"context_line":""},{"line_number":70,"context_line":""},{"line_number":71,"context_line":"class DnsmasqFixture(DaemonFixture):"}],"source_content_type":"text/x-python","patch_set":1,"id":"ba3cc151_ec263fb9","line":68,"in_reply_to":"ba3cc151_58c36889","updated":"2015-07-08 14:28:30.000000000","message":"Done","commit_id":"1e8549fcbd7b6aabec3d22a57c13b5be045da83c"},{"author":{"_account_id":8124,"name":"cbrandily","email":"zzelle@gmail.com","username":"cbrandily"},"change_message_id":"7223fa0cda0c15152f0a7049c0fa8a20b564ef8a","unresolved":false,"context_lines":[{"line_number":68,"context_line":"        self._child_process.disable()"},{"line_number":69,"context_line":""},{"line_number":70,"context_line":""},{"line_number":71,"context_line":"class DnsmasqFixture(DaemonFixture):"},{"line_number":72,"context_line":"    def __init__(self, namespace\u003dNone, network_id\u003dNone):"},{"line_number":73,"context_line":"        pid_file \u003d os.path.join("},{"line_number":74,"context_line":"            os.path.join(cfg.CONF.dhcp_confs, network_id), \u0027pid\u0027)"}],"source_content_type":"text/x-python","patch_set":1,"id":"ba3cc151_58da88e9","line":71,"updated":"2015-07-08 13:35:15.000000000","message":"not sure it\u0027s the right place to define such fixture","commit_id":"1e8549fcbd7b6aabec3d22a57c13b5be045da83c"},{"author":{"_account_id":5950,"name":"Ilya Shakhat","email":"shakhat@gmail.com","username":"shakhat"},"change_message_id":"52618292cd746040a85820199b33d991eab60ab0","unresolved":false,"context_lines":[{"line_number":68,"context_line":"        self._child_process.disable()"},{"line_number":69,"context_line":""},{"line_number":70,"context_line":""},{"line_number":71,"context_line":"class DnsmasqFixture(DaemonFixture):"},{"line_number":72,"context_line":"    def __init__(self, namespace\u003dNone, network_id\u003dNone):"},{"line_number":73,"context_line":"        pid_file \u003d os.path.join("},{"line_number":74,"context_line":"            os.path.join(cfg.CONF.dhcp_confs, network_id), \u0027pid\u0027)"}],"source_content_type":"text/x-python","patch_set":1,"id":"ba3cc151_ac78377f","line":71,"in_reply_to":"ba3cc151_58da88e9","updated":"2015-07-08 14:28:30.000000000","message":"decided to put it here because of size","commit_id":"1e8549fcbd7b6aabec3d22a57c13b5be045da83c"},{"author":{"_account_id":6788,"name":"Rossella Sblendido","email":"rsblendido@suse.com","username":"rossella-o"},"change_message_id":"58ec52a66c12702e1203dccd3e5c73df19944779","unresolved":false,"context_lines":[{"line_number":35,"context_line":"        self.addCleanup(self.cleanup_spawned_child)"},{"line_number":36,"context_line":"        self.spawn()"},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"    def make_cmdline(self, pid_file, uuid):"},{"line_number":39,"context_line":"        return [\u0027python\u0027, simple_daemon.__file__,"},{"line_number":40,"context_line":"                \u0027--uuid\u003d%s\u0027 % uuid,"},{"line_number":41,"context_line":"                \u0027--pid_file\u003d%s\u0027 % pid_file]"}],"source_content_type":"text/x-python","patch_set":4,"id":"9a41bdd9_67890f26","line":38,"updated":"2015-07-14 12:35:33.000000000","message":"mk_cmdline and _make_cmdline_callback seems an overkill, why don\u0027t you pass the callback cmdline in the constructor?","commit_id":"709397e2af5756a4ef6687365007671bcb153ad5"},{"author":{"_account_id":5950,"name":"Ilya Shakhat","email":"shakhat@gmail.com","username":"shakhat"},"change_message_id":"4a06478a1cf8beb502c7f024b9ab5fc7d65ee6ab","unresolved":false,"context_lines":[{"line_number":35,"context_line":"        self.addCleanup(self.cleanup_spawned_child)"},{"line_number":36,"context_line":"        self.spawn()"},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"    def make_cmdline(self, pid_file, uuid):"},{"line_number":39,"context_line":"        return [\u0027python\u0027, simple_daemon.__file__,"},{"line_number":40,"context_line":"                \u0027--uuid\u003d%s\u0027 % uuid,"},{"line_number":41,"context_line":"                \u0027--pid_file\u003d%s\u0027 % pid_file]"}],"source_content_type":"text/x-python","patch_set":4,"id":"9a41bdd9_f33dddbb","line":38,"in_reply_to":"9a41bdd9_67890f26","updated":"2015-07-14 13:31:50.000000000","message":"I wanted the fixture to be ready to use; e.g. DnsmasqFixture do not ask for command line, only for necessary parameters. Certainly this results in more code here, but less in the test case.","commit_id":"709397e2af5756a4ef6687365007671bcb153ad5"},{"author":{"_account_id":6788,"name":"Rossella Sblendido","email":"rsblendido@suse.com","username":"rossella-o"},"change_message_id":"3ab2d73b62f4f748e500dbc69036616f1ddd5b94","unresolved":false,"context_lines":[{"line_number":35,"context_line":"        self.addCleanup(self.cleanup_spawned_child)"},{"line_number":36,"context_line":"        self.spawn()"},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"    def make_cmdline(self, pid_file, uuid):"},{"line_number":39,"context_line":"        return [\u0027python\u0027, simple_daemon.__file__,"},{"line_number":40,"context_line":"                \u0027--uuid\u003d%s\u0027 % uuid,"},{"line_number":41,"context_line":"                \u0027--pid_file\u003d%s\u0027 % pid_file]"}],"source_content_type":"text/x-python","patch_set":4,"id":"9a41bdd9_de01346c","line":38,"in_reply_to":"9a41bdd9_f33dddbb","updated":"2015-07-16 16:45:18.000000000","message":"It\u0027s not ready to use because you have a constructor anyway. You are sparing 2 lines in the test (lines that would be simple parameters, nothing difficult to understand) and are adding 2 methods (\"make_cmdline\" and \"_make_cmdline_callback\") and 1 class here. I really can\u0027t see a good reason to do that.","commit_id":"709397e2af5756a4ef6687365007671bcb153ad5"},{"author":{"_account_id":6788,"name":"Rossella Sblendido","email":"rsblendido@suse.com","username":"rossella-o"},"change_message_id":"58ec52a66c12702e1203dccd3e5c73df19944779","unresolved":false,"context_lines":[{"line_number":63,"context_line":"            self._child_process.disable()"},{"line_number":64,"context_line":""},{"line_number":65,"context_line":""},{"line_number":66,"context_line":"class DnsmasqFixture(DaemonFixture):"},{"line_number":67,"context_line":"    def __init__(self, namespace\u003dNone, network_id\u003dNone):"},{"line_number":68,"context_line":"        pid_file \u003d os.path.join("},{"line_number":69,"context_line":"            os.path.join(cfg.CONF.dhcp_confs, network_id), \u0027pid\u0027)"}],"source_content_type":"text/x-python","patch_set":4,"id":"9a41bdd9_47716bdf","line":66,"updated":"2015-07-14 12:35:33.000000000","message":"If you follow my previous suggestions I think you can remove this class and use DaemonFixture in the test passing the proper param","commit_id":"709397e2af5756a4ef6687365007671bcb153ad5"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"2b173b00829d9ac3a4c9f76c6ffae96758656bbf","unresolved":false,"context_lines":[{"line_number":18,"context_line":"from neutron.agent.linux import external_process"},{"line_number":19,"context_line":"from neutron.tests.functional.agent.linux import simple_daemon"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"SERVICE_NAME \u003d \u0027test\u0027"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"class DaemonFixture(fixtures.Fixture):"}],"source_content_type":"text/x-python","patch_set":5,"id":"3a50d1a3_65feb8af","line":21,"updated":"2015-07-22 13:49:54.000000000","message":"do we need global?","commit_id":"5991ad0027e20414f1cad033bbe1f94953e656d3"},{"author":{"_account_id":7787,"name":"Kevin Benton","email":"kevin@benton.pub","username":"blak111"},"change_message_id":"da51c9f29b6b678d3f79009ead95e6e942e40c53","unresolved":false,"context_lines":[{"line_number":35,"context_line":"        self.addCleanup(self.cleanup_spawned_child)"},{"line_number":36,"context_line":"        self.spawn()"},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"    def make_cmdline(self, pid_file):"},{"line_number":39,"context_line":"        return [\u0027python\u0027, simple_daemon.__file__,"},{"line_number":40,"context_line":"                \u0027--uuid\u003d%s\u0027 % self.uuid,"},{"line_number":41,"context_line":"                \u0027--pid_file\u003d%s\u0027 % pid_file]"}],"source_content_type":"text/x-python","patch_set":5,"id":"3a50d1a3_7b4f626a","line":38,"updated":"2015-08-01 22:56:23.000000000","message":"+1. or leave it and throw a NotImplementedError()","commit_id":"5991ad0027e20414f1cad033bbe1f94953e656d3"},{"author":{"_account_id":6788,"name":"Rossella Sblendido","email":"rsblendido@suse.com","username":"rossella-o"},"change_message_id":"25eca5dfd0c8df28cd5931839fdcf6426946b71f","unresolved":false,"context_lines":[{"line_number":35,"context_line":"        self.addCleanup(self.cleanup_spawned_child)"},{"line_number":36,"context_line":"        self.spawn()"},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"    def make_cmdline(self, pid_file):"},{"line_number":39,"context_line":"        return [\u0027python\u0027, simple_daemon.__file__,"},{"line_number":40,"context_line":"                \u0027--uuid\u003d%s\u0027 % self.uuid,"},{"line_number":41,"context_line":"                \u0027--pid_file\u003d%s\u0027 % pid_file]"}],"source_content_type":"text/x-python","patch_set":5,"id":"9a41bdd9_3e570028","line":38,"updated":"2015-07-16 20:51:32.000000000","message":"see comment in the previous PS. DaemonFixture.make_cmdline is not used anywhere, another reason to remove it...","commit_id":"5991ad0027e20414f1cad033bbe1f94953e656d3"}],"neutron/tests/functional/agent/linux/independent_daemon.py":[{"author":{"_account_id":8124,"name":"cbrandily","email":"zzelle@gmail.com","username":"cbrandily"},"change_message_id":"7223fa0cda0c15152f0a7049c0fa8a20b564ef8a","unresolved":false,"context_lines":[{"line_number":20,"context_line":"DEVNULL \u003d object()"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"class Pidfile(object):"},{"line_number":24,"context_line":"    def __init__(self, pidfile, procname, uuid\u003dNone):"},{"line_number":25,"context_line":"        self.pidfile \u003d pidfile"},{"line_number":26,"context_line":"        self.procname \u003d procname"}],"source_content_type":"text/x-python","patch_set":1,"id":"ba3cc151_730c4dec","line":23,"updated":"2015-07-08 13:35:15.000000000","message":"duplicates neutron.agent.linux.daemon.Pidfile","commit_id":"1e8549fcbd7b6aabec3d22a57c13b5be045da83c"},{"author":{"_account_id":5950,"name":"Ilya Shakhat","email":"shakhat@gmail.com","username":"shakhat"},"change_message_id":"52618292cd746040a85820199b33d991eab60ab0","unresolved":false,"context_lines":[{"line_number":20,"context_line":"DEVNULL \u003d object()"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"class Pidfile(object):"},{"line_number":24,"context_line":"    def __init__(self, pidfile, procname, uuid\u003dNone):"},{"line_number":25,"context_line":"        self.pidfile \u003d pidfile"},{"line_number":26,"context_line":"        self.procname \u003d procname"}],"source_content_type":"text/x-python","patch_set":1,"id":"ba3cc151_ecc71f10","line":23,"in_reply_to":"ba3cc151_730c4dec","updated":"2015-07-08 14:28:30.000000000","message":"removed, see the last comment for reasoning of duplication","commit_id":"1e8549fcbd7b6aabec3d22a57c13b5be045da83c"},{"author":{"_account_id":7125,"name":"Alexander Ignatov","email":"aignatov@mirantis.com","username":"aignatov"},"change_message_id":"a4092bef03914e3246c7dd9c6fc82094a11c0324","unresolved":false,"context_lines":[{"line_number":35,"context_line":"        return self.pidfile"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"    def unlock(self):"},{"line_number":38,"context_line":"        if not not fcntl.flock(self.fd, fcntl.LOCK_UN):"},{"line_number":39,"context_line":"            raise IOError(_(\u0027Unable to unlock pid file\u0027))"},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"    def write(self, pid):"}],"source_content_type":"text/x-python","patch_set":1,"id":"ba3cc151_bd61463b","line":38,"updated":"2015-07-08 13:13:43.000000000","message":"Looks like double not","commit_id":"1e8549fcbd7b6aabec3d22a57c13b5be045da83c"},{"author":{"_account_id":5950,"name":"Ilya Shakhat","email":"shakhat@gmail.com","username":"shakhat"},"change_message_id":"52618292cd746040a85820199b33d991eab60ab0","unresolved":false,"context_lines":[{"line_number":35,"context_line":"        return self.pidfile"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"    def unlock(self):"},{"line_number":38,"context_line":"        if not not fcntl.flock(self.fd, fcntl.LOCK_UN):"},{"line_number":39,"context_line":"            raise IOError(_(\u0027Unable to unlock pid file\u0027))"},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"    def write(self, pid):"}],"source_content_type":"text/x-python","patch_set":1,"id":"ba3cc151_0c660351","line":38,"in_reply_to":"ba3cc151_bd61463b","updated":"2015-07-08 14:28:30.000000000","message":"hmmm, the same is in neutron.agent.linux.daemon.Pidfile","commit_id":"1e8549fcbd7b6aabec3d22a57c13b5be045da83c"},{"author":{"_account_id":8124,"name":"cbrandily","email":"zzelle@gmail.com","username":"cbrandily"},"change_message_id":"7223fa0cda0c15152f0a7049c0fa8a20b564ef8a","unresolved":false,"context_lines":[{"line_number":85,"context_line":"        except OSError:"},{"line_number":86,"context_line":"            sys.exit(1)"},{"line_number":87,"context_line":""},{"line_number":88,"context_line":"    def daemonize(self):"},{"line_number":89,"context_line":"        \"\"\"Daemonize process by doing Stevens double fork.\"\"\""},{"line_number":90,"context_line":"        # fork first time"},{"line_number":91,"context_line":"        self._fork()"}],"source_content_type":"text/x-python","patch_set":1,"id":"ba3cc151_534a6927","line":88,"updated":"2015-07-08 13:35:15.000000000","message":"duplicates neutron.agent.linux.daemon.Daemon.daemonize","commit_id":"1e8549fcbd7b6aabec3d22a57c13b5be045da83c"},{"author":{"_account_id":5950,"name":"Ilya Shakhat","email":"shakhat@gmail.com","username":"shakhat"},"change_message_id":"52618292cd746040a85820199b33d991eab60ab0","unresolved":false,"context_lines":[{"line_number":85,"context_line":"        except OSError:"},{"line_number":86,"context_line":"            sys.exit(1)"},{"line_number":87,"context_line":""},{"line_number":88,"context_line":"    def daemonize(self):"},{"line_number":89,"context_line":"        \"\"\"Daemonize process by doing Stevens double fork.\"\"\""},{"line_number":90,"context_line":"        # fork first time"},{"line_number":91,"context_line":"        self._fork()"}],"source_content_type":"text/x-python","patch_set":1,"id":"ba3cc151_8c24530d","line":88,"in_reply_to":"ba3cc151_534a6927","updated":"2015-07-08 14:28:30.000000000","message":"class neutron.agent.linux.daemon.Daemon depends on external libs (ex. oslo.log) and this one is not. The independence is needed for a case when tests are in virtualenv and the daemon is run via sudo.","commit_id":"1e8549fcbd7b6aabec3d22a57c13b5be045da83c"}],"neutron/tests/functional/cmd/test_netns_cleanup.py":[{"author":{"_account_id":6788,"name":"Rossella Sblendido","email":"rsblendido@suse.com","username":"rossella-o"},"change_message_id":"58ec52a66c12702e1203dccd3e5c73df19944779","unresolved":false,"context_lines":[{"line_number":57,"context_line":"            dhcp_namespace, network_id\u003dnetwork_id))"},{"line_number":58,"context_line":""},{"line_number":59,"context_line":"        # make sure the daemon is really started"},{"line_number":60,"context_line":"        self.assertTrue(dhcp_process._child_process.active)"},{"line_number":61,"context_line":""},{"line_number":62,"context_line":"        l3_namespace \u003d self.useFixture("},{"line_number":63,"context_line":"            net_helpers.NamespaceFixture(l3_agent.NS_PREFIX)).name"}],"source_content_type":"text/x-python","patch_set":4,"id":"9a41bdd9_624edd70","line":60,"updated":"2015-07-14 12:35:33.000000000","message":"this might fail, better using:\n\nfrom neutron.agent.linux import utils as agent_utils\n\nagent_utils.wait_until_true(dhcp_process._child_process.active)","commit_id":"709397e2af5756a4ef6687365007671bcb153ad5"},{"author":{"_account_id":5950,"name":"Ilya Shakhat","email":"shakhat@gmail.com","username":"shakhat"},"change_message_id":"4a06478a1cf8beb502c7f024b9ab5fc7d65ee6ab","unresolved":false,"context_lines":[{"line_number":57,"context_line":"            dhcp_namespace, network_id\u003dnetwork_id))"},{"line_number":58,"context_line":""},{"line_number":59,"context_line":"        # make sure the daemon is really started"},{"line_number":60,"context_line":"        self.assertTrue(dhcp_process._child_process.active)"},{"line_number":61,"context_line":""},{"line_number":62,"context_line":"        l3_namespace \u003d self.useFixture("},{"line_number":63,"context_line":"            net_helpers.NamespaceFixture(l3_agent.NS_PREFIX)).name"}],"source_content_type":"text/x-python","patch_set":4,"id":"9a41bdd9_b3b51532","line":60,"in_reply_to":"9a41bdd9_624edd70","updated":"2015-07-14 13:31:50.000000000","message":"Fixed. Thanks!","commit_id":"709397e2af5756a4ef6687365007671bcb153ad5"},{"author":{"_account_id":7787,"name":"Kevin Benton","email":"kevin@benton.pub","username":"blak111"},"change_message_id":"da51c9f29b6b678d3f79009ead95e6e942e40c53","unresolved":false,"context_lines":[{"line_number":47,"context_line":"        self.config_parse(conf\u003dself.conf, args\u003dargs)"},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"    def test_cleanup_network_namespaces_cleans_dhcp_and_l3_namespaces(self):"},{"line_number":50,"context_line":"        br_int \u003d self.useFixture(net_helpers.OVSBridgeFixture()).bridge"},{"line_number":51,"context_line":"        self.conf.set_override(\u0027ovs_integration_bridge\u0027, br_int.br_name)"},{"line_number":52,"context_line":""},{"line_number":53,"context_line":"        dhcp_namespace \u003d self.useFixture("}],"source_content_type":"text/x-python","patch_set":5,"id":"3a50d1a3_5b4ce675","line":50,"updated":"2015-08-01 22:56:23.000000000","message":"+1. I don\u0027t see where this being passed to the dnsmasq process","commit_id":"5991ad0027e20414f1cad033bbe1f94953e656d3"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"2b173b00829d9ac3a4c9f76c6ffae96758656bbf","unresolved":false,"context_lines":[{"line_number":47,"context_line":"        self.config_parse(conf\u003dself.conf, args\u003dargs)"},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"    def test_cleanup_network_namespaces_cleans_dhcp_and_l3_namespaces(self):"},{"line_number":50,"context_line":"        br_int \u003d self.useFixture(net_helpers.OVSBridgeFixture()).bridge"},{"line_number":51,"context_line":"        self.conf.set_override(\u0027ovs_integration_bridge\u0027, br_int.br_name)"},{"line_number":52,"context_line":""},{"line_number":53,"context_line":"        dhcp_namespace \u003d self.useFixture("}],"source_content_type":"text/x-python","patch_set":5,"id":"3a50d1a3_05d5741a","line":50,"updated":"2015-07-22 13:49:54.000000000","message":"why is this needed?","commit_id":"5991ad0027e20414f1cad033bbe1f94953e656d3"},{"author":{"_account_id":6788,"name":"Rossella Sblendido","email":"rsblendido@suse.com","username":"rossella-o"},"change_message_id":"25eca5dfd0c8df28cd5931839fdcf6426946b71f","unresolved":false,"context_lines":[{"line_number":77,"context_line":"        namespaces_now \u003d ip_lib.IPWrapper.get_namespaces()"},{"line_number":78,"context_line":"        self.assertNotIn(l3_namespace, namespaces_now)"},{"line_number":79,"context_line":"        self.assertNotIn(dhcp_namespace, namespaces_now)"},{"line_number":80,"context_line":"        self.assertFalse(dhcp_process._child_process.active)"}],"source_content_type":"text/x-python","patch_set":5,"id":"9a41bdd9_c5215cb6","line":80,"updated":"2015-07-16 20:51:32.000000000","message":"sorry I should have mentioned it explicitly in my previous review...here you could have the same problem as in line 61, better using wait_until_true .","commit_id":"5991ad0027e20414f1cad033bbe1f94953e656d3"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"2b173b00829d9ac3a4c9f76c6ffae96758656bbf","unresolved":false,"context_lines":[{"line_number":77,"context_line":"        namespaces_now \u003d ip_lib.IPWrapper.get_namespaces()"},{"line_number":78,"context_line":"        self.assertNotIn(l3_namespace, namespaces_now)"},{"line_number":79,"context_line":"        self.assertNotIn(dhcp_namespace, namespaces_now)"},{"line_number":80,"context_line":"        self.assertFalse(dhcp_process._child_process.active)"}],"source_content_type":"text/x-python","patch_set":5,"id":"3a50d1a3_e5288835","line":80,"in_reply_to":"9a41bdd9_c5215cb6","updated":"2015-07-22 13:49:54.000000000","message":"+1","commit_id":"5991ad0027e20414f1cad033bbe1f94953e656d3"}]}
