)]}'
{".pylintrc":[{"author":{"_account_id":23804,"name":"Daniel Alvarez","email":"dalvarez@redhat.com","username":"dalvarez"},"change_message_id":"7dbca5e995cba1b20ef1d05ed649dd78a765b687","unresolved":false,"context_lines":[{"line_number":107,"context_line":""},{"line_number":108,"context_line":"[TYPECHECK]"},{"line_number":109,"context_line":"# List of module names for which member attributes should not be checked"},{"line_number":110,"context_line":"ignored-modules\u003dsix.moves,_MovedItems,distutils"},{"line_number":111,"context_line":""},{"line_number":112,"context_line":"[REPORTS]"},{"line_number":113,"context_line":"# Tells whether to display a full report or only the messages"}],"source_content_type":"application/octet-stream","patch_set":17,"id":"da36d5c6_f3a8d2dd","line":110,"range":{"start_line":110,"start_character":38,"end_line":110,"end_character":47},"updated":"2017-02-21 17:16:01.000000000","message":"While running tox -epep8, the following error popped up and I had to add it to the ignored modules:\n************* Module neutron.agent.metadata.namespace_proxy\nE: 15, 0: No name \u0027spawn\u0027 in module \u0027distutils\u0027 (no-name-in-module)","commit_id":"dc66be07a57a26a21306c4308f403fb9072453bd"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"907c4d88fd7c3c2f7df7398faf6d6b06db9a7561","unresolved":false,"context_lines":[{"line_number":107,"context_line":""},{"line_number":108,"context_line":"[TYPECHECK]"},{"line_number":109,"context_line":"# List of module names for which member attributes should not be checked"},{"line_number":110,"context_line":"ignored-modules\u003dsix.moves,_MovedItems,distutils"},{"line_number":111,"context_line":""},{"line_number":112,"context_line":"[REPORTS]"},{"line_number":113,"context_line":"# Tells whether to display a full report or only the messages"}],"source_content_type":"application/octet-stream","patch_set":23,"id":"ba2be162_33fa8143","line":110,"range":{"start_line":110,"start_character":37,"end_line":110,"end_character":47},"updated":"2017-03-01 17:04:36.000000000","message":"any ideas why it\u0027s needed? what\u0027s so special about the library?","commit_id":"0355a17c2a36cfb622fcd58767e2cdb630c9f17d"},{"author":{"_account_id":23804,"name":"Daniel Alvarez","email":"dalvarez@redhat.com","username":"dalvarez"},"change_message_id":"6cefc20d2de4ab1b9e31b6a11598b24f998d03da","unresolved":false,"context_lines":[{"line_number":107,"context_line":""},{"line_number":108,"context_line":"[TYPECHECK]"},{"line_number":109,"context_line":"# List of module names for which member attributes should not be checked"},{"line_number":110,"context_line":"ignored-modules\u003dsix.moves,_MovedItems,distutils"},{"line_number":111,"context_line":""},{"line_number":112,"context_line":"[REPORTS]"},{"line_number":113,"context_line":"# Tells whether to display a full report or only the messages"}],"source_content_type":"application/octet-stream","patch_set":23,"id":"ba2be162_f63450fc","line":110,"range":{"start_line":110,"start_character":37,"end_line":110,"end_character":47},"in_reply_to":"ba2be162_33fa8143","updated":"2017-03-01 18:14:11.000000000","message":"No idea, I found that there were some other projects that also added it to the ignored-modules as well as six.moves. I didn\u0027t investigate the reason. I\u0027ll try to have a look at it though. However, as you correctly pointed out, I don\u0027t need the find_executable function so we don\u0027t need this either.","commit_id":"0355a17c2a36cfb622fcd58767e2cdb630c9f17d"}],"/COMMIT_MSG":[{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"208bd64db5993b83e939ae9782ed07604f61d514","unresolved":false,"context_lines":[{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Due to the high memory footprint of current ns-metadata-proxy, this"},{"line_number":10,"context_line":"patch replaces current python implementation by the use of haproxy."},{"line_number":11,"context_line":"This patch creates the right config file for haproxy and replaces the"},{"line_number":12,"context_line":"current python process image by haproxy by calling execl() thus,"},{"line_number":13,"context_line":"maintaing its PID so that it can still be tracked by process monitor."},{"line_number":14,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":13,"id":"da36d5c6_f79f22b2","line":11,"range":{"start_line":11,"start_character":23,"end_line":11,"end_character":28},"updated":"2017-02-19 05:49:31.000000000","message":"i think that you could drop the right here.","commit_id":"ec1ed3e6688efaec742dded4bcf644d216f5bd88"},{"author":{"_account_id":23804,"name":"Daniel Alvarez","email":"dalvarez@redhat.com","username":"dalvarez"},"change_message_id":"e00d49d7f1fdfb73d6835656f1de83d05582b59f","unresolved":false,"context_lines":[{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Due to the high memory footprint of current ns-metadata-proxy, this"},{"line_number":10,"context_line":"patch replaces current python implementation by the use of haproxy."},{"line_number":11,"context_line":"This patch creates the right config file for haproxy and replaces the"},{"line_number":12,"context_line":"current python process image by haproxy by calling execl() thus,"},{"line_number":13,"context_line":"maintaing its PID so that it can still be tracked by process monitor."},{"line_number":14,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":13,"id":"da36d5c6_d65da0ea","line":11,"range":{"start_line":11,"start_character":23,"end_line":11,"end_character":28},"in_reply_to":"da36d5c6_f79f22b2","updated":"2017-02-20 20:34:55.000000000","message":"Done","commit_id":"ec1ed3e6688efaec742dded4bcf644d216f5bd88"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"208bd64db5993b83e939ae9782ed07604f61d514","unresolved":false,"context_lines":[{"line_number":15,"context_line":"According to /proc/\u003cpid\u003e/smaps, it goes down from ~50MB to ~1.5MB"},{"line_number":16,"context_line":"haproxy is added to bindep in order to ensure that it\u0027s installed."},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"Current patch is based on the work previously done in:"},{"line_number":19,"context_line":"https://review.openstack.org/#/c/390565/"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"Depends-On: I36a5531cacc21c0d4bb7f20d4bec6da65d04c262"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":13,"id":"da36d5c6_97b98631","line":18,"updated":"2017-02-19 05:49:31.000000000","message":"Do you have any numbers with the memory delta?","commit_id":"ec1ed3e6688efaec742dded4bcf644d216f5bd88"},{"author":{"_account_id":23804,"name":"Daniel Alvarez","email":"dalvarez@redhat.com","username":"dalvarez"},"change_message_id":"e00d49d7f1fdfb73d6835656f1de83d05582b59f","unresolved":false,"context_lines":[{"line_number":15,"context_line":"According to /proc/\u003cpid\u003e/smaps, it goes down from ~50MB to ~1.5MB"},{"line_number":16,"context_line":"haproxy is added to bindep in order to ensure that it\u0027s installed."},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"Current patch is based on the work previously done in:"},{"line_number":19,"context_line":"https://review.openstack.org/#/c/390565/"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"Depends-On: I36a5531cacc21c0d4bb7f20d4bec6da65d04c262"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":13,"id":"da36d5c6_565370e1","line":18,"in_reply_to":"da36d5c6_97b98631","updated":"2017-02-20 20:34:55.000000000","message":"In my devstack env, with just a single instance of metadata proxy running and using this tool [0], old instance is 50.4MB and haproxy is 1.5MB. Of course, as more instances are running, python instances won\u0027t be 50MB each since they\u0027d share a lot of libraries and the gain won\u0027t be that high.\n[0] https://github.com/mangelajo/memexplore","commit_id":"ec1ed3e6688efaec742dded4bcf644d216f5bd88"}],"bindep.txt":[{"author":{"_account_id":7787,"name":"Kevin Benton","email":"kevin@benton.pub","username":"blak111"},"change_message_id":"01dc8d1d06ba0f1ec3a20aa4e9dcc024470f6179","unresolved":false,"context_lines":[{"line_number":8,"context_line":"# OpenStack infra that need these like"},{"line_number":9,"context_line":"# periodic-neutron-py27-with-oslo-master and"},{"line_number":10,"context_line":"# periodic-neutron-py35-with-neutron-lib-master."},{"line_number":11,"context_line":"haproxy"},{"line_number":12,"context_line":"libmysqlclient-dev [platform:dpkg test]"},{"line_number":13,"context_line":"mysql [platform:rpm test]"},{"line_number":14,"context_line":"mysql-client [platform:dpkg test]"}],"source_content_type":"text/plain","patch_set":5,"id":"fa31d9ce_143fc324","line":11,"updated":"2017-02-14 12:13:28.000000000","message":"Anything we need to do to notify the wider community about this? Ok from Ihar would be good here.","commit_id":"17f1336922055540d96c2e460eb2be43951e19cf"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"208bd64db5993b83e939ae9782ed07604f61d514","unresolved":false,"context_lines":[{"line_number":8,"context_line":"# OpenStack infra that need these like"},{"line_number":9,"context_line":"# periodic-neutron-py27-with-oslo-master and"},{"line_number":10,"context_line":"# periodic-neutron-py35-with-neutron-lib-master."},{"line_number":11,"context_line":"haproxy"},{"line_number":12,"context_line":"libmysqlclient-dev [platform:dpkg test]"},{"line_number":13,"context_line":"mysql [platform:rpm test]"},{"line_number":14,"context_line":"mysql-client [platform:dpkg test]"}],"source_content_type":"text/plain","patch_set":13,"id":"da36d5c6_37aa9ad5","line":11,"updated":"2017-02-19 05:49:31.000000000","message":"this is a new dependency so you should have an UpgradeImpact in the commit message","commit_id":"ec1ed3e6688efaec742dded4bcf644d216f5bd88"},{"author":{"_account_id":23804,"name":"Daniel Alvarez","email":"dalvarez@redhat.com","username":"dalvarez"},"change_message_id":"e00d49d7f1fdfb73d6835656f1de83d05582b59f","unresolved":false,"context_lines":[{"line_number":8,"context_line":"# OpenStack infra that need these like"},{"line_number":9,"context_line":"# periodic-neutron-py27-with-oslo-master and"},{"line_number":10,"context_line":"# periodic-neutron-py35-with-neutron-lib-master."},{"line_number":11,"context_line":"haproxy"},{"line_number":12,"context_line":"libmysqlclient-dev [platform:dpkg test]"},{"line_number":13,"context_line":"mysql [platform:rpm test]"},{"line_number":14,"context_line":"mysql-client [platform:dpkg test]"}],"source_content_type":"text/plain","patch_set":13,"id":"da36d5c6_933fbb24","line":11,"in_reply_to":"da36d5c6_37aa9ad5","updated":"2017-02-20 20:34:55.000000000","message":"Done","commit_id":"ec1ed3e6688efaec742dded4bcf644d216f5bd88"}],"etc/neutron/rootwrap.d/dhcp.filters":[{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"907c4d88fd7c3c2f7df7398faf6d6b06db9a7561","unresolved":false,"context_lines":[{"line_number":25,"context_line":"# haproxy"},{"line_number":26,"context_line":"haproxy: RegExpFilter, haproxy, root, haproxy, -f, .*"},{"line_number":27,"context_line":"kill_haproxy: KillFilter, root, haproxy, -15, -9, -HUP"},{"line_number":28,"context_line":"# RHEL invocation of the metadata proxy will report /usr/bin/python"},{"line_number":29,"context_line":"kill_metadata: KillFilter, root, python, -9"},{"line_number":30,"context_line":"kill_metadata7: KillFilter, root, python2.7, -9"},{"line_number":31,"context_line":"kill_metadata35: KillFilter, root, python3.5, -9"}],"source_content_type":"application/octet-stream","patch_set":23,"id":"ba2be162_13abbd1e","line":28,"updated":"2017-03-01 17:04:36.000000000","message":"should we mark those filters at lines 29-31 for cleanup after some time?","commit_id":"0355a17c2a36cfb622fcd58767e2cdb630c9f17d"},{"author":{"_account_id":23804,"name":"Daniel Alvarez","email":"dalvarez@redhat.com","username":"dalvarez"},"change_message_id":"6cefc20d2de4ab1b9e31b6a11598b24f998d03da","unresolved":false,"context_lines":[{"line_number":25,"context_line":"# haproxy"},{"line_number":26,"context_line":"haproxy: RegExpFilter, haproxy, root, haproxy, -f, .*"},{"line_number":27,"context_line":"kill_haproxy: KillFilter, root, haproxy, -15, -9, -HUP"},{"line_number":28,"context_line":"# RHEL invocation of the metadata proxy will report /usr/bin/python"},{"line_number":29,"context_line":"kill_metadata: KillFilter, root, python, -9"},{"line_number":30,"context_line":"kill_metadata7: KillFilter, root, python2.7, -9"},{"line_number":31,"context_line":"kill_metadata35: KillFilter, root, python3.5, -9"}],"source_content_type":"application/octet-stream","patch_set":23,"id":"ba2be162_56b19c8e","line":28,"in_reply_to":"ba2be162_13abbd1e","updated":"2017-03-01 18:14:11.000000000","message":"Done","commit_id":"0355a17c2a36cfb622fcd58767e2cdb630c9f17d"}],"etc/neutron/rootwrap.d/l3.filters":[{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"907c4d88fd7c3c2f7df7398faf6d6b06db9a7561","unresolved":false,"context_lines":[{"line_number":19,"context_line":"# haproxy"},{"line_number":20,"context_line":"haproxy: RegExpFilter, haproxy, root, haproxy, -f, .*"},{"line_number":21,"context_line":"kill_haproxy: KillFilter, root, haproxy, -15, -9, -HUP"},{"line_number":22,"context_line":"# RHEL invocation of the metadata proxy will report /usr/bin/python"},{"line_number":23,"context_line":"kill_metadata: KillFilter, root, python, -15, -9"},{"line_number":24,"context_line":"kill_metadata7: KillFilter, root, python2.7, -15, -9"},{"line_number":25,"context_line":"kill_metadata35: KillFilter, root, python3.5, -15, -9"}],"source_content_type":"application/octet-stream","patch_set":23,"id":"ba2be162_b349118e","line":22,"updated":"2017-03-01 17:04:36.000000000","message":"same question for lines 32-25. Should we eventually clean them up?","commit_id":"0355a17c2a36cfb622fcd58767e2cdb630c9f17d"},{"author":{"_account_id":23804,"name":"Daniel Alvarez","email":"dalvarez@redhat.com","username":"dalvarez"},"change_message_id":"6cefc20d2de4ab1b9e31b6a11598b24f998d03da","unresolved":false,"context_lines":[{"line_number":19,"context_line":"# haproxy"},{"line_number":20,"context_line":"haproxy: RegExpFilter, haproxy, root, haproxy, -f, .*"},{"line_number":21,"context_line":"kill_haproxy: KillFilter, root, haproxy, -15, -9, -HUP"},{"line_number":22,"context_line":"# RHEL invocation of the metadata proxy will report /usr/bin/python"},{"line_number":23,"context_line":"kill_metadata: KillFilter, root, python, -15, -9"},{"line_number":24,"context_line":"kill_metadata7: KillFilter, root, python2.7, -15, -9"},{"line_number":25,"context_line":"kill_metadata35: KillFilter, root, python3.5, -15, -9"}],"source_content_type":"application/octet-stream","patch_set":23,"id":"ba2be162_76ace035","line":22,"in_reply_to":"ba2be162_b349118e","updated":"2017-03-01 18:14:11.000000000","message":"Done","commit_id":"0355a17c2a36cfb622fcd58767e2cdb630c9f17d"}],"neutron/agent/common/config.py":[{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"907c4d88fd7c3c2f7df7398faf6d6b06db9a7561","unresolved":false,"context_lines":[{"line_number":122,"context_line":"            log_dir \u003d os.path.dirname(conf.log_file)"},{"line_number":123,"context_line":"        if log_dir:"},{"line_number":124,"context_line":"            cmd_args.append(\u0027--log-dir\u003d%s\u0027 % log_dir)"},{"line_number":125,"context_line":"        if kwargs.get(\u0027metadata_proxy_watch_log\u0027) is False:"},{"line_number":126,"context_line":"            cmd_args.append(\u0027--nometadata_proxy_watch_log\u0027)"},{"line_number":127,"context_line":"    else:"},{"line_number":128,"context_line":"        if conf.use_syslog:"}],"source_content_type":"text/x-python","patch_set":23,"id":"ba2be162_d66833bd","side":"PARENT","line":125,"range":{"start_line":125,"start_character":23,"end_line":125,"end_character":47},"updated":"2017-03-01 17:04:36.000000000","message":"so what about that config option? should we also kill it now that it\u0027s not used? is it safe? (I assume yes because now it\u0027s haproxy that handles logging; btw should we enable logging somehow for haproxy for in case we need to debug it later?). I still see it defined in one place in code.","commit_id":"67da6a31224adf7d773805096b5e6ea07329bdc7"},{"author":{"_account_id":23804,"name":"Daniel Alvarez","email":"dalvarez@redhat.com","username":"dalvarez"},"change_message_id":"6cefc20d2de4ab1b9e31b6a11598b24f998d03da","unresolved":false,"context_lines":[{"line_number":122,"context_line":"            log_dir \u003d os.path.dirname(conf.log_file)"},{"line_number":123,"context_line":"        if log_dir:"},{"line_number":124,"context_line":"            cmd_args.append(\u0027--log-dir\u003d%s\u0027 % log_dir)"},{"line_number":125,"context_line":"        if kwargs.get(\u0027metadata_proxy_watch_log\u0027) is False:"},{"line_number":126,"context_line":"            cmd_args.append(\u0027--nometadata_proxy_watch_log\u0027)"},{"line_number":127,"context_line":"    else:"},{"line_number":128,"context_line":"        if conf.use_syslog:"}],"source_content_type":"text/x-python","patch_set":23,"id":"ba2be162_33f7daf6","side":"PARENT","line":125,"range":{"start_line":125,"start_character":23,"end_line":125,"end_character":47},"in_reply_to":"ba2be162_d66833bd","updated":"2017-03-01 18:14:11.000000000","message":"Done","commit_id":"67da6a31224adf7d773805096b5e6ea07329bdc7"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"b0b070bcd6e5a77239032c46bed427e5d7a503f9","unresolved":false,"context_lines":[{"line_number":122,"context_line":"            log_dir \u003d os.path.dirname(conf.log_file)"},{"line_number":123,"context_line":"        if log_dir:"},{"line_number":124,"context_line":"            cmd_args.append(\u0027--log-dir\u003d%s\u0027 % log_dir)"},{"line_number":125,"context_line":"        if kwargs.get(\u0027metadata_proxy_watch_log\u0027) is False:"},{"line_number":126,"context_line":"            cmd_args.append(\u0027--nometadata_proxy_watch_log\u0027)"},{"line_number":127,"context_line":"    else:"},{"line_number":128,"context_line":"        if conf.use_syslog:"}],"source_content_type":"text/x-python","patch_set":33,"id":"9a30ddce_d620189e","side":"PARENT","line":125,"updated":"2017-03-08 13:09:46.000000000","message":"not clear why this is removed","commit_id":"67da6a31224adf7d773805096b5e6ea07329bdc7"},{"author":{"_account_id":23804,"name":"Daniel Alvarez","email":"dalvarez@redhat.com","username":"dalvarez"},"change_message_id":"0acb99aed5547eea2062c3c2fcd7e24b2b567e61","unresolved":false,"context_lines":[{"line_number":122,"context_line":"            log_dir \u003d os.path.dirname(conf.log_file)"},{"line_number":123,"context_line":"        if log_dir:"},{"line_number":124,"context_line":"            cmd_args.append(\u0027--log-dir\u003d%s\u0027 % log_dir)"},{"line_number":125,"context_line":"        if kwargs.get(\u0027metadata_proxy_watch_log\u0027) is False:"},{"line_number":126,"context_line":"            cmd_args.append(\u0027--nometadata_proxy_watch_log\u0027)"},{"line_number":127,"context_line":"    else:"},{"line_number":128,"context_line":"        if conf.use_syslog:"}],"source_content_type":"text/x-python","patch_set":33,"id":"9a30ddce_801bb51a","side":"PARENT","line":125,"in_reply_to":"9a30ddce_d620189e","updated":"2017-03-08 15:17:21.000000000","message":"haproxy will log to UNIX domain socket now so it\u0027s not neutron anymore the one logging and using WatchedFileHandler","commit_id":"67da6a31224adf7d773805096b5e6ea07329bdc7"}],"neutron/agent/linux/external_process.py":[{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"907c4d88fd7c3c2f7df7398faf6d6b06db9a7561","unresolved":false,"context_lines":[{"line_number":142,"context_line":"        return self.uuid in cmdline if cmdline else False"},{"line_number":143,"context_line":""},{"line_number":144,"context_line":"    @property"},{"line_number":145,"context_line":"    def cmdline(self):"},{"line_number":146,"context_line":"        pid \u003d self.pid"},{"line_number":147,"context_line":"        if not pid:"},{"line_number":148,"context_line":"            return"}],"source_content_type":"text/x-python","patch_set":23,"id":"ba2be162_d6a3d39c","line":145,"updated":"2017-03-01 17:04:36.000000000","message":"I don\u0027t see a test that would target this new property.","commit_id":"0355a17c2a36cfb622fcd58767e2cdb630c9f17d"},{"author":{"_account_id":23804,"name":"Daniel Alvarez","email":"dalvarez@redhat.com","username":"dalvarez"},"change_message_id":"6cefc20d2de4ab1b9e31b6a11598b24f998d03da","unresolved":false,"context_lines":[{"line_number":142,"context_line":"        return self.uuid in cmdline if cmdline else False"},{"line_number":143,"context_line":""},{"line_number":144,"context_line":"    @property"},{"line_number":145,"context_line":"    def cmdline(self):"},{"line_number":146,"context_line":"        pid \u003d self.pid"},{"line_number":147,"context_line":"        if not pid:"},{"line_number":148,"context_line":"            return"}],"source_content_type":"text/x-python","patch_set":23,"id":"ba2be162_96c5d43d","line":145,"in_reply_to":"ba2be162_d6a3d39c","updated":"2017-03-01 18:14:11.000000000","message":"Done","commit_id":"0355a17c2a36cfb622fcd58767e2cdb630c9f17d"}],"neutron/agent/metadata/driver.py":[{"author":{"_account_id":7787,"name":"Kevin Benton","email":"kevin@benton.pub","username":"blak111"},"change_message_id":"01dc8d1d06ba0f1ec3a20aa4e9dcc024470f6179","unresolved":false,"context_lines":[{"line_number":138,"context_line":"        pm.disable()"},{"line_number":139,"context_line":"        # Delete config file if it exists"},{"line_number":140,"context_line":"        cfg_dir \u003d conf.state_path + \"/\" + namespace_proxy.PROXY_CONFIG_DIR"},{"line_number":141,"context_line":"        cfg_path \u003d os.path.join(cfg_dir, uuid + \".conf\")"},{"line_number":142,"context_line":"        try:"},{"line_number":143,"context_line":"            os.unlink(cfg_path)"},{"line_number":144,"context_line":"        except OSError as ex:"}],"source_content_type":"text/x-python","patch_set":5,"id":"fa31d9ce_749d5fbb","line":141,"updated":"2017-02-14 12:13:28.000000000","message":"Probably shouldn\u0027t partially build a path by hand.\n\ncfg_path \u003d os.path.join(conf.state_path, namespace_proxy.PROXY_CONFIG_DIR, uuid + \".conf\")","commit_id":"17f1336922055540d96c2e460eb2be43951e19cf"},{"author":{"_account_id":23804,"name":"Daniel Alvarez","email":"dalvarez@redhat.com","username":"dalvarez"},"change_message_id":"7ec240ff26a13095ee5557b263b318b26a4ffe4b","unresolved":false,"context_lines":[{"line_number":138,"context_line":"        pm.disable()"},{"line_number":139,"context_line":"        # Delete config file if it exists"},{"line_number":140,"context_line":"        cfg_dir \u003d conf.state_path + \"/\" + namespace_proxy.PROXY_CONFIG_DIR"},{"line_number":141,"context_line":"        cfg_path \u003d os.path.join(cfg_dir, uuid + \".conf\")"},{"line_number":142,"context_line":"        try:"},{"line_number":143,"context_line":"            os.unlink(cfg_path)"},{"line_number":144,"context_line":"        except OSError as ex:"}],"source_content_type":"text/x-python","patch_set":5,"id":"fa31d9ce_bf388fa1","line":141,"in_reply_to":"fa31d9ce_749d5fbb","updated":"2017-02-14 16:07:49.000000000","message":"Done","commit_id":"17f1336922055540d96c2e460eb2be43951e19cf"},{"author":{"_account_id":8788,"name":"Miguel Angel Ajo","email":"mangelajo@redhat.com","username":"mangelajo"},"change_message_id":"a3d0039ae393b19e1c6977d2d891ae54c76b5c86","unresolved":false,"context_lines":[{"line_number":137,"context_line":"        pm \u003d cls._get_metadata_proxy_process_manager(uuid, conf)"},{"line_number":138,"context_line":"        pm.disable()"},{"line_number":139,"context_line":"        # Delete config file if it exists"},{"line_number":140,"context_line":"        cfg_path \u003d os.path.join(conf.state_path,"},{"line_number":141,"context_line":"                                namespace_proxy.PROXY_CONFIG_DIR,"},{"line_number":142,"context_line":"                                uuid + \".conf\")"},{"line_number":143,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":11,"id":"fa31d9ce_176ad41a","line":140,"updated":"2017-02-17 08:27:09.000000000","message":"I suggest we move this code L140-L150  by moving all this to a method in namespace_proxy (cleanup_config_file or something like that)\n\nThere we also have the knowledge about creation, and the constant, so we keep it all together. :)","commit_id":"cbb22eb0fec47a1ed0faa2c4707c673a6dd0df88"},{"author":{"_account_id":23804,"name":"Daniel Alvarez","email":"dalvarez@redhat.com","username":"dalvarez"},"change_message_id":"69a6ff2fc9a279f6be7509510a33f8351c0b1def","unresolved":false,"context_lines":[{"line_number":137,"context_line":"        pm \u003d cls._get_metadata_proxy_process_manager(uuid, conf)"},{"line_number":138,"context_line":"        pm.disable()"},{"line_number":139,"context_line":"        # Delete config file if it exists"},{"line_number":140,"context_line":"        cfg_path \u003d os.path.join(conf.state_path,"},{"line_number":141,"context_line":"                                namespace_proxy.PROXY_CONFIG_DIR,"},{"line_number":142,"context_line":"                                uuid + \".conf\")"},{"line_number":143,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":11,"id":"fa31d9ce_4903cb0f","line":140,"in_reply_to":"fa31d9ce_176ad41a","updated":"2017-02-17 11:56:05.000000000","message":"Done","commit_id":"cbb22eb0fec47a1ed0faa2c4707c673a6dd0df88"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"50fcb53cea44f1809910f608917953d94974fa40","unresolved":false,"context_lines":[{"line_number":161,"context_line":"        pm.disable()"},{"line_number":162,"context_line":""},{"line_number":163,"context_line":"        # Delete metadata proxy config file"},{"line_number":164,"context_line":"        namespace_proxy.cleanup_config_file(uuid)"},{"line_number":165,"context_line":""},{"line_number":166,"context_line":"        cls.monitors.pop(uuid, None)"},{"line_number":167,"context_line":""}],"source_content_type":"text/x-python","patch_set":16,"id":"da36d5c6_6737dcb0","line":164,"updated":"2017-02-20 21:46:46.000000000","message":"It will be better to pass down the cfg.CONF.state_path here to make it explicit for this case and remove the default parameter as it\u0027s currently always used with the default.","commit_id":"8549504312ac7e4b038384a86497066dbbb02168"},{"author":{"_account_id":23804,"name":"Daniel Alvarez","email":"dalvarez@redhat.com","username":"dalvarez"},"change_message_id":"951186c5a897524c619ca4000a06225fe2ab3061","unresolved":false,"context_lines":[{"line_number":161,"context_line":"        pm.disable()"},{"line_number":162,"context_line":""},{"line_number":163,"context_line":"        # Delete metadata proxy config file"},{"line_number":164,"context_line":"        namespace_proxy.cleanup_config_file(uuid)"},{"line_number":165,"context_line":""},{"line_number":166,"context_line":"        cls.monitors.pop(uuid, None)"},{"line_number":167,"context_line":""}],"source_content_type":"text/x-python","patch_set":16,"id":"da36d5c6_1f972d91","line":164,"in_reply_to":"da36d5c6_6737dcb0","updated":"2017-02-21 18:10:47.000000000","message":"Done","commit_id":"8549504312ac7e4b038384a86497066dbbb02168"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"9904175e062d63f7fe54d7e194599b4881a22e19","unresolved":false,"context_lines":[{"line_number":105,"context_line":"            metadata_proxy_socket \u003d conf.metadata_proxy_socket"},{"line_number":106,"context_line":"            user, group, watch_log \u003d ("},{"line_number":107,"context_line":"                cls._get_metadata_proxy_user_group_watchlog(conf))"},{"line_number":108,"context_line":"            proxy_cmd \u003d [\u0027neutron-ns-metadata-proxy\u0027,"},{"line_number":109,"context_line":"                         \u0027--pid_file\u003d%s\u0027 % pid_file,"},{"line_number":110,"context_line":"                         \u0027--metadata_proxy_socket\u003d%s\u0027 % metadata_proxy_socket,"},{"line_number":111,"context_line":"                         lookup_param,"}],"source_content_type":"text/x-python","patch_set":18,"id":"da36d5c6_01894cc9","line":108,"updated":"2017-02-23 06:34:37.000000000","message":"could you please explain why we still load a python process per router here, instead of directly calling to haproxy?","commit_id":"446bcef282c08f2e000c4c3837c717e180e6db3e"},{"author":{"_account_id":23804,"name":"Daniel Alvarez","email":"dalvarez@redhat.com","username":"dalvarez"},"change_message_id":"f51a98e618a6d599bddf60d1acfa7f1ce1bda869","unresolved":false,"context_lines":[{"line_number":105,"context_line":"            metadata_proxy_socket \u003d conf.metadata_proxy_socket"},{"line_number":106,"context_line":"            user, group, watch_log \u003d ("},{"line_number":107,"context_line":"                cls._get_metadata_proxy_user_group_watchlog(conf))"},{"line_number":108,"context_line":"            proxy_cmd \u003d [\u0027neutron-ns-metadata-proxy\u0027,"},{"line_number":109,"context_line":"                         \u0027--pid_file\u003d%s\u0027 % pid_file,"},{"line_number":110,"context_line":"                         \u0027--metadata_proxy_socket\u003d%s\u0027 % metadata_proxy_socket,"},{"line_number":111,"context_line":"                         lookup_param,"}],"source_content_type":"text/x-python","patch_set":18,"id":"da36d5c6_f806a11a","line":108,"in_reply_to":"da36d5c6_01894cc9","updated":"2017-02-23 14:11:31.000000000","message":"I thought that this had less impact, plus the pidfile remains locked to the running process. The main intent of this patch was to reduce the memory footprint. However, spawning it directly as you suggest would be faster when creating routers and can make a difference as well. Shall we address it in a different patch maybe?","commit_id":"446bcef282c08f2e000c4c3837c717e180e6db3e"},{"author":{"_account_id":8788,"name":"Miguel Angel Ajo","email":"mangelajo@redhat.com","username":"mangelajo"},"change_message_id":"167b4c90eedfb5ae57552487edef9d1b4d4d5754","unresolved":false,"context_lines":[{"line_number":66,"context_line":"                 group, state_path):"},{"line_number":67,"context_line":"        \"\"\"HaproxyConfigurator constructor."},{"line_number":68,"context_line":""},{"line_number":69,"context_line":"        If user or group parameters are ommited, then the current ones under"},{"line_number":70,"context_line":"        the process is running will be fetched."},{"line_number":71,"context_line":"        \"\"\""},{"line_number":72,"context_line":"        self.network_id \u003d network_id"}],"source_content_type":"text/x-python","patch_set":20,"id":"da36d5c6_fb16774a","line":69,"updated":"2017-02-24 11:18:57.000000000","message":"nit: This comment is now outdated :D","commit_id":"20e5f441f834c1c598915eb2f4667099de093a8f"},{"author":{"_account_id":8124,"name":"cbrandily","email":"zzelle@gmail.com","username":"cbrandily"},"change_message_id":"1bdcfbc8f6339ab9743cc152262feefce3ec35a3","unresolved":false,"context_lines":[{"line_number":196,"context_line":"                                          conf.state_path)"},{"line_number":197,"context_line":"            haproxy.create_config_file()"},{"line_number":198,"context_line":"            proxy_cmd \u003d [spawn.find_executable(\u0027haproxy\u0027),"},{"line_number":199,"context_line":"                         \u0027-p\u0027, pid_file,"},{"line_number":200,"context_line":"                         \u0027-f\u0027, haproxy.cfg_path,"},{"line_number":201,"context_line":"                         \u0027-D\u0027]"},{"line_number":202,"context_line":"            return proxy_cmd"}],"source_content_type":"text/x-python","patch_set":21,"id":"da36d5c6_eab69ef7","line":199,"updated":"2017-02-24 13:33:42.000000000","message":"perhaps a stupid question but should we prefer command line options like -p and -D or config file options like pidfile and daemon","commit_id":"7118b455c9c2104260d9cc69367a6f8967eb6492"},{"author":{"_account_id":23804,"name":"Daniel Alvarez","email":"dalvarez@redhat.com","username":"dalvarez"},"change_message_id":"56c57ad48dbbb4a6676e33df11337dfb4a818aba","unresolved":false,"context_lines":[{"line_number":196,"context_line":"                                          conf.state_path)"},{"line_number":197,"context_line":"            haproxy.create_config_file()"},{"line_number":198,"context_line":"            proxy_cmd \u003d [spawn.find_executable(\u0027haproxy\u0027),"},{"line_number":199,"context_line":"                         \u0027-p\u0027, pid_file,"},{"line_number":200,"context_line":"                         \u0027-f\u0027, haproxy.cfg_path,"},{"line_number":201,"context_line":"                         \u0027-D\u0027]"},{"line_number":202,"context_line":"            return proxy_cmd"}],"source_content_type":"text/x-python","patch_set":21,"id":"da36d5c6_cf49e332","line":199,"in_reply_to":"da36d5c6_eab69ef7","updated":"2017-02-24 16:37:52.000000000","message":"Probably yes. I\u0027ve included them in the config file in the new PS.","commit_id":"7118b455c9c2104260d9cc69367a6f8967eb6492"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"907c4d88fd7c3c2f7df7398faf6d6b06db9a7561","unresolved":false,"context_lines":[{"line_number":109,"context_line":"                         \u0027--metadata_proxy_user\u003d%s\u0027 % user,"},{"line_number":110,"context_line":"                         \u0027--metadata_proxy_group\u003d%s\u0027 % group]"},{"line_number":111,"context_line":"            proxy_cmd.extend(config.get_log_args("},{"line_number":112,"context_line":"                conf, \u0027neutron-ns-metadata-proxy-%s.log\u0027 % uuid,"},{"line_number":113,"context_line":"                metadata_proxy_watch_log\u003dwatch_log))"},{"line_number":114,"context_line":"            return proxy_cmd"},{"line_number":115,"context_line":""}],"source_content_type":"text/x-python","patch_set":23,"id":"ba2be162_428f1d23","side":"PARENT","line":112,"range":{"start_line":112,"start_character":23,"end_line":112,"end_character":55},"updated":"2017-03-01 17:04:36.000000000","message":"where does haproxy log now?","commit_id":"67da6a31224adf7d773805096b5e6ea07329bdc7"},{"author":{"_account_id":23804,"name":"Daniel Alvarez","email":"dalvarez@redhat.com","username":"dalvarez"},"change_message_id":"6cefc20d2de4ab1b9e31b6a11598b24f998d03da","unresolved":false,"context_lines":[{"line_number":109,"context_line":"                         \u0027--metadata_proxy_user\u003d%s\u0027 % user,"},{"line_number":110,"context_line":"                         \u0027--metadata_proxy_group\u003d%s\u0027 % group]"},{"line_number":111,"context_line":"            proxy_cmd.extend(config.get_log_args("},{"line_number":112,"context_line":"                conf, \u0027neutron-ns-metadata-proxy-%s.log\u0027 % uuid,"},{"line_number":113,"context_line":"                metadata_proxy_watch_log\u003dwatch_log))"},{"line_number":114,"context_line":"            return proxy_cmd"},{"line_number":115,"context_line":""}],"source_content_type":"text/x-python","patch_set":23,"id":"ba2be162_f907e37e","side":"PARENT","line":112,"range":{"start_line":112,"start_character":23,"end_line":112,"end_character":55},"in_reply_to":"ba2be162_428f1d23","updated":"2017-03-01 18:14:11.000000000","message":"it doesn\u0027t. It can speak syslog to either ip4 or ip6 address or to a UNIX socket. With the current configuration it won\u0027t log the requests anywhere. Is it worth to specify a path to a UNIX socket?","commit_id":"67da6a31224adf7d773805096b5e6ea07329bdc7"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"907c4d88fd7c3c2f7df7398faf6d6b06db9a7561","unresolved":false,"context_lines":[{"line_number":82,"context_line":"        \"\"\"Create the config file for haproxy.\"\"\""},{"line_number":83,"context_line":"        # Need to convert uid/gid into username/group"},{"line_number":84,"context_line":"        try:"},{"line_number":85,"context_line":"            username \u003d pwd.getpwuid(int(self.user)).pw_name"},{"line_number":86,"context_line":"        except ValueError:"},{"line_number":87,"context_line":"            username \u003d self.user"},{"line_number":88,"context_line":""}],"source_content_type":"text/x-python","patch_set":23,"id":"ba2be162_917c0574","line":85,"range":{"start_line":85,"start_character":23,"end_line":85,"end_character":35},"updated":"2017-03-01 17:04:36.000000000","message":"this may also raise KeyError on unknown uid. Don\u0027t you want to catch it?","commit_id":"0355a17c2a36cfb622fcd58767e2cdb630c9f17d"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"0d56a48952b22867beebfd6c49d51e0122b2210f","unresolved":false,"context_lines":[{"line_number":82,"context_line":"        \"\"\"Create the config file for haproxy.\"\"\""},{"line_number":83,"context_line":"        # Need to convert uid/gid into username/group"},{"line_number":84,"context_line":"        try:"},{"line_number":85,"context_line":"            username \u003d pwd.getpwuid(int(self.user)).pw_name"},{"line_number":86,"context_line":"        except ValueError:"},{"line_number":87,"context_line":"            username \u003d self.user"},{"line_number":88,"context_line":""}],"source_content_type":"text/x-python","patch_set":23,"id":"ba2be162_f963633f","line":85,"range":{"start_line":85,"start_character":23,"end_line":85,"end_character":35},"in_reply_to":"ba2be162_1683a405","updated":"2017-03-01 18:17:46.000000000","message":"It\u0027s not necessarily wrong. A user name \u002711111\u0027 (not uid) is weird but valid.","commit_id":"0355a17c2a36cfb622fcd58767e2cdb630c9f17d"},{"author":{"_account_id":23804,"name":"Daniel Alvarez","email":"dalvarez@redhat.com","username":"dalvarez"},"change_message_id":"6cefc20d2de4ab1b9e31b6a11598b24f998d03da","unresolved":false,"context_lines":[{"line_number":82,"context_line":"        \"\"\"Create the config file for haproxy.\"\"\""},{"line_number":83,"context_line":"        # Need to convert uid/gid into username/group"},{"line_number":84,"context_line":"        try:"},{"line_number":85,"context_line":"            username \u003d pwd.getpwuid(int(self.user)).pw_name"},{"line_number":86,"context_line":"        except ValueError:"},{"line_number":87,"context_line":"            username \u003d self.user"},{"line_number":88,"context_line":""}],"source_content_type":"text/x-python","patch_set":23,"id":"ba2be162_1683a405","line":85,"range":{"start_line":85,"start_character":23,"end_line":85,"end_character":35},"in_reply_to":"ba2be162_917c0574","updated":"2017-03-01 18:14:11.000000000","message":"I didn\u0027t catch it on purpose. What do you suggest here? I didn\u0027t want to default to any user/group if those parameters are wrong","commit_id":"0355a17c2a36cfb622fcd58767e2cdb630c9f17d"},{"author":{"_account_id":23804,"name":"Daniel Alvarez","email":"dalvarez@redhat.com","username":"dalvarez"},"change_message_id":"185867bf889031896e76f3b4ccbe3e89e75374ef","unresolved":false,"context_lines":[{"line_number":82,"context_line":"        \"\"\"Create the config file for haproxy.\"\"\""},{"line_number":83,"context_line":"        # Need to convert uid/gid into username/group"},{"line_number":84,"context_line":"        try:"},{"line_number":85,"context_line":"            username \u003d pwd.getpwuid(int(self.user)).pw_name"},{"line_number":86,"context_line":"        except ValueError:"},{"line_number":87,"context_line":"            username \u003d self.user"},{"line_number":88,"context_line":""}],"source_content_type":"text/x-python","patch_set":23,"id":"ba2be162_b97d6bb3","line":85,"range":{"start_line":85,"start_character":23,"end_line":85,"end_character":35},"in_reply_to":"ba2be162_f963633f","updated":"2017-03-01 18:21:59.000000000","message":"Oh I misunderstood sorry...I\u0027ll take care of this too","commit_id":"0355a17c2a36cfb622fcd58767e2cdb630c9f17d"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"907c4d88fd7c3c2f7df7398faf6d6b06db9a7561","unresolved":false,"context_lines":[{"line_number":87,"context_line":"            username \u003d self.user"},{"line_number":88,"context_line":""},{"line_number":89,"context_line":"        try:"},{"line_number":90,"context_line":"            groupname \u003d grp.getgrgid(int(self.group)).gr_name"},{"line_number":91,"context_line":"        except ValueError:"},{"line_number":92,"context_line":"            groupname \u003d self.group"},{"line_number":93,"context_line":""}],"source_content_type":"text/x-python","patch_set":23,"id":"ba2be162_d1dd9d71","line":90,"range":{"start_line":90,"start_character":24,"end_line":90,"end_character":36},"updated":"2017-03-01 17:04:36.000000000","message":"ditto, I successfully created a new group with name \u0027111111\u0027 and gid \u00271001\u0027 locally.","commit_id":"0355a17c2a36cfb622fcd58767e2cdb630c9f17d"},{"author":{"_account_id":23804,"name":"Daniel Alvarez","email":"dalvarez@redhat.com","username":"dalvarez"},"change_message_id":"6cefc20d2de4ab1b9e31b6a11598b24f998d03da","unresolved":false,"context_lines":[{"line_number":87,"context_line":"            username \u003d self.user"},{"line_number":88,"context_line":""},{"line_number":89,"context_line":"        try:"},{"line_number":90,"context_line":"            groupname \u003d grp.getgrgid(int(self.group)).gr_name"},{"line_number":91,"context_line":"        except ValueError:"},{"line_number":92,"context_line":"            groupname \u003d self.group"},{"line_number":93,"context_line":""}],"source_content_type":"text/x-python","patch_set":23,"id":"ba2be162_169ac463","line":90,"range":{"start_line":90,"start_character":24,"end_line":90,"end_character":36},"in_reply_to":"ba2be162_d1dd9d71","updated":"2017-03-01 18:14:11.000000000","message":"same as previous comment","commit_id":"0355a17c2a36cfb622fcd58767e2cdb630c9f17d"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"907c4d88fd7c3c2f7df7398faf6d6b06db9a7561","unresolved":false,"context_lines":[{"line_number":134,"context_line":"            # It can happen that this function is called but metadata proxy"},{"line_number":135,"context_line":"            # was never spawned so its config file won\u0027t exist"},{"line_number":136,"context_line":"            if ex.errno !\u003d errno.ENOENT:"},{"line_number":137,"context_line":"                raise"},{"line_number":138,"context_line":""},{"line_number":139,"context_line":""},{"line_number":140,"context_line":"class MetadataDriver(object):"}],"source_content_type":"text/x-python","patch_set":23,"id":"ba2be162_90bf9cfa","line":137,"updated":"2017-03-01 17:04:36.000000000","message":"this special casing is not handled in functional tests. consider adding a test case for that.","commit_id":"0355a17c2a36cfb622fcd58767e2cdb630c9f17d"},{"author":{"_account_id":23804,"name":"Daniel Alvarez","email":"dalvarez@redhat.com","username":"dalvarez"},"change_message_id":"6cefc20d2de4ab1b9e31b6a11598b24f998d03da","unresolved":false,"context_lines":[{"line_number":134,"context_line":"            # It can happen that this function is called but metadata proxy"},{"line_number":135,"context_line":"            # was never spawned so its config file won\u0027t exist"},{"line_number":136,"context_line":"            if ex.errno !\u003d errno.ENOENT:"},{"line_number":137,"context_line":"                raise"},{"line_number":138,"context_line":""},{"line_number":139,"context_line":""},{"line_number":140,"context_line":"class MetadataDriver(object):"}],"source_content_type":"text/x-python","patch_set":23,"id":"ba2be162_769f8050","line":137,"in_reply_to":"ba2be162_90bf9cfa","updated":"2017-03-01 18:14:11.000000000","message":"I\u0027ll think of this test case","commit_id":"0355a17c2a36cfb622fcd58767e2cdb630c9f17d"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"907c4d88fd7c3c2f7df7398faf6d6b06db9a7561","unresolved":false,"context_lines":[{"line_number":200,"context_line":"                                          conf.state_path,"},{"line_number":201,"context_line":"                                          pid_file)"},{"line_number":202,"context_line":"            haproxy.create_config_file()"},{"line_number":203,"context_line":"            proxy_cmd \u003d [spawn.find_executable(\u0027haproxy\u0027),"},{"line_number":204,"context_line":"                         \u0027-f\u0027, haproxy.cfg_path]"},{"line_number":205,"context_line":"            return proxy_cmd"},{"line_number":206,"context_line":""}],"source_content_type":"text/x-python","patch_set":23,"id":"ba2be162_0778d7f1","line":203,"range":{"start_line":203,"start_character":25,"end_line":203,"end_character":46},"updated":"2017-03-01 17:04:36.000000000","message":"hm, what\u0027s the reason to use find_executable? Won\u0027t rootwrap find it itself? utils.execute that will execute the daemon supports shell, including passing environment and all.","commit_id":"0355a17c2a36cfb622fcd58767e2cdb630c9f17d"},{"author":{"_account_id":23804,"name":"Daniel Alvarez","email":"dalvarez@redhat.com","username":"dalvarez"},"change_message_id":"6cefc20d2de4ab1b9e31b6a11598b24f998d03da","unresolved":false,"context_lines":[{"line_number":200,"context_line":"                                          conf.state_path,"},{"line_number":201,"context_line":"                                          pid_file)"},{"line_number":202,"context_line":"            haproxy.create_config_file()"},{"line_number":203,"context_line":"            proxy_cmd \u003d [spawn.find_executable(\u0027haproxy\u0027),"},{"line_number":204,"context_line":"                         \u0027-f\u0027, haproxy.cfg_path]"},{"line_number":205,"context_line":"            return proxy_cmd"},{"line_number":206,"context_line":""}],"source_content_type":"text/x-python","patch_set":23,"id":"ba2be162_d99bffc7","line":203,"range":{"start_line":203,"start_character":25,"end_line":203,"end_character":46},"in_reply_to":"ba2be162_0778d7f1","updated":"2017-03-01 18:14:11.000000000","message":"True, just tested it and it works. No need for find_executable, thanks and good catch :)","commit_id":"0355a17c2a36cfb622fcd58767e2cdb630c9f17d"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"907c4d88fd7c3c2f7df7398faf6d6b06db9a7561","unresolved":false,"context_lines":[{"line_number":226,"context_line":"        cls.monitors[router_id] \u003d pm"},{"line_number":227,"context_line":""},{"line_number":228,"context_line":"    @staticmethod"},{"line_number":229,"context_line":"    def _migrate_python_ns_metadata_proxy_if_needed(pm):"},{"line_number":230,"context_line":"        \"\"\"Kill running Python version of ns-metadata-proxy."},{"line_number":231,"context_line":""},{"line_number":232,"context_line":"        This function will detect if the current metadata proxy process is"}],"source_content_type":"text/x-python","patch_set":23,"id":"ba2be162_f050d80c","line":229,"updated":"2017-03-01 17:04:36.000000000","message":"migrate path is not validated in functional tests; please add a test case for that.","commit_id":"0355a17c2a36cfb622fcd58767e2cdb630c9f17d"},{"author":{"_account_id":23804,"name":"Daniel Alvarez","email":"dalvarez@redhat.com","username":"dalvarez"},"change_message_id":"6cefc20d2de4ab1b9e31b6a11598b24f998d03da","unresolved":false,"context_lines":[{"line_number":226,"context_line":"        cls.monitors[router_id] \u003d pm"},{"line_number":227,"context_line":""},{"line_number":228,"context_line":"    @staticmethod"},{"line_number":229,"context_line":"    def _migrate_python_ns_metadata_proxy_if_needed(pm):"},{"line_number":230,"context_line":"        \"\"\"Kill running Python version of ns-metadata-proxy."},{"line_number":231,"context_line":""},{"line_number":232,"context_line":"        This function will detect if the current metadata proxy process is"}],"source_content_type":"text/x-python","patch_set":23,"id":"ba2be162_1942f710","line":229,"in_reply_to":"ba2be162_f050d80c","updated":"2017-03-01 18:14:11.000000000","message":"Ok","commit_id":"0355a17c2a36cfb622fcd58767e2cdb630c9f17d"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"907c4d88fd7c3c2f7df7398faf6d6b06db9a7561","unresolved":false,"context_lines":[{"line_number":236,"context_line":"        # Read cmdline to a local var to avoid reading twice from /proc file"},{"line_number":237,"context_line":"        cmdline \u003d pm.cmdline"},{"line_number":238,"context_line":"        if cmdline and \u0027haproxy\u0027 not in cmdline:"},{"line_number":239,"context_line":"            LOG.debug(\"Migrating old instance of python ns-metadata proxy to \""},{"line_number":240,"context_line":"                      \"new one based on haproxy (%s)\", cmdline)"},{"line_number":241,"context_line":"            pm.disable()"},{"line_number":242,"context_line":""}],"source_content_type":"text/x-python","patch_set":23,"id":"ba2be162_c2c4ed93","line":239,"updated":"2017-03-01 17:04:36.000000000","message":"Is it just me, or the message is never written in grenade jobs? It\u0027s weird because neither I see any old processes in final ps output, only haproxy. Can you elaborate how it works in grenade?","commit_id":"0355a17c2a36cfb622fcd58767e2cdb630c9f17d"},{"author":{"_account_id":23804,"name":"Daniel Alvarez","email":"dalvarez@redhat.com","username":"dalvarez"},"change_message_id":"6cefc20d2de4ab1b9e31b6a11598b24f998d03da","unresolved":false,"context_lines":[{"line_number":236,"context_line":"        # Read cmdline to a local var to avoid reading twice from /proc file"},{"line_number":237,"context_line":"        cmdline \u003d pm.cmdline"},{"line_number":238,"context_line":"        if cmdline and \u0027haproxy\u0027 not in cmdline:"},{"line_number":239,"context_line":"            LOG.debug(\"Migrating old instance of python ns-metadata proxy to \""},{"line_number":240,"context_line":"                      \"new one based on haproxy (%s)\", cmdline)"},{"line_number":241,"context_line":"            pm.disable()"},{"line_number":242,"context_line":""}],"source_content_type":"text/x-python","patch_set":23,"id":"ba2be162_199af763","line":239,"in_reply_to":"ba2be162_c2c4ed93","updated":"2017-03-01 18:14:11.000000000","message":"Yes, you\u0027re right old processes are not present in the ps output and this log is never written. I tested it myself and works but I agree with you that test coverage is needed on functional tests. I\u0027ll write it tomorrow","commit_id":"0355a17c2a36cfb622fcd58767e2cdb630c9f17d"},{"author":{"_account_id":8124,"name":"cbrandily","email":"zzelle@gmail.com","username":"cbrandily"},"change_message_id":"d5f215e6b83cf66e4b2ee2dee46f6bdac81f0ec7","unresolved":false,"context_lines":[{"line_number":41,"context_line":"    user        %(user)s"},{"line_number":42,"context_line":"    group       %(group)s"},{"line_number":43,"context_line":"    maxconn     1024"},{"line_number":44,"context_line":"    pidfile     %(pidfile)s"},{"line_number":45,"context_line":"    daemon"},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"defaults"}],"source_content_type":"text/x-python","patch_set":28,"id":"ba2be162_978e52ce","line":44,"updated":"2017-03-03 08:22:17.000000000","message":"Based on Ihar remark, we can log to /dev/log because haproxy is able to log in /dev/log after dropping privileges","commit_id":"b972082504f378292f1078c1c4620edec0bfe9e0"},{"author":{"_account_id":23804,"name":"Daniel Alvarez","email":"dalvarez@redhat.com","username":"dalvarez"},"change_message_id":"74bade266d4c158d8368926571c21a9ea713792f","unresolved":false,"context_lines":[{"line_number":41,"context_line":"    user        %(user)s"},{"line_number":42,"context_line":"    group       %(group)s"},{"line_number":43,"context_line":"    maxconn     1024"},{"line_number":44,"context_line":"    pidfile     %(pidfile)s"},{"line_number":45,"context_line":"    daemon"},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"defaults"}],"source_content_type":"text/x-python","patch_set":28,"id":"ba2be162_5ada41e9","line":44,"in_reply_to":"ba2be162_978e52ce","updated":"2017-03-03 08:47:50.000000000","message":"Done","commit_id":"b972082504f378292f1078c1c4620edec0bfe9e0"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"9d67a3ff16ae0ba30e2a0c0c0de5df27b8a2fa95","unresolved":false,"context_lines":[{"line_number":87,"context_line":"        try:"},{"line_number":88,"context_line":"            username \u003d pwd.getpwuid(int(self.user)).pw_name"},{"line_number":89,"context_line":"        except (ValueError, KeyError):"},{"line_number":90,"context_line":"            username \u003d pwd.getpwnam(self.user).pw_name"},{"line_number":91,"context_line":""},{"line_number":92,"context_line":"        try:"},{"line_number":93,"context_line":"            groupname \u003d grp.getgrgid(int(self.group)).gr_name"}],"source_content_type":"text/x-python","patch_set":30,"id":"ba2be162_ed832c54","line":90,"range":{"start_line":90,"start_character":23,"end_line":90,"end_character":35},"updated":"2017-03-03 16:59:23.000000000","message":"this can still raise KeyError on missing entry. Are we ok with it? Wouldn\u0027t it make sense to raise some specific exception?","commit_id":"4cb523605835868232e00842300a652d6524dc85"},{"author":{"_account_id":23804,"name":"Daniel Alvarez","email":"dalvarez@redhat.com","username":"dalvarez"},"change_message_id":"f3166ff9bbf706ed9ae12e8bdb793aaa0b779f84","unresolved":false,"context_lines":[{"line_number":87,"context_line":"        try:"},{"line_number":88,"context_line":"            username \u003d pwd.getpwuid(int(self.user)).pw_name"},{"line_number":89,"context_line":"        except (ValueError, KeyError):"},{"line_number":90,"context_line":"            username \u003d pwd.getpwnam(self.user).pw_name"},{"line_number":91,"context_line":""},{"line_number":92,"context_line":"        try:"},{"line_number":93,"context_line":"            groupname \u003d grp.getgrgid(int(self.group)).gr_name"}],"source_content_type":"text/x-python","patch_set":30,"id":"ba2be162_70fb8fc1","line":90,"range":{"start_line":90,"start_character":23,"end_line":90,"end_character":35},"in_reply_to":"ba2be162_ed832c54","updated":"2017-03-03 17:13:02.000000000","message":"Will do","commit_id":"4cb523605835868232e00842300a652d6524dc85"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"9d67a3ff16ae0ba30e2a0c0c0de5df27b8a2fa95","unresolved":false,"context_lines":[{"line_number":92,"context_line":"        try:"},{"line_number":93,"context_line":"            groupname \u003d grp.getgrgid(int(self.group)).gr_name"},{"line_number":94,"context_line":"        except (ValueError, KeyError):"},{"line_number":95,"context_line":"            groupname \u003d grp.getgrnam(self.group).gr_name"},{"line_number":96,"context_line":""},{"line_number":97,"context_line":"        cfg_info \u003d {"},{"line_number":98,"context_line":"            \u0027port\u0027: self.port,"}],"source_content_type":"text/x-python","patch_set":30,"id":"ba2be162_8de63013","line":95,"updated":"2017-03-03 16:59:23.000000000","message":"ditto","commit_id":"4cb523605835868232e00842300a652d6524dc85"},{"author":{"_account_id":23804,"name":"Daniel Alvarez","email":"dalvarez@redhat.com","username":"dalvarez"},"change_message_id":"f3166ff9bbf706ed9ae12e8bdb793aaa0b779f84","unresolved":false,"context_lines":[{"line_number":92,"context_line":"        try:"},{"line_number":93,"context_line":"            groupname \u003d grp.getgrgid(int(self.group)).gr_name"},{"line_number":94,"context_line":"        except (ValueError, KeyError):"},{"line_number":95,"context_line":"            groupname \u003d grp.getgrnam(self.group).gr_name"},{"line_number":96,"context_line":""},{"line_number":97,"context_line":"        cfg_info \u003d {"},{"line_number":98,"context_line":"            \u0027port\u0027: self.port,"}],"source_content_type":"text/x-python","patch_set":30,"id":"ba2be162_b00187b1","line":95,"in_reply_to":"ba2be162_8de63013","updated":"2017-03-03 17:13:02.000000000","message":"Will do","commit_id":"4cb523605835868232e00842300a652d6524dc85"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"2303113b85f5259fce009530d7f7f2086959089b","unresolved":false,"context_lines":[{"line_number":95,"context_line":"            try:"},{"line_number":96,"context_line":"                username \u003d pwd.getpwnam(self.user).pw_name"},{"line_number":97,"context_line":"            except KeyError:"},{"line_number":98,"context_line":"                raise InvalidUserOrGroupException(\"Invalid username\")"},{"line_number":99,"context_line":""},{"line_number":100,"context_line":"        try:"},{"line_number":101,"context_line":"            groupname \u003d grp.getgrgid(int(self.group)).gr_name"}],"source_content_type":"text/x-python","patch_set":31,"id":"ba2be162_e865a41d","line":98,"updated":"2017-03-07 08:23:52.000000000","message":"Would help debugging if self.user is contained in the message.","commit_id":"0a8bb5d706e6050dc24626add9edc95c68309168"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"7ccc5f691055073f2c604c0c515c6b170f5d8e8d","unresolved":false,"context_lines":[{"line_number":95,"context_line":"            try:"},{"line_number":96,"context_line":"                username \u003d pwd.getpwnam(self.user).pw_name"},{"line_number":97,"context_line":"            except KeyError:"},{"line_number":98,"context_line":"                raise InvalidUserOrGroupException(\"Invalid user/uid: %s\","},{"line_number":99,"context_line":"                                                  self.user)"},{"line_number":100,"context_line":""},{"line_number":101,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":32,"id":"9a30ddce_ddf83e4c","line":98,"range":{"start_line":98,"start_character":72,"end_line":98,"end_character":73},"updated":"2017-03-08 09:42:17.000000000","message":"You need to use % here as Exception doesn\u0027t have same capabilities as logger :)","commit_id":"045c1c03cc49c42fb8c23d602f7b015e8a802e1b"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"b0b070bcd6e5a77239032c46bed427e5d7a503f9","unresolved":false,"context_lines":[{"line_number":55,"context_line":"    retries                 3"},{"line_number":56,"context_line":"    timeout http-request    30s"},{"line_number":57,"context_line":"    timeout connect         30s"},{"line_number":58,"context_line":"    timeout client          32s"},{"line_number":59,"context_line":"    timeout server          32s"},{"line_number":60,"context_line":"    timeout http-keep-alive 30s"},{"line_number":61,"context_line":""}],"source_content_type":"text/x-python","patch_set":33,"id":"9a30ddce_9674e09c","line":58,"updated":"2017-03-08 13:09:46.000000000","message":"how did you get to these values? should these be configurable?","commit_id":"254e4e91526dd473b844b72ebd80ae0623a09e1c"},{"author":{"_account_id":23804,"name":"Daniel Alvarez","email":"dalvarez@redhat.com","username":"dalvarez"},"change_message_id":"0acb99aed5547eea2062c3c2fcd7e24b2b567e61","unresolved":false,"context_lines":[{"line_number":55,"context_line":"    retries                 3"},{"line_number":56,"context_line":"    timeout http-request    30s"},{"line_number":57,"context_line":"    timeout connect         30s"},{"line_number":58,"context_line":"    timeout client          32s"},{"line_number":59,"context_line":"    timeout server          32s"},{"line_number":60,"context_line":"    timeout http-keep-alive 30s"},{"line_number":61,"context_line":""}],"source_content_type":"text/x-python","patch_set":33,"id":"9a30ddce_e3855b59","line":58,"in_reply_to":"9a30ddce_9674e09c","updated":"2017-03-08 15:17:21.000000000","message":"I thought those were safe enough, the reasoning for 32 and not 30 is on my comments for PS13 (Feb 20). If we find these are too low we can increase them later on","commit_id":"254e4e91526dd473b844b72ebd80ae0623a09e1c"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"b0b070bcd6e5a77239032c46bed427e5d7a503f9","unresolved":false,"context_lines":[{"line_number":95,"context_line":"            try:"},{"line_number":96,"context_line":"                username \u003d pwd.getpwnam(self.user).pw_name"},{"line_number":97,"context_line":"            except KeyError:"},{"line_number":98,"context_line":"                raise InvalidUserOrGroupException(\"Invalid user/uid: %s\" %"},{"line_number":99,"context_line":"                                                  self.user)"},{"line_number":100,"context_line":""},{"line_number":101,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":33,"id":"9a30ddce_969b00c9","line":98,"updated":"2017-03-08 13:09:46.000000000","message":"missing translation","commit_id":"254e4e91526dd473b844b72ebd80ae0623a09e1c"},{"author":{"_account_id":23804,"name":"Daniel Alvarez","email":"dalvarez@redhat.com","username":"dalvarez"},"change_message_id":"0acb99aed5547eea2062c3c2fcd7e24b2b567e61","unresolved":false,"context_lines":[{"line_number":95,"context_line":"            try:"},{"line_number":96,"context_line":"                username \u003d pwd.getpwnam(self.user).pw_name"},{"line_number":97,"context_line":"            except KeyError:"},{"line_number":98,"context_line":"                raise InvalidUserOrGroupException(\"Invalid user/uid: %s\" %"},{"line_number":99,"context_line":"                                                  self.user)"},{"line_number":100,"context_line":""},{"line_number":101,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":33,"id":"9a30ddce_0327cf64","line":98,"in_reply_to":"9a30ddce_0d59befe","updated":"2017-03-08 15:17:21.000000000","message":"I\u0027d rather keep it like this for simplicity as the error is stated in the message and it\u0027s not handled anywhere. However, if you think it\u0027s best for this case I can split it up.","commit_id":"254e4e91526dd473b844b72ebd80ae0623a09e1c"},{"author":{"_account_id":23804,"name":"Daniel Alvarez","email":"dalvarez@redhat.com","username":"dalvarez"},"change_message_id":"0acb99aed5547eea2062c3c2fcd7e24b2b567e61","unresolved":false,"context_lines":[{"line_number":95,"context_line":"            try:"},{"line_number":96,"context_line":"                username \u003d pwd.getpwnam(self.user).pw_name"},{"line_number":97,"context_line":"            except KeyError:"},{"line_number":98,"context_line":"                raise InvalidUserOrGroupException(\"Invalid user/uid: %s\" %"},{"line_number":99,"context_line":"                                                  self.user)"},{"line_number":100,"context_line":""},{"line_number":101,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":33,"id":"9a30ddce_0310af00","line":98,"in_reply_to":"9a30ddce_969b00c9","updated":"2017-03-08 15:17:21.000000000","message":"Done","commit_id":"254e4e91526dd473b844b72ebd80ae0623a09e1c"},{"author":{"_account_id":8124,"name":"cbrandily","email":"zzelle@gmail.com","username":"cbrandily"},"change_message_id":"c296dd5920f8567b874d6ac6178590e5d7f710a7","unresolved":false,"context_lines":[{"line_number":95,"context_line":"            try:"},{"line_number":96,"context_line":"                username \u003d pwd.getpwnam(self.user).pw_name"},{"line_number":97,"context_line":"            except KeyError:"},{"line_number":98,"context_line":"                raise InvalidUserOrGroupException(\"Invalid user/uid: %s\" %"},{"line_number":99,"context_line":"                                                  self.user)"},{"line_number":100,"context_line":""},{"line_number":101,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":33,"id":"9a30ddce_0d59befe","line":98,"in_reply_to":"9a30ddce_969b00c9","updated":"2017-03-08 14:04:29.000000000","message":"It\u0027s perhaps better to define a specific exception for each case?","commit_id":"254e4e91526dd473b844b72ebd80ae0623a09e1c"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"b0b070bcd6e5a77239032c46bed427e5d7a503f9","unresolved":false,"context_lines":[{"line_number":104,"context_line":"            try:"},{"line_number":105,"context_line":"                groupname \u003d grp.getgrnam(self.group).gr_name"},{"line_number":106,"context_line":"            except KeyError:"},{"line_number":107,"context_line":"                raise InvalidUserOrGroupException(\"Invalid group/gid: %s\" %"},{"line_number":108,"context_line":"                                                  self.group)"},{"line_number":109,"context_line":""},{"line_number":110,"context_line":"        cfg_info \u003d {"}],"source_content_type":"text/x-python","patch_set":33,"id":"9a30ddce_f6a8bcdd","line":107,"updated":"2017-03-08 13:09:46.000000000","message":"ditto","commit_id":"254e4e91526dd473b844b72ebd80ae0623a09e1c"},{"author":{"_account_id":23804,"name":"Daniel Alvarez","email":"dalvarez@redhat.com","username":"dalvarez"},"change_message_id":"0acb99aed5547eea2062c3c2fcd7e24b2b567e61","unresolved":false,"context_lines":[{"line_number":104,"context_line":"            try:"},{"line_number":105,"context_line":"                groupname \u003d grp.getgrnam(self.group).gr_name"},{"line_number":106,"context_line":"            except KeyError:"},{"line_number":107,"context_line":"                raise InvalidUserOrGroupException(\"Invalid group/gid: %s\" %"},{"line_number":108,"context_line":"                                                  self.group)"},{"line_number":109,"context_line":""},{"line_number":110,"context_line":"        cfg_info \u003d {"}],"source_content_type":"text/x-python","patch_set":33,"id":"9a30ddce_4321c74c","line":107,"in_reply_to":"9a30ddce_f6a8bcdd","updated":"2017-03-08 15:17:21.000000000","message":"Done","commit_id":"254e4e91526dd473b844b72ebd80ae0623a09e1c"}],"neutron/agent/metadata/namespace_proxy.py":[{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"20013ed166ca8b9a2bc4cdd413f8f745f08063b5","unresolved":false,"context_lines":[{"line_number":100,"context_line":"            self.haproxy_cfg +\u003d self.router_id"},{"line_number":101,"context_line":"            self.haproxy_cfg +\u003d \"\\n\""},{"line_number":102,"context_line":"        LOG.debug(\"haproxy_cfg \u003d %s\", self.haproxy_cfg)"},{"line_number":103,"context_line":"        return None"},{"line_number":104,"context_line":""},{"line_number":105,"context_line":"    def run_proxy(self, proxy):"},{"line_number":106,"context_line":"        cfg_dir \u003d self.state_path + \"/\" + HAPROXY_CONFIG_DIR"}],"source_content_type":"text/x-python","patch_set":2,"id":"1a430d35_3de18dff","line":103,"updated":"2017-02-09 20:07:29.000000000","message":"return not needed","commit_id":"f05862f7b464a5e70866982660c21c396d3d3071"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"20013ed166ca8b9a2bc4cdd413f8f745f08063b5","unresolved":false,"context_lines":[{"line_number":177,"context_line":"                           \"permissions on metadata proxy log file.\")),"},{"line_number":178,"context_line":"    ]"},{"line_number":179,"context_line":""},{"line_number":180,"context_line":"    cfg.CONF.register_cli_opts(opts)"},{"line_number":181,"context_line":"    # Don\u0027t get the default configuration file"},{"line_number":182,"context_line":"    cfg.CONF(project\u003d\u0027neutron\u0027, default_config_files\u003d[])"},{"line_number":183,"context_line":"    config.setup_logging()"}],"source_content_type":"text/x-python","patch_set":2,"id":"1a430d35_7d47951d","line":180,"updated":"2017-02-09 20:07:29.000000000","message":"Why move all the above here from register_namespace_proxy_opts() ?","commit_id":"f05862f7b464a5e70866982660c21c396d3d3071"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"20013ed166ca8b9a2bc4cdd413f8f745f08063b5","unresolved":false,"context_lines":[{"line_number":179,"context_line":""},{"line_number":180,"context_line":"    cfg.CONF.register_cli_opts(opts)"},{"line_number":181,"context_line":"    # Don\u0027t get the default configuration file"},{"line_number":182,"context_line":"    cfg.CONF(project\u003d\u0027neutron\u0027, default_config_files\u003d[])"},{"line_number":183,"context_line":"    config.setup_logging()"},{"line_number":184,"context_line":"    utils.log_opt_values(LOG)"},{"line_number":185,"context_line":"    LOG.debug(\"init\")"}],"source_content_type":"text/x-python","patch_set":2,"id":"1a430d35_7d6eb597","line":182,"updated":"2017-02-09 20:07:29.000000000","message":"This just un-did a recent change to not read config files from neutron.conf.d","commit_id":"f05862f7b464a5e70866982660c21c396d3d3071"},{"author":{"_account_id":7787,"name":"Kevin Benton","email":"kevin@benton.pub","username":"blak111"},"change_message_id":"01dc8d1d06ba0f1ec3a20aa4e9dcc024470f6179","unresolved":false,"context_lines":[{"line_number":75,"context_line":""},{"line_number":76,"context_line":"        # We need to check that there\u0027s no None parameter, otherwise haproxy"},{"line_number":77,"context_line":"        # won\u0027t start due to a malformed configuration file."},{"line_number":78,"context_line":"        if not (unix_socket_path and port and user and state_path):"},{"line_number":79,"context_line":"            LOG.exception(_LE(\"Unable to start metadata-proxy\"))"},{"line_number":80,"context_line":"            raise NetworkMetadataProxyInvalidArgumentsException()"},{"line_number":81,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"fa31d9ce_d4444b1c","line":78,"updated":"2017-02-14 12:13:28.000000000","message":"Why don\u0027t we just not provide default kwargs for those? Then we don\u0027t need this validation or a custom exception type.","commit_id":"17f1336922055540d96c2e460eb2be43951e19cf"},{"author":{"_account_id":7787,"name":"Kevin Benton","email":"kevin@benton.pub","username":"blak111"},"change_message_id":"e4ce29b0fcad67467b6980b42c3fdc79ba30c299","unresolved":false,"context_lines":[{"line_number":90,"context_line":"            pw_user \u003d pwd.getpwuid(int(self.user))"},{"line_number":91,"context_line":"            username \u003d pw_user[0]"},{"line_number":92,"context_line":"        except ValueError:"},{"line_number":93,"context_line":"            username \u003d self.user"},{"line_number":94,"context_line":""},{"line_number":95,"context_line":"        vars \u003d {"},{"line_number":96,"context_line":"            \u0027port\u0027: self.port,"}],"source_content_type":"text/x-python","patch_set":5,"id":"fa31d9ce_524e5a3b","line":93,"updated":"2017-02-15 23:40:12.000000000","message":"Ack","commit_id":"17f1336922055540d96c2e460eb2be43951e19cf"},{"author":{"_account_id":7787,"name":"Kevin Benton","email":"kevin@benton.pub","username":"blak111"},"change_message_id":"01dc8d1d06ba0f1ec3a20aa4e9dcc024470f6179","unresolved":false,"context_lines":[{"line_number":90,"context_line":"            pw_user \u003d pwd.getpwuid(int(self.user))"},{"line_number":91,"context_line":"            username \u003d pw_user[0]"},{"line_number":92,"context_line":"        except ValueError:"},{"line_number":93,"context_line":"            username \u003d self.user"},{"line_number":94,"context_line":""},{"line_number":95,"context_line":"        vars \u003d {"},{"line_number":96,"context_line":"            \u0027port\u0027: self.port,"}],"source_content_type":"text/x-python","patch_set":5,"id":"fa31d9ce_14f8a37a","line":93,"updated":"2017-02-14 12:13:28.000000000","message":"won\u0027t haproxy by default run as the user we are launching it as? Could save some logic by removing this if that\u0027s the case.","commit_id":"17f1336922055540d96c2e460eb2be43951e19cf"},{"author":{"_account_id":23804,"name":"Daniel Alvarez","email":"dalvarez@redhat.com","username":"dalvarez"},"change_message_id":"7ec240ff26a13095ee5557b263b318b26a4ffe4b","unresolved":false,"context_lines":[{"line_number":90,"context_line":"            pw_user \u003d pwd.getpwuid(int(self.user))"},{"line_number":91,"context_line":"            username \u003d pw_user[0]"},{"line_number":92,"context_line":"        except ValueError:"},{"line_number":93,"context_line":"            username \u003d self.user"},{"line_number":94,"context_line":""},{"line_number":95,"context_line":"        vars \u003d {"},{"line_number":96,"context_line":"            \u0027port\u0027: self.port,"}],"source_content_type":"text/x-python","patch_set":5,"id":"fa31d9ce_bf2c0f03","line":93,"in_reply_to":"fa31d9ce_14f8a37a","updated":"2017-02-14 16:07:49.000000000","message":"ns-metadata-proxy is run as root by default. In the previous implementation it dropped its privileges but still \"user\" and \"group\" were passed as arguments. Keeping this option allows to maintain the same behavior and then haproxy will drop its privileges to the specified user","commit_id":"17f1336922055540d96c2e460eb2be43951e19cf"},{"author":{"_account_id":7787,"name":"Kevin Benton","email":"kevin@benton.pub","username":"blak111"},"change_message_id":"01dc8d1d06ba0f1ec3a20aa4e9dcc024470f6179","unresolved":false,"context_lines":[{"line_number":113,"context_line":"            haproxy_cfg +\u003d \"\\n\""},{"line_number":114,"context_line":"        LOG.debug(\"haproxy_cfg \u003d %s\", haproxy_cfg)"},{"line_number":115,"context_line":""},{"line_number":116,"context_line":"        cfg_dir \u003d self.state_path + \"/\" + PROXY_CONFIG_DIR"},{"line_number":117,"context_line":"        # uuid has to be included somewhere in the command line so that it can"},{"line_number":118,"context_line":"        # be tracked by process_monitor."},{"line_number":119,"context_line":"        cfg_path \u003d os.path.join(cfg_dir, self.router_id + \".conf\")"}],"source_content_type":"text/x-python","patch_set":5,"id":"fa31d9ce_54169bf1","line":116,"updated":"2017-02-14 12:13:28.000000000","message":"os.path.join here please","commit_id":"17f1336922055540d96c2e460eb2be43951e19cf"},{"author":{"_account_id":23804,"name":"Daniel Alvarez","email":"dalvarez@redhat.com","username":"dalvarez"},"change_message_id":"7ec240ff26a13095ee5557b263b318b26a4ffe4b","unresolved":false,"context_lines":[{"line_number":113,"context_line":"            haproxy_cfg +\u003d \"\\n\""},{"line_number":114,"context_line":"        LOG.debug(\"haproxy_cfg \u003d %s\", haproxy_cfg)"},{"line_number":115,"context_line":""},{"line_number":116,"context_line":"        cfg_dir \u003d self.state_path + \"/\" + PROXY_CONFIG_DIR"},{"line_number":117,"context_line":"        # uuid has to be included somewhere in the command line so that it can"},{"line_number":118,"context_line":"        # be tracked by process_monitor."},{"line_number":119,"context_line":"        cfg_path \u003d os.path.join(cfg_dir, self.router_id + \".conf\")"}],"source_content_type":"text/x-python","patch_set":5,"id":"fa31d9ce_9ffe6bac","line":116,"in_reply_to":"fa31d9ce_54169bf1","updated":"2017-02-14 16:07:49.000000000","message":"Done","commit_id":"17f1336922055540d96c2e460eb2be43951e19cf"},{"author":{"_account_id":7787,"name":"Kevin Benton","email":"kevin@benton.pub","username":"blak111"},"change_message_id":"01dc8d1d06ba0f1ec3a20aa4e9dcc024470f6179","unresolved":false,"context_lines":[{"line_number":118,"context_line":"        # be tracked by process_monitor."},{"line_number":119,"context_line":"        cfg_path \u003d os.path.join(cfg_dir, self.router_id + \".conf\")"},{"line_number":120,"context_line":"        if not os.path.exists(cfg_dir):"},{"line_number":121,"context_line":"                os.makedirs(cfg_dir)"},{"line_number":122,"context_line":"        cfg_file \u003d open(cfg_path, \"w\")"},{"line_number":123,"context_line":"        cfg_file.write(haproxy_cfg)"},{"line_number":124,"context_line":"        cfg_file.close()"}],"source_content_type":"text/x-python","patch_set":5,"id":"fa31d9ce_74d55f1a","line":121,"updated":"2017-02-14 12:13:28.000000000","message":"Extra indent here","commit_id":"17f1336922055540d96c2e460eb2be43951e19cf"},{"author":{"_account_id":23804,"name":"Daniel Alvarez","email":"dalvarez@redhat.com","username":"dalvarez"},"change_message_id":"7ec240ff26a13095ee5557b263b318b26a4ffe4b","unresolved":false,"context_lines":[{"line_number":118,"context_line":"        # be tracked by process_monitor."},{"line_number":119,"context_line":"        cfg_path \u003d os.path.join(cfg_dir, self.router_id + \".conf\")"},{"line_number":120,"context_line":"        if not os.path.exists(cfg_dir):"},{"line_number":121,"context_line":"                os.makedirs(cfg_dir)"},{"line_number":122,"context_line":"        cfg_file \u003d open(cfg_path, \"w\")"},{"line_number":123,"context_line":"        cfg_file.write(haproxy_cfg)"},{"line_number":124,"context_line":"        cfg_file.close()"}],"source_content_type":"text/x-python","patch_set":5,"id":"fa31d9ce_bf2def47","line":121,"in_reply_to":"fa31d9ce_74d55f1a","updated":"2017-02-14 16:07:49.000000000","message":"Done","commit_id":"17f1336922055540d96c2e460eb2be43951e19cf"},{"author":{"_account_id":7787,"name":"Kevin Benton","email":"kevin@benton.pub","username":"blak111"},"change_message_id":"01dc8d1d06ba0f1ec3a20aa4e9dcc024470f6179","unresolved":false,"context_lines":[{"line_number":119,"context_line":"        cfg_path \u003d os.path.join(cfg_dir, self.router_id + \".conf\")"},{"line_number":120,"context_line":"        if not os.path.exists(cfg_dir):"},{"line_number":121,"context_line":"                os.makedirs(cfg_dir)"},{"line_number":122,"context_line":"        cfg_file \u003d open(cfg_path, \"w\")"},{"line_number":123,"context_line":"        cfg_file.write(haproxy_cfg)"},{"line_number":124,"context_line":"        cfg_file.close()"},{"line_number":125,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"fa31d9ce_14cee381","line":122,"updated":"2017-02-14 12:13:28.000000000","message":"use a context manager here to avoid holding an open file descriptor if write fails\n\nwith open(cfg_path, \u0027w\u0027) as cfg_file:\n    cfg_file.write(haproxy_cfg)","commit_id":"17f1336922055540d96c2e460eb2be43951e19cf"},{"author":{"_account_id":23804,"name":"Daniel Alvarez","email":"dalvarez@redhat.com","username":"dalvarez"},"change_message_id":"7ec240ff26a13095ee5557b263b318b26a4ffe4b","unresolved":false,"context_lines":[{"line_number":119,"context_line":"        cfg_path \u003d os.path.join(cfg_dir, self.router_id + \".conf\")"},{"line_number":120,"context_line":"        if not os.path.exists(cfg_dir):"},{"line_number":121,"context_line":"                os.makedirs(cfg_dir)"},{"line_number":122,"context_line":"        cfg_file \u003d open(cfg_path, \"w\")"},{"line_number":123,"context_line":"        cfg_file.write(haproxy_cfg)"},{"line_number":124,"context_line":"        cfg_file.close()"},{"line_number":125,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"fa31d9ce_3f973f49","line":122,"in_reply_to":"fa31d9ce_14cee381","updated":"2017-02-14 16:07:49.000000000","message":"Done","commit_id":"17f1336922055540d96c2e460eb2be43951e19cf"},{"author":{"_account_id":13252,"name":"Dr. Jens Harbott","display_name":"Jens Harbott (frickler)","email":"frickler@offenerstapel.de","username":"jrosenboom"},"change_message_id":"388e37fd07a5f5c8fb707b49dbe8b1b8557553d1","unresolved":false,"context_lines":[{"line_number":77,"context_line":"        self.state_path \u003d state_path or tempfile.gettempdir()"},{"line_number":78,"context_line":"        self.unix_socket_path \u003d (unix_socket_path or"},{"line_number":79,"context_line":"                                 os.path.join(self.state_path,"},{"line_number":80,"context_line":"                                              \u0027metadata_proxy\u0027))"},{"line_number":81,"context_line":""},{"line_number":82,"context_line":"    def run_proxy(self):"},{"line_number":83,"context_line":"        # Need to convert uid/gid into username/group"}],"source_content_type":"text/x-python","patch_set":8,"id":"fa31d9ce_1ef85dc4","line":80,"updated":"2017-02-16 10:02:26.000000000","message":"Might be less confusing if you use the same value as for PROXY_CONFIG_DIR here?","commit_id":"e7662f94b7cc512dccdce636e9173a3276b063ac"},{"author":{"_account_id":23804,"name":"Daniel Alvarez","email":"dalvarez@redhat.com","username":"dalvarez"},"change_message_id":"b681357a8caba651e7af852a471f21b91bb562eb","unresolved":false,"context_lines":[{"line_number":77,"context_line":"        self.state_path \u003d state_path or tempfile.gettempdir()"},{"line_number":78,"context_line":"        self.unix_socket_path \u003d (unix_socket_path or"},{"line_number":79,"context_line":"                                 os.path.join(self.state_path,"},{"line_number":80,"context_line":"                                              \u0027metadata_proxy\u0027))"},{"line_number":81,"context_line":""},{"line_number":82,"context_line":"    def run_proxy(self):"},{"line_number":83,"context_line":"        # Need to convert uid/gid into username/group"}],"source_content_type":"text/x-python","patch_set":8,"id":"fa31d9ce_b93a0b97","line":80,"in_reply_to":"fa31d9ce_1ef85dc4","updated":"2017-02-16 10:15:00.000000000","message":"I wanted to be consistent with [0] defaulting to $state_path/metadata_proxy which is, by default, where metadata agent will listen... Maybe there\u0027s a better way to do it without explicitly writing this? Or just relay that it won\u0027t be None?\n\n[0] https://github.com/openstack/neutron/blob/master/neutron/conf/agent/metadata/namespace_proxy.py#L36","commit_id":"e7662f94b7cc512dccdce636e9173a3276b063ac"},{"author":{"_account_id":23804,"name":"Daniel Alvarez","email":"dalvarez@redhat.com","username":"dalvarez"},"change_message_id":"045dcec2c7b2e5a19b123aa26da19d1a490e6451","unresolved":false,"context_lines":[{"line_number":77,"context_line":"        self.state_path \u003d state_path or tempfile.gettempdir()"},{"line_number":78,"context_line":"        self.unix_socket_path \u003d (unix_socket_path or"},{"line_number":79,"context_line":"                                 os.path.join(self.state_path,"},{"line_number":80,"context_line":"                                              \u0027metadata_proxy\u0027))"},{"line_number":81,"context_line":""},{"line_number":82,"context_line":"    def run_proxy(self):"},{"line_number":83,"context_line":"        # Need to convert uid/gid into username/group"}],"source_content_type":"text/x-python","patch_set":8,"id":"fa31d9ce_7f195379","line":80,"in_reply_to":"fa31d9ce_24534e6e","updated":"2017-02-16 10:58:59.000000000","message":"done. Thanks!","commit_id":"e7662f94b7cc512dccdce636e9173a3276b063ac"},{"author":{"_account_id":13252,"name":"Dr. Jens Harbott","display_name":"Jens Harbott (frickler)","email":"frickler@offenerstapel.de","username":"jrosenboom"},"change_message_id":"f0dd62fd243ed4dd90e99d19b7fa7c0ac26dfca9","unresolved":false,"context_lines":[{"line_number":77,"context_line":"        self.state_path \u003d state_path or tempfile.gettempdir()"},{"line_number":78,"context_line":"        self.unix_socket_path \u003d (unix_socket_path or"},{"line_number":79,"context_line":"                                 os.path.join(self.state_path,"},{"line_number":80,"context_line":"                                              \u0027metadata_proxy\u0027))"},{"line_number":81,"context_line":""},{"line_number":82,"context_line":"    def run_proxy(self):"},{"line_number":83,"context_line":"        # Need to convert uid/gid into username/group"}],"source_content_type":"text/x-python","patch_set":8,"id":"fa31d9ce_24534e6e","line":80,"in_reply_to":"fa31d9ce_b93a0b97","updated":"2017-02-16 10:43:12.000000000","message":"Hmm, right, so better use the config variable directly like here [1]? That would match 1:1 what the old code does, I guess.\n\n[1] https://github.com/openstack/neutron/blob/master/neutron/agent/linux/utils.py#L393","commit_id":"e7662f94b7cc512dccdce636e9173a3276b063ac"},{"author":{"_account_id":13252,"name":"Dr. Jens Harbott","display_name":"Jens Harbott (frickler)","email":"frickler@offenerstapel.de","username":"jrosenboom"},"change_message_id":"388e37fd07a5f5c8fb707b49dbe8b1b8557553d1","unresolved":false,"context_lines":[{"line_number":117,"context_line":"        cfg_dir \u003d os.path.join(self.state_path, PROXY_CONFIG_DIR)"},{"line_number":118,"context_line":"        # uuid has to be included somewhere in the command line so that it can"},{"line_number":119,"context_line":"        # be tracked by process_monitor."},{"line_number":120,"context_line":"        cfg_path \u003d os.path.join(cfg_dir, self.router_id + \".conf\")"},{"line_number":121,"context_line":"        if not os.path.exists(cfg_dir):"},{"line_number":122,"context_line":"                os.makedirs(cfg_dir)"},{"line_number":123,"context_line":"        with open(cfg_path, \"w\") as cfg_file:"}],"source_content_type":"text/x-python","patch_set":8,"id":"fa31d9ce_be63d140","line":120,"updated":"2017-02-16 10:02:26.000000000","message":"This seems to fail if self.router_id is None?","commit_id":"e7662f94b7cc512dccdce636e9173a3276b063ac"},{"author":{"_account_id":23804,"name":"Daniel Alvarez","email":"dalvarez@redhat.com","username":"dalvarez"},"change_message_id":"b681357a8caba651e7af852a471f21b91bb562eb","unresolved":false,"context_lines":[{"line_number":117,"context_line":"        cfg_dir \u003d os.path.join(self.state_path, PROXY_CONFIG_DIR)"},{"line_number":118,"context_line":"        # uuid has to be included somewhere in the command line so that it can"},{"line_number":119,"context_line":"        # be tracked by process_monitor."},{"line_number":120,"context_line":"        cfg_path \u003d os.path.join(cfg_dir, self.router_id + \".conf\")"},{"line_number":121,"context_line":"        if not os.path.exists(cfg_dir):"},{"line_number":122,"context_line":"                os.makedirs(cfg_dir)"},{"line_number":123,"context_line":"        with open(cfg_path, \"w\") as cfg_file:"}],"source_content_type":"text/x-python","patch_set":8,"id":"fa31d9ce_19715778","line":120,"in_reply_to":"fa31d9ce_be63d140","updated":"2017-02-16 10:15:00.000000000","message":"True...I\u0027ll check and include network_id if not router_id","commit_id":"e7662f94b7cc512dccdce636e9173a3276b063ac"},{"author":{"_account_id":8788,"name":"Miguel Angel Ajo","email":"mangelajo@redhat.com","username":"mangelajo"},"change_message_id":"a3d0039ae393b19e1c6977d2d891ae54c76b5c86","unresolved":false,"context_lines":[{"line_number":100,"context_line":"            \u0027group\u0027: groupname"},{"line_number":101,"context_line":"        }"},{"line_number":102,"context_line":""},{"line_number":103,"context_line":"        haproxy_cfg \u003d _HAPROXY_CONFIG_TEMPLATE % vars"},{"line_number":104,"context_line":"        if self.network_id:"},{"line_number":105,"context_line":"            haproxy_cfg +\u003d ("},{"line_number":106,"context_line":"                \"    http-request add-header X-Neutron-Network-ID \")"}],"source_content_type":"text/x-python","patch_set":11,"id":"fa31d9ce_d7d59cb9","line":103,"updated":"2017-02-17 08:27:09.000000000","message":"you could split the config creation to a separate method.\n\nAnd move the config removal to a separate static method too you can call from the driver.","commit_id":"cbb22eb0fec47a1ed0faa2c4707c673a6dd0df88"},{"author":{"_account_id":23804,"name":"Daniel Alvarez","email":"dalvarez@redhat.com","username":"dalvarez"},"change_message_id":"6f09ce8dcbe9b9cea38ede341937f92bfc13604a","unresolved":false,"context_lines":[{"line_number":100,"context_line":"            \u0027group\u0027: groupname"},{"line_number":101,"context_line":"        }"},{"line_number":102,"context_line":""},{"line_number":103,"context_line":"        haproxy_cfg \u003d _HAPROXY_CONFIG_TEMPLATE % vars"},{"line_number":104,"context_line":"        if self.network_id:"},{"line_number":105,"context_line":"            haproxy_cfg +\u003d ("},{"line_number":106,"context_line":"                \"    http-request add-header X-Neutron-Network-ID \")"}],"source_content_type":"text/x-python","patch_set":11,"id":"fa31d9ce_941f975a","line":103,"in_reply_to":"fa31d9ce_d7d59cb9","updated":"2017-02-17 15:04:15.000000000","message":"Done","commit_id":"cbb22eb0fec47a1ed0faa2c4707c673a6dd0df88"},{"author":{"_account_id":8788,"name":"Miguel Angel Ajo","email":"mangelajo@redhat.com","username":"mangelajo"},"change_message_id":"a3d0039ae393b19e1c6977d2d891ae54c76b5c86","unresolved":false,"context_lines":[{"line_number":101,"context_line":"        }"},{"line_number":102,"context_line":""},{"line_number":103,"context_line":"        haproxy_cfg \u003d _HAPROXY_CONFIG_TEMPLATE % vars"},{"line_number":104,"context_line":"        if self.network_id:"},{"line_number":105,"context_line":"            haproxy_cfg +\u003d ("},{"line_number":106,"context_line":"                \"    http-request add-header X-Neutron-Network-ID \")"},{"line_number":107,"context_line":"            haproxy_cfg +\u003d self.network_id"}],"source_content_type":"text/x-python","patch_set":11,"id":"fa31d9ce_577e0caf","line":104,"updated":"2017-02-17 08:27:09.000000000","message":"shouldn\u0027t we always have a network_id ?, why do we need this if? :)","commit_id":"cbb22eb0fec47a1ed0faa2c4707c673a6dd0df88"},{"author":{"_account_id":8788,"name":"Miguel Angel Ajo","email":"mangelajo@redhat.com","username":"mangelajo"},"change_message_id":"d10d2f857aaa2e383abe999ec494015fe76ffb5c","unresolved":false,"context_lines":[{"line_number":101,"context_line":"        }"},{"line_number":102,"context_line":""},{"line_number":103,"context_line":"        haproxy_cfg \u003d _HAPROXY_CONFIG_TEMPLATE % vars"},{"line_number":104,"context_line":"        if self.network_id:"},{"line_number":105,"context_line":"            haproxy_cfg +\u003d ("},{"line_number":106,"context_line":"                \"    http-request add-header X-Neutron-Network-ID \")"},{"line_number":107,"context_line":"            haproxy_cfg +\u003d self.network_id"}],"source_content_type":"text/x-python","patch_set":11,"id":"fa31d9ce_837da2e9","line":104,"in_reply_to":"fa31d9ce_1a93dba4","updated":"2017-02-17 13:34:57.000000000","message":"oh right, sorry :D","commit_id":"cbb22eb0fec47a1ed0faa2c4707c673a6dd0df88"},{"author":{"_account_id":23804,"name":"Daniel Alvarez","email":"dalvarez@redhat.com","username":"dalvarez"},"change_message_id":"d63bf29d9a90e81b47a50cd57fe384b5cc669930","unresolved":false,"context_lines":[{"line_number":101,"context_line":"        }"},{"line_number":102,"context_line":""},{"line_number":103,"context_line":"        haproxy_cfg \u003d _HAPROXY_CONFIG_TEMPLATE % vars"},{"line_number":104,"context_line":"        if self.network_id:"},{"line_number":105,"context_line":"            haproxy_cfg +\u003d ("},{"line_number":106,"context_line":"                \"    http-request add-header X-Neutron-Network-ID \")"},{"line_number":107,"context_line":"            haproxy_cfg +\u003d self.network_id"}],"source_content_type":"text/x-python","patch_set":11,"id":"fa31d9ce_1a93dba4","line":104,"in_reply_to":"fa31d9ce_577e0caf","updated":"2017-02-17 08:32:25.000000000","message":"It can have either a router_id or, if isolated, it will just have a network_id and proxy will be spawned in dhcp namespace","commit_id":"cbb22eb0fec47a1ed0faa2c4707c673a6dd0df88"},{"author":{"_account_id":8788,"name":"Miguel Angel Ajo","email":"mangelajo@redhat.com","username":"mangelajo"},"change_message_id":"a3d0039ae393b19e1c6977d2d891ae54c76b5c86","unresolved":false,"context_lines":[{"line_number":113,"context_line":"            haproxy_cfg +\u003d \"\\n\""},{"line_number":114,"context_line":"        LOG.debug(\"haproxy_cfg \u003d %s\", haproxy_cfg)"},{"line_number":115,"context_line":""},{"line_number":116,"context_line":"        cfg_dir \u003d os.path.join(self.state_path, PROXY_CONFIG_DIR)"},{"line_number":117,"context_line":"        # uuid has to be included somewhere in the command line so that it can"},{"line_number":118,"context_line":"        # be tracked by process_monitor."},{"line_number":119,"context_line":"        cfg_path \u003d os.path.join(cfg_dir,"}],"source_content_type":"text/x-python","patch_set":11,"id":"fa31d9ce_b79e6805","line":116,"updated":"2017-02-17 08:27:09.000000000","message":"L116-117 could be refactored to a separate function to be reused by config creator and config remover methods.","commit_id":"cbb22eb0fec47a1ed0faa2c4707c673a6dd0df88"},{"author":{"_account_id":8124,"name":"cbrandily","email":"zzelle@gmail.com","username":"cbrandily"},"change_message_id":"dd71da325280a1d5ed8f638a6993f39747df466f","unresolved":false,"context_lines":[{"line_number":30,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"PROXY_CONFIG_DIR \u003d \"ns-metadata-proxy\""},{"line_number":33,"context_line":"_HAPROXY_CONFIG_TEMPLATE \u003d \"\"\""},{"line_number":34,"context_line":"global"},{"line_number":35,"context_line":"    user        %(user)s"},{"line_number":36,"context_line":"    group       %(group)s"}],"source_content_type":"text/x-python","patch_set":13,"id":"da36d5c6_2b26b816","line":33,"updated":"2017-02-18 13:28:47.000000000","message":"I don\u0027t like the idea to embed an haproxy config template in neutron code. IMO, it\u0027s better if the template is outside neutron code (like rootwrap/policy conf) and its path is provided through a configuration option in order to allow deployers to customize it.","commit_id":"ec1ed3e6688efaec742dded4bcf644d216f5bd88"},{"author":{"_account_id":23804,"name":"Daniel Alvarez","email":"dalvarez@redhat.com","username":"dalvarez"},"change_message_id":"e00d49d7f1fdfb73d6835656f1de83d05582b59f","unresolved":false,"context_lines":[{"line_number":30,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"PROXY_CONFIG_DIR \u003d \"ns-metadata-proxy\""},{"line_number":33,"context_line":"_HAPROXY_CONFIG_TEMPLATE \u003d \"\"\""},{"line_number":34,"context_line":"global"},{"line_number":35,"context_line":"    user        %(user)s"},{"line_number":36,"context_line":"    group       %(group)s"}],"source_content_type":"text/x-python","patch_set":13,"id":"da36d5c6_ae745acf","line":33,"in_reply_to":"da36d5c6_2b26b816","updated":"2017-02-20 20:34:55.000000000","message":"This is currently being done by dibble, ra,... Maybe I should use jinja for better clarity. What do you think?","commit_id":"ec1ed3e6688efaec742dded4bcf644d216f5bd88"},{"author":{"_account_id":8124,"name":"cbrandily","email":"zzelle@gmail.com","username":"cbrandily"},"change_message_id":"dd71da325280a1d5ed8f638a6993f39747df466f","unresolved":false,"context_lines":[{"line_number":32,"context_line":"PROXY_CONFIG_DIR \u003d \"ns-metadata-proxy\""},{"line_number":33,"context_line":"_HAPROXY_CONFIG_TEMPLATE \u003d \"\"\""},{"line_number":34,"context_line":"global"},{"line_number":35,"context_line":"    user        %(user)s"},{"line_number":36,"context_line":"    group       %(group)s"},{"line_number":37,"context_line":"    log         127.0.0.1 local2"},{"line_number":38,"context_line":"    maxconn     1024"}],"source_content_type":"text/x-python","patch_set":13,"id":"da36d5c6_eb34a04b","line":35,"updated":"2017-02-18 13:28:47.000000000","message":"iiuc haproxy documentation, user/group set the user/group of listening unix sockets ... it\u0027s already done by the metadata-agent?","commit_id":"ec1ed3e6688efaec742dded4bcf644d216f5bd88"},{"author":{"_account_id":23804,"name":"Daniel Alvarez","email":"dalvarez@redhat.com","username":"dalvarez"},"change_message_id":"e00d49d7f1fdfb73d6835656f1de83d05582b59f","unresolved":false,"context_lines":[{"line_number":32,"context_line":"PROXY_CONFIG_DIR \u003d \"ns-metadata-proxy\""},{"line_number":33,"context_line":"_HAPROXY_CONFIG_TEMPLATE \u003d \"\"\""},{"line_number":34,"context_line":"global"},{"line_number":35,"context_line":"    user        %(user)s"},{"line_number":36,"context_line":"    group       %(group)s"},{"line_number":37,"context_line":"    log         127.0.0.1 local2"},{"line_number":38,"context_line":"    maxconn     1024"}],"source_content_type":"text/x-python","patch_set":13,"id":"da36d5c6_dacead59","line":35,"in_reply_to":"da36d5c6_cb798531","updated":"2017-02-20 20:34:55.000000000","message":"ack :)","commit_id":"ec1ed3e6688efaec742dded4bcf644d216f5bd88"},{"author":{"_account_id":8124,"name":"cbrandily","email":"zzelle@gmail.com","username":"cbrandily"},"change_message_id":"c548d274ac77ec60ea85d95ad7a582bb67c805e2","unresolved":false,"context_lines":[{"line_number":32,"context_line":"PROXY_CONFIG_DIR \u003d \"ns-metadata-proxy\""},{"line_number":33,"context_line":"_HAPROXY_CONFIG_TEMPLATE \u003d \"\"\""},{"line_number":34,"context_line":"global"},{"line_number":35,"context_line":"    user        %(user)s"},{"line_number":36,"context_line":"    group       %(group)s"},{"line_number":37,"context_line":"    log         127.0.0.1 local2"},{"line_number":38,"context_line":"    maxconn     1024"}],"source_content_type":"text/x-python","patch_set":13,"id":"da36d5c6_cb798531","line":35,"in_reply_to":"da36d5c6_eb34a04b","updated":"2017-02-20 12:40:52.000000000","message":"Forget previous comment, i readed user/group effects in section bind instead of global","commit_id":"ec1ed3e6688efaec742dded4bcf644d216f5bd88"},{"author":{"_account_id":8124,"name":"cbrandily","email":"zzelle@gmail.com","username":"cbrandily"},"change_message_id":"dd71da325280a1d5ed8f638a6993f39747df466f","unresolved":false,"context_lines":[{"line_number":34,"context_line":"global"},{"line_number":35,"context_line":"    user        %(user)s"},{"line_number":36,"context_line":"    group       %(group)s"},{"line_number":37,"context_line":"    log         127.0.0.1 local2"},{"line_number":38,"context_line":"    maxconn     1024"},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"defaults"}],"source_content_type":"text/x-python","patch_set":13,"id":"da36d5c6_ebaae084","line":37,"updated":"2017-02-18 13:28:47.000000000","message":"According to haproxy doc[1], it means haproxy logs are send over UDP to a syslog server but afaik there is no syslog server listening in qrouter/dhcp namespaces.\n\n\n[1] http://cbonte.github.io/haproxy-dconv/1.7/configuration.html#4.2-log","commit_id":"ec1ed3e6688efaec742dded4bcf644d216f5bd88"},{"author":{"_account_id":23804,"name":"Daniel Alvarez","email":"dalvarez@redhat.com","username":"dalvarez"},"change_message_id":"e00d49d7f1fdfb73d6835656f1de83d05582b59f","unresolved":false,"context_lines":[{"line_number":34,"context_line":"global"},{"line_number":35,"context_line":"    user        %(user)s"},{"line_number":36,"context_line":"    group       %(group)s"},{"line_number":37,"context_line":"    log         127.0.0.1 local2"},{"line_number":38,"context_line":"    maxconn     1024"},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"defaults"}],"source_content_type":"text/x-python","patch_set":13,"id":"da36d5c6_eebbb20c","line":37,"in_reply_to":"da36d5c6_ebaae084","updated":"2017-02-20 20:34:55.000000000","message":"Yes... I thought that we could leave a door for logging just in case but this can be later introduced","commit_id":"ec1ed3e6688efaec742dded4bcf644d216f5bd88"},{"author":{"_account_id":8124,"name":"cbrandily","email":"zzelle@gmail.com","username":"cbrandily"},"change_message_id":"dd71da325280a1d5ed8f638a6993f39747df466f","unresolved":false,"context_lines":[{"line_number":47,"context_line":"    retries                 3"},{"line_number":48,"context_line":"    timeout http-request    10s"},{"line_number":49,"context_line":"    timeout connect         10s"},{"line_number":50,"context_line":"    timeout client          10s"},{"line_number":51,"context_line":"    timeout server          30s"},{"line_number":52,"context_line":"    timeout http-keep-alive 10s"},{"line_number":53,"context_line":""},{"line_number":54,"context_line":"listen listener"}],"source_content_type":"text/x-python","patch_set":13,"id":"da36d5c6_6bfc303f","line":51,"range":{"start_line":50,"start_character":1,"end_line":51,"end_character":31},"updated":"2017-02-18 13:28:47.000000000","message":"according to[1], \"it is highly recommended that the client timeout remains equal to the server timeout in order to avoid complex situations to debug\"\n\nhttp://cbonte.github.io/haproxy-dconv/1.7/configuration.html#4.2-timeout%20client","commit_id":"ec1ed3e6688efaec742dded4bcf644d216f5bd88"},{"author":{"_account_id":23804,"name":"Daniel Alvarez","email":"dalvarez@redhat.com","username":"dalvarez"},"change_message_id":"e00d49d7f1fdfb73d6835656f1de83d05582b59f","unresolved":false,"context_lines":[{"line_number":47,"context_line":"    retries                 3"},{"line_number":48,"context_line":"    timeout http-request    10s"},{"line_number":49,"context_line":"    timeout connect         10s"},{"line_number":50,"context_line":"    timeout client          10s"},{"line_number":51,"context_line":"    timeout server          30s"},{"line_number":52,"context_line":"    timeout http-keep-alive 10s"},{"line_number":53,"context_line":""},{"line_number":54,"context_line":"listen listener"}],"source_content_type":"text/x-python","patch_set":13,"id":"da36d5c6_9ab995ec","line":51,"range":{"start_line":50,"start_character":1,"end_line":51,"end_character":31},"in_reply_to":"da36d5c6_6bfc303f","updated":"2017-02-20 20:34:55.000000000","message":"Yes.. I\u0027ll set up both to 32 following this suggestion in [0]\n\"It is a good practice to cover one or several TCP packet\nlosses by specifying timeouts that are slightly above multiples of 3 seconds (eg: 4 or 5 seconds).\"\nAlso, I\u0027ll increase the rest of the values too.\n[0] http://cbonte.github.io/haproxy-dconv/1.7/configuration.html#4.2-clitimeout","commit_id":"ec1ed3e6688efaec742dded4bcf644d216f5bd88"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"208bd64db5993b83e939ae9782ed07604f61d514","unresolved":false,"context_lines":[{"line_number":49,"context_line":"    timeout connect         10s"},{"line_number":50,"context_line":"    timeout client          10s"},{"line_number":51,"context_line":"    timeout server          30s"},{"line_number":52,"context_line":"    timeout http-keep-alive 10s"},{"line_number":53,"context_line":""},{"line_number":54,"context_line":"listen listener"},{"line_number":55,"context_line":"    bind 0.0.0.0:%(port)s"}],"source_content_type":"text/x-python","patch_set":13,"id":"da36d5c6_57af0ee3","line":52,"updated":"2017-02-19 05:49:31.000000000","message":"how will this deal with https? is this a degradation?","commit_id":"ec1ed3e6688efaec742dded4bcf644d216f5bd88"},{"author":{"_account_id":23804,"name":"Daniel Alvarez","email":"dalvarez@redhat.com","username":"dalvarez"},"change_message_id":"e00d49d7f1fdfb73d6835656f1de83d05582b59f","unresolved":false,"context_lines":[{"line_number":49,"context_line":"    timeout connect         10s"},{"line_number":50,"context_line":"    timeout client          10s"},{"line_number":51,"context_line":"    timeout server          30s"},{"line_number":52,"context_line":"    timeout http-keep-alive 10s"},{"line_number":53,"context_line":""},{"line_number":54,"context_line":"listen listener"},{"line_number":55,"context_line":"    bind 0.0.0.0:%(port)s"}],"source_content_type":"text/x-python","patch_set":13,"id":"da36d5c6_df793f31","line":52,"in_reply_to":"da36d5c6_57af0ee3","updated":"2017-02-20 20:34:55.000000000","message":"Not sure if I got it. metadata queries are HTTP. I set this to 10 (default value in Apache is 5 secs [0]). Do you think the value is not high enough?\n[0] https://httpd.apache.org/docs/2.4/mod/core.html#keepalivetimeout","commit_id":"ec1ed3e6688efaec742dded4bcf644d216f5bd88"},{"author":{"_account_id":8124,"name":"cbrandily","email":"zzelle@gmail.com","username":"cbrandily"},"change_message_id":"dd71da325280a1d5ed8f638a6993f39747df466f","unresolved":false,"context_lines":[{"line_number":64,"context_line":"    accessible within the isolated tenant context."},{"line_number":65,"context_line":"    \"\"\""},{"line_number":66,"context_line":""},{"line_number":67,"context_line":"    def __init__(self, network_id\u003dNone, router_id\u003dNone, unix_socket_path\u003dNone,"},{"line_number":68,"context_line":"                 port\u003d\u00279697\u0027, user\u003dNone, group\u003dNone, state_path\u003dNone):"},{"line_number":69,"context_line":"        self.network_id \u003d network_id"},{"line_number":70,"context_line":"        self.router_id \u003d router_id"}],"source_content_type":"text/x-python","patch_set":13,"id":"da36d5c6_8b1de4bf","line":67,"updated":"2017-02-18 13:28:47.000000000","message":"in practice, no argument is optional","commit_id":"ec1ed3e6688efaec742dded4bcf644d216f5bd88"},{"author":{"_account_id":23804,"name":"Daniel Alvarez","email":"dalvarez@redhat.com","username":"dalvarez"},"change_message_id":"e00d49d7f1fdfb73d6835656f1de83d05582b59f","unresolved":false,"context_lines":[{"line_number":64,"context_line":"    accessible within the isolated tenant context."},{"line_number":65,"context_line":"    \"\"\""},{"line_number":66,"context_line":""},{"line_number":67,"context_line":"    def __init__(self, network_id\u003dNone, router_id\u003dNone, unix_socket_path\u003dNone,"},{"line_number":68,"context_line":"                 port\u003d\u00279697\u0027, user\u003dNone, group\u003dNone, state_path\u003dNone):"},{"line_number":69,"context_line":"        self.network_id \u003d network_id"},{"line_number":70,"context_line":"        self.router_id \u003d router_id"}],"source_content_type":"text/x-python","patch_set":13,"id":"da36d5c6_da6a2d1a","line":67,"in_reply_to":"da36d5c6_8b1de4bf","updated":"2017-02-20 20:34:55.000000000","message":"if network_id is passed (isolated metadata) then router_id is not needed and the other way around","commit_id":"ec1ed3e6688efaec742dded4bcf644d216f5bd88"},{"author":{"_account_id":8124,"name":"cbrandily","email":"zzelle@gmail.com","username":"cbrandily"},"change_message_id":"dd71da325280a1d5ed8f638a6993f39747df466f","unresolved":false,"context_lines":[{"line_number":92,"context_line":"        except ValueError:"},{"line_number":93,"context_line":"            groupname \u003d self.group"},{"line_number":94,"context_line":""},{"line_number":95,"context_line":"        vars \u003d {"},{"line_number":96,"context_line":"            \u0027port\u0027: self.port,"},{"line_number":97,"context_line":"            \u0027network_id\u0027: self.network_id or \u0027\u0027,"},{"line_number":98,"context_line":"            \u0027router_id\u0027: self.router_id or \u0027\u0027,"}],"source_content_type":"text/x-python","patch_set":13,"id":"da36d5c6_4be4cc0c","line":95,"updated":"2017-02-18 13:28:47.000000000","message":"vars is a builtin method name so this variable should be renamed","commit_id":"ec1ed3e6688efaec742dded4bcf644d216f5bd88"},{"author":{"_account_id":23804,"name":"Daniel Alvarez","email":"dalvarez@redhat.com","username":"dalvarez"},"change_message_id":"e00d49d7f1fdfb73d6835656f1de83d05582b59f","unresolved":false,"context_lines":[{"line_number":92,"context_line":"        except ValueError:"},{"line_number":93,"context_line":"            groupname \u003d self.group"},{"line_number":94,"context_line":""},{"line_number":95,"context_line":"        vars \u003d {"},{"line_number":96,"context_line":"            \u0027port\u0027: self.port,"},{"line_number":97,"context_line":"            \u0027network_id\u0027: self.network_id or \u0027\u0027,"},{"line_number":98,"context_line":"            \u0027router_id\u0027: self.router_id or \u0027\u0027,"}],"source_content_type":"text/x-python","patch_set":13,"id":"da36d5c6_ee0012ad","line":95,"in_reply_to":"da36d5c6_4be4cc0c","updated":"2017-02-20 20:34:55.000000000","message":"Done","commit_id":"ec1ed3e6688efaec742dded4bcf644d216f5bd88"},{"author":{"_account_id":8124,"name":"cbrandily","email":"zzelle@gmail.com","username":"cbrandily"},"change_message_id":"dd71da325280a1d5ed8f638a6993f39747df466f","unresolved":false,"context_lines":[{"line_number":94,"context_line":""},{"line_number":95,"context_line":"        vars \u003d {"},{"line_number":96,"context_line":"            \u0027port\u0027: self.port,"},{"line_number":97,"context_line":"            \u0027network_id\u0027: self.network_id or \u0027\u0027,"},{"line_number":98,"context_line":"            \u0027router_id\u0027: self.router_id or \u0027\u0027,"},{"line_number":99,"context_line":"            \u0027unix_socket_path\u0027: self.unix_socket_path,"},{"line_number":100,"context_line":"            \u0027user\u0027: username,"}],"source_content_type":"text/x-python","patch_set":13,"id":"da36d5c6_2b7cf81f","line":97,"updated":"2017-02-18 13:28:47.000000000","message":"useless","commit_id":"ec1ed3e6688efaec742dded4bcf644d216f5bd88"},{"author":{"_account_id":23804,"name":"Daniel Alvarez","email":"dalvarez@redhat.com","username":"dalvarez"},"change_message_id":"e00d49d7f1fdfb73d6835656f1de83d05582b59f","unresolved":false,"context_lines":[{"line_number":94,"context_line":""},{"line_number":95,"context_line":"        vars \u003d {"},{"line_number":96,"context_line":"            \u0027port\u0027: self.port,"},{"line_number":97,"context_line":"            \u0027network_id\u0027: self.network_id or \u0027\u0027,"},{"line_number":98,"context_line":"            \u0027router_id\u0027: self.router_id or \u0027\u0027,"},{"line_number":99,"context_line":"            \u0027unix_socket_path\u0027: self.unix_socket_path,"},{"line_number":100,"context_line":"            \u0027user\u0027: username,"}],"source_content_type":"text/x-python","patch_set":13,"id":"da36d5c6_8ef956cb","line":97,"in_reply_to":"da36d5c6_2b7cf81f","updated":"2017-02-20 20:34:55.000000000","message":"Done","commit_id":"ec1ed3e6688efaec742dded4bcf644d216f5bd88"},{"author":{"_account_id":8124,"name":"cbrandily","email":"zzelle@gmail.com","username":"cbrandily"},"change_message_id":"dd71da325280a1d5ed8f638a6993f39747df466f","unresolved":false,"context_lines":[{"line_number":95,"context_line":"        vars \u003d {"},{"line_number":96,"context_line":"            \u0027port\u0027: self.port,"},{"line_number":97,"context_line":"            \u0027network_id\u0027: self.network_id or \u0027\u0027,"},{"line_number":98,"context_line":"            \u0027router_id\u0027: self.router_id or \u0027\u0027,"},{"line_number":99,"context_line":"            \u0027unix_socket_path\u0027: self.unix_socket_path,"},{"line_number":100,"context_line":"            \u0027user\u0027: username,"},{"line_number":101,"context_line":"            \u0027group\u0027: groupname"}],"source_content_type":"text/x-python","patch_set":13,"id":"da36d5c6_4b792c2f","line":98,"updated":"2017-02-18 13:28:47.000000000","message":"useless","commit_id":"ec1ed3e6688efaec742dded4bcf644d216f5bd88"},{"author":{"_account_id":23804,"name":"Daniel Alvarez","email":"dalvarez@redhat.com","username":"dalvarez"},"change_message_id":"e00d49d7f1fdfb73d6835656f1de83d05582b59f","unresolved":false,"context_lines":[{"line_number":95,"context_line":"        vars \u003d {"},{"line_number":96,"context_line":"            \u0027port\u0027: self.port,"},{"line_number":97,"context_line":"            \u0027network_id\u0027: self.network_id or \u0027\u0027,"},{"line_number":98,"context_line":"            \u0027router_id\u0027: self.router_id or \u0027\u0027,"},{"line_number":99,"context_line":"            \u0027unix_socket_path\u0027: self.unix_socket_path,"},{"line_number":100,"context_line":"            \u0027user\u0027: username,"},{"line_number":101,"context_line":"            \u0027group\u0027: groupname"}],"source_content_type":"text/x-python","patch_set":13,"id":"da36d5c6_aef61ad5","line":98,"in_reply_to":"da36d5c6_4b792c2f","updated":"2017-02-20 20:34:55.000000000","message":"Done","commit_id":"ec1ed3e6688efaec742dded4bcf644d216f5bd88"},{"author":{"_account_id":8124,"name":"cbrandily","email":"zzelle@gmail.com","username":"cbrandily"},"change_message_id":"dd71da325280a1d5ed8f638a6993f39747df466f","unresolved":false,"context_lines":[{"line_number":103,"context_line":""},{"line_number":104,"context_line":"        haproxy_cfg \u003d _HAPROXY_CONFIG_TEMPLATE % vars"},{"line_number":105,"context_line":"        if self.network_id:"},{"line_number":106,"context_line":"            haproxy_cfg +\u003d ("},{"line_number":107,"context_line":"                \"    http-request add-header X-Neutron-Network-ID \")"},{"line_number":108,"context_line":"            haproxy_cfg +\u003d self.network_id"},{"line_number":109,"context_line":"            haproxy_cfg +\u003d \"\\n\""}],"source_content_type":"text/x-python","patch_set":13,"id":"da36d5c6_6b76f03f","line":106,"updated":"2017-02-18 13:28:47.000000000","message":"it\u0027s poorly readable and not recommended, prefer:\n\n  \u0027... %s\\n\u0027 % self.network_id","commit_id":"ec1ed3e6688efaec742dded4bcf644d216f5bd88"},{"author":{"_account_id":23804,"name":"Daniel Alvarez","email":"dalvarez@redhat.com","username":"dalvarez"},"change_message_id":"e00d49d7f1fdfb73d6835656f1de83d05582b59f","unresolved":false,"context_lines":[{"line_number":103,"context_line":""},{"line_number":104,"context_line":"        haproxy_cfg \u003d _HAPROXY_CONFIG_TEMPLATE % vars"},{"line_number":105,"context_line":"        if self.network_id:"},{"line_number":106,"context_line":"            haproxy_cfg +\u003d ("},{"line_number":107,"context_line":"                \"    http-request add-header X-Neutron-Network-ID \")"},{"line_number":108,"context_line":"            haproxy_cfg +\u003d self.network_id"},{"line_number":109,"context_line":"            haproxy_cfg +\u003d \"\\n\""}],"source_content_type":"text/x-python","patch_set":13,"id":"da36d5c6_8e95d641","line":106,"in_reply_to":"da36d5c6_6b76f03f","updated":"2017-02-20 20:34:55.000000000","message":"Done","commit_id":"ec1ed3e6688efaec742dded4bcf644d216f5bd88"},{"author":{"_account_id":8124,"name":"cbrandily","email":"zzelle@gmail.com","username":"cbrandily"},"change_message_id":"c548d274ac77ec60ea85d95ad7a582bb67c805e2","unresolved":false,"context_lines":[{"line_number":165,"context_line":"        self.network_id \u003d network_id"},{"line_number":166,"context_line":"        self.router_id \u003d router_id"},{"line_number":167,"context_line":"        self.port \u003d port"},{"line_number":168,"context_line":"        self.user \u003d user"},{"line_number":169,"context_line":"        self.group \u003d group"},{"line_number":170,"context_line":"        self.proxy_socket \u003d proxy_socket"},{"line_number":171,"context_line":"        self.state_path \u003d state_path"},{"line_number":172,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"da36d5c6_ab545154","line":169,"range":{"start_line":168,"start_character":6,"end_line":169,"end_character":26},"updated":"2017-02-20 12:40:52.000000000","message":"Already done in super.__init__","commit_id":"ec1ed3e6688efaec742dded4bcf644d216f5bd88"},{"author":{"_account_id":23804,"name":"Daniel Alvarez","email":"dalvarez@redhat.com","username":"dalvarez"},"change_message_id":"e00d49d7f1fdfb73d6835656f1de83d05582b59f","unresolved":false,"context_lines":[{"line_number":165,"context_line":"        self.network_id \u003d network_id"},{"line_number":166,"context_line":"        self.router_id \u003d router_id"},{"line_number":167,"context_line":"        self.port \u003d port"},{"line_number":168,"context_line":"        self.user \u003d user"},{"line_number":169,"context_line":"        self.group \u003d group"},{"line_number":170,"context_line":"        self.proxy_socket \u003d proxy_socket"},{"line_number":171,"context_line":"        self.state_path \u003d state_path"},{"line_number":172,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"da36d5c6_8e6876bc","line":169,"range":{"start_line":168,"start_character":6,"end_line":169,"end_character":26},"in_reply_to":"da36d5c6_ab545154","updated":"2017-02-20 20:34:55.000000000","message":"True, thanks","commit_id":"ec1ed3e6688efaec742dded4bcf644d216f5bd88"},{"author":{"_account_id":8124,"name":"cbrandily","email":"zzelle@gmail.com","username":"cbrandily"},"change_message_id":"c548d274ac77ec60ea85d95ad7a582bb67c805e2","unresolved":false,"context_lines":[{"line_number":196,"context_line":"                        router_id\u003dcfg.CONF.router_id,"},{"line_number":197,"context_line":"                        user\u003dcfg.CONF.metadata_proxy_user,"},{"line_number":198,"context_line":"                        group\u003dcfg.CONF.metadata_proxy_group,"},{"line_number":199,"context_line":"                        watch_log\u003dcfg.CONF.metadata_proxy_watch_log,"},{"line_number":200,"context_line":"                        proxy_socket\u003dcfg.CONF.metadata_proxy_socket,"},{"line_number":201,"context_line":"                        state_path\u003dcfg.CONF.state_path)"},{"line_number":202,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"da36d5c6_ebe569a8","line":199,"range":{"start_line":199,"start_character":23,"end_line":199,"end_character":68},"updated":"2017-02-20 12:40:52.000000000","message":"this option becomes useless","commit_id":"ec1ed3e6688efaec742dded4bcf644d216f5bd88"},{"author":{"_account_id":23804,"name":"Daniel Alvarez","email":"dalvarez@redhat.com","username":"dalvarez"},"change_message_id":"e00d49d7f1fdfb73d6835656f1de83d05582b59f","unresolved":false,"context_lines":[{"line_number":196,"context_line":"                        router_id\u003dcfg.CONF.router_id,"},{"line_number":197,"context_line":"                        user\u003dcfg.CONF.metadata_proxy_user,"},{"line_number":198,"context_line":"                        group\u003dcfg.CONF.metadata_proxy_group,"},{"line_number":199,"context_line":"                        watch_log\u003dcfg.CONF.metadata_proxy_watch_log,"},{"line_number":200,"context_line":"                        proxy_socket\u003dcfg.CONF.metadata_proxy_socket,"},{"line_number":201,"context_line":"                        state_path\u003dcfg.CONF.state_path)"},{"line_number":202,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"da36d5c6_4e83decc","line":199,"range":{"start_line":199,"start_character":23,"end_line":199,"end_character":68},"in_reply_to":"da36d5c6_ebe569a8","updated":"2017-02-20 20:34:55.000000000","message":"Done","commit_id":"ec1ed3e6688efaec742dded4bcf644d216f5bd88"},{"author":{"_account_id":8124,"name":"cbrandily","email":"zzelle@gmail.com","username":"cbrandily"},"change_message_id":"6c7e841f294c2aee96363ffac3f5a330df76540e","unresolved":false,"context_lines":[{"line_number":30,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"PROXY_CONFIG_DIR \u003d \"ns-metadata-proxy\""},{"line_number":33,"context_line":"_HAPROXY_CONFIG_TEMPLATE \u003d \"\"\""},{"line_number":34,"context_line":"global"},{"line_number":35,"context_line":"    user        %(user)s"},{"line_number":36,"context_line":"    group       %(group)s"}],"source_content_type":"text/x-python","patch_set":16,"id":"da36d5c6_a7b63488","line":33,"updated":"2017-02-20 22:10:05.000000000","message":"PS13 follow-up: IMO, it\u0027s a wrong design to embed config template in neutron code (for existing and new features) even more in haproxy case which allows many customizations: change timeouts, performance tuning, ratelimit (maxconnrate) and logging as haproxy cannot log over tcp/udp but can log to a unix socket.","commit_id":"8549504312ac7e4b038384a86497066dbbb02168"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"2f8ed890d0c9c325f5e69799e74e0f5aa679402c","unresolved":false,"context_lines":[{"line_number":30,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"PROXY_CONFIG_DIR \u003d \"ns-metadata-proxy\""},{"line_number":33,"context_line":"_HAPROXY_CONFIG_TEMPLATE \u003d \"\"\""},{"line_number":34,"context_line":"global"},{"line_number":35,"context_line":"    user        %(user)s"},{"line_number":36,"context_line":"    group       %(group)s"}],"source_content_type":"text/x-python","patch_set":16,"id":"da36d5c6_e42baf92","line":33,"in_reply_to":"da36d5c6_a7b63488","updated":"2017-02-21 15:24:48.000000000","message":"I don\u0027t think it should be exposed to the user to change settings of haproxy here. User shouldn\u0027t care how the traffic is proxied to the metadata api. Having such a thing configurable introduces unnecessary complexity and more things where configuration can be screwed.\n\nDo you have a use-case where it would make sense to change this configuration? The point of this patch should be to replace python namespace proxy with something more lightweight to decrease the memory footprint.","commit_id":"8549504312ac7e4b038384a86497066dbbb02168"},{"author":{"_account_id":8788,"name":"Miguel Angel Ajo","email":"mangelajo@redhat.com","username":"mangelajo"},"change_message_id":"50ef5fd199f786dd4e549bf339741f31ee903768","unresolved":false,"context_lines":[{"line_number":30,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"PROXY_CONFIG_DIR \u003d \"ns-metadata-proxy\""},{"line_number":33,"context_line":"_HAPROXY_CONFIG_TEMPLATE \u003d \"\"\""},{"line_number":34,"context_line":"global"},{"line_number":35,"context_line":"    user        %(user)s"},{"line_number":36,"context_line":"    group       %(group)s"}],"source_content_type":"text/x-python","patch_set":16,"id":"da36d5c6_df09152e","line":33,"in_reply_to":"da36d5c6_e42baf92","updated":"2017-02-21 15:47:29.000000000","message":"I agree with Jakub here. The files packaged by python should not be modifiable by the operator, and add extra complexity when you need to debug a deployment for issues and you don\u0027t know how the CSP tweaked this file.\n\nI strongly believe that it\u0027s better to keep tight control over this, and make any modification we need to do from the neutron code base, so any tweaks necessary to make this work better should go through the community and be available for everybody.","commit_id":"8549504312ac7e4b038384a86497066dbbb02168"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"50fcb53cea44f1809910f608917953d94974fa40","unresolved":false,"context_lines":[{"line_number":61,"context_line":"    \"\"\""},{"line_number":62,"context_line":""},{"line_number":63,"context_line":"    def __init__(self, network_id\u003dNone, router_id\u003dNone, unix_socket_path\u003dNone,"},{"line_number":64,"context_line":"                 port\u003d\u00279697\u0027, user\u003dNone, group\u003dNone, state_path\u003dNone):"},{"line_number":65,"context_line":"        self.network_id \u003d network_id"},{"line_number":66,"context_line":"        self.router_id \u003d router_id"},{"line_number":67,"context_line":"        if network_id is None and router_id is None:"}],"source_content_type":"text/x-python","patch_set":16,"id":"da36d5c6_27a0849f","line":64,"updated":"2017-02-20 21:46:46.000000000","message":"I agree with Cedric\u0027c comments from PS 13, these default params are never used, ProxyDaemon always passes them down. Then you won\u0027t need to fetch values from config file.","commit_id":"8549504312ac7e4b038384a86497066dbbb02168"},{"author":{"_account_id":23804,"name":"Daniel Alvarez","email":"dalvarez@redhat.com","username":"dalvarez"},"change_message_id":"951186c5a897524c619ca4000a06225fe2ab3061","unresolved":false,"context_lines":[{"line_number":61,"context_line":"    \"\"\""},{"line_number":62,"context_line":""},{"line_number":63,"context_line":"    def __init__(self, network_id\u003dNone, router_id\u003dNone, unix_socket_path\u003dNone,"},{"line_number":64,"context_line":"                 port\u003d\u00279697\u0027, user\u003dNone, group\u003dNone, state_path\u003dNone):"},{"line_number":65,"context_line":"        self.network_id \u003d network_id"},{"line_number":66,"context_line":"        self.router_id \u003d router_id"},{"line_number":67,"context_line":"        if network_id is None and router_id is None:"}],"source_content_type":"text/x-python","patch_set":16,"id":"da36d5c6_1fc00ee0","line":64,"in_reply_to":"da36d5c6_27a0849f","updated":"2017-02-21 18:10:47.000000000","message":"Done","commit_id":"8549504312ac7e4b038384a86497066dbbb02168"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"50fcb53cea44f1809910f608917953d94974fa40","unresolved":false,"context_lines":[{"line_number":68,"context_line":"            raise exceptions.NetworkIdOrRouterIdRequiredError()"},{"line_number":69,"context_line":""},{"line_number":70,"context_line":"        self.port \u003d port"},{"line_number":71,"context_line":"        self.user \u003d user or str(os.geteuid())"},{"line_number":72,"context_line":"        self.group \u003d group or str(os.getegid())"},{"line_number":73,"context_line":"        self.state_path \u003d state_path"},{"line_number":74,"context_line":"        self.unix_socket_path \u003d (unix_socket_path or"}],"source_content_type":"text/x-python","patch_set":16,"id":"da36d5c6_47c2d834","line":71,"updated":"2017-02-20 21:46:46.000000000","message":"This is good, user is empty string by default so it\u0027s fine to fetch the default. Might be worth to mention in in docstring though.","commit_id":"8549504312ac7e4b038384a86497066dbbb02168"},{"author":{"_account_id":23804,"name":"Daniel Alvarez","email":"dalvarez@redhat.com","username":"dalvarez"},"change_message_id":"951186c5a897524c619ca4000a06225fe2ab3061","unresolved":false,"context_lines":[{"line_number":68,"context_line":"            raise exceptions.NetworkIdOrRouterIdRequiredError()"},{"line_number":69,"context_line":""},{"line_number":70,"context_line":"        self.port \u003d port"},{"line_number":71,"context_line":"        self.user \u003d user or str(os.geteuid())"},{"line_number":72,"context_line":"        self.group \u003d group or str(os.getegid())"},{"line_number":73,"context_line":"        self.state_path \u003d state_path"},{"line_number":74,"context_line":"        self.unix_socket_path \u003d (unix_socket_path or"}],"source_content_type":"text/x-python","patch_set":16,"id":"da36d5c6_2416a7a7","line":71,"in_reply_to":"da36d5c6_47c2d834","updated":"2017-02-21 18:10:47.000000000","message":"Done","commit_id":"8549504312ac7e4b038384a86497066dbbb02168"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"50fcb53cea44f1809910f608917953d94974fa40","unresolved":false,"context_lines":[{"line_number":79,"context_line":"        # Need to convert uid/gid into username/group"},{"line_number":80,"context_line":"        try:"},{"line_number":81,"context_line":"            pw_user \u003d pwd.getpwuid(int(self.user))"},{"line_number":82,"context_line":"            username \u003d pw_user[0]"},{"line_number":83,"context_line":"        except ValueError:"},{"line_number":84,"context_line":"            username \u003d self.user"},{"line_number":85,"context_line":""}],"source_content_type":"text/x-python","patch_set":16,"id":"da36d5c6_a75ab481","line":82,"range":{"start_line":82,"start_character":30,"end_line":82,"end_character":33},"updated":"2017-02-20 21:46:46.000000000","message":"Nit: pw_name","commit_id":"8549504312ac7e4b038384a86497066dbbb02168"},{"author":{"_account_id":23804,"name":"Daniel Alvarez","email":"dalvarez@redhat.com","username":"dalvarez"},"change_message_id":"951186c5a897524c619ca4000a06225fe2ab3061","unresolved":false,"context_lines":[{"line_number":79,"context_line":"        # Need to convert uid/gid into username/group"},{"line_number":80,"context_line":"        try:"},{"line_number":81,"context_line":"            pw_user \u003d pwd.getpwuid(int(self.user))"},{"line_number":82,"context_line":"            username \u003d pw_user[0]"},{"line_number":83,"context_line":"        except ValueError:"},{"line_number":84,"context_line":"            username \u003d self.user"},{"line_number":85,"context_line":""}],"source_content_type":"text/x-python","patch_set":16,"id":"da36d5c6_44d2bbd3","line":82,"range":{"start_line":82,"start_character":30,"end_line":82,"end_character":33},"in_reply_to":"da36d5c6_a75ab481","updated":"2017-02-21 18:10:47.000000000","message":"Done","commit_id":"8549504312ac7e4b038384a86497066dbbb02168"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"50fcb53cea44f1809910f608917953d94974fa40","unresolved":false,"context_lines":[{"line_number":95,"context_line":"            \u0027group\u0027: groupname"},{"line_number":96,"context_line":"        }"},{"line_number":97,"context_line":""},{"line_number":98,"context_line":"        haproxy_cfg \u003d _HAPROXY_CONFIG_TEMPLATE % cfg_info"},{"line_number":99,"context_line":"        if self.network_id:"},{"line_number":100,"context_line":"            haproxy_cfg +\u003d ("},{"line_number":101,"context_line":"                \"    http-request add-header X-Neutron-Network-ID %s\\n\" %"},{"line_number":102,"context_line":"                self.network_id)"},{"line_number":103,"context_line":"        if self.router_id:"},{"line_number":104,"context_line":"            haproxy_cfg +\u003d ("},{"line_number":105,"context_line":"                \"    http-request add-header X-Neutron-Router-ID %s\\n\" %"},{"line_number":106,"context_line":"                self.router_id)"},{"line_number":107,"context_line":"        LOG.debug(\"haproxy_cfg \u003d %s\", haproxy_cfg)"},{"line_number":108,"context_line":"        cfg_dir \u003d self.get_config_path(self.state_path)"},{"line_number":109,"context_line":"        # uuid has to be included somewhere in the command line so that it can"}],"source_content_type":"text/x-python","patch_set":16,"id":"da36d5c6_e73aeccc","line":106,"range":{"start_line":98,"start_character":0,"end_line":106,"end_character":31},"updated":"2017-02-20 21:46:46.000000000","message":"Since the point of the proxy is to add these headers, you could add a line to haproxy conf:\n\n    http-request add-header X-Neutron-%(res_type)s-ID %(res_id)s\\n\n\nand then the code would be:\n\n if self.network_id and self.router_id:\n     raise \u003cexception cause they are mutually exclusive\u003e\n\n if self.network:\n     cfg_info[\u0027res_type\u0027] \u003d \u0027Network\u0027\n     cfg_info[\u0027res_id\u0027] \u003d self.network_id\n else:\n     cfg_info[\u0027res_type\u0027] \u003d \u0027Router\u0027\n     cfg_info[\u0027res_id\u0027] \u003d self.router_id\n haproxy_cfg \u003d _HAPROXY_CONFIG_TEMPLATE % cfg_info","commit_id":"8549504312ac7e4b038384a86497066dbbb02168"},{"author":{"_account_id":23804,"name":"Daniel Alvarez","email":"dalvarez@redhat.com","username":"dalvarez"},"change_message_id":"951186c5a897524c619ca4000a06225fe2ab3061","unresolved":false,"context_lines":[{"line_number":95,"context_line":"            \u0027group\u0027: groupname"},{"line_number":96,"context_line":"        }"},{"line_number":97,"context_line":""},{"line_number":98,"context_line":"        haproxy_cfg \u003d _HAPROXY_CONFIG_TEMPLATE % cfg_info"},{"line_number":99,"context_line":"        if self.network_id:"},{"line_number":100,"context_line":"            haproxy_cfg +\u003d ("},{"line_number":101,"context_line":"                \"    http-request add-header X-Neutron-Network-ID %s\\n\" %"},{"line_number":102,"context_line":"                self.network_id)"},{"line_number":103,"context_line":"        if self.router_id:"},{"line_number":104,"context_line":"            haproxy_cfg +\u003d ("},{"line_number":105,"context_line":"                \"    http-request add-header X-Neutron-Router-ID %s\\n\" %"},{"line_number":106,"context_line":"                self.router_id)"},{"line_number":107,"context_line":"        LOG.debug(\"haproxy_cfg \u003d %s\", haproxy_cfg)"},{"line_number":108,"context_line":"        cfg_dir \u003d self.get_config_path(self.state_path)"},{"line_number":109,"context_line":"        # uuid has to be included somewhere in the command line so that it can"}],"source_content_type":"text/x-python","patch_set":16,"id":"da36d5c6_a408d72e","line":106,"range":{"start_line":98,"start_character":0,"end_line":106,"end_character":31},"in_reply_to":"da36d5c6_e73aeccc","updated":"2017-02-21 18:10:47.000000000","message":"Previous implementation didn\u0027t treat both parameters as mutually exclusive; instead if router was passed then it was used. I\u0027ll follow your suggestions about the templating but I\u0027d rather keep the same behavior unless you see a reason not to do it (which BTW i wasn\u0027t following and now changing in PS17)","commit_id":"8549504312ac7e4b038384a86497066dbbb02168"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"50fcb53cea44f1809910f608917953d94974fa40","unresolved":false,"context_lines":[{"line_number":110,"context_line":"        # be tracked by process_monitor."},{"line_number":111,"context_line":"        self.cfg_path \u003d os.path.join(cfg_dir,"},{"line_number":112,"context_line":"                                     (self.router_id or self.network_id) +"},{"line_number":113,"context_line":"                                     \".conf\")"},{"line_number":114,"context_line":"        if not os.path.exists(cfg_dir):"},{"line_number":115,"context_line":"            os.makedirs(cfg_dir)"},{"line_number":116,"context_line":"        with open(self.cfg_path, \"w\") as cfg_file:"}],"source_content_type":"text/x-python","patch_set":16,"id":"da36d5c6_a7d1d4cf","line":113,"updated":"2017-02-20 21:46:46.000000000","message":"Same as L140, formatting preferable over concatenation","commit_id":"8549504312ac7e4b038384a86497066dbbb02168"},{"author":{"_account_id":23804,"name":"Daniel Alvarez","email":"dalvarez@redhat.com","username":"dalvarez"},"change_message_id":"951186c5a897524c619ca4000a06225fe2ab3061","unresolved":false,"context_lines":[{"line_number":110,"context_line":"        # be tracked by process_monitor."},{"line_number":111,"context_line":"        self.cfg_path \u003d os.path.join(cfg_dir,"},{"line_number":112,"context_line":"                                     (self.router_id or self.network_id) +"},{"line_number":113,"context_line":"                                     \".conf\")"},{"line_number":114,"context_line":"        if not os.path.exists(cfg_dir):"},{"line_number":115,"context_line":"            os.makedirs(cfg_dir)"},{"line_number":116,"context_line":"        with open(self.cfg_path, \"w\") as cfg_file:"}],"source_content_type":"text/x-python","patch_set":16,"id":"da36d5c6_9fc07e7e","line":113,"in_reply_to":"da36d5c6_a7d1d4cf","updated":"2017-02-21 18:10:47.000000000","message":"Done","commit_id":"8549504312ac7e4b038384a86497066dbbb02168"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"50fcb53cea44f1809910f608917953d94974fa40","unresolved":false,"context_lines":[{"line_number":119,"context_line":"    def run_proxy(self):"},{"line_number":120,"context_line":"        \"\"\"Start haproxy with the right config file.\"\"\""},{"line_number":121,"context_line":"        self._create_config_file()"},{"line_number":122,"context_line":"        haproxy_path \u003d agent_utils.execute([\u0027which\u0027, \u0027haproxy\u0027],"},{"line_number":123,"context_line":"                                           run_as_root\u003dFalse).strip()"},{"line_number":124,"context_line":"        LOG.debug(\"haproxy path: %s\", haproxy_path)"},{"line_number":125,"context_line":""},{"line_number":126,"context_line":"        # Replace our process image with haproxy and keep our PID for tracking"}],"source_content_type":"text/x-python","patch_set":16,"id":"da36d5c6_dca4df58","line":123,"range":{"start_line":122,"start_character":0,"end_line":123,"end_character":69},"updated":"2017-02-20 21:46:46.000000000","message":"from distutils import spawn\n\n spawn.find_executable(\u0027haproxy\u0027)","commit_id":"8549504312ac7e4b038384a86497066dbbb02168"},{"author":{"_account_id":23804,"name":"Daniel Alvarez","email":"dalvarez@redhat.com","username":"dalvarez"},"change_message_id":"951186c5a897524c619ca4000a06225fe2ab3061","unresolved":false,"context_lines":[{"line_number":119,"context_line":"    def run_proxy(self):"},{"line_number":120,"context_line":"        \"\"\"Start haproxy with the right config file.\"\"\""},{"line_number":121,"context_line":"        self._create_config_file()"},{"line_number":122,"context_line":"        haproxy_path \u003d agent_utils.execute([\u0027which\u0027, \u0027haproxy\u0027],"},{"line_number":123,"context_line":"                                           run_as_root\u003dFalse).strip()"},{"line_number":124,"context_line":"        LOG.debug(\"haproxy path: %s\", haproxy_path)"},{"line_number":125,"context_line":""},{"line_number":126,"context_line":"        # Replace our process image with haproxy and keep our PID for tracking"}],"source_content_type":"text/x-python","patch_set":16,"id":"da36d5c6_1f93ae50","line":123,"range":{"start_line":122,"start_character":0,"end_line":123,"end_character":69},"in_reply_to":"da36d5c6_dca4df58","updated":"2017-02-21 18:10:47.000000000","message":"Done","commit_id":"8549504312ac7e4b038384a86497066dbbb02168"},{"author":{"_account_id":8788,"name":"Miguel Angel Ajo","email":"mangelajo@redhat.com","username":"mangelajo"},"change_message_id":"35ee036e2b2e158b25743f1dab9dfe0786e118bf","unresolved":false,"context_lines":[{"line_number":137,"context_line":"    # Delete config file if it exists"},{"line_number":138,"context_line":"    cfg_path \u003d os.path.join("},{"line_number":139,"context_line":"        NetworkMetadataProxyHandler.get_config_path(state_path),"},{"line_number":140,"context_line":"        uuid + \".conf\")"},{"line_number":141,"context_line":"    try:"},{"line_number":142,"context_line":"        os.unlink(cfg_path)"},{"line_number":143,"context_line":"    except OSError as ex:"}],"source_content_type":"text/x-python","patch_set":16,"id":"da36d5c6_dc405f59","line":140,"updated":"2017-02-20 21:24:45.000000000","message":"\"%s.conf\" % uuid will work better while on unit tests avoiding the need to mock the notify (I believe)","commit_id":"8549504312ac7e4b038384a86497066dbbb02168"},{"author":{"_account_id":23804,"name":"Daniel Alvarez","email":"dalvarez@redhat.com","username":"dalvarez"},"change_message_id":"951186c5a897524c619ca4000a06225fe2ab3061","unresolved":false,"context_lines":[{"line_number":137,"context_line":"    # Delete config file if it exists"},{"line_number":138,"context_line":"    cfg_path \u003d os.path.join("},{"line_number":139,"context_line":"        NetworkMetadataProxyHandler.get_config_path(state_path),"},{"line_number":140,"context_line":"        uuid + \".conf\")"},{"line_number":141,"context_line":"    try:"},{"line_number":142,"context_line":"        os.unlink(cfg_path)"},{"line_number":143,"context_line":"    except OSError as ex:"}],"source_content_type":"text/x-python","patch_set":16,"id":"da36d5c6_3f9a3264","line":140,"in_reply_to":"da36d5c6_c75de8ea","updated":"2017-02-21 18:10:47.000000000","message":"Done.","commit_id":"8549504312ac7e4b038384a86497066dbbb02168"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"50fcb53cea44f1809910f608917953d94974fa40","unresolved":false,"context_lines":[{"line_number":137,"context_line":"    # Delete config file if it exists"},{"line_number":138,"context_line":"    cfg_path \u003d os.path.join("},{"line_number":139,"context_line":"        NetworkMetadataProxyHandler.get_config_path(state_path),"},{"line_number":140,"context_line":"        uuid + \".conf\")"},{"line_number":141,"context_line":"    try:"},{"line_number":142,"context_line":"        os.unlink(cfg_path)"},{"line_number":143,"context_line":"    except OSError as ex:"}],"source_content_type":"text/x-python","patch_set":16,"id":"da36d5c6_c75de8ea","line":140,"in_reply_to":"da36d5c6_dc405f59","updated":"2017-02-20 21:46:46.000000000","message":"+1 to use formatting instead of concatenation.","commit_id":"8549504312ac7e4b038384a86497066dbbb02168"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"50fcb53cea44f1809910f608917953d94974fa40","unresolved":false,"context_lines":[{"line_number":150,"context_line":"class ProxyDaemon(daemon.Daemon):"},{"line_number":151,"context_line":"    def __init__(self, pidfile, port, network_id\u003dNone, router_id\u003dNone,"},{"line_number":152,"context_line":"                 user\u003dNone, group\u003dNone, watch_log\u003dTrue,"},{"line_number":153,"context_line":"                 proxy_socket\u003dNone, state_path\u003d\u0027\u0027):"},{"line_number":154,"context_line":"        uuid \u003d network_id or router_id"},{"line_number":155,"context_line":"        super(ProxyDaemon, self).__init__(pidfile, uuid\u003duuid, user\u003duser,"},{"line_number":156,"context_line":"                                          group\u003dgroup, watch_log\u003dwatch_log)"}],"source_content_type":"text/x-python","patch_set":16,"id":"da36d5c6_47e3b8a3","line":153,"updated":"2017-02-20 21:46:46.000000000","message":"Same as L64, all values are always passed.","commit_id":"8549504312ac7e4b038384a86497066dbbb02168"},{"author":{"_account_id":23804,"name":"Daniel Alvarez","email":"dalvarez@redhat.com","username":"dalvarez"},"change_message_id":"951186c5a897524c619ca4000a06225fe2ab3061","unresolved":false,"context_lines":[{"line_number":150,"context_line":"class ProxyDaemon(daemon.Daemon):"},{"line_number":151,"context_line":"    def __init__(self, pidfile, port, network_id\u003dNone, router_id\u003dNone,"},{"line_number":152,"context_line":"                 user\u003dNone, group\u003dNone, watch_log\u003dTrue,"},{"line_number":153,"context_line":"                 proxy_socket\u003dNone, state_path\u003d\u0027\u0027):"},{"line_number":154,"context_line":"        uuid \u003d network_id or router_id"},{"line_number":155,"context_line":"        super(ProxyDaemon, self).__init__(pidfile, uuid\u003duuid, user\u003duser,"},{"line_number":156,"context_line":"                                          group\u003dgroup, watch_log\u003dwatch_log)"}],"source_content_type":"text/x-python","patch_set":16,"id":"da36d5c6_1f99ee1f","line":153,"in_reply_to":"da36d5c6_47e3b8a3","updated":"2017-02-21 18:10:47.000000000","message":"Done","commit_id":"8549504312ac7e4b038384a86497066dbbb02168"},{"author":{"_account_id":8124,"name":"cbrandily","email":"zzelle@gmail.com","username":"cbrandily"},"change_message_id":"1f9ce0855876edb99a0e9719dcdead56eed30570","unresolved":false,"context_lines":[{"line_number":30,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"PROXY_CONFIG_DIR \u003d \"ns-metadata-proxy\""},{"line_number":33,"context_line":"_HAPROXY_CONFIG_TEMPLATE \u003d \"\"\""},{"line_number":34,"context_line":"global"},{"line_number":35,"context_line":"    user        %(user)s"},{"line_number":36,"context_line":"    group       %(group)s"}],"source_content_type":"text/x-python","patch_set":17,"id":"da36d5c6_cbba2ee1","line":33,"updated":"2017-02-21 20:19:00.000000000","message":"PS16-follow-up: the namespace_proxy is a gateway between client/VM worlds and provider/infra world so it should secured as much as possible. Using haproxy is an enabler to increase it through options like:\n * maxconn\n * maxconnrate (global rate limit)\n * timeout *\n * log (otherwise how do we supervise haproxy?)\n * chroot\n * option forceclose instead of option http-server-close? \n * other options? (i am not a haproxy expert)\n\nSome options can be added in the default template, some  depend on the deployment (maxconn, maxconnrate, log), some could be a bit overkill except if you are paranoid","commit_id":"dc66be07a57a26a21306c4308f403fb9072453bd"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"bafaa6aca8c990e3f443a1ea7acca2ebe2b34ce7","unresolved":false,"context_lines":[{"line_number":30,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"PROXY_CONFIG_DIR \u003d \"ns-metadata-proxy\""},{"line_number":33,"context_line":"_HAPROXY_CONFIG_TEMPLATE \u003d \"\"\""},{"line_number":34,"context_line":"global"},{"line_number":35,"context_line":"    user        %(user)s"},{"line_number":36,"context_line":"    group       %(group)s"}],"source_content_type":"text/x-python","patch_set":17,"id":"da36d5c6_e2ae07e5","line":33,"in_reply_to":"da36d5c6_6d0dade7","updated":"2017-02-22 20:46:11.000000000","message":"I meant some specific scenario that would require configuration changes. I agree it can be a followup or a patch once ops will need to tweak the configuration.","commit_id":"dc66be07a57a26a21306c4308f403fb9072453bd"},{"author":{"_account_id":8124,"name":"cbrandily","email":"zzelle@gmail.com","username":"cbrandily"},"change_message_id":"fbce23da3c44ea1a84a61ec264acae85059d4316","unresolved":false,"context_lines":[{"line_number":30,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"PROXY_CONFIG_DIR \u003d \"ns-metadata-proxy\""},{"line_number":33,"context_line":"_HAPROXY_CONFIG_TEMPLATE \u003d \"\"\""},{"line_number":34,"context_line":"global"},{"line_number":35,"context_line":"    user        %(user)s"},{"line_number":36,"context_line":"    group       %(group)s"}],"source_content_type":"text/x-python","patch_set":17,"id":"da36d5c6_6d0dade7","line":33,"in_reply_to":"da36d5c6_795d7778","updated":"2017-02-22 19:44:52.000000000","message":"Yes, my previous comment!? \n\nMany security options must be customized to match deployment contexts. For example, cpu-map value (to pin cpu) depends on the VM cpu number and what you consider as an acceptable load.\n\nMany security options seem overkill except if you are paranoid (my company is), ex: cpu-map, chroot (which implies to expose metadata agent socket in chroot).\n\nI believe adding an option for each of those options is a wrong design.\n\nBut we can discuss this in a follow-up change","commit_id":"dc66be07a57a26a21306c4308f403fb9072453bd"},{"author":{"_account_id":8788,"name":"Miguel Angel Ajo","email":"mangelajo@redhat.com","username":"mangelajo"},"change_message_id":"2d167da78d94fc0df7b554f4ae4f6c36be6986f9","unresolved":false,"context_lines":[{"line_number":30,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"PROXY_CONFIG_DIR \u003d \"ns-metadata-proxy\""},{"line_number":33,"context_line":"_HAPROXY_CONFIG_TEMPLATE \u003d \"\"\""},{"line_number":34,"context_line":"global"},{"line_number":35,"context_line":"    user        %(user)s"},{"line_number":36,"context_line":"    group       %(group)s"}],"source_content_type":"text/x-python","patch_set":17,"id":"da36d5c6_ddf2d4d1","line":33,"in_reply_to":"da36d5c6_cbba2ee1","updated":"2017-02-22 16:28:02.000000000","message":"We could incrementally enhance this by adding config options as we see the need/fit. Or provide default tuning to start with.\n\nI believe this should make a good enhancement already for the gate issues we already have with memory, and we keep a whole cycle to enhance this.","commit_id":"dc66be07a57a26a21306c4308f403fb9072453bd"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"dc8fd49fb8c09298fcaebcb4069a24cd96999bbe","unresolved":false,"context_lines":[{"line_number":30,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"PROXY_CONFIG_DIR \u003d \"ns-metadata-proxy\""},{"line_number":33,"context_line":"_HAPROXY_CONFIG_TEMPLATE \u003d \"\"\""},{"line_number":34,"context_line":"global"},{"line_number":35,"context_line":"    user        %(user)s"},{"line_number":36,"context_line":"    group       %(group)s"}],"source_content_type":"text/x-python","patch_set":17,"id":"da36d5c6_795d7778","line":33,"in_reply_to":"da36d5c6_ddf2d4d1","updated":"2017-02-22 19:02:23.000000000","message":"Cedric, do you have any use-case for configurable proxy process?","commit_id":"dc66be07a57a26a21306c4308f403fb9072453bd"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"dc8fd49fb8c09298fcaebcb4069a24cd96999bbe","unresolved":false,"context_lines":[{"line_number":74,"context_line":"            raise exceptions.NetworkIdOrRouterIdRequiredError()"},{"line_number":75,"context_line":""},{"line_number":76,"context_line":"        self.port \u003d port"},{"line_number":77,"context_line":"        self.user \u003d user or str(os.geteuid())"},{"line_number":78,"context_line":"        self.group \u003d group or str(os.getegid())"},{"line_number":79,"context_line":"        self.state_path \u003d state_path"},{"line_number":80,"context_line":"        self.unix_socket_path \u003d (unix_socket_path or"}],"source_content_type":"text/x-python","patch_set":17,"id":"da36d5c6_9e5eb610","line":77,"range":{"start_line":77,"start_character":24,"end_line":77,"end_character":45},"updated":"2017-02-22 19:02:23.000000000","message":"I\u0027m now thinking whether it would make more sense to set the user in the caller.","commit_id":"dc66be07a57a26a21306c4308f403fb9072453bd"},{"author":{"_account_id":23804,"name":"Daniel Alvarez","email":"dalvarez@redhat.com","username":"dalvarez"},"change_message_id":"42b323a4f79174f98d0a9a9d8615bf5bda584bfe","unresolved":false,"context_lines":[{"line_number":74,"context_line":"            raise exceptions.NetworkIdOrRouterIdRequiredError()"},{"line_number":75,"context_line":""},{"line_number":76,"context_line":"        self.port \u003d port"},{"line_number":77,"context_line":"        self.user \u003d user or str(os.geteuid())"},{"line_number":78,"context_line":"        self.group \u003d group or str(os.getegid())"},{"line_number":79,"context_line":"        self.state_path \u003d state_path"},{"line_number":80,"context_line":"        self.unix_socket_path \u003d (unix_socket_path or"}],"source_content_type":"text/x-python","patch_set":17,"id":"da36d5c6_537b2c8c","line":77,"range":{"start_line":77,"start_character":24,"end_line":77,"end_character":45},"in_reply_to":"da36d5c6_9e5eb610","updated":"2017-02-22 20:11:45.000000000","message":"Done","commit_id":"dc66be07a57a26a21306c4308f403fb9072453bd"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"dc8fd49fb8c09298fcaebcb4069a24cd96999bbe","unresolved":false,"context_lines":[{"line_number":78,"context_line":"        self.group \u003d group or str(os.getegid())"},{"line_number":79,"context_line":"        self.state_path \u003d state_path"},{"line_number":80,"context_line":"        self.unix_socket_path \u003d (unix_socket_path or"},{"line_number":81,"context_line":"                                 cfg.CONF.metadata_proxy_socket)"},{"line_number":82,"context_line":""},{"line_number":83,"context_line":"    def _create_config_file(self):"},{"line_number":84,"context_line":"        \"\"\"Create the config file for haproxy.\"\"\""}],"source_content_type":"text/x-python","patch_set":17,"id":"da36d5c6_39f5bf56","line":81,"range":{"start_line":81,"start_character":33,"end_line":81,"end_character":63},"updated":"2017-02-22 19:02:23.000000000","message":"This should go away.","commit_id":"dc66be07a57a26a21306c4308f403fb9072453bd"},{"author":{"_account_id":23804,"name":"Daniel Alvarez","email":"dalvarez@redhat.com","username":"dalvarez"},"change_message_id":"42b323a4f79174f98d0a9a9d8615bf5bda584bfe","unresolved":false,"context_lines":[{"line_number":78,"context_line":"        self.group \u003d group or str(os.getegid())"},{"line_number":79,"context_line":"        self.state_path \u003d state_path"},{"line_number":80,"context_line":"        self.unix_socket_path \u003d (unix_socket_path or"},{"line_number":81,"context_line":"                                 cfg.CONF.metadata_proxy_socket)"},{"line_number":82,"context_line":""},{"line_number":83,"context_line":"    def _create_config_file(self):"},{"line_number":84,"context_line":"        \"\"\"Create the config file for haproxy.\"\"\""}],"source_content_type":"text/x-python","patch_set":17,"id":"da36d5c6_937124ab","line":81,"range":{"start_line":81,"start_character":33,"end_line":81,"end_character":63},"in_reply_to":"da36d5c6_39f5bf56","updated":"2017-02-22 20:11:45.000000000","message":"Done","commit_id":"dc66be07a57a26a21306c4308f403fb9072453bd"},{"author":{"_account_id":8124,"name":"cbrandily","email":"zzelle@gmail.com","username":"cbrandily"},"change_message_id":"1fb7dea356cf783b144889bae1f64b1956983931","unresolved":false,"context_lines":[{"line_number":125,"context_line":"        LOG.debug(\"haproxy path: %s\", haproxy_path)"},{"line_number":126,"context_line":""},{"line_number":127,"context_line":"        # Replace our process image with haproxy and keep our PID for tracking"},{"line_number":128,"context_line":"        os.execl(haproxy_path, haproxy_path, \u0027-f\u0027, self.cfg_path)"},{"line_number":129,"context_line":""},{"line_number":130,"context_line":"    @staticmethod"},{"line_number":131,"context_line":"    def get_config_path(state_path):"}],"source_content_type":"text/x-python","patch_set":17,"id":"da36d5c6_4d51c935","line":128,"updated":"2017-02-22 19:48:52.000000000","message":"the namespace_proxy opened some files/sockets (typically for logging), it seems we never close them because of os.execl ... is it a problem?","commit_id":"dc66be07a57a26a21306c4308f403fb9072453bd"}],"neutron/conf/agent/metadata/config.py":[{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"b0b070bcd6e5a77239032c46bed427e5d7a503f9","unresolved":false,"context_lines":[{"line_number":41,"context_line":""},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"DRIVER_OPTS \u003d ["},{"line_number":44,"context_line":"    cfg.BoolOpt(\u0027metadata_proxy_watch_log\u0027,"},{"line_number":45,"context_line":"                help\u003d_(\"Enable/Disable log watch by metadata proxy. It \""},{"line_number":46,"context_line":"                       \"should be disabled when metadata_proxy_user/group \""},{"line_number":47,"context_line":"                       \"is not allowed to read/write its log file and \""}],"source_content_type":"text/x-python","patch_set":33,"id":"9a30ddce_96822051","side":"PARENT","line":44,"updated":"2017-03-08 13:09:46.000000000","message":"could this break an existing setup/functionality? config options should be deprecated and removed in later versions","commit_id":"67da6a31224adf7d773805096b5e6ea07329bdc7"},{"author":{"_account_id":23804,"name":"Daniel Alvarez","email":"dalvarez@redhat.com","username":"dalvarez"},"change_message_id":"0acb99aed5547eea2062c3c2fcd7e24b2b567e61","unresolved":false,"context_lines":[{"line_number":41,"context_line":""},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"DRIVER_OPTS \u003d ["},{"line_number":44,"context_line":"    cfg.BoolOpt(\u0027metadata_proxy_watch_log\u0027,"},{"line_number":45,"context_line":"                help\u003d_(\"Enable/Disable log watch by metadata proxy. It \""},{"line_number":46,"context_line":"                       \"should be disabled when metadata_proxy_user/group \""},{"line_number":47,"context_line":"                       \"is not allowed to read/write its log file and \""}],"source_content_type":"text/x-python","patch_set":33,"id":"9a30ddce_6347ab1d","side":"PARENT","line":44,"in_reply_to":"9a30ddce_96822051","updated":"2017-03-08 15:17:21.000000000","message":"As we\u0027re entirely replacing neutron-ns-metadata-proxy I don\u0027t think it could break it.","commit_id":"67da6a31224adf7d773805096b5e6ea07329bdc7"}],"neutron/tests/functional/agent/l3/framework.py":[{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"907c4d88fd7c3c2f7df7398faf6d6b06db9a7561","unresolved":false,"context_lines":[{"line_number":84,"context_line":"                                               root\u003dtemp_dir)"},{"line_number":85,"context_line":"        conf.set_override(\u0027state_path\u0027, temp_dir.path)"},{"line_number":86,"context_line":"        # NOTE(cbrandily): log_file or log_dir must be set otherwise"},{"line_number":87,"context_line":"        # metadata_proxy_watch_log has no effect"},{"line_number":88,"context_line":"        conf.set_override(\u0027log_file\u0027,"},{"line_number":89,"context_line":"                          get_temp_file_path(\u0027log_file\u0027))"},{"line_number":90,"context_line":"        conf.set_override(\u0027metadata_proxy_socket\u0027,"}],"source_content_type":"text/x-python","patch_set":23,"id":"ba2be162_02f3659f","side":"PARENT","line":87,"updated":"2017-03-01 17:04:36.000000000","message":"do you remove it because now haproxy does not log anything anywhere? isn\u0027t it a problem for debugging? and if not, should we still set log_file here?","commit_id":"67da6a31224adf7d773805096b5e6ea07329bdc7"},{"author":{"_account_id":23804,"name":"Daniel Alvarez","email":"dalvarez@redhat.com","username":"dalvarez"},"change_message_id":"6cefc20d2de4ab1b9e31b6a11598b24f998d03da","unresolved":false,"context_lines":[{"line_number":84,"context_line":"                                               root\u003dtemp_dir)"},{"line_number":85,"context_line":"        conf.set_override(\u0027state_path\u0027, temp_dir.path)"},{"line_number":86,"context_line":"        # NOTE(cbrandily): log_file or log_dir must be set otherwise"},{"line_number":87,"context_line":"        # metadata_proxy_watch_log has no effect"},{"line_number":88,"context_line":"        conf.set_override(\u0027log_file\u0027,"},{"line_number":89,"context_line":"                          get_temp_file_path(\u0027log_file\u0027))"},{"line_number":90,"context_line":"        conf.set_override(\u0027metadata_proxy_socket\u0027,"}],"source_content_type":"text/x-python","patch_set":23,"id":"ba2be162_365c28ed","side":"PARENT","line":87,"in_reply_to":"ba2be162_02f3659f","updated":"2017-03-01 18:14:11.000000000","message":"I remove it because haproxy doesn\u0027t support logging to files, only syslog (IP address or UNIX socket). I first included an option in the haproxy config file to be able to write logs to a local syslog server but removed it since someone commented that there\u0027ll be no syslog in the namespaces. We can add the UNIX socket at any point to the haproxy cfg template, or if you think it makes sense, I\u0027ll do it now.","commit_id":"67da6a31224adf7d773805096b5e6ea07329bdc7"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"40e1adc4161a461e9b986b2bba7a4777b8abc4e5","unresolved":false,"context_lines":[{"line_number":84,"context_line":"                                               root\u003dtemp_dir)"},{"line_number":85,"context_line":"        conf.set_override(\u0027state_path\u0027, temp_dir.path)"},{"line_number":86,"context_line":"        # NOTE(cbrandily): log_file or log_dir must be set otherwise"},{"line_number":87,"context_line":"        # metadata_proxy_watch_log has no effect"},{"line_number":88,"context_line":"        conf.set_override(\u0027log_file\u0027,"},{"line_number":89,"context_line":"                          get_temp_file_path(\u0027log_file\u0027))"},{"line_number":90,"context_line":"        conf.set_override(\u0027metadata_proxy_socket\u0027,"}],"source_content_type":"text/x-python","patch_set":23,"id":"ba2be162_b98f2bcb","side":"PARENT","line":87,"in_reply_to":"ba2be162_365c28ed","updated":"2017-03-01 18:20:03.000000000","message":"Nah, I guess we can live without it. Just make sure we clean up metadata_proxy_watch_log option from everywhere. If we will need logs later, we can add them as a follow up.","commit_id":"67da6a31224adf7d773805096b5e6ea07329bdc7"}],"neutron/tests/functional/agent/l3/test_metadata_proxy.py":[{"author":{"_account_id":8788,"name":"Miguel Angel Ajo","email":"mangelajo@redhat.com","username":"mangelajo"},"change_message_id":"f98b214328014638f458513f3545f3d3597e551b","unresolved":false,"context_lines":[{"line_number":123,"context_line":"        # Check status code"},{"line_number":124,"context_line":"        self.assertIn(str(webob.exc.HTTPOk.code), firstline.split())"},{"line_number":125,"context_line":""},{"line_number":126,"context_line":"    def _make_cmdline_callback(self, uuid):"},{"line_number":127,"context_line":"        def _cmdline_callback(pidfile):"},{"line_number":128,"context_line":"            cmdline \u003d [\"python\", simple_daemon.__file__,"},{"line_number":129,"context_line":"                       \"--uuid\u003d%s\" % uuid,"}],"source_content_type":"text/x-python","patch_set":29,"id":"ba2be162_dd538b15","line":126,"updated":"2017-03-03 09:01:02.000000000","message":"nitty nit, which I generally don\u0027t care about: this could be a @staticmethod because you don\u0027t use self.","commit_id":"087c03e0d2af31736938b556ea5d4e6534aeece7"},{"author":{"_account_id":23804,"name":"Daniel Alvarez","email":"dalvarez@redhat.com","username":"dalvarez"},"change_message_id":"b9586e2104443704801f1f2a9753fcf849b0a8e1","unresolved":false,"context_lines":[{"line_number":123,"context_line":"        # Check status code"},{"line_number":124,"context_line":"        self.assertIn(str(webob.exc.HTTPOk.code), firstline.split())"},{"line_number":125,"context_line":""},{"line_number":126,"context_line":"    def _make_cmdline_callback(self, uuid):"},{"line_number":127,"context_line":"        def _cmdline_callback(pidfile):"},{"line_number":128,"context_line":"            cmdline \u003d [\"python\", simple_daemon.__file__,"},{"line_number":129,"context_line":"                       \"--uuid\u003d%s\" % uuid,"}],"source_content_type":"text/x-python","patch_set":29,"id":"ba2be162_3ec3ba8a","line":126,"in_reply_to":"ba2be162_dd538b15","updated":"2017-03-03 11:22:38.000000000","message":"Done","commit_id":"087c03e0d2af31736938b556ea5d4e6534aeece7"},{"author":{"_account_id":8788,"name":"Miguel Angel Ajo","email":"mangelajo@redhat.com","username":"mangelajo"},"change_message_id":"f98b214328014638f458513f3545f3d3597e551b","unresolved":false,"context_lines":[{"line_number":161,"context_line":"            default_cmd_callback\u003d_callback)"},{"line_number":162,"context_line":"        pm.enable()"},{"line_number":163,"context_line":""},{"line_number":164,"context_line":"        # Wait until simple_daemon is running"},{"line_number":165,"context_line":"        common_utils.wait_until_true("},{"line_number":166,"context_line":"            lambda: pm.active,"},{"line_number":167,"context_line":"            exception\u003dRuntimeError(\u0027simple_daemon did not spawn\u0027))"}],"source_content_type":"text/x-python","patch_set":29,"id":"ba2be162_bd833755","line":164,"updated":"2017-03-03 09:01:02.000000000","message":"By the nature of ProcessManager, once .enable is called, it will be there, no need to wait. It could not be there if simple daemon failed or something, L164-168 are not completely necessary I believe.","commit_id":"087c03e0d2af31736938b556ea5d4e6534aeece7"},{"author":{"_account_id":23804,"name":"Daniel Alvarez","email":"dalvarez@redhat.com","username":"dalvarez"},"change_message_id":"b9586e2104443704801f1f2a9753fcf849b0a8e1","unresolved":false,"context_lines":[{"line_number":161,"context_line":"            default_cmd_callback\u003d_callback)"},{"line_number":162,"context_line":"        pm.enable()"},{"line_number":163,"context_line":""},{"line_number":164,"context_line":"        # Wait until simple_daemon is running"},{"line_number":165,"context_line":"        common_utils.wait_until_true("},{"line_number":166,"context_line":"            lambda: pm.active,"},{"line_number":167,"context_line":"            exception\u003dRuntimeError(\u0027simple_daemon did not spawn\u0027))"}],"source_content_type":"text/x-python","patch_set":29,"id":"ba2be162_7ee29230","line":164,"in_reply_to":"ba2be162_bd833755","updated":"2017-03-03 11:22:38.000000000","message":"Done. Same in L175","commit_id":"087c03e0d2af31736938b556ea5d4e6534aeece7"},{"author":{"_account_id":8788,"name":"Miguel Angel Ajo","email":"mangelajo@redhat.com","username":"mangelajo"},"change_message_id":"f98b214328014638f458513f3545f3d3597e551b","unresolved":false,"context_lines":[{"line_number":175,"context_line":"        common_utils.wait_until_true("},{"line_number":176,"context_line":"            lambda: \u0027simple_daemon\u0027 not in pm.cmdline,"},{"line_number":177,"context_line":"            exception\u003dRuntimeError(\u0027simple_daemon was not killed\u0027))"},{"line_number":178,"context_line":"        self.assertTrue(\u0027haproxy\u0027 in pm.cmdline)"},{"line_number":179,"context_line":""},{"line_number":180,"context_line":""},{"line_number":181,"context_line":"class UnprivilegedUserMetadataL3AgentTestCase(MetadataL3AgentTestCase):"}],"source_content_type":"text/x-python","patch_set":29,"id":"ba2be162_3d9827c0","line":178,"updated":"2017-03-03 09:01:02.000000000","message":"cool! :)","commit_id":"087c03e0d2af31736938b556ea5d4e6534aeece7"},{"author":{"_account_id":23804,"name":"Daniel Alvarez","email":"dalvarez@redhat.com","username":"dalvarez"},"change_message_id":"b9586e2104443704801f1f2a9753fcf849b0a8e1","unresolved":false,"context_lines":[{"line_number":175,"context_line":"        common_utils.wait_until_true("},{"line_number":176,"context_line":"            lambda: \u0027simple_daemon\u0027 not in pm.cmdline,"},{"line_number":177,"context_line":"            exception\u003dRuntimeError(\u0027simple_daemon was not killed\u0027))"},{"line_number":178,"context_line":"        self.assertTrue(\u0027haproxy\u0027 in pm.cmdline)"},{"line_number":179,"context_line":""},{"line_number":180,"context_line":""},{"line_number":181,"context_line":"class UnprivilegedUserMetadataL3AgentTestCase(MetadataL3AgentTestCase):"}],"source_content_type":"text/x-python","patch_set":29,"id":"ba2be162_dec7fe95","line":178,"in_reply_to":"ba2be162_3d9827c0","updated":"2017-03-03 11:22:38.000000000","message":"magic! \\o/","commit_id":"087c03e0d2af31736938b556ea5d4e6534aeece7"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"9d67a3ff16ae0ba30e2a0c0c0de5df27b8a2fa95","unresolved":false,"context_lines":[{"line_number":159,"context_line":"            conf\u003dcfg.CONF,"},{"line_number":160,"context_line":"            uuid\u003drouter_info[\u0027id\u0027],"},{"line_number":161,"context_line":"            default_cmd_callback\u003d_callback)"},{"line_number":162,"context_line":"        pm.enable()"},{"line_number":163,"context_line":""},{"line_number":164,"context_line":"        # Make sure that simple_daemon is running"},{"line_number":165,"context_line":"        self.assertIn(\u0027simple_daemon\u0027, pm.cmdline)"}],"source_content_type":"text/x-python","patch_set":30,"id":"ba2be162_4dea78ad","line":162,"updated":"2017-03-03 16:59:23.000000000","message":"should we register .disable with addCleanup in case the test case fails to kill it?","commit_id":"4cb523605835868232e00842300a652d6524dc85"},{"author":{"_account_id":23804,"name":"Daniel Alvarez","email":"dalvarez@redhat.com","username":"dalvarez"},"change_message_id":"f3166ff9bbf706ed9ae12e8bdb793aaa0b779f84","unresolved":false,"context_lines":[{"line_number":159,"context_line":"            conf\u003dcfg.CONF,"},{"line_number":160,"context_line":"            uuid\u003drouter_info[\u0027id\u0027],"},{"line_number":161,"context_line":"            default_cmd_callback\u003d_callback)"},{"line_number":162,"context_line":"        pm.enable()"},{"line_number":163,"context_line":""},{"line_number":164,"context_line":"        # Make sure that simple_daemon is running"},{"line_number":165,"context_line":"        self.assertIn(\u0027simple_daemon\u0027, pm.cmdline)"}],"source_content_type":"text/x-python","patch_set":30,"id":"ba2be162_50ebeb77","line":162,"in_reply_to":"ba2be162_4dea78ad","updated":"2017-03-03 17:13:02.000000000","message":"Right, if the migration path fails then haproxy will be spawned (and killed, see my comment below) but simple_daemon will be left behind. Nice catch :)","commit_id":"4cb523605835868232e00842300a652d6524dc85"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"9d67a3ff16ae0ba30e2a0c0c0de5df27b8a2fa95","unresolved":false,"context_lines":[{"line_number":170,"context_line":""},{"line_number":171,"context_line":"        # Make sure that it was killed and replaced by haproxy"},{"line_number":172,"context_line":"        self.assertNotIn(\u0027simple_daemon\u0027, pm.cmdline)"},{"line_number":173,"context_line":"        self.assertIn(\u0027haproxy\u0027, pm.cmdline)"},{"line_number":174,"context_line":""},{"line_number":175,"context_line":""},{"line_number":176,"context_line":"class UnprivilegedUserMetadataL3AgentTestCase(MetadataL3AgentTestCase):"}],"source_content_type":"text/x-python","patch_set":30,"id":"ba2be162_2de624b0","line":173,"updated":"2017-03-03 16:59:23.000000000","message":"so now you leave haproxy hanging there? no cleanup?","commit_id":"4cb523605835868232e00842300a652d6524dc85"},{"author":{"_account_id":23804,"name":"Daniel Alvarez","email":"dalvarez@redhat.com","username":"dalvarez"},"change_message_id":"f3166ff9bbf706ed9ae12e8bdb793aaa0b779f84","unresolved":false,"context_lines":[{"line_number":170,"context_line":""},{"line_number":171,"context_line":"        # Make sure that it was killed and replaced by haproxy"},{"line_number":172,"context_line":"        self.assertNotIn(\u0027simple_daemon\u0027, pm.cmdline)"},{"line_number":173,"context_line":"        self.assertIn(\u0027haproxy\u0027, pm.cmdline)"},{"line_number":174,"context_line":""},{"line_number":175,"context_line":""},{"line_number":176,"context_line":"class UnprivilegedUserMetadataL3AgentTestCase(MetadataL3AgentTestCase):"}],"source_content_type":"text/x-python","patch_set":30,"id":"ba2be162_50868bdb","line":173,"in_reply_to":"ba2be162_2de624b0","updated":"2017-03-03 17:13:02.000000000","message":"It\u0027s registered here [0]. When router is removed, then metadata proxy will be killed [1] so haproxy is not hanging around. Same happens with other tests which use \"manage_router()\" to create a router and they rely on the same method for cleanup.\n\n[0] https://github.com/openstack/neutron/blob/master/neutron/tests/functional/agent/l3/framework.py#L310\n[1] https://github.com/openstack/neutron/blob/master/neutron/agent/metadata/driver.py#L180","commit_id":"4cb523605835868232e00842300a652d6524dc85"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"edc257f108bb1cf2baf6e89c917c430a39500cbb","unresolved":false,"context_lines":[{"line_number":170,"context_line":""},{"line_number":171,"context_line":"        # Make sure that it was killed and replaced by haproxy"},{"line_number":172,"context_line":"        self.assertNotIn(\u0027simple_daemon\u0027, pm.cmdline)"},{"line_number":173,"context_line":"        self.assertIn(\u0027haproxy\u0027, pm.cmdline)"},{"line_number":174,"context_line":""},{"line_number":175,"context_line":""},{"line_number":176,"context_line":"class UnprivilegedUserMetadataL3AgentTestCase(MetadataL3AgentTestCase):"}],"source_content_type":"text/x-python","patch_set":30,"id":"ba2be162_6343cb42","line":173,"in_reply_to":"ba2be162_50868bdb","updated":"2017-03-03 17:17:49.000000000","message":"Gotcha.","commit_id":"4cb523605835868232e00842300a652d6524dc85"}],"neutron/tests/unit/agent/dhcp/test_agent.py":[{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"907c4d88fd7c3c2f7df7398faf6d6b06db9a7561","unresolved":false,"context_lines":[{"line_number":678,"context_line":"        if is_isolated_network and enable_isolated_metadata:"},{"line_number":679,"context_line":"            self.external_process.assert_has_calls(["},{"line_number":680,"context_line":"                self._process_manager_constructor_call(),"},{"line_number":681,"context_line":"                mock.call().enable()], any_order\u003dTrue)"},{"line_number":682,"context_line":"        else:"},{"line_number":683,"context_line":"            self.external_process.assert_has_calls(["},{"line_number":684,"context_line":"                self._process_manager_constructor_call(ns\u003dNone),"}],"source_content_type":"text/x-python","patch_set":23,"id":"ba2be162_a25ff970","line":681,"range":{"start_line":681,"start_character":37,"end_line":681,"end_character":53},"updated":"2017-03-01 17:04:36.000000000","message":"what does it mean? you expect enable() being called before manager constructed? how is it possible?","commit_id":"0355a17c2a36cfb622fcd58767e2cdb630c9f17d"},{"author":{"_account_id":23804,"name":"Daniel Alvarez","email":"dalvarez@redhat.com","username":"dalvarez"},"change_message_id":"6cefc20d2de4ab1b9e31b6a11598b24f998d03da","unresolved":false,"context_lines":[{"line_number":678,"context_line":"        if is_isolated_network and enable_isolated_metadata:"},{"line_number":679,"context_line":"            self.external_process.assert_has_calls(["},{"line_number":680,"context_line":"                self._process_manager_constructor_call(),"},{"line_number":681,"context_line":"                mock.call().enable()], any_order\u003dTrue)"},{"line_number":682,"context_line":"        else:"},{"line_number":683,"context_line":"            self.external_process.assert_has_calls(["},{"line_number":684,"context_line":"                self._process_manager_constructor_call(ns\u003dNone),"}],"source_content_type":"text/x-python","patch_set":23,"id":"ba2be162_b39bca71","line":681,"range":{"start_line":681,"start_character":37,"end_line":681,"end_character":53},"in_reply_to":"ba2be162_a25ff970","updated":"2017-03-01 18:14:11.000000000","message":"I\u0027m using any_order\u003dTrue because I want to check those two calls are present. It\u0027s obvious that they will appear in order so I use any_order\u003dTrue so that I don\u0027t need to check on the extra calls that are made with the context manager opening files. I could include those calls though and they will eventually removed when we cut the migration path but I don\u0027t think it\u0027s worth it.","commit_id":"0355a17c2a36cfb622fcd58767e2cdb630c9f17d"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"40e1adc4161a461e9b986b2bba7a4777b8abc4e5","unresolved":false,"context_lines":[{"line_number":678,"context_line":"        if is_isolated_network and enable_isolated_metadata:"},{"line_number":679,"context_line":"            self.external_process.assert_has_calls(["},{"line_number":680,"context_line":"                self._process_manager_constructor_call(),"},{"line_number":681,"context_line":"                mock.call().enable()], any_order\u003dTrue)"},{"line_number":682,"context_line":"        else:"},{"line_number":683,"context_line":"            self.external_process.assert_has_calls(["},{"line_number":684,"context_line":"                self._process_manager_constructor_call(ns\u003dNone),"}],"source_content_type":"text/x-python","patch_set":23,"id":"ba2be162_d9bcdf6e","line":681,"range":{"start_line":681,"start_character":37,"end_line":681,"end_character":53},"in_reply_to":"ba2be162_b39bca71","updated":"2017-03-01 18:20:03.000000000","message":"Oh, that\u0027s how you avoid unnecessary calls...","commit_id":"0355a17c2a36cfb622fcd58767e2cdb630c9f17d"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"907c4d88fd7c3c2f7df7398faf6d6b06db9a7561","unresolved":false,"context_lines":[{"line_number":844,"context_line":"        self.external_process.assert_has_calls(["},{"line_number":845,"context_line":"            self._process_manager_constructor_call(),"},{"line_number":846,"context_line":"            mock.call().enable()"},{"line_number":847,"context_line":"        ], any_order\u003dTrue)"},{"line_number":848,"context_line":""},{"line_number":849,"context_line":"    def test_disable_isolated_metadata_proxy(self):"},{"line_number":850,"context_line":"        method_path \u003d (\u0027neutron.agent.metadata.driver.MetadataDriver\u0027"}],"source_content_type":"text/x-python","patch_set":23,"id":"ba2be162_e2d811f2","line":847,"updated":"2017-03-01 17:04:36.000000000","message":"ditto","commit_id":"0355a17c2a36cfb622fcd58767e2cdb630c9f17d"},{"author":{"_account_id":23804,"name":"Daniel Alvarez","email":"dalvarez@redhat.com","username":"dalvarez"},"change_message_id":"6cefc20d2de4ab1b9e31b6a11598b24f998d03da","unresolved":false,"context_lines":[{"line_number":844,"context_line":"        self.external_process.assert_has_calls(["},{"line_number":845,"context_line":"            self._process_manager_constructor_call(),"},{"line_number":846,"context_line":"            mock.call().enable()"},{"line_number":847,"context_line":"        ], any_order\u003dTrue)"},{"line_number":848,"context_line":""},{"line_number":849,"context_line":"    def test_disable_isolated_metadata_proxy(self):"},{"line_number":850,"context_line":"        method_path \u003d (\u0027neutron.agent.metadata.driver.MetadataDriver\u0027"}],"source_content_type":"text/x-python","patch_set":23,"id":"ba2be162_537d2e1b","line":847,"in_reply_to":"ba2be162_e2d811f2","updated":"2017-03-01 18:14:11.000000000","message":"Same as L681","commit_id":"0355a17c2a36cfb622fcd58767e2cdb630c9f17d"}],"neutron/tests/unit/agent/metadata/test_driver.py":[{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"907c4d88fd7c3c2f7df7398faf6d6b06db9a7561","unresolved":false,"context_lines":[{"line_number":142,"context_line":"            mock_open.assert_has_calls(["},{"line_number":143,"context_line":"                mock.call(cfg_file, \u0027w\u0027),"},{"line_number":144,"context_line":"                mock.call().write(cfg_contents)],"},{"line_number":145,"context_line":"                                       any_order\u003dTrue)"},{"line_number":146,"context_line":""},{"line_number":147,"context_line":"            ip_mock.assert_has_calls(["},{"line_number":148,"context_line":"                mock.call(namespace\u003drouter_ns),"}],"source_content_type":"text/x-python","patch_set":23,"id":"ba2be162_4218fd84","line":145,"updated":"2017-03-01 17:04:36.000000000","message":"why any order again? shouldn\u0027t you open the file before writing into it?","commit_id":"0355a17c2a36cfb622fcd58767e2cdb630c9f17d"},{"author":{"_account_id":23804,"name":"Daniel Alvarez","email":"dalvarez@redhat.com","username":"dalvarez"},"change_message_id":"6cefc20d2de4ab1b9e31b6a11598b24f998d03da","unresolved":false,"context_lines":[{"line_number":142,"context_line":"            mock_open.assert_has_calls(["},{"line_number":143,"context_line":"                mock.call(cfg_file, \u0027w\u0027),"},{"line_number":144,"context_line":"                mock.call().write(cfg_contents)],"},{"line_number":145,"context_line":"                                       any_order\u003dTrue)"},{"line_number":146,"context_line":""},{"line_number":147,"context_line":"            ip_mock.assert_has_calls(["},{"line_number":148,"context_line":"                mock.call(namespace\u003drouter_ns),"}],"source_content_type":"text/x-python","patch_set":23,"id":"ba2be162_339d1a5a","line":145,"in_reply_to":"ba2be162_4218fd84","updated":"2017-03-01 18:14:11.000000000","message":"ditto, here it may make more sense to include the enter and calls exit of the context manager. What do you think?","commit_id":"0355a17c2a36cfb622fcd58767e2cdb630c9f17d"}],"neutron/tests/unit/agent/metadata/test_namespace_proxy.py":[{"author":{"_account_id":8124,"name":"cbrandily","email":"zzelle@gmail.com","username":"cbrandily"},"change_message_id":"dd71da325280a1d5ed8f638a6993f39747df466f","unresolved":false,"context_lines":[{"line_number":13,"context_line":"#    under the License."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"import mock"},{"line_number":16,"context_line":"from mock import mock_open"},{"line_number":17,"context_line":"import os"},{"line_number":18,"context_line":"import testtools"},{"line_number":19,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"da36d5c6_ab78e8f9","line":16,"updated":"2017-02-18 13:28:47.000000000","message":"we should import only modules + wrong import order","commit_id":"ec1ed3e6688efaec742dded4bcf644d216f5bd88"},{"author":{"_account_id":23804,"name":"Daniel Alvarez","email":"dalvarez@redhat.com","username":"dalvarez"},"change_message_id":"e00d49d7f1fdfb73d6835656f1de83d05582b59f","unresolved":false,"context_lines":[{"line_number":13,"context_line":"#    under the License."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"import mock"},{"line_number":16,"context_line":"from mock import mock_open"},{"line_number":17,"context_line":"import os"},{"line_number":18,"context_line":"import testtools"},{"line_number":19,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"da36d5c6_53fe236c","line":16,"in_reply_to":"da36d5c6_ab78e8f9","updated":"2017-02-20 20:34:55.000000000","message":"Done","commit_id":"ec1ed3e6688efaec742dded4bcf644d216f5bd88"},{"author":{"_account_id":8124,"name":"cbrandily","email":"zzelle@gmail.com","username":"cbrandily"},"change_message_id":"dd71da325280a1d5ed8f638a6993f39747df466f","unresolved":false,"context_lines":[{"line_number":22,"context_line":"from neutron.common import utils"},{"line_number":23,"context_line":"from neutron.tests import base"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"_HAPROXY_CONFIG_FILE \u003d \"\"\""},{"line_number":26,"context_line":"global"},{"line_number":27,"context_line":"    user        user"},{"line_number":28,"context_line":"    group       group"}],"source_content_type":"text/x-python","patch_set":13,"id":"da36d5c6_6b77d002","line":25,"updated":"2017-02-18 13:28:47.000000000","message":"Prefer:\n\n _HAPROXY_CONFIG_FILE \u003d _HAPROXY_CONFIG_TEMPLATE % {...} +","commit_id":"ec1ed3e6688efaec742dded4bcf644d216f5bd88"},{"author":{"_account_id":23804,"name":"Daniel Alvarez","email":"dalvarez@redhat.com","username":"dalvarez"},"change_message_id":"e00d49d7f1fdfb73d6835656f1de83d05582b59f","unresolved":false,"context_lines":[{"line_number":22,"context_line":"from neutron.common import utils"},{"line_number":23,"context_line":"from neutron.tests import base"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"_HAPROXY_CONFIG_FILE \u003d \"\"\""},{"line_number":26,"context_line":"global"},{"line_number":27,"context_line":"    user        user"},{"line_number":28,"context_line":"    group       group"}],"source_content_type":"text/x-python","patch_set":13,"id":"da36d5c6_3309af96","line":25,"in_reply_to":"da36d5c6_6b77d002","updated":"2017-02-20 20:34:55.000000000","message":"Done","commit_id":"ec1ed3e6688efaec742dded4bcf644d216f5bd88"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"dc8fd49fb8c09298fcaebcb4069a24cd96999bbe","unresolved":false,"context_lines":[{"line_number":13,"context_line":"#    under the License."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"import mock"},{"line_number":16,"context_line":"import os"},{"line_number":17,"context_line":"import testtools"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"from neutron.agent.metadata import namespace_proxy as ns_proxy"}],"source_content_type":"text/x-python","patch_set":17,"id":"da36d5c6_1eaf2695","line":16,"range":{"start_line":16,"start_character":0,"end_line":16,"end_character":9},"updated":"2017-02-22 19:02:23.000000000","message":"This should go to L15:\n\n import os\n\n import mock\n import testtools","commit_id":"dc66be07a57a26a21306c4308f403fb9072453bd"},{"author":{"_account_id":23804,"name":"Daniel Alvarez","email":"dalvarez@redhat.com","username":"dalvarez"},"change_message_id":"42b323a4f79174f98d0a9a9d8615bf5bda584bfe","unresolved":false,"context_lines":[{"line_number":13,"context_line":"#    under the License."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"import mock"},{"line_number":16,"context_line":"import os"},{"line_number":17,"context_line":"import testtools"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"from neutron.agent.metadata import namespace_proxy as ns_proxy"}],"source_content_type":"text/x-python","patch_set":17,"id":"da36d5c6_7f12b70a","line":16,"range":{"start_line":16,"start_character":0,"end_line":16,"end_character":9},"in_reply_to":"da36d5c6_1eaf2695","updated":"2017-02-22 20:11:45.000000000","message":"Done","commit_id":"dc66be07a57a26a21306c4308f403fb9072453bd"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"dc8fd49fb8c09298fcaebcb4069a24cd96999bbe","unresolved":false,"context_lines":[{"line_number":21,"context_line":"from neutron.common import utils"},{"line_number":22,"context_line":"from neutron.tests import base"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"_HAPROXY_DATA \u003d {"},{"line_number":26,"context_line":"    \u0027user\u0027: \u0027user\u0027,"},{"line_number":27,"context_line":"    \u0027group\u0027: \u0027group\u0027,"}],"source_content_type":"text/x-python","patch_set":17,"id":"da36d5c6_fe99726f","line":24,"updated":"2017-02-22 19:02:23.000000000","message":"Nit: Empty line not needed :)","commit_id":"dc66be07a57a26a21306c4308f403fb9072453bd"},{"author":{"_account_id":23804,"name":"Daniel Alvarez","email":"dalvarez@redhat.com","username":"dalvarez"},"change_message_id":"42b323a4f79174f98d0a9a9d8615bf5bda584bfe","unresolved":false,"context_lines":[{"line_number":21,"context_line":"from neutron.common import utils"},{"line_number":22,"context_line":"from neutron.tests import base"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"_HAPROXY_DATA \u003d {"},{"line_number":26,"context_line":"    \u0027user\u0027: \u0027user\u0027,"},{"line_number":27,"context_line":"    \u0027group\u0027: \u0027group\u0027,"}],"source_content_type":"text/x-python","patch_set":17,"id":"da36d5c6_9ffbebc0","line":24,"in_reply_to":"da36d5c6_fe99726f","updated":"2017-02-22 20:11:45.000000000","message":"Done","commit_id":"dc66be07a57a26a21306c4308f403fb9072453bd"}],"releasenotes/notes/switching-to-haproxy-for-metadata-proxy-9d8f7549fadf9182.yaml":[{"author":{"_account_id":8788,"name":"Miguel Angel Ajo","email":"mangelajo@redhat.com","username":"mangelajo"},"change_message_id":"4eabc95fa4813037b749a482cf618e7dbc325d26","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - haproxy is now used for metadata-proxy instead of the previous Python"},{"line_number":4,"context_line":"    implementation. This reduces the memory footprint considerably."},{"line_number":5,"context_line":"upgrade:"},{"line_number":6,"context_line":"  - To upgrade to the haproxy based metadata-proxy, neutron services have to"}],"source_content_type":"text/x-yaml","patch_set":15,"id":"da36d5c6_9c3c2795","line":3,"range":{"start_line":3,"start_character":28,"end_line":3,"end_character":42},"updated":"2017-02-20 21:06:03.000000000","message":"ns-neutron-metadata-proxy","commit_id":"629382cb49965f92c7ead1525259e8442eb1067f"},{"author":{"_account_id":8788,"name":"Miguel Angel Ajo","email":"mangelajo@redhat.com","username":"mangelajo"},"change_message_id":"4eabc95fa4813037b749a482cf618e7dbc325d26","unresolved":false,"context_lines":[{"line_number":3,"context_line":"  - haproxy is now used for metadata-proxy instead of the previous Python"},{"line_number":4,"context_line":"    implementation. This reduces the memory footprint considerably."},{"line_number":5,"context_line":"upgrade:"},{"line_number":6,"context_line":"  - To upgrade to the haproxy based metadata-proxy, neutron services have to"},{"line_number":7,"context_line":"    be restarted. At start, old running versions will be detected and will be"},{"line_number":8,"context_line":"    replaced by haproxy."},{"line_number":9,"context_line":""}],"source_content_type":"text/x-yaml","patch_set":15,"id":"da36d5c6_1c1e770c","line":6,"range":{"start_line":6,"start_character":53,"end_line":6,"end_character":68},"updated":"2017-02-20 21:06:03.000000000","message":"neutron-l3-agent and neutro-dhcp-agent services","commit_id":"629382cb49965f92c7ead1525259e8442eb1067f"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"907c4d88fd7c3c2f7df7398faf6d6b06db9a7561","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - haproxy is now used for neutron-ns-metadata-proxy instead of the previous"},{"line_number":4,"context_line":"    Python implementation. This reduces the memory footprint considerably."},{"line_number":5,"context_line":"upgrade:"},{"line_number":6,"context_line":"  - To upgrade to the haproxy based neutron-ns-metadata-proxy, neutron-l3-agent"}],"source_content_type":"text/x-yaml","patch_set":23,"id":"ba2be162_50fa84be","line":3,"range":{"start_line":3,"start_character":28,"end_line":3,"end_character":53},"updated":"2017-03-01 17:04:36.000000000","message":"same ``","commit_id":"0355a17c2a36cfb622fcd58767e2cdb630c9f17d"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"907c4d88fd7c3c2f7df7398faf6d6b06db9a7561","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - haproxy is now used for neutron-ns-metadata-proxy instead of the previous"},{"line_number":4,"context_line":"    Python implementation. This reduces the memory footprint considerably."},{"line_number":5,"context_line":"upgrade:"},{"line_number":6,"context_line":"  - To upgrade to the haproxy based neutron-ns-metadata-proxy, neutron-l3-agent"}],"source_content_type":"text/x-yaml","patch_set":23,"id":"ba2be162_d00594c2","line":3,"range":{"start_line":3,"start_character":4,"end_line":3,"end_character":11},"updated":"2017-03-01 17:04:36.000000000","message":"since it\u0027s a name of a tool, consider quoting it (``haproxy``).","commit_id":"0355a17c2a36cfb622fcd58767e2cdb630c9f17d"},{"author":{"_account_id":23804,"name":"Daniel Alvarez","email":"dalvarez@redhat.com","username":"dalvarez"},"change_message_id":"6cefc20d2de4ab1b9e31b6a11598b24f998d03da","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - haproxy is now used for neutron-ns-metadata-proxy instead of the previous"},{"line_number":4,"context_line":"    Python implementation. This reduces the memory footprint considerably."},{"line_number":5,"context_line":"upgrade:"},{"line_number":6,"context_line":"  - To upgrade to the haproxy based neutron-ns-metadata-proxy, neutron-l3-agent"}],"source_content_type":"text/x-yaml","patch_set":23,"id":"ba2be162_13b73687","line":3,"range":{"start_line":3,"start_character":28,"end_line":3,"end_character":53},"in_reply_to":"ba2be162_50fa84be","updated":"2017-03-01 18:14:11.000000000","message":"Done","commit_id":"0355a17c2a36cfb622fcd58767e2cdb630c9f17d"},{"author":{"_account_id":23804,"name":"Daniel Alvarez","email":"dalvarez@redhat.com","username":"dalvarez"},"change_message_id":"6cefc20d2de4ab1b9e31b6a11598b24f998d03da","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - haproxy is now used for neutron-ns-metadata-proxy instead of the previous"},{"line_number":4,"context_line":"    Python implementation. This reduces the memory footprint considerably."},{"line_number":5,"context_line":"upgrade:"},{"line_number":6,"context_line":"  - To upgrade to the haproxy based neutron-ns-metadata-proxy, neutron-l3-agent"}],"source_content_type":"text/x-yaml","patch_set":23,"id":"ba2be162_13b1f6e1","line":3,"range":{"start_line":3,"start_character":4,"end_line":3,"end_character":11},"in_reply_to":"ba2be162_d00594c2","updated":"2017-03-01 18:14:11.000000000","message":"Done","commit_id":"0355a17c2a36cfb622fcd58767e2cdb630c9f17d"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"907c4d88fd7c3c2f7df7398faf6d6b06db9a7561","unresolved":false,"context_lines":[{"line_number":3,"context_line":"  - haproxy is now used for neutron-ns-metadata-proxy instead of the previous"},{"line_number":4,"context_line":"    Python implementation. This reduces the memory footprint considerably."},{"line_number":5,"context_line":"upgrade:"},{"line_number":6,"context_line":"  - To upgrade to the haproxy based neutron-ns-metadata-proxy, neutron-l3-agent"},{"line_number":7,"context_line":"    and neutron-dhcp-agent have to be restarted. At start, old running versions"},{"line_number":8,"context_line":"    will be detected and replaced by haproxy."},{"line_number":9,"context_line":""}],"source_content_type":"text/x-yaml","patch_set":23,"id":"ba2be162_10b56ced","line":6,"range":{"start_line":6,"start_character":63,"end_line":6,"end_character":79},"updated":"2017-03-01 17:04:36.000000000","message":"``","commit_id":"0355a17c2a36cfb622fcd58767e2cdb630c9f17d"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"907c4d88fd7c3c2f7df7398faf6d6b06db9a7561","unresolved":false,"context_lines":[{"line_number":3,"context_line":"  - haproxy is now used for neutron-ns-metadata-proxy instead of the previous"},{"line_number":4,"context_line":"    Python implementation. This reduces the memory footprint considerably."},{"line_number":5,"context_line":"upgrade:"},{"line_number":6,"context_line":"  - To upgrade to the haproxy based neutron-ns-metadata-proxy, neutron-l3-agent"},{"line_number":7,"context_line":"    and neutron-dhcp-agent have to be restarted. At start, old running versions"},{"line_number":8,"context_line":"    will be detected and replaced by haproxy."},{"line_number":9,"context_line":""}],"source_content_type":"text/x-yaml","patch_set":23,"id":"ba2be162_10de4c3f","line":6,"range":{"start_line":6,"start_character":22,"end_line":6,"end_character":29},"updated":"2017-03-01 17:04:36.000000000","message":"``","commit_id":"0355a17c2a36cfb622fcd58767e2cdb630c9f17d"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"907c4d88fd7c3c2f7df7398faf6d6b06db9a7561","unresolved":false,"context_lines":[{"line_number":3,"context_line":"  - haproxy is now used for neutron-ns-metadata-proxy instead of the previous"},{"line_number":4,"context_line":"    Python implementation. This reduces the memory footprint considerably."},{"line_number":5,"context_line":"upgrade:"},{"line_number":6,"context_line":"  - To upgrade to the haproxy based neutron-ns-metadata-proxy, neutron-l3-agent"},{"line_number":7,"context_line":"    and neutron-dhcp-agent have to be restarted. At start, old running versions"},{"line_number":8,"context_line":"    will be detected and replaced by haproxy."},{"line_number":9,"context_line":""}],"source_content_type":"text/x-yaml","patch_set":23,"id":"ba2be162_d0baf4e0","line":6,"range":{"start_line":6,"start_character":36,"end_line":6,"end_character":61},"updated":"2017-03-01 17:04:36.000000000","message":"``","commit_id":"0355a17c2a36cfb622fcd58767e2cdb630c9f17d"},{"author":{"_account_id":23804,"name":"Daniel Alvarez","email":"dalvarez@redhat.com","username":"dalvarez"},"change_message_id":"6cefc20d2de4ab1b9e31b6a11598b24f998d03da","unresolved":false,"context_lines":[{"line_number":3,"context_line":"  - haproxy is now used for neutron-ns-metadata-proxy instead of the previous"},{"line_number":4,"context_line":"    Python implementation. This reduces the memory footprint considerably."},{"line_number":5,"context_line":"upgrade:"},{"line_number":6,"context_line":"  - To upgrade to the haproxy based neutron-ns-metadata-proxy, neutron-l3-agent"},{"line_number":7,"context_line":"    and neutron-dhcp-agent have to be restarted. At start, old running versions"},{"line_number":8,"context_line":"    will be detected and replaced by haproxy."},{"line_number":9,"context_line":""}],"source_content_type":"text/x-yaml","patch_set":23,"id":"ba2be162_f3bf025e","line":6,"range":{"start_line":6,"start_character":63,"end_line":6,"end_character":79},"in_reply_to":"ba2be162_10b56ced","updated":"2017-03-01 18:14:11.000000000","message":"Done","commit_id":"0355a17c2a36cfb622fcd58767e2cdb630c9f17d"},{"author":{"_account_id":23804,"name":"Daniel Alvarez","email":"dalvarez@redhat.com","username":"dalvarez"},"change_message_id":"6cefc20d2de4ab1b9e31b6a11598b24f998d03da","unresolved":false,"context_lines":[{"line_number":3,"context_line":"  - haproxy is now used for neutron-ns-metadata-proxy instead of the previous"},{"line_number":4,"context_line":"    Python implementation. This reduces the memory footprint considerably."},{"line_number":5,"context_line":"upgrade:"},{"line_number":6,"context_line":"  - To upgrade to the haproxy based neutron-ns-metadata-proxy, neutron-l3-agent"},{"line_number":7,"context_line":"    and neutron-dhcp-agent have to be restarted. At start, old running versions"},{"line_number":8,"context_line":"    will be detected and replaced by haproxy."},{"line_number":9,"context_line":""}],"source_content_type":"text/x-yaml","patch_set":23,"id":"ba2be162_53b1ae8e","line":6,"range":{"start_line":6,"start_character":22,"end_line":6,"end_character":29},"in_reply_to":"ba2be162_10de4c3f","updated":"2017-03-01 18:14:11.000000000","message":"Done","commit_id":"0355a17c2a36cfb622fcd58767e2cdb630c9f17d"},{"author":{"_account_id":23804,"name":"Daniel Alvarez","email":"dalvarez@redhat.com","username":"dalvarez"},"change_message_id":"6cefc20d2de4ab1b9e31b6a11598b24f998d03da","unresolved":false,"context_lines":[{"line_number":3,"context_line":"  - haproxy is now used for neutron-ns-metadata-proxy instead of the previous"},{"line_number":4,"context_line":"    Python implementation. This reduces the memory footprint considerably."},{"line_number":5,"context_line":"upgrade:"},{"line_number":6,"context_line":"  - To upgrade to the haproxy based neutron-ns-metadata-proxy, neutron-l3-agent"},{"line_number":7,"context_line":"    and neutron-dhcp-agent have to be restarted. At start, old running versions"},{"line_number":8,"context_line":"    will be detected and replaced by haproxy."},{"line_number":9,"context_line":""}],"source_content_type":"text/x-yaml","patch_set":23,"id":"ba2be162_73acf235","line":6,"range":{"start_line":6,"start_character":36,"end_line":6,"end_character":61},"in_reply_to":"ba2be162_d0baf4e0","updated":"2017-03-01 18:14:11.000000000","message":"Done","commit_id":"0355a17c2a36cfb622fcd58767e2cdb630c9f17d"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"907c4d88fd7c3c2f7df7398faf6d6b06db9a7561","unresolved":false,"context_lines":[{"line_number":4,"context_line":"    Python implementation. This reduces the memory footprint considerably."},{"line_number":5,"context_line":"upgrade:"},{"line_number":6,"context_line":"  - To upgrade to the haproxy based neutron-ns-metadata-proxy, neutron-l3-agent"},{"line_number":7,"context_line":"    and neutron-dhcp-agent have to be restarted. At start, old running versions"},{"line_number":8,"context_line":"    will be detected and replaced by haproxy."},{"line_number":9,"context_line":""}],"source_content_type":"text/x-yaml","patch_set":23,"id":"ba2be162_d0883425","line":7,"range":{"start_line":7,"start_character":63,"end_line":7,"end_character":79},"updated":"2017-03-01 17:04:36.000000000","message":"-\u003e proxy processes","commit_id":"0355a17c2a36cfb622fcd58767e2cdb630c9f17d"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"907c4d88fd7c3c2f7df7398faf6d6b06db9a7561","unresolved":false,"context_lines":[{"line_number":4,"context_line":"    Python implementation. This reduces the memory footprint considerably."},{"line_number":5,"context_line":"upgrade:"},{"line_number":6,"context_line":"  - To upgrade to the haproxy based neutron-ns-metadata-proxy, neutron-l3-agent"},{"line_number":7,"context_line":"    and neutron-dhcp-agent have to be restarted. At start, old running versions"},{"line_number":8,"context_line":"    will be detected and replaced by haproxy."},{"line_number":9,"context_line":""}],"source_content_type":"text/x-yaml","patch_set":23,"id":"ba2be162_70914852","line":7,"range":{"start_line":7,"start_character":49,"end_line":7,"end_character":57},"updated":"2017-03-01 17:04:36.000000000","message":"On startup","commit_id":"0355a17c2a36cfb622fcd58767e2cdb630c9f17d"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"907c4d88fd7c3c2f7df7398faf6d6b06db9a7561","unresolved":false,"context_lines":[{"line_number":4,"context_line":"    Python implementation. This reduces the memory footprint considerably."},{"line_number":5,"context_line":"upgrade:"},{"line_number":6,"context_line":"  - To upgrade to the haproxy based neutron-ns-metadata-proxy, neutron-l3-agent"},{"line_number":7,"context_line":"    and neutron-dhcp-agent have to be restarted. At start, old running versions"},{"line_number":8,"context_line":"    will be detected and replaced by haproxy."},{"line_number":9,"context_line":""}],"source_content_type":"text/x-yaml","patch_set":23,"id":"ba2be162_30afd095","line":7,"range":{"start_line":7,"start_character":8,"end_line":7,"end_character":26},"updated":"2017-03-01 17:04:36.000000000","message":"``","commit_id":"0355a17c2a36cfb622fcd58767e2cdb630c9f17d"},{"author":{"_account_id":23804,"name":"Daniel Alvarez","email":"dalvarez@redhat.com","username":"dalvarez"},"change_message_id":"6cefc20d2de4ab1b9e31b6a11598b24f998d03da","unresolved":false,"context_lines":[{"line_number":4,"context_line":"    Python implementation. This reduces the memory footprint considerably."},{"line_number":5,"context_line":"upgrade:"},{"line_number":6,"context_line":"  - To upgrade to the haproxy based neutron-ns-metadata-proxy, neutron-l3-agent"},{"line_number":7,"context_line":"    and neutron-dhcp-agent have to be restarted. At start, old running versions"},{"line_number":8,"context_line":"    will be detected and replaced by haproxy."},{"line_number":9,"context_line":""}],"source_content_type":"text/x-yaml","patch_set":23,"id":"ba2be162_d3bcbe6e","line":7,"range":{"start_line":7,"start_character":8,"end_line":7,"end_character":26},"in_reply_to":"ba2be162_30afd095","updated":"2017-03-01 18:14:11.000000000","message":"Done","commit_id":"0355a17c2a36cfb622fcd58767e2cdb630c9f17d"},{"author":{"_account_id":23804,"name":"Daniel Alvarez","email":"dalvarez@redhat.com","username":"dalvarez"},"change_message_id":"6cefc20d2de4ab1b9e31b6a11598b24f998d03da","unresolved":false,"context_lines":[{"line_number":4,"context_line":"    Python implementation. This reduces the memory footprint considerably."},{"line_number":5,"context_line":"upgrade:"},{"line_number":6,"context_line":"  - To upgrade to the haproxy based neutron-ns-metadata-proxy, neutron-l3-agent"},{"line_number":7,"context_line":"    and neutron-dhcp-agent have to be restarted. At start, old running versions"},{"line_number":8,"context_line":"    will be detected and replaced by haproxy."},{"line_number":9,"context_line":""}],"source_content_type":"text/x-yaml","patch_set":23,"id":"ba2be162_93ab261d","line":7,"range":{"start_line":7,"start_character":49,"end_line":7,"end_character":57},"in_reply_to":"ba2be162_70914852","updated":"2017-03-01 18:14:11.000000000","message":"Done","commit_id":"0355a17c2a36cfb622fcd58767e2cdb630c9f17d"},{"author":{"_account_id":23804,"name":"Daniel Alvarez","email":"dalvarez@redhat.com","username":"dalvarez"},"change_message_id":"6cefc20d2de4ab1b9e31b6a11598b24f998d03da","unresolved":false,"context_lines":[{"line_number":4,"context_line":"    Python implementation. This reduces the memory footprint considerably."},{"line_number":5,"context_line":"upgrade:"},{"line_number":6,"context_line":"  - To upgrade to the haproxy based neutron-ns-metadata-proxy, neutron-l3-agent"},{"line_number":7,"context_line":"    and neutron-dhcp-agent have to be restarted. At start, old running versions"},{"line_number":8,"context_line":"    will be detected and replaced by haproxy."},{"line_number":9,"context_line":""}],"source_content_type":"text/x-yaml","patch_set":23,"id":"ba2be162_b3a66a51","line":7,"range":{"start_line":7,"start_character":63,"end_line":7,"end_character":79},"in_reply_to":"ba2be162_d0883425","updated":"2017-03-01 18:14:11.000000000","message":"Done","commit_id":"0355a17c2a36cfb622fcd58767e2cdb630c9f17d"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"907c4d88fd7c3c2f7df7398faf6d6b06db9a7561","unresolved":false,"context_lines":[{"line_number":5,"context_line":"upgrade:"},{"line_number":6,"context_line":"  - To upgrade to the haproxy based neutron-ns-metadata-proxy, neutron-l3-agent"},{"line_number":7,"context_line":"    and neutron-dhcp-agent have to be restarted. At start, old running versions"},{"line_number":8,"context_line":"    will be detected and replaced by haproxy."},{"line_number":9,"context_line":""}],"source_content_type":"text/x-yaml","patch_set":23,"id":"ba2be162_30b430d0","line":8,"range":{"start_line":8,"start_character":37,"end_line":8,"end_character":44},"updated":"2017-03-01 17:04:36.000000000","message":"``","commit_id":"0355a17c2a36cfb622fcd58767e2cdb630c9f17d"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"907c4d88fd7c3c2f7df7398faf6d6b06db9a7561","unresolved":false,"context_lines":[{"line_number":5,"context_line":"upgrade:"},{"line_number":6,"context_line":"  - To upgrade to the haproxy based neutron-ns-metadata-proxy, neutron-l3-agent"},{"line_number":7,"context_line":"    and neutron-dhcp-agent have to be restarted. At start, old running versions"},{"line_number":8,"context_line":"    will be detected and replaced by haproxy."},{"line_number":9,"context_line":""}],"source_content_type":"text/x-yaml","patch_set":23,"id":"ba2be162_309d105a","line":8,"range":{"start_line":8,"start_character":34,"end_line":8,"end_character":36},"updated":"2017-03-01 17:04:36.000000000","message":"with?","commit_id":"0355a17c2a36cfb622fcd58767e2cdb630c9f17d"},{"author":{"_account_id":23804,"name":"Daniel Alvarez","email":"dalvarez@redhat.com","username":"dalvarez"},"change_message_id":"6cefc20d2de4ab1b9e31b6a11598b24f998d03da","unresolved":false,"context_lines":[{"line_number":5,"context_line":"upgrade:"},{"line_number":6,"context_line":"  - To upgrade to the haproxy based neutron-ns-metadata-proxy, neutron-l3-agent"},{"line_number":7,"context_line":"    and neutron-dhcp-agent have to be restarted. At start, old running versions"},{"line_number":8,"context_line":"    will be detected and replaced by haproxy."},{"line_number":9,"context_line":""}],"source_content_type":"text/x-yaml","patch_set":23,"id":"ba2be162_737312e8","line":8,"range":{"start_line":8,"start_character":34,"end_line":8,"end_character":36},"in_reply_to":"ba2be162_309d105a","updated":"2017-03-01 18:14:11.000000000","message":"Done","commit_id":"0355a17c2a36cfb622fcd58767e2cdb630c9f17d"},{"author":{"_account_id":23804,"name":"Daniel Alvarez","email":"dalvarez@redhat.com","username":"dalvarez"},"change_message_id":"6cefc20d2de4ab1b9e31b6a11598b24f998d03da","unresolved":false,"context_lines":[{"line_number":5,"context_line":"upgrade:"},{"line_number":6,"context_line":"  - To upgrade to the haproxy based neutron-ns-metadata-proxy, neutron-l3-agent"},{"line_number":7,"context_line":"    and neutron-dhcp-agent have to be restarted. At start, old running versions"},{"line_number":8,"context_line":"    will be detected and replaced by haproxy."},{"line_number":9,"context_line":""}],"source_content_type":"text/x-yaml","patch_set":23,"id":"ba2be162_b37d8ab3","line":8,"range":{"start_line":8,"start_character":37,"end_line":8,"end_character":44},"in_reply_to":"ba2be162_30b430d0","updated":"2017-03-01 18:14:11.000000000","message":"Done","commit_id":"0355a17c2a36cfb622fcd58767e2cdb630c9f17d"}]}
