)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":333,"name":"Isaku Yamahata","email":"isaku.yamahata@gmail.com","username":"yamahata"},"change_message_id":"339c0b754d9b69d7ab38f597e16e2c66d7a36a11","unresolved":false,"context_lines":[{"line_number":15,"context_line":"update logic is employed only if ODL supports it."},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"Change-Id: Id315e1085db183d4a8966de833224f220eae0961"},{"line_number":18,"context_line":"Signed-off-by: Josh \u003cjhershbe@redhat.com\u003e"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":22,"id":"ff0f0b1f_0281994a","line":18,"range":{"start_line":18,"start_character":0,"end_line":18,"end_character":41},"updated":"2017-05-23 17:41:02.000000000","message":"Please drop s-o-b because openstack doesn\u0027t adopt it.","commit_id":"b547254c27f53a460adf5499f2534c457ede316b"},{"author":{"_account_id":22380,"name":"Josh Hershberg","email":"jhershbe@redhat.com","username":"jhershbe"},"change_message_id":"d277f9812f010e1a3f5f7079835afb875bb12ae8","unresolved":false,"context_lines":[{"line_number":15,"context_line":"update logic is employed only if ODL supports it."},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"Change-Id: Id315e1085db183d4a8966de833224f220eae0961"},{"line_number":18,"context_line":"Signed-off-by: Josh \u003cjhershbe@redhat.com\u003e"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":22,"id":"ff0f0b1f_696ffffb","line":18,"range":{"start_line":18,"start_character":0,"end_line":18,"end_character":41},"in_reply_to":"ff0f0b1f_0281994a","updated":"2017-05-23 18:16:38.000000000","message":"This was done in patch set 23, you commented on 22","commit_id":"b547254c27f53a460adf5499f2534c457ede316b"}],"networking_odl/ml2/mech_driver_v2.py":[{"author":{"_account_id":333,"name":"Isaku Yamahata","email":"isaku.yamahata@gmail.com","username":"yamahata"},"change_message_id":"339c0b754d9b69d7ab38f597e16e2c66d7a36a11","unresolved":false,"context_lines":[{"line_number":97,"context_line":"        # we insert a status barrier to prevent the port from transitioning"},{"line_number":98,"context_line":"        # to active until the agent reports back that the wiring is done"},{"line_number":99,"context_line":"        port \u003d context.current"},{"line_number":100,"context_line":"        if not context.host or port[\u0027status\u0027] \u003d\u003d p_const.PORT_STATUS_ACTIVE:"},{"line_number":101,"context_line":"            # for now we only support transition from DOWN-\u003eACTIVE so there is"},{"line_number":102,"context_line":"            # no point in putting in a block if the status is already ACTIVE"},{"line_number":103,"context_line":"            # See https://bugs.launchpad.net/networking-odl/+bug/1686023"}],"source_content_type":"text/x-python","patch_set":22,"id":"ff0f0b1f_a28f8d73","line":100,"range":{"start_line":100,"start_character":11,"end_line":100,"end_character":48},"updated":"2017-05-23 17:41:02.000000000","message":"!\u003d is more commonly used.","commit_id":"b547254c27f53a460adf5499f2534c457ede316b"},{"author":{"_account_id":22380,"name":"Josh Hershberg","email":"jhershbe@redhat.com","username":"jhershbe"},"change_message_id":"d277f9812f010e1a3f5f7079835afb875bb12ae8","unresolved":false,"context_lines":[{"line_number":97,"context_line":"        # we insert a status barrier to prevent the port from transitioning"},{"line_number":98,"context_line":"        # to active until the agent reports back that the wiring is done"},{"line_number":99,"context_line":"        port \u003d context.current"},{"line_number":100,"context_line":"        if not context.host or port[\u0027status\u0027] \u003d\u003d p_const.PORT_STATUS_ACTIVE:"},{"line_number":101,"context_line":"            # for now we only support transition from DOWN-\u003eACTIVE so there is"},{"line_number":102,"context_line":"            # no point in putting in a block if the status is already ACTIVE"},{"line_number":103,"context_line":"            # See https://bugs.launchpad.net/networking-odl/+bug/1686023"}],"source_content_type":"text/x-python","patch_set":22,"id":"ff0f0b1f_3bc70e99","line":100,"range":{"start_line":100,"start_character":11,"end_line":100,"end_character":48},"in_reply_to":"ff0f0b1f_a28f8d73","updated":"2017-05-23 18:16:38.000000000","message":"Done","commit_id":"b547254c27f53a460adf5499f2534c457ede316b"},{"author":{"_account_id":6854,"name":"YAMAMOTO Takashi","email":"yamamoto@midokura.com","username":"yamamoto"},"change_message_id":"c1a0aa5f9102c71d5b9833d3c6a163cb7c3b67bd","unresolved":false,"context_lines":[{"line_number":66,"context_line":"        if odl_const.ODL_QOS in cfg.CONF.ml2.extension_drivers:"},{"line_number":67,"context_line":"            qos_driver.OpenDaylightQosDriver.create()"},{"line_number":68,"context_line":"        self._start_maintenance_thread()"},{"line_number":69,"context_line":"        odl_features.init()"},{"line_number":70,"context_line":"        registry.subscribe(self.post_init_logic,"},{"line_number":71,"context_line":"                           lib_resources.PROCESS, events.AFTER_INIT)"},{"line_number":72,"context_line":""}],"source_content_type":"text/x-python","patch_set":34,"id":"df140735_6734714b","line":69,"updated":"2017-05-29 07:17:06.000000000","message":"this means callbacks can be called before we register it in register_init_callback below, doesn\u0027t it?","commit_id":"da68a73101a0cb6910919ba0f739fffe21b95ba6"},{"author":{"_account_id":6854,"name":"YAMAMOTO Takashi","email":"yamamoto@midokura.com","username":"yamamoto"},"change_message_id":"dce036da11eadb835c3bb97db11b2b1b70263224","unresolved":false,"context_lines":[{"line_number":66,"context_line":"        if odl_const.ODL_QOS in cfg.CONF.ml2.extension_drivers:"},{"line_number":67,"context_line":"            qos_driver.OpenDaylightQosDriver.create()"},{"line_number":68,"context_line":"        self._start_maintenance_thread()"},{"line_number":69,"context_line":"        odl_features.init()"},{"line_number":70,"context_line":"        registry.subscribe(self.post_init_logic,"},{"line_number":71,"context_line":"                           lib_resources.PROCESS, events.AFTER_INIT)"},{"line_number":72,"context_line":""}],"source_content_type":"text/x-python","patch_set":34,"id":"df140735_6aeb15b0","line":69,"in_reply_to":"df140735_47a3ad50","updated":"2017-05-29 08:47:14.000000000","message":"ok\nthank you for explanation.","commit_id":"da68a73101a0cb6910919ba0f739fffe21b95ba6"},{"author":{"_account_id":22380,"name":"Josh Hershberg","email":"jhershbe@redhat.com","username":"jhershbe"},"change_message_id":"902ab59e6baf20c1609980f6f27402d0c099892f","unresolved":false,"context_lines":[{"line_number":66,"context_line":"        if odl_const.ODL_QOS in cfg.CONF.ml2.extension_drivers:"},{"line_number":67,"context_line":"            qos_driver.OpenDaylightQosDriver.create()"},{"line_number":68,"context_line":"        self._start_maintenance_thread()"},{"line_number":69,"context_line":"        odl_features.init()"},{"line_number":70,"context_line":"        registry.subscribe(self.post_init_logic,"},{"line_number":71,"context_line":"                           lib_resources.PROCESS, events.AFTER_INIT)"},{"line_number":72,"context_line":""}],"source_content_type":"text/x-python","patch_set":34,"id":"df140735_47a3ad50","line":69,"in_reply_to":"df140735_6734714b","updated":"2017-05-29 07:23:40.000000000","message":"See the function here: https://review.openstack.org/#/c/465462/23/networking_odl/common/odl_features.py\n\nIn short the answer to your question is, no. The registration function checks whether the values have been retrieved already. There is a lock to make sure there are no timing issues.","commit_id":"da68a73101a0cb6910919ba0f739fffe21b95ba6"}],"networking_odl/ml2/port_status_update.py":[{"author":{"_account_id":20208,"name":"Ritu Sood","email":"ritu.sood@intel.com","username":"rsood"},"change_message_id":"e6c4867f552c6893d79a82f88c47fddf9459001c","unresolved":false,"context_lines":[{"line_number":42,"context_line":"        self.ports_uri \u003d self._make_ports_uri("},{"line_number":43,"context_line":"            cfg.CONF.ml2_odl.url, restconf_url)"},{"line_number":44,"context_line":"        self.path_uri \u003d self._make_odl_url(cfg.CONF.ml2_odl.url)"},{"line_number":45,"context_line":"        self.odl_rest_client \u003d odl_client.OpenDaylightRestClient.create_client("},{"line_number":46,"context_line":"            url\u003dself.ports_uri)"},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"        self.odl_websocket_client \u003d ("},{"line_number":49,"context_line":"            odl_ws_client.OpendaylightWebsocketClient.odl_create_websocket("}],"source_content_type":"text/x-python","patch_set":13,"id":"ff0f0b1f_9031b3a5","line":46,"range":{"start_line":45,"start_character":8,"end_line":46,"end_character":31},"updated":"2017-05-19 18:52:13.000000000","message":"Reduntant not used anywhere","commit_id":"a0a9c064a7161f0c82d5727fd768008f60381b5e"},{"author":{"_account_id":22380,"name":"Josh Hershberg","email":"jhershbe@redhat.com","username":"jhershbe"},"change_message_id":"32dcf75aecc26432e2f7598664a9447266a843fe","unresolved":false,"context_lines":[{"line_number":42,"context_line":"        self.ports_uri \u003d self._make_ports_uri("},{"line_number":43,"context_line":"            cfg.CONF.ml2_odl.url, restconf_url)"},{"line_number":44,"context_line":"        self.path_uri \u003d self._make_odl_url(cfg.CONF.ml2_odl.url)"},{"line_number":45,"context_line":"        self.odl_rest_client \u003d odl_client.OpenDaylightRestClient.create_client("},{"line_number":46,"context_line":"            url\u003dself.ports_uri)"},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"        self.odl_websocket_client \u003d ("},{"line_number":49,"context_line":"            odl_ws_client.OpendaylightWebsocketClient.odl_create_websocket("}],"source_content_type":"text/x-python","patch_set":13,"id":"ff0f0b1f_4a7a34f1","line":46,"range":{"start_line":45,"start_character":8,"end_line":46,"end_character":31},"in_reply_to":"ff0f0b1f_9031b3a5","updated":"2017-05-21 12:42:42.000000000","message":"Done","commit_id":"a0a9c064a7161f0c82d5727fd768008f60381b5e"},{"author":{"_account_id":20208,"name":"Ritu Sood","email":"ritu.sood@intel.com","username":"rsood"},"change_message_id":"e6c4867f552c6893d79a82f88c47fddf9459001c","unresolved":false,"context_lines":[{"line_number":87,"context_line":"            reconn_thread.start()"},{"line_number":88,"context_line":""},{"line_number":89,"context_line":"    def _pull_missed_statuses(self):"},{"line_number":90,"context_line":"        LOG.debug(\"starting...\")"},{"line_number":91,"context_line":"        plugin \u003d directory.get_plugin()"},{"line_number":92,"context_line":"        filter \u003d {\"status\": [n_const.PORT_STATUS_DOWN],"},{"line_number":93,"context_line":"                  \"vif_type\": [\"unbound\"]}"}],"source_content_type":"text/x-python","patch_set":13,"id":"ff0f0b1f_70a5ff03","line":90,"range":{"start_line":90,"start_character":8,"end_line":90,"end_character":32},"updated":"2017-05-19 18:52:13.000000000","message":"Nitpik: Add more meaningful debug messages","commit_id":"a0a9c064a7161f0c82d5727fd768008f60381b5e"},{"author":{"_account_id":22380,"name":"Josh Hershberg","email":"jhershbe@redhat.com","username":"jhershbe"},"change_message_id":"32dcf75aecc26432e2f7598664a9447266a843fe","unresolved":false,"context_lines":[{"line_number":87,"context_line":"            reconn_thread.start()"},{"line_number":88,"context_line":""},{"line_number":89,"context_line":"    def _pull_missed_statuses(self):"},{"line_number":90,"context_line":"        LOG.debug(\"starting...\")"},{"line_number":91,"context_line":"        plugin \u003d directory.get_plugin()"},{"line_number":92,"context_line":"        filter \u003d {\"status\": [n_const.PORT_STATUS_DOWN],"},{"line_number":93,"context_line":"                  \"vif_type\": [\"unbound\"]}"}],"source_content_type":"text/x-python","patch_set":13,"id":"ff0f0b1f_2a7dc0e6","line":90,"range":{"start_line":90,"start_character":8,"end_line":90,"end_character":32},"in_reply_to":"ff0f0b1f_70a5ff03","updated":"2017-05-21 12:42:42.000000000","message":"Done","commit_id":"a0a9c064a7161f0c82d5727fd768008f60381b5e"},{"author":{"_account_id":20208,"name":"Ritu Sood","email":"ritu.sood@intel.com","username":"rsood"},"change_message_id":"e6c4867f552c6893d79a82f88c47fddf9459001c","unresolved":false,"context_lines":[{"line_number":101,"context_line":"            id \u003d port[\"id\"]"},{"line_number":102,"context_line":"            port_fetch_url \u003d self._make_ports_uri("},{"line_number":103,"context_line":"                cfg.CONF.ml2_odl.url,"},{"line_number":104,"context_line":"                \"/restconf/operational/neutron:neutron/ports/port/\" + id)"},{"line_number":105,"context_line":"            client \u003d odl_client.OpenDaylightRestClient.create_client("},{"line_number":106,"context_line":"                url\u003dport_fetch_url)"},{"line_number":107,"context_line":"            response \u003d client.get()"}],"source_content_type":"text/x-python","patch_set":13,"id":"ff0f0b1f_ebac808d","line":104,"range":{"start_line":104,"start_character":16,"end_line":104,"end_character":67},"updated":"2017-05-19 18:52:13.000000000","message":"There is a constant in the class for this string","commit_id":"a0a9c064a7161f0c82d5727fd768008f60381b5e"},{"author":{"_account_id":22380,"name":"Josh Hershberg","email":"jhershbe@redhat.com","username":"jhershbe"},"change_message_id":"32dcf75aecc26432e2f7598664a9447266a843fe","unresolved":false,"context_lines":[{"line_number":101,"context_line":"            id \u003d port[\"id\"]"},{"line_number":102,"context_line":"            port_fetch_url \u003d self._make_ports_uri("},{"line_number":103,"context_line":"                cfg.CONF.ml2_odl.url,"},{"line_number":104,"context_line":"                \"/restconf/operational/neutron:neutron/ports/port/\" + id)"},{"line_number":105,"context_line":"            client \u003d odl_client.OpenDaylightRestClient.create_client("},{"line_number":106,"context_line":"                url\u003dport_fetch_url)"},{"line_number":107,"context_line":"            response \u003d client.get()"}],"source_content_type":"text/x-python","patch_set":13,"id":"ff0f0b1f_0a843cd3","line":104,"range":{"start_line":104,"start_character":16,"end_line":104,"end_character":67},"in_reply_to":"ff0f0b1f_ebac808d","updated":"2017-05-21 12:42:42.000000000","message":"Done","commit_id":"a0a9c064a7161f0c82d5727fd768008f60381b5e"},{"author":{"_account_id":20208,"name":"Ritu Sood","email":"ritu.sood@intel.com","username":"rsood"},"change_message_id":"e6c4867f552c6893d79a82f88c47fddf9459001c","unresolved":false,"context_lines":[{"line_number":102,"context_line":"            port_fetch_url \u003d self._make_ports_uri("},{"line_number":103,"context_line":"                cfg.CONF.ml2_odl.url,"},{"line_number":104,"context_line":"                \"/restconf/operational/neutron:neutron/ports/port/\" + id)"},{"line_number":105,"context_line":"            client \u003d odl_client.OpenDaylightRestClient.create_client("},{"line_number":106,"context_line":"                url\u003dport_fetch_url)"},{"line_number":107,"context_line":"            response \u003d client.get()"},{"line_number":108,"context_line":"            if response.status_code !\u003d 200:"},{"line_number":109,"context_line":"                LOG.warning(\"Non-200 response code %s\", str(response))"}],"source_content_type":"text/x-python","patch_set":13,"id":"ff0f0b1f_306ae7b2","line":106,"range":{"start_line":105,"start_character":11,"end_line":106,"end_character":35},"updated":"2017-05-19 18:52:13.000000000","message":"This can be done once outside the loop","commit_id":"a0a9c064a7161f0c82d5727fd768008f60381b5e"},{"author":{"_account_id":22380,"name":"Josh Hershberg","email":"jhershbe@redhat.com","username":"jhershbe"},"change_message_id":"32dcf75aecc26432e2f7598664a9447266a843fe","unresolved":false,"context_lines":[{"line_number":102,"context_line":"            port_fetch_url \u003d self._make_ports_uri("},{"line_number":103,"context_line":"                cfg.CONF.ml2_odl.url,"},{"line_number":104,"context_line":"                \"/restconf/operational/neutron:neutron/ports/port/\" + id)"},{"line_number":105,"context_line":"            client \u003d odl_client.OpenDaylightRestClient.create_client("},{"line_number":106,"context_line":"                url\u003dport_fetch_url)"},{"line_number":107,"context_line":"            response \u003d client.get()"},{"line_number":108,"context_line":"            if response.status_code !\u003d 200:"},{"line_number":109,"context_line":"                LOG.warning(\"Non-200 response code %s\", str(response))"}],"source_content_type":"text/x-python","patch_set":13,"id":"ff0f0b1f_0a3c3ce0","line":106,"range":{"start_line":105,"start_character":11,"end_line":106,"end_character":35},"in_reply_to":"ff0f0b1f_306ae7b2","updated":"2017-05-21 12:42:42.000000000","message":"Nice catch! Done.","commit_id":"a0a9c064a7161f0c82d5727fd768008f60381b5e"},{"author":{"_account_id":20208,"name":"Ritu Sood","email":"ritu.sood@intel.com","username":"rsood"},"change_message_id":"e6c4867f552c6893d79a82f88c47fddf9459001c","unresolved":false,"context_lines":[{"line_number":104,"context_line":"                \"/restconf/operational/neutron:neutron/ports/port/\" + id)"},{"line_number":105,"context_line":"            client \u003d odl_client.OpenDaylightRestClient.create_client("},{"line_number":106,"context_line":"                url\u003dport_fetch_url)"},{"line_number":107,"context_line":"            response \u003d client.get()"},{"line_number":108,"context_line":"            if response.status_code !\u003d 200:"},{"line_number":109,"context_line":"                LOG.warning(\"Non-200 response code %s\", str(response))"},{"line_number":110,"context_line":"                continue"},{"line_number":111,"context_line":"            odl_status \u003d response.json()[\u0027port\u0027][0][\u0027status\u0027]"},{"line_number":112,"context_line":"            if odl_status \u003d\u003d n_const.PORT_STATUS_ACTIVE:"},{"line_number":113,"context_line":"                # for now we only support transition from DOWN-\u003eACTIVE"}],"source_content_type":"text/x-python","patch_set":13,"id":"ff0f0b1f_f04a2f53","line":110,"range":{"start_line":107,"start_character":11,"end_line":110,"end_character":24},"updated":"2017-05-19 18:52:13.000000000","message":"What if connection is lost here again at this point? Does this  mean that on next re-connection another thread will be started and we can have multiple of these threads running at same time?","commit_id":"a0a9c064a7161f0c82d5727fd768008f60381b5e"},{"author":{"_account_id":22380,"name":"Josh Hershberg","email":"jhershbe@redhat.com","username":"jhershbe"},"change_message_id":"32dcf75aecc26432e2f7598664a9447266a843fe","unresolved":false,"context_lines":[{"line_number":104,"context_line":"                \"/restconf/operational/neutron:neutron/ports/port/\" + id)"},{"line_number":105,"context_line":"            client \u003d odl_client.OpenDaylightRestClient.create_client("},{"line_number":106,"context_line":"                url\u003dport_fetch_url)"},{"line_number":107,"context_line":"            response \u003d client.get()"},{"line_number":108,"context_line":"            if response.status_code !\u003d 200:"},{"line_number":109,"context_line":"                LOG.warning(\"Non-200 response code %s\", str(response))"},{"line_number":110,"context_line":"                continue"},{"line_number":111,"context_line":"            odl_status \u003d response.json()[\u0027port\u0027][0][\u0027status\u0027]"},{"line_number":112,"context_line":"            if odl_status \u003d\u003d n_const.PORT_STATUS_ACTIVE:"},{"line_number":113,"context_line":"                # for now we only support transition from DOWN-\u003eACTIVE"}],"source_content_type":"text/x-python","patch_set":13,"id":"ff0f0b1f_aa68b020","line":110,"range":{"start_line":107,"start_character":11,"end_line":110,"end_character":24},"in_reply_to":"ff0f0b1f_f04a2f53","updated":"2017-05-21 12:42:42.000000000","message":"So, yeah, that could happen. However, in order to deal with the race conditions that could happen on reconnect _for_ _now_ this code only transitions from DOWN-\u003eACTIVE. As such, there is no real danger in having multiple of these threads running at the same time on the outside chance that it occurs.","commit_id":"a0a9c064a7161f0c82d5727fd768008f60381b5e"},{"author":{"_account_id":20208,"name":"Ritu Sood","email":"ritu.sood@intel.com","username":"rsood"},"change_message_id":"e6c4867f552c6893d79a82f88c47fddf9459001c","unresolved":false,"context_lines":[{"line_number":116,"context_line":"                    context.get_admin_context(),"},{"line_number":117,"context_line":"                    id, resources.PORT,"},{"line_number":118,"context_line":"                    provisioning_blocks.L2_AGENT_ENTITY)"},{"line_number":119,"context_line":"        LOG.debug(\"done\")"},{"line_number":120,"context_line":""},{"line_number":121,"context_line":"    def _make_ports_uri(self, odl_url\u003dNone, path\u003d\u0027\u0027):"},{"line_number":122,"context_line":"        \"\"\"Make ODL ports URI with host/port extraced from ODL_URL.\"\"\""}],"source_content_type":"text/x-python","patch_set":13,"id":"ff0f0b1f_d0b3ab4c","line":119,"range":{"start_line":119,"start_character":8,"end_line":119,"end_character":25},"updated":"2017-05-19 18:52:13.000000000","message":"Ditto","commit_id":"a0a9c064a7161f0c82d5727fd768008f60381b5e"},{"author":{"_account_id":22380,"name":"Josh Hershberg","email":"jhershbe@redhat.com","username":"jhershbe"},"change_message_id":"32dcf75aecc26432e2f7598664a9447266a843fe","unresolved":false,"context_lines":[{"line_number":116,"context_line":"                    context.get_admin_context(),"},{"line_number":117,"context_line":"                    id, resources.PORT,"},{"line_number":118,"context_line":"                    provisioning_blocks.L2_AGENT_ENTITY)"},{"line_number":119,"context_line":"        LOG.debug(\"done\")"},{"line_number":120,"context_line":""},{"line_number":121,"context_line":"    def _make_ports_uri(self, odl_url\u003dNone, path\u003d\u0027\u0027):"},{"line_number":122,"context_line":"        \"\"\"Make ODL ports URI with host/port extraced from ODL_URL.\"\"\""}],"source_content_type":"text/x-python","patch_set":13,"id":"ff0f0b1f_ca6d2433","line":119,"range":{"start_line":119,"start_character":8,"end_line":119,"end_character":25},"in_reply_to":"ff0f0b1f_d0b3ab4c","updated":"2017-05-21 12:42:42.000000000","message":"Done","commit_id":"a0a9c064a7161f0c82d5727fd768008f60381b5e"},{"author":{"_account_id":333,"name":"Isaku Yamahata","email":"isaku.yamahata@gmail.com","username":"yamahata"},"change_message_id":"339c0b754d9b69d7ab38f597e16e2c66d7a36a11","unresolved":false,"context_lines":[{"line_number":30,"context_line":"LOG \u003d log.getLogger(__name__)"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"class OdlPortStatusUpdate(object):"},{"line_number":34,"context_line":"    \"\"\"Class to register and handle port status update\"\"\""},{"line_number":35,"context_line":"    port_path \u003d \"restconf/operational/neutron:neutron/ports/port\""},{"line_number":36,"context_line":""}],"source_content_type":"text/x-python","patch_set":22,"id":"ff0f0b1f_09c3e339","line":33,"range":{"start_line":33,"start_character":6,"end_line":33,"end_character":34},"updated":"2017-05-23 17:41:02.000000000","message":"If rpc worker is enabled, multiple instances of this class is created. NeutronWorker can be used.\nsee neutron/worker.py and neutorn/plugin/ml2/","commit_id":"b547254c27f53a460adf5499f2534c457ede316b"},{"author":{"_account_id":22380,"name":"Josh Hershberg","email":"jhershbe@redhat.com","username":"jhershbe"},"change_message_id":"6a0083305c24a6029ec5d78fd0b50b7bed8418de","unresolved":false,"context_lines":[{"line_number":30,"context_line":"LOG \u003d log.getLogger(__name__)"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"class OdlPortStatusUpdate(object):"},{"line_number":34,"context_line":"    \"\"\"Class to register and handle port status update\"\"\""},{"line_number":35,"context_line":"    port_path \u003d \"restconf/operational/neutron:neutron/ports/port\""},{"line_number":36,"context_line":""}],"source_content_type":"text/x-python","patch_set":22,"id":"ff0f0b1f_5e0bd022","line":33,"range":{"start_line":33,"start_character":6,"end_line":33,"end_character":34},"in_reply_to":"ff0f0b1f_09c3e339","updated":"2017-05-23 18:18:08.000000000","message":"I don\u0027t understand and could not find a good example of what this is, what it does, how it should be used, or why we need it. I need a little more info here ;-)","commit_id":"b547254c27f53a460adf5499f2534c457ede316b"},{"author":{"_account_id":22380,"name":"Josh Hershberg","email":"jhershbe@redhat.com","username":"jhershbe"},"change_message_id":"95483328b162bc8628878642665ecb25deed2710","unresolved":false,"context_lines":[{"line_number":30,"context_line":"LOG \u003d log.getLogger(__name__)"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"class OdlPortStatusUpdate(object):"},{"line_number":34,"context_line":"    \"\"\"Class to register and handle port status update\"\"\""},{"line_number":35,"context_line":"    port_path \u003d \"restconf/operational/neutron:neutron/ports/port\""},{"line_number":36,"context_line":""}],"source_content_type":"text/x-python","patch_set":22,"id":"ff0f0b1f_5bc4de3f","line":33,"range":{"start_line":33,"start_character":6,"end_line":33,"end_character":34},"in_reply_to":"ff0f0b1f_5e0bd022","updated":"2017-05-24 16:49:17.000000000","message":"Done in a separate patch: https://review.openstack.org/#/c/467645/","commit_id":"b547254c27f53a460adf5499f2534c457ede316b"},{"author":{"_account_id":333,"name":"Isaku Yamahata","email":"isaku.yamahata@gmail.com","username":"yamahata"},"change_message_id":"339c0b754d9b69d7ab38f597e16e2c66d7a36a11","unresolved":false,"context_lines":[{"line_number":32,"context_line":""},{"line_number":33,"context_line":"class OdlPortStatusUpdate(object):"},{"line_number":34,"context_line":"    \"\"\"Class to register and handle port status update\"\"\""},{"line_number":35,"context_line":"    port_path \u003d \"restconf/operational/neutron:neutron/ports/port\""},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"    def __init__(self):"},{"line_number":38,"context_line":"        # Opendaylight path to recieve websocket notifications on"}],"source_content_type":"text/x-python","patch_set":22,"id":"ff0f0b1f_22ca5da0","line":35,"range":{"start_line":35,"start_character":4,"end_line":35,"end_character":13},"updated":"2017-05-23 17:41:02.000000000","message":"upper case for constants.","commit_id":"b547254c27f53a460adf5499f2534c457ede316b"},{"author":{"_account_id":22380,"name":"Josh Hershberg","email":"jhershbe@redhat.com","username":"jhershbe"},"change_message_id":"d277f9812f010e1a3f5f7079835afb875bb12ae8","unresolved":false,"context_lines":[{"line_number":32,"context_line":""},{"line_number":33,"context_line":"class OdlPortStatusUpdate(object):"},{"line_number":34,"context_line":"    \"\"\"Class to register and handle port status update\"\"\""},{"line_number":35,"context_line":"    port_path \u003d \"restconf/operational/neutron:neutron/ports/port\""},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"    def __init__(self):"},{"line_number":38,"context_line":"        # Opendaylight path to recieve websocket notifications on"}],"source_content_type":"text/x-python","patch_set":22,"id":"ff0f0b1f_7b6d86ca","line":35,"range":{"start_line":35,"start_character":4,"end_line":35,"end_character":13},"in_reply_to":"ff0f0b1f_22ca5da0","updated":"2017-05-23 18:16:38.000000000","message":"Done","commit_id":"b547254c27f53a460adf5499f2534c457ede316b"},{"author":{"_account_id":333,"name":"Isaku Yamahata","email":"isaku.yamahata@gmail.com","username":"yamahata"},"change_message_id":"339c0b754d9b69d7ab38f597e16e2c66d7a36a11","unresolved":false,"context_lines":[{"line_number":55,"context_line":"        LOG.debug(\"Websocket notification for port status update\")"},{"line_number":56,"context_line":"        for event in odl_ws_client.EventDataParser.get_item(payload):"},{"line_number":57,"context_line":"            operation, path, data \u003d event.get_fields()"},{"line_number":58,"context_line":"            if ((operation in event.OPERATION_UPDATE,"},{"line_number":59,"context_line":"                 event.OPERATION_CREATE)):"},{"line_number":60,"context_line":"                port_id \u003d event.extract_field(path, \"neutron:uuid\")"},{"line_number":61,"context_line":"                port_id \u003d str(port_id).replace(\"\u0027\", \"\")"},{"line_number":62,"context_line":"                status_field \u003d data.get(\u0027status\u0027)"}],"source_content_type":"text/x-python","patch_set":22,"id":"ff0f0b1f_0212b909","line":59,"range":{"start_line":58,"start_character":30,"end_line":59,"end_character":39},"updated":"2017-05-23 17:41:02.000000000","message":"[UPDAATE. CREATE]","commit_id":"b547254c27f53a460adf5499f2534c457ede316b"},{"author":{"_account_id":22380,"name":"Josh Hershberg","email":"jhershbe@redhat.com","username":"jhershbe"},"change_message_id":"d277f9812f010e1a3f5f7079835afb875bb12ae8","unresolved":false,"context_lines":[{"line_number":55,"context_line":"        LOG.debug(\"Websocket notification for port status update\")"},{"line_number":56,"context_line":"        for event in odl_ws_client.EventDataParser.get_item(payload):"},{"line_number":57,"context_line":"            operation, path, data \u003d event.get_fields()"},{"line_number":58,"context_line":"            if ((operation in event.OPERATION_UPDATE,"},{"line_number":59,"context_line":"                 event.OPERATION_CREATE)):"},{"line_number":60,"context_line":"                port_id \u003d event.extract_field(path, \"neutron:uuid\")"},{"line_number":61,"context_line":"                port_id \u003d str(port_id).replace(\"\u0027\", \"\")"},{"line_number":62,"context_line":"                status_field \u003d data.get(\u0027status\u0027)"}],"source_content_type":"text/x-python","patch_set":22,"id":"ff0f0b1f_3bb02e43","line":59,"range":{"start_line":58,"start_character":30,"end_line":59,"end_character":39},"in_reply_to":"ff0f0b1f_0212b909","updated":"2017-05-23 18:16:38.000000000","message":"Done","commit_id":"b547254c27f53a460adf5499f2534c457ede316b"},{"author":{"_account_id":333,"name":"Isaku Yamahata","email":"isaku.yamahata@gmail.com","username":"yamahata"},"change_message_id":"339c0b754d9b69d7ab38f597e16e2c66d7a36a11","unresolved":false,"context_lines":[{"line_number":58,"context_line":"            if ((operation in event.OPERATION_UPDATE,"},{"line_number":59,"context_line":"                 event.OPERATION_CREATE)):"},{"line_number":60,"context_line":"                port_id \u003d event.extract_field(path, \"neutron:uuid\")"},{"line_number":61,"context_line":"                port_id \u003d str(port_id).replace(\"\u0027\", \"\")"},{"line_number":62,"context_line":"                status_field \u003d data.get(\u0027status\u0027)"},{"line_number":63,"context_line":"                if status_field is not None:"},{"line_number":64,"context_line":"                    status \u003d status_field.get(\u0027content\u0027)"}],"source_content_type":"text/x-python","patch_set":22,"id":"ff0f0b1f_426791be","line":61,"range":{"start_line":61,"start_character":39,"end_line":61,"end_character":55},"updated":"2017-05-23 17:41:02.000000000","message":"If this is to remove surrounding `, strip(\u0027`\u0027) is more descriptive.","commit_id":"b547254c27f53a460adf5499f2534c457ede316b"},{"author":{"_account_id":22380,"name":"Josh Hershberg","email":"jhershbe@redhat.com","username":"jhershbe"},"change_message_id":"d277f9812f010e1a3f5f7079835afb875bb12ae8","unresolved":false,"context_lines":[{"line_number":58,"context_line":"            if ((operation in event.OPERATION_UPDATE,"},{"line_number":59,"context_line":"                 event.OPERATION_CREATE)):"},{"line_number":60,"context_line":"                port_id \u003d event.extract_field(path, \"neutron:uuid\")"},{"line_number":61,"context_line":"                port_id \u003d str(port_id).replace(\"\u0027\", \"\")"},{"line_number":62,"context_line":"                status_field \u003d data.get(\u0027status\u0027)"},{"line_number":63,"context_line":"                if status_field is not None:"},{"line_number":64,"context_line":"                    status \u003d status_field.get(\u0027content\u0027)"}],"source_content_type":"text/x-python","patch_set":22,"id":"ff0f0b1f_bb855e5c","line":61,"range":{"start_line":61,"start_character":39,"end_line":61,"end_character":55},"in_reply_to":"ff0f0b1f_426791be","updated":"2017-05-23 18:16:38.000000000","message":"Done","commit_id":"b547254c27f53a460adf5499f2534c457ede316b"},{"author":{"_account_id":333,"name":"Isaku Yamahata","email":"isaku.yamahata@gmail.com","username":"yamahata"},"change_message_id":"339c0b754d9b69d7ab38f597e16e2c66d7a36a11","unresolved":false,"context_lines":[{"line_number":77,"context_line":"        if status \u003d\u003d odl_ws_client.ODL_WEBSOCKET_CONNECTED:"},{"line_number":78,"context_line":"            # Get port data using restconf"},{"line_number":79,"context_line":"            LOG.debug(\"Websocket notification on reconnection\")"},{"line_number":80,"context_line":"            reconn_thread \u003d threading.Thread("},{"line_number":81,"context_line":"                name\u003d\u0027websocket\u0027, target\u003dself._pull_missed_statuses)"},{"line_number":82,"context_line":"            reconn_thread.start()"},{"line_number":83,"context_line":""},{"line_number":84,"context_line":"    def _pull_missed_statuses(self):"},{"line_number":85,"context_line":"        LOG.debug(\"starting to pull pending statuses...\")"}],"source_content_type":"text/x-python","patch_set":22,"id":"ff0f0b1f_89e493e1","line":82,"range":{"start_line":80,"start_character":0,"end_line":82,"end_character":33},"updated":"2017-05-23 17:41:02.000000000","message":"Please check if the thread is already running.\nin network flapping case, reconnect can be called repeatedly.\nor _pull_missed_statuses may take long time.","commit_id":"b547254c27f53a460adf5499f2534c457ede316b"},{"author":{"_account_id":22380,"name":"Josh Hershberg","email":"jhershbe@redhat.com","username":"jhershbe"},"change_message_id":"d277f9812f010e1a3f5f7079835afb875bb12ae8","unresolved":false,"context_lines":[{"line_number":77,"context_line":"        if status \u003d\u003d odl_ws_client.ODL_WEBSOCKET_CONNECTED:"},{"line_number":78,"context_line":"            # Get port data using restconf"},{"line_number":79,"context_line":"            LOG.debug(\"Websocket notification on reconnection\")"},{"line_number":80,"context_line":"            reconn_thread \u003d threading.Thread("},{"line_number":81,"context_line":"                name\u003d\u0027websocket\u0027, target\u003dself._pull_missed_statuses)"},{"line_number":82,"context_line":"            reconn_thread.start()"},{"line_number":83,"context_line":""},{"line_number":84,"context_line":"    def _pull_missed_statuses(self):"},{"line_number":85,"context_line":"        LOG.debug(\"starting to pull pending statuses...\")"}],"source_content_type":"text/x-python","patch_set":22,"id":"ff0f0b1f_fbe3d632","line":82,"range":{"start_line":80,"start_character":0,"end_line":82,"end_character":33},"in_reply_to":"ff0f0b1f_89e493e1","updated":"2017-05-23 18:16:38.000000000","message":"I don\u0027t want to do that. (a) I don\u0027t think the thread will run for a long time and (b) I therefor don\u0027t think it is the end of the world for there to be more than one, it\u0027s not like there are likely to be more than one or two. On the other hand, if there is another flop it\u0027s better to run the query for the pending ports again.","commit_id":"b547254c27f53a460adf5499f2534c457ede316b"},{"author":{"_account_id":333,"name":"Isaku Yamahata","email":"isaku.yamahata@gmail.com","username":"yamahata"},"change_message_id":"a2d432962fd98e09fc0dacffe3dd6172d28b66d7","unresolved":false,"context_lines":[{"line_number":93,"context_line":"            LOG.debug(\"no down ports found, done\")"},{"line_number":94,"context_line":"            return"},{"line_number":95,"context_line":""},{"line_number":96,"context_line":"        port_fetch_url \u003d self._make_ports_uri("},{"line_number":97,"context_line":"            cfg.CONF.ml2_odl.url, self.PORT_PATH)"},{"line_number":98,"context_line":"        client \u003d odl_client.OpenDaylightRestClient.create_client("},{"line_number":99,"context_line":"            url\u003dport_fetch_url)"}],"source_content_type":"text/x-python","patch_set":31,"id":"ff0f0b1f_d71ad36d","line":96,"range":{"start_line":96,"start_character":25,"end_line":96,"end_character":44},"updated":"2017-05-25 20:18:02.000000000","message":"use utils.","commit_id":"734742be3c0fcb1ccd2ca5d07f88d31acde9bc6c"},{"author":{"_account_id":333,"name":"Isaku Yamahata","email":"isaku.yamahata@gmail.com","username":"yamahata"},"change_message_id":"a2d432962fd98e09fc0dacffe3dd6172d28b66d7","unresolved":false,"context_lines":[{"line_number":114,"context_line":"                    provisioning_blocks.L2_AGENT_ENTITY)"},{"line_number":115,"context_line":"        LOG.debug(\"done pulling pending statuses\")"},{"line_number":116,"context_line":""},{"line_number":117,"context_line":"    def _make_ports_uri(self, odl_url\u003dNone, path\u003d\u0027\u0027):"},{"line_number":118,"context_line":"        \"\"\"Make ODL ports URI with host/port extraced from ODL_URL.\"\"\""},{"line_number":119,"context_line":""},{"line_number":120,"context_line":"        # extract ODL_IP and ODL_PORT from ODL_ENDPOINT and append path"},{"line_number":121,"context_line":"        # urlsplit and urlunparse don\u0027t throw exceptions"},{"line_number":122,"context_line":"        purl \u003d urlparse.urlsplit(odl_url)"},{"line_number":123,"context_line":"        return urlparse.urlunparse((purl.scheme, purl.netloc,"},{"line_number":124,"context_line":"                                    path, \u0027\u0027, \u0027\u0027, \u0027\u0027))"}],"source_content_type":"text/x-python","patch_set":31,"id":"ff0f0b1f_370c6f3a","line":124,"range":{"start_line":117,"start_character":0,"end_line":124,"end_character":54},"updated":"2017-05-25 20:18:02.000000000","message":"This isn\u0027t needed as you introduced utils.","commit_id":"734742be3c0fcb1ccd2ca5d07f88d31acde9bc6c"}],"networking_odl/ml2/pseudo_agentdb_binding.py":[{"author":{"_account_id":333,"name":"Isaku Yamahata","email":"isaku.yamahata@gmail.com","username":"yamahata"},"change_message_id":"339c0b754d9b69d7ab38f597e16e2c66d7a36a11","unresolved":false,"context_lines":[{"line_number":315,"context_line":"                   \u0027segment\u0027: valid_segment, \u0027vif_type\u0027: vif_type,"},{"line_number":316,"context_line":"                   \u0027vif_details\u0027: vif_details})"},{"line_number":317,"context_line":""},{"line_number":318,"context_line":"        stat \u003d nl_const.PORT_STATUS_ACTIVE"},{"line_number":319,"context_line":"        if odl_features.has(odl_features.OPERATIONAL_PORT_STATUS):"},{"line_number":320,"context_line":"            stat \u003d nl_const.PORT_STATUS_DOWN"},{"line_number":321,"context_line":"        port_context.set_binding(valid_segment[api.ID], vif_type,"}],"source_content_type":"text/x-python","patch_set":22,"id":"ff0f0b1f_c2dba179","line":318,"range":{"start_line":318,"start_character":8,"end_line":318,"end_character":12},"updated":"2017-05-23 17:41:02.000000000","message":"port_status or status for consistency.","commit_id":"b547254c27f53a460adf5499f2534c457ede316b"},{"author":{"_account_id":22380,"name":"Josh Hershberg","email":"jhershbe@redhat.com","username":"jhershbe"},"change_message_id":"d277f9812f010e1a3f5f7079835afb875bb12ae8","unresolved":false,"context_lines":[{"line_number":315,"context_line":"                   \u0027segment\u0027: valid_segment, \u0027vif_type\u0027: vif_type,"},{"line_number":316,"context_line":"                   \u0027vif_details\u0027: vif_details})"},{"line_number":317,"context_line":""},{"line_number":318,"context_line":"        stat \u003d nl_const.PORT_STATUS_ACTIVE"},{"line_number":319,"context_line":"        if odl_features.has(odl_features.OPERATIONAL_PORT_STATUS):"},{"line_number":320,"context_line":"            stat \u003d nl_const.PORT_STATUS_DOWN"},{"line_number":321,"context_line":"        port_context.set_binding(valid_segment[api.ID], vif_type,"}],"source_content_type":"text/x-python","patch_set":22,"id":"ff0f0b1f_1b49ea2f","line":318,"range":{"start_line":318,"start_character":8,"end_line":318,"end_character":12},"in_reply_to":"ff0f0b1f_c2dba179","updated":"2017-05-23 18:16:38.000000000","message":"Done","commit_id":"b547254c27f53a460adf5499f2534c457ede316b"}],"networking_odl/tests/base.py":[{"author":{"_account_id":333,"name":"Isaku Yamahata","email":"isaku.yamahata@gmail.com","username":"yamahata"},"change_message_id":"f34687ae88ce086e132f37b7793282d5d1065192","unresolved":false,"context_lines":[{"line_number":69,"context_line":"        # make sure init is not called, it\u0027ll block the main thread"},{"line_number":70,"context_line":"        self.mock_odl_features_init \u003d mock.patch.object(odl_features, \u0027init\u0027)"},{"line_number":71,"context_line":"        self.mock_odl_features_init.start()"},{"line_number":72,"context_line":"        odl_features.init.side_effect \u003d self.fake_init"},{"line_number":73,"context_line":"        self.addCleanup(odl_features.deinit)"},{"line_number":74,"context_line":""},{"line_number":75,"context_line":"    @staticmethod"}],"source_content_type":"text/x-python","patch_set":47,"id":"5f201791_ea9d1dbc","line":72,"range":{"start_line":72,"start_character":8,"end_line":72,"end_character":54},"updated":"2017-06-27 20:41:30.000000000","message":"Hmm, something wrong?\nside_effect doesn\u0027t work?","commit_id":"05594da8506dc06ded431bd7775e155c6a34cd5b"},{"author":{"_account_id":22380,"name":"Josh Hershberg","email":"jhershbe@redhat.com","username":"jhershbe"},"change_message_id":"e11b1efeff02657715006fe3d3e1c08a5ff5760b","unresolved":false,"context_lines":[{"line_number":69,"context_line":"        # make sure init is not called, it\u0027ll block the main thread"},{"line_number":70,"context_line":"        self.mock_odl_features_init \u003d mock.patch.object(odl_features, \u0027init\u0027)"},{"line_number":71,"context_line":"        self.mock_odl_features_init.start()"},{"line_number":72,"context_line":"        odl_features.init.side_effect \u003d self.fake_init"},{"line_number":73,"context_line":"        self.addCleanup(odl_features.deinit)"},{"line_number":74,"context_line":""},{"line_number":75,"context_line":"    @staticmethod"}],"source_content_type":"text/x-python","patch_set":47,"id":"5f201791_b039c5a4","line":72,"range":{"start_line":72,"start_character":8,"end_line":72,"end_character":54},"in_reply_to":"5f201791_ea9d1dbc","updated":"2017-06-28 10:04:44.000000000","message":"Yup. Before this change it was not being called. This change fixes it.","commit_id":"05594da8506dc06ded431bd7775e155c6a34cd5b"},{"author":{"_account_id":17120,"name":"Manjeet Singh Bhatia","email":"manjeet.s.bhatia@intel.com","username":"manjeets"},"change_message_id":"2b773664dac534ae53cf83f30b3127ee7785e7bf","unresolved":false,"context_lines":[{"line_number":68,"context_line":"            cfg.CONF.set_override(\u0027password\u0027, \u0027somepass\u0027, \u0027ml2_odl\u0027)"},{"line_number":69,"context_line":"        # make sure init is not called, it\u0027ll block the main thread"},{"line_number":70,"context_line":"        self.mock_odl_features_init \u003d mock.patch.object(odl_features, \u0027init\u0027,"},{"line_number":71,"context_line":"                                                        side_effect\u003dself.fake_init)"},{"line_number":72,"context_line":"        self.mock_odl_features_init.start()"},{"line_number":73,"context_line":"        self.addCleanup(odl_features.deinit)"},{"line_number":74,"context_line":""}],"source_content_type":"text/x-python","patch_set":48,"id":"5f201791_175dfd77","line":71,"range":{"start_line":71,"start_character":55,"end_line":71,"end_character":83},"updated":"2017-06-28 20:26:43.000000000","message":"good catch, side_effect was applied directly to module\u0027s instance before.","commit_id":"0e05b6a733067c43de403e8b602495157e818536"}],"networking_odl/tests/unit/ml2/test_port_status_update.py":[{"author":{"_account_id":333,"name":"Isaku Yamahata","email":"isaku.yamahata@gmail.com","username":"yamahata"},"change_message_id":"f32f4e2ab24a186b44fb98615304f58da723b95f","unresolved":false,"context_lines":[{"line_number":30,"context_line":"                { \"data\": { \"status\": { \"content\": \"ACTIVE\", \"xmlns\":"},{"line_number":31,"context_line":"                \"urn:opendaylight:neutron\" } }, \"operation\":"},{"line_number":32,"context_line":"                \"updated\", \"path\":"},{"line_number":33,"context_line":"                \"/neutron:neutron/neutron:ports/neutron:port\"\"\" \\"},{"line_number":34,"context_line":"                + \"\"\"[neutron:uuid\u003d\u0027d6e6335d-9568-4949-aef1-4107e34c5f28\u0027]\"\"\" \\"},{"line_number":35,"context_line":"                + \"\"\"/neutron:status\" }, \"xmlns\":"},{"line_number":36,"context_line":"                \"urn:opendaylight:params:xml:ns:yang:controller:md:sal:remote\""},{"line_number":37,"context_line":"                }, \"eventTime\": \"2017-02-22T02:27:32+02:00\", \"xmlns\":"}],"source_content_type":"text/x-python","patch_set":13,"id":"ff0f0b1f_a23a4695","line":34,"range":{"start_line":33,"start_character":64,"end_line":34,"end_character":17},"updated":"2017-05-19 01:20:07.000000000","message":"This isn\u0027t necessary.","commit_id":"a0a9c064a7161f0c82d5727fd768008f60381b5e"},{"author":{"_account_id":22380,"name":"Josh Hershberg","email":"jhershbe@redhat.com","username":"jhershbe"},"change_message_id":"32dcf75aecc26432e2f7598664a9447266a843fe","unresolved":false,"context_lines":[{"line_number":30,"context_line":"                { \"data\": { \"status\": { \"content\": \"ACTIVE\", \"xmlns\":"},{"line_number":31,"context_line":"                \"urn:opendaylight:neutron\" } }, \"operation\":"},{"line_number":32,"context_line":"                \"updated\", \"path\":"},{"line_number":33,"context_line":"                \"/neutron:neutron/neutron:ports/neutron:port\"\"\" \\"},{"line_number":34,"context_line":"                + \"\"\"[neutron:uuid\u003d\u0027d6e6335d-9568-4949-aef1-4107e34c5f28\u0027]\"\"\" \\"},{"line_number":35,"context_line":"                + \"\"\"/neutron:status\" }, \"xmlns\":"},{"line_number":36,"context_line":"                \"urn:opendaylight:params:xml:ns:yang:controller:md:sal:remote\""},{"line_number":37,"context_line":"                }, \"eventTime\": \"2017-02-22T02:27:32+02:00\", \"xmlns\":"}],"source_content_type":"text/x-python","patch_set":13,"id":"ff0f0b1f_6a3178ec","line":34,"range":{"start_line":33,"start_character":64,"end_line":34,"end_character":17},"in_reply_to":"ff0f0b1f_a23a4695","updated":"2017-05-21 12:42:42.000000000","message":"This was done because there are some very long lines where if you add any whitespace it breaks the json parser. What I did is formatted it so it was readable and then added a call to strip all the whitespace.","commit_id":"a0a9c064a7161f0c82d5727fd768008f60381b5e"},{"author":{"_account_id":333,"name":"Isaku Yamahata","email":"isaku.yamahata@gmail.com","username":"yamahata"},"change_message_id":"f32f4e2ab24a186b44fb98615304f58da723b95f","unresolved":false,"context_lines":[{"line_number":31,"context_line":"                \"urn:opendaylight:neutron\" } }, \"operation\":"},{"line_number":32,"context_line":"                \"updated\", \"path\":"},{"line_number":33,"context_line":"                \"/neutron:neutron/neutron:ports/neutron:port\"\"\" \\"},{"line_number":34,"context_line":"                + \"\"\"[neutron:uuid\u003d\u0027d6e6335d-9568-4949-aef1-4107e34c5f28\u0027]\"\"\" \\"},{"line_number":35,"context_line":"                + \"\"\"/neutron:status\" }, \"xmlns\":"},{"line_number":36,"context_line":"                \"urn:opendaylight:params:xml:ns:yang:controller:md:sal:remote\""},{"line_number":37,"context_line":"                }, \"eventTime\": \"2017-02-22T02:27:32+02:00\", \"xmlns\":"},{"line_number":38,"context_line":"                \"urn:ietf:params:xml:ns:netconf:notification:1.0\" } }\"\"\""}],"source_content_type":"text/x-python","patch_set":13,"id":"ff0f0b1f_8241820e","line":35,"range":{"start_line":34,"start_character":78,"end_line":35,"end_character":17},"updated":"2017-05-19 01:20:07.000000000","message":"ditto.","commit_id":"a0a9c064a7161f0c82d5727fd768008f60381b5e"},{"author":{"_account_id":22380,"name":"Josh Hershberg","email":"jhershbe@redhat.com","username":"jhershbe"},"change_message_id":"32dcf75aecc26432e2f7598664a9447266a843fe","unresolved":false,"context_lines":[{"line_number":31,"context_line":"                \"urn:opendaylight:neutron\" } }, \"operation\":"},{"line_number":32,"context_line":"                \"updated\", \"path\":"},{"line_number":33,"context_line":"                \"/neutron:neutron/neutron:ports/neutron:port\"\"\" \\"},{"line_number":34,"context_line":"                + \"\"\"[neutron:uuid\u003d\u0027d6e6335d-9568-4949-aef1-4107e34c5f28\u0027]\"\"\" \\"},{"line_number":35,"context_line":"                + \"\"\"/neutron:status\" }, \"xmlns\":"},{"line_number":36,"context_line":"                \"urn:opendaylight:params:xml:ns:yang:controller:md:sal:remote\""},{"line_number":37,"context_line":"                }, \"eventTime\": \"2017-02-22T02:27:32+02:00\", \"xmlns\":"},{"line_number":38,"context_line":"                \"urn:ietf:params:xml:ns:netconf:notification:1.0\" } }\"\"\""}],"source_content_type":"text/x-python","patch_set":13,"id":"ff0f0b1f_2a51400f","line":35,"range":{"start_line":34,"start_character":78,"end_line":35,"end_character":17},"in_reply_to":"ff0f0b1f_8241820e","updated":"2017-05-21 12:42:42.000000000","message":"Done","commit_id":"a0a9c064a7161f0c82d5727fd768008f60381b5e"},{"author":{"_account_id":333,"name":"Isaku Yamahata","email":"isaku.yamahata@gmail.com","username":"yamahata"},"change_message_id":"f32f4e2ab24a186b44fb98615304f58da723b95f","unresolved":false,"context_lines":[{"line_number":25,"context_line":""},{"line_number":26,"context_line":"class TestOdlPortStatusUpdate(base.DietTestCase):"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"    websock_notification \u003d \"\"\"{ \"notification\":"},{"line_number":29,"context_line":"                { \"data-changed-notification\": { \"data-change-event\":"},{"line_number":30,"context_line":"                { \"data\": { \"status\": { \"content\": \"ACTIVE\", \"xmlns\":"},{"line_number":31,"context_line":"                \"urn:opendaylight:neutron\" } }, \"operation\":"},{"line_number":32,"context_line":"                \"updated\", \"path\":"},{"line_number":33,"context_line":"                \"/neutron:neutron/neutron:ports/neutron:port\"\"\" \\"},{"line_number":34,"context_line":"                + \"\"\"[neutron:uuid\u003d\u0027d6e6335d-9568-4949-aef1-4107e34c5f28\u0027]\"\"\" \\"},{"line_number":35,"context_line":"                + \"\"\"/neutron:status\" }, \"xmlns\":"},{"line_number":36,"context_line":"                \"urn:opendaylight:params:xml:ns:yang:controller:md:sal:remote\""},{"line_number":37,"context_line":"                }, \"eventTime\": \"2017-02-22T02:27:32+02:00\", \"xmlns\":"},{"line_number":38,"context_line":"                \"urn:ietf:params:xml:ns:netconf:notification:1.0\" } }\"\"\""},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"    def setUp(self):"},{"line_number":41,"context_line":"        super(TestOdlPortStatusUpdate, self).setUp()"}],"source_content_type":"text/x-python","patch_set":13,"id":"ff0f0b1f_424b6a2a","line":38,"range":{"start_line":28,"start_character":27,"end_line":38,"end_character":72},"updated":"2017-05-19 01:20:07.000000000","message":"Can you please indent so that human can easily parse this?","commit_id":"a0a9c064a7161f0c82d5727fd768008f60381b5e"},{"author":{"_account_id":22380,"name":"Josh Hershberg","email":"jhershbe@redhat.com","username":"jhershbe"},"change_message_id":"32dcf75aecc26432e2f7598664a9447266a843fe","unresolved":false,"context_lines":[{"line_number":25,"context_line":""},{"line_number":26,"context_line":"class TestOdlPortStatusUpdate(base.DietTestCase):"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"    websock_notification \u003d \"\"\"{ \"notification\":"},{"line_number":29,"context_line":"                { \"data-changed-notification\": { \"data-change-event\":"},{"line_number":30,"context_line":"                { \"data\": { \"status\": { \"content\": \"ACTIVE\", \"xmlns\":"},{"line_number":31,"context_line":"                \"urn:opendaylight:neutron\" } }, \"operation\":"},{"line_number":32,"context_line":"                \"updated\", \"path\":"},{"line_number":33,"context_line":"                \"/neutron:neutron/neutron:ports/neutron:port\"\"\" \\"},{"line_number":34,"context_line":"                + \"\"\"[neutron:uuid\u003d\u0027d6e6335d-9568-4949-aef1-4107e34c5f28\u0027]\"\"\" \\"},{"line_number":35,"context_line":"                + \"\"\"/neutron:status\" }, \"xmlns\":"},{"line_number":36,"context_line":"                \"urn:opendaylight:params:xml:ns:yang:controller:md:sal:remote\""},{"line_number":37,"context_line":"                }, \"eventTime\": \"2017-02-22T02:27:32+02:00\", \"xmlns\":"},{"line_number":38,"context_line":"                \"urn:ietf:params:xml:ns:netconf:notification:1.0\" } }\"\"\""},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"    def setUp(self):"},{"line_number":41,"context_line":"        super(TestOdlPortStatusUpdate, self).setUp()"}],"source_content_type":"text/x-python","patch_set":13,"id":"ff0f0b1f_ea5a2828","line":38,"range":{"start_line":28,"start_character":27,"end_line":38,"end_character":72},"in_reply_to":"ff0f0b1f_424b6a2a","updated":"2017-05-21 12:42:42.000000000","message":"Done","commit_id":"a0a9c064a7161f0c82d5727fd768008f60381b5e"},{"author":{"_account_id":333,"name":"Isaku Yamahata","email":"isaku.yamahata@gmail.com","username":"yamahata"},"change_message_id":"f32f4e2ab24a186b44fb98615304f58da723b95f","unresolved":false,"context_lines":[{"line_number":39,"context_line":""},{"line_number":40,"context_line":"    def setUp(self):"},{"line_number":41,"context_line":"        super(TestOdlPortStatusUpdate, self).setUp()"},{"line_number":42,"context_line":"        cfg.CONF.set_override(\u0027url\u0027, \u0027http://0.0.0.0:0000\u0027, \u0027ml2_odl\u0027)"},{"line_number":43,"context_line":"        cfg.CONF.set_override(\u0027username\u0027, \u0027u\u0027, \u0027ml2_odl\u0027)"},{"line_number":44,"context_line":"        cfg.CONF.set_override(\u0027password\u0027, \u0027p\u0027, \u0027ml2_odl\u0027)"},{"line_number":45,"context_line":"        odl_features.features_set.add(odl_features.OPERATIONAL_PORT_STATUS)"},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"    def tearDown(self):"}],"source_content_type":"text/x-python","patch_set":13,"id":"ff0f0b1f_820f42e0","line":44,"range":{"start_line":42,"start_character":0,"end_line":44,"end_character":57},"updated":"2017-05-19 01:20:07.000000000","message":"As it is client is mocked, those parameters aren\u0027t used.\nso these three lines aren\u0027t needed.","commit_id":"a0a9c064a7161f0c82d5727fd768008f60381b5e"},{"author":{"_account_id":22380,"name":"Josh Hershberg","email":"jhershbe@redhat.com","username":"jhershbe"},"change_message_id":"32dcf75aecc26432e2f7598664a9447266a843fe","unresolved":false,"context_lines":[{"line_number":39,"context_line":""},{"line_number":40,"context_line":"    def setUp(self):"},{"line_number":41,"context_line":"        super(TestOdlPortStatusUpdate, self).setUp()"},{"line_number":42,"context_line":"        cfg.CONF.set_override(\u0027url\u0027, \u0027http://0.0.0.0:0000\u0027, \u0027ml2_odl\u0027)"},{"line_number":43,"context_line":"        cfg.CONF.set_override(\u0027username\u0027, \u0027u\u0027, \u0027ml2_odl\u0027)"},{"line_number":44,"context_line":"        cfg.CONF.set_override(\u0027password\u0027, \u0027p\u0027, \u0027ml2_odl\u0027)"},{"line_number":45,"context_line":"        odl_features.features_set.add(odl_features.OPERATIONAL_PORT_STATUS)"},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"    def tearDown(self):"}],"source_content_type":"text/x-python","patch_set":13,"id":"ff0f0b1f_aaaaf0ce","line":44,"range":{"start_line":42,"start_character":0,"end_line":44,"end_character":57},"in_reply_to":"ff0f0b1f_820f42e0","updated":"2017-05-21 12:42:42.000000000","message":"They are required. Here\u0027s what happens when they\u0027re not there:\nCaptured traceback:\n~~~~~~~~~~~~~~~~~~~\n    Traceback (most recent call last):\n      File \"/home/jhershbe/networking-odl/.tox/py27/src/neutron/neutron/tests/base.py\", line 115, in func\n        return f(self, *args, **kwargs)\n      File \"/home/jhershbe/networking-odl/.tox/py27/lib/python2.7/site-packages/mock/mock.py\", line 1305, in patched\n        return func(*args, **keywargs)\n      File \"networking_odl/tests/unit/ml2/test_port_status_update.py\", line 76, in test_object_create\n        self.fail(\u0027Exception thrown during object creation: %s\u0027 % e)\n      File \"/home/jhershbe/networking-odl/.tox/py27/lib/python2.7/site-packages/unittest2/case.py\", line 690, in fail\n        raise self.failureException(msg)\n    AssertionError: Exception thrown during object creation: value required for option username in group [ml2_odl]","commit_id":"a0a9c064a7161f0c82d5727fd768008f60381b5e"},{"author":{"_account_id":333,"name":"Isaku Yamahata","email":"isaku.yamahata@gmail.com","username":"yamahata"},"change_message_id":"f32f4e2ab24a186b44fb98615304f58da723b95f","unresolved":false,"context_lines":[{"line_number":46,"context_line":""},{"line_number":47,"context_line":"    def tearDown(self):"},{"line_number":48,"context_line":"        super(TestOdlPortStatusUpdate, self).tearDown()"},{"line_number":49,"context_line":"        # make sure there are no lingering features as those can effect"},{"line_number":50,"context_line":"        # other tests"},{"line_number":51,"context_line":"        odl_features.features_set \u003d set()"},{"line_number":52,"context_line":"        cfg.CONF.clear_override(\u0027url\u0027, \u0027ml2_odl\u0027)"},{"line_number":53,"context_line":"        cfg.CONF.clear_override(\u0027username\u0027, \u0027ml2_odl\u0027)"},{"line_number":54,"context_line":"        cfg.CONF.clear_override(\u0027password\u0027, \u0027ml2_odl\u0027)"}],"source_content_type":"text/x-python","patch_set":13,"id":"ff0f0b1f_e24f1e32","line":51,"range":{"start_line":49,"start_character":0,"end_line":51,"end_character":41},"updated":"2017-05-19 01:20:07.000000000","message":"Since this is repeated, it would better to introduce fixture.","commit_id":"a0a9c064a7161f0c82d5727fd768008f60381b5e"},{"author":{"_account_id":22380,"name":"Josh Hershberg","email":"jhershbe@redhat.com","username":"jhershbe"},"change_message_id":"32dcf75aecc26432e2f7598664a9447266a843fe","unresolved":false,"context_lines":[{"line_number":46,"context_line":""},{"line_number":47,"context_line":"    def tearDown(self):"},{"line_number":48,"context_line":"        super(TestOdlPortStatusUpdate, self).tearDown()"},{"line_number":49,"context_line":"        # make sure there are no lingering features as those can effect"},{"line_number":50,"context_line":"        # other tests"},{"line_number":51,"context_line":"        odl_features.features_set \u003d set()"},{"line_number":52,"context_line":"        cfg.CONF.clear_override(\u0027url\u0027, \u0027ml2_odl\u0027)"},{"line_number":53,"context_line":"        cfg.CONF.clear_override(\u0027username\u0027, \u0027ml2_odl\u0027)"},{"line_number":54,"context_line":"        cfg.CONF.clear_override(\u0027password\u0027, \u0027ml2_odl\u0027)"}],"source_content_type":"text/x-python","patch_set":13,"id":"ff0f0b1f_eaea28aa","line":51,"range":{"start_line":49,"start_character":0,"end_line":51,"end_character":41},"in_reply_to":"ff0f0b1f_e24f1e32","updated":"2017-05-21 12:42:42.000000000","message":"Done. I stuck it in the odl_features gerrit and rebased.","commit_id":"a0a9c064a7161f0c82d5727fd768008f60381b5e"},{"author":{"_account_id":333,"name":"Isaku Yamahata","email":"isaku.yamahata@gmail.com","username":"yamahata"},"change_message_id":"f32f4e2ab24a186b44fb98615304f58da723b95f","unresolved":false,"context_lines":[{"line_number":55,"context_line":""},{"line_number":56,"context_line":"    @mock.patch.object(OpendaylightWebsocketClient, \u0027odl_create_websocket\u0027)"},{"line_number":57,"context_line":"    def test_object_create(self, mocked_websocket_client):"},{"line_number":58,"context_line":"        try:"},{"line_number":59,"context_line":"            OdlPortStatusUpdate()"},{"line_number":60,"context_line":"        except Exception as e:"},{"line_number":61,"context_line":"            self.fail(\u0027Exception thrown during object creation: %s\u0027 % e)"},{"line_number":62,"context_line":""},{"line_number":63,"context_line":"    @mock.patch.object(provisioning_blocks, \u0027provisioning_complete\u0027)"},{"line_number":64,"context_line":"    @mock.patch.object(OpendaylightWebsocketClient, \u0027odl_create_websocket\u0027)"}],"source_content_type":"text/x-python","patch_set":13,"id":"ff0f0b1f_c22e5a42","line":61,"range":{"start_line":58,"start_character":0,"end_line":61,"end_character":72},"updated":"2017-05-19 01:20:07.000000000","message":"Only OdlPortStatusUpdate()","commit_id":"a0a9c064a7161f0c82d5727fd768008f60381b5e"},{"author":{"_account_id":22380,"name":"Josh Hershberg","email":"jhershbe@redhat.com","username":"jhershbe"},"change_message_id":"32dcf75aecc26432e2f7598664a9447266a843fe","unresolved":false,"context_lines":[{"line_number":55,"context_line":""},{"line_number":56,"context_line":"    @mock.patch.object(OpendaylightWebsocketClient, \u0027odl_create_websocket\u0027)"},{"line_number":57,"context_line":"    def test_object_create(self, mocked_websocket_client):"},{"line_number":58,"context_line":"        try:"},{"line_number":59,"context_line":"            OdlPortStatusUpdate()"},{"line_number":60,"context_line":"        except Exception as e:"},{"line_number":61,"context_line":"            self.fail(\u0027Exception thrown during object creation: %s\u0027 % e)"},{"line_number":62,"context_line":""},{"line_number":63,"context_line":"    @mock.patch.object(provisioning_blocks, \u0027provisioning_complete\u0027)"},{"line_number":64,"context_line":"    @mock.patch.object(OpendaylightWebsocketClient, \u0027odl_create_websocket\u0027)"}],"source_content_type":"text/x-python","patch_set":13,"id":"ff0f0b1f_ca4be428","line":61,"range":{"start_line":58,"start_character":0,"end_line":61,"end_character":72},"in_reply_to":"ff0f0b1f_c22e5a42","updated":"2017-05-21 12:42:42.000000000","message":"Done","commit_id":"a0a9c064a7161f0c82d5727fd768008f60381b5e"},{"author":{"_account_id":333,"name":"Isaku Yamahata","email":"isaku.yamahata@gmail.com","username":"yamahata"},"change_message_id":"f32f4e2ab24a186b44fb98615304f58da723b95f","unresolved":false,"context_lines":[{"line_number":61,"context_line":"            self.fail(\u0027Exception thrown during object creation: %s\u0027 % e)"},{"line_number":62,"context_line":""},{"line_number":63,"context_line":"    @mock.patch.object(provisioning_blocks, \u0027provisioning_complete\u0027)"},{"line_number":64,"context_line":"    @mock.patch.object(OpendaylightWebsocketClient, \u0027odl_create_websocket\u0027)"},{"line_number":65,"context_line":"    def test_websock_recv(self, mocked_websocket_client,"},{"line_number":66,"context_line":"                          mocked_provisioning_complete):"},{"line_number":67,"context_line":"        updater \u003d OdlPortStatusUpdate()"}],"source_content_type":"text/x-python","patch_set":13,"id":"ff0f0b1f_42748a68","line":64,"range":{"start_line":64,"start_character":3,"end_line":64,"end_character":75},"updated":"2017-05-19 01:20:07.000000000","message":"As this is used to supress odl_create_websocket and applied to all test methods, this should be done by setUp() method.","commit_id":"a0a9c064a7161f0c82d5727fd768008f60381b5e"},{"author":{"_account_id":22380,"name":"Josh Hershberg","email":"jhershbe@redhat.com","username":"jhershbe"},"change_message_id":"32dcf75aecc26432e2f7598664a9447266a843fe","unresolved":false,"context_lines":[{"line_number":61,"context_line":"            self.fail(\u0027Exception thrown during object creation: %s\u0027 % e)"},{"line_number":62,"context_line":""},{"line_number":63,"context_line":"    @mock.patch.object(provisioning_blocks, \u0027provisioning_complete\u0027)"},{"line_number":64,"context_line":"    @mock.patch.object(OpendaylightWebsocketClient, \u0027odl_create_websocket\u0027)"},{"line_number":65,"context_line":"    def test_websock_recv(self, mocked_websocket_client,"},{"line_number":66,"context_line":"                          mocked_provisioning_complete):"},{"line_number":67,"context_line":"        updater \u003d OdlPortStatusUpdate()"}],"source_content_type":"text/x-python","patch_set":13,"id":"ff0f0b1f_8ae72c41","line":64,"range":{"start_line":64,"start_character":3,"end_line":64,"end_character":75},"in_reply_to":"ff0f0b1f_42748a68","updated":"2017-05-21 12:42:42.000000000","message":"As far as I understand, mock.patch is scoped to the method so if it were on the setUp it wouldn\u0027t work for the test methods, no?","commit_id":"a0a9c064a7161f0c82d5727fd768008f60381b5e"},{"author":{"_account_id":22380,"name":"Josh Hershberg","email":"jhershbe@redhat.com","username":"jhershbe"},"change_message_id":"db7053ce67c64915140bb0f9bc1aa45db4ee966b","unresolved":false,"context_lines":[{"line_number":61,"context_line":"            self.fail(\u0027Exception thrown during object creation: %s\u0027 % e)"},{"line_number":62,"context_line":""},{"line_number":63,"context_line":"    @mock.patch.object(provisioning_blocks, \u0027provisioning_complete\u0027)"},{"line_number":64,"context_line":"    @mock.patch.object(OpendaylightWebsocketClient, \u0027odl_create_websocket\u0027)"},{"line_number":65,"context_line":"    def test_websock_recv(self, mocked_websocket_client,"},{"line_number":66,"context_line":"                          mocked_provisioning_complete):"},{"line_number":67,"context_line":"        updater \u003d OdlPortStatusUpdate()"}],"source_content_type":"text/x-python","patch_set":13,"id":"ff0f0b1f_ecafb327","line":64,"range":{"start_line":64,"start_character":3,"end_line":64,"end_character":75},"in_reply_to":"ff0f0b1f_82b3694d","updated":"2017-05-23 07:59:43.000000000","message":"Done","commit_id":"a0a9c064a7161f0c82d5727fd768008f60381b5e"},{"author":{"_account_id":333,"name":"Isaku Yamahata","email":"isaku.yamahata@gmail.com","username":"yamahata"},"change_message_id":"d062bc8b4a6f8cfba2b732209c381ffcfb769145","unresolved":false,"context_lines":[{"line_number":61,"context_line":"            self.fail(\u0027Exception thrown during object creation: %s\u0027 % e)"},{"line_number":62,"context_line":""},{"line_number":63,"context_line":"    @mock.patch.object(provisioning_blocks, \u0027provisioning_complete\u0027)"},{"line_number":64,"context_line":"    @mock.patch.object(OpendaylightWebsocketClient, \u0027odl_create_websocket\u0027)"},{"line_number":65,"context_line":"    def test_websock_recv(self, mocked_websocket_client,"},{"line_number":66,"context_line":"                          mocked_provisioning_complete):"},{"line_number":67,"context_line":"        updater \u003d OdlPortStatusUpdate()"}],"source_content_type":"text/x-python","patch_set":13,"id":"ff0f0b1f_82b3694d","line":64,"range":{"start_line":64,"start_character":3,"end_line":64,"end_character":75},"in_reply_to":"ff0f0b1f_8ae72c41","updated":"2017-05-23 00:13:22.000000000","message":"You can see many example mocking in setup() under networking_odl/tess/unit/.","commit_id":"a0a9c064a7161f0c82d5727fd768008f60381b5e"},{"author":{"_account_id":333,"name":"Isaku Yamahata","email":"isaku.yamahata@gmail.com","username":"yamahata"},"change_message_id":"8b78707cbd67fc99e385047b33d50b22c0885c0c","unresolved":false,"context_lines":[{"line_number":31,"context_line":""},{"line_number":32,"context_line":"class TestOdlPortStatusUpdate(base.DietTestCase):"},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"    websock_notification \u003d re.sub(\u0027\\s*\u0027, \u0027\u0027, \"\"\""},{"line_number":35,"context_line":"        {"},{"line_number":36,"context_line":"            \"notification\": {"},{"line_number":37,"context_line":"                \"data-changed-notification\": {"}],"source_content_type":"text/x-python","patch_set":22,"id":"ff0f0b1f_c9072b82","line":34,"range":{"start_line":34,"start_character":4,"end_line":34,"end_character":24},"updated":"2017-05-23 17:41:20.000000000","message":"upper case for constants","commit_id":"b547254c27f53a460adf5499f2534c457ede316b"},{"author":{"_account_id":22380,"name":"Josh Hershberg","email":"jhershbe@redhat.com","username":"jhershbe"},"change_message_id":"d277f9812f010e1a3f5f7079835afb875bb12ae8","unresolved":false,"context_lines":[{"line_number":31,"context_line":""},{"line_number":32,"context_line":"class TestOdlPortStatusUpdate(base.DietTestCase):"},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"    websock_notification \u003d re.sub(\u0027\\s*\u0027, \u0027\u0027, \"\"\""},{"line_number":35,"context_line":"        {"},{"line_number":36,"context_line":"            \"notification\": {"},{"line_number":37,"context_line":"                \"data-changed-notification\": {"}],"source_content_type":"text/x-python","patch_set":22,"id":"ff0f0b1f_3b75ce64","line":34,"range":{"start_line":34,"start_character":4,"end_line":34,"end_character":24},"in_reply_to":"ff0f0b1f_c9072b82","updated":"2017-05-23 18:16:38.000000000","message":"Done","commit_id":"b547254c27f53a460adf5499f2534c457ede316b"},{"author":{"_account_id":333,"name":"Isaku Yamahata","email":"isaku.yamahata@gmail.com","username":"yamahata"},"change_message_id":"8b78707cbd67fc99e385047b33d50b22c0885c0c","unresolved":false,"context_lines":[{"line_number":63,"context_line":"        cfg.CONF.set_override(\u0027username\u0027, \u0027u\u0027, \u0027ml2_odl\u0027)"},{"line_number":64,"context_line":"        cfg.CONF.set_override(\u0027password\u0027, \u0027p\u0027, \u0027ml2_odl\u0027)"},{"line_number":65,"context_line":""},{"line_number":66,"context_line":"    @mock.patch.object(OpendaylightWebsocketClient, \u0027odl_create_websocket\u0027)"},{"line_number":67,"context_line":"    def test_object_create(self, mocked_websocket_client):"},{"line_number":68,"context_line":"        OdlPortStatusUpdate()"},{"line_number":69,"context_line":""}],"source_content_type":"text/x-python","patch_set":22,"id":"ff0f0b1f_29cfc756","line":66,"range":{"start_line":66,"start_character":3,"end_line":66,"end_character":75},"updated":"2017-05-23 17:41:20.000000000","message":"all test methods mocks odl_create_weboscket. please do so in setUp() method.\nsee networking_odl/tests/unit/base_v2.py for example","commit_id":"b547254c27f53a460adf5499f2534c457ede316b"},{"author":{"_account_id":22380,"name":"Josh Hershberg","email":"jhershbe@redhat.com","username":"jhershbe"},"change_message_id":"d277f9812f010e1a3f5f7079835afb875bb12ae8","unresolved":false,"context_lines":[{"line_number":63,"context_line":"        cfg.CONF.set_override(\u0027username\u0027, \u0027u\u0027, \u0027ml2_odl\u0027)"},{"line_number":64,"context_line":"        cfg.CONF.set_override(\u0027password\u0027, \u0027p\u0027, \u0027ml2_odl\u0027)"},{"line_number":65,"context_line":""},{"line_number":66,"context_line":"    @mock.patch.object(OpendaylightWebsocketClient, \u0027odl_create_websocket\u0027)"},{"line_number":67,"context_line":"    def test_object_create(self, mocked_websocket_client):"},{"line_number":68,"context_line":"        OdlPortStatusUpdate()"},{"line_number":69,"context_line":""}],"source_content_type":"text/x-python","patch_set":22,"id":"ff0f0b1f_fb6ab67e","line":66,"range":{"start_line":66,"start_character":3,"end_line":66,"end_character":75},"in_reply_to":"ff0f0b1f_29cfc756","updated":"2017-05-23 18:16:38.000000000","message":"Done in patch set 23, you commented on 22","commit_id":"b547254c27f53a460adf5499f2534c457ede316b"}]}
