)]}'
{"networking_odl/ml2/mech_driver_v2.py":[{"author":{"_account_id":333,"name":"Isaku Yamahata","email":"isaku.yamahata@gmail.com","username":"yamahata"},"change_message_id":"07f74c5e95a9e46c0aebe2fc2b968898a1524309","unresolved":false,"context_lines":[{"line_number":48,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":49,"context_line":""},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"class PortStatusWorker(worker.NeutronWorker):"},{"line_number":52,"context_line":"    def start(self):"},{"line_number":53,"context_line":"        super(PortStatusWorker, self).start()"},{"line_number":54,"context_line":"        LOG.debug(\u0027PortStatusWorker running\u0027)"}],"source_content_type":"text/x-python","patch_set":2,"id":"df140735_bbaef8e4","line":51,"range":{"start_line":51,"start_character":23,"end_line":51,"end_character":43},"updated":"2017-05-30 20:48:08.000000000","message":"NeutronWorker is now renamed to BaseWorker in neutron-lib.","commit_id":"2a5e2a0d849eba4d9c2ce8442a7b11091ce69eb6"},{"author":{"_account_id":22380,"name":"Josh Hershberg","email":"jhershbe@redhat.com","username":"jhershbe"},"change_message_id":"c5ac984eaef20bb9880e3995d1e67242bb41af72","unresolved":false,"context_lines":[{"line_number":48,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":49,"context_line":""},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"class PortStatusWorker(worker.NeutronWorker):"},{"line_number":52,"context_line":"    def start(self):"},{"line_number":53,"context_line":"        super(PortStatusWorker, self).start()"},{"line_number":54,"context_line":"        LOG.debug(\u0027PortStatusWorker running\u0027)"}],"source_content_type":"text/x-python","patch_set":2,"id":"df140735_bf86adda","line":51,"range":{"start_line":51,"start_character":23,"end_line":51,"end_character":43},"in_reply_to":"df140735_bbaef8e4","updated":"2017-06-01 12:30:50.000000000","message":"Done","commit_id":"2a5e2a0d849eba4d9c2ce8442a7b11091ce69eb6"},{"author":{"_account_id":333,"name":"Isaku Yamahata","email":"isaku.yamahata@gmail.com","username":"yamahata"},"change_message_id":"8ebca7e63e1e4d3956904b847e98b03852504dcc","unresolved":false,"context_lines":[{"line_number":48,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":49,"context_line":""},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"class PortStatusWorker(worker.NeutronWorker):"},{"line_number":52,"context_line":"    def start(self):"},{"line_number":53,"context_line":"        super(PortStatusWorker, self).start()"},{"line_number":54,"context_line":"        LOG.debug(\u0027PortStatusWorker running\u0027)"},{"line_number":55,"context_line":""},{"line_number":56,"context_line":"    def stop(self):"},{"line_number":57,"context_line":"        \"\"\"Stop service.\"\"\""},{"line_number":58,"context_line":""},{"line_number":59,"context_line":"    def wait(self):"},{"line_number":60,"context_line":"        \"\"\"Wait for service to complete.\"\"\""},{"line_number":61,"context_line":""},{"line_number":62,"context_line":"    @staticmethod"},{"line_number":63,"context_line":"    def reset():"},{"line_number":64,"context_line":"        pass"},{"line_number":65,"context_line":""},{"line_number":66,"context_line":""},{"line_number":67,"context_line":"class OpenDaylightMechanismDriver(api.MechanismDriver):"}],"source_content_type":"text/x-python","patch_set":2,"id":"ff0f0b1f_e4aac36f","line":64,"range":{"start_line":51,"start_character":0,"end_line":64,"end_character":12},"updated":"2017-05-25 20:10:50.000000000","message":"This does nothing.\nMake OdlPortStatusUpdate inherit NeutronWroker.","commit_id":"2a5e2a0d849eba4d9c2ce8442a7b11091ce69eb6"},{"author":{"_account_id":333,"name":"Isaku Yamahata","email":"isaku.yamahata@gmail.com","username":"yamahata"},"change_message_id":"07f74c5e95a9e46c0aebe2fc2b968898a1524309","unresolved":false,"context_lines":[{"line_number":48,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":49,"context_line":""},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"class PortStatusWorker(worker.NeutronWorker):"},{"line_number":52,"context_line":"    def start(self):"},{"line_number":53,"context_line":"        super(PortStatusWorker, self).start()"},{"line_number":54,"context_line":"        LOG.debug(\u0027PortStatusWorker running\u0027)"},{"line_number":55,"context_line":""},{"line_number":56,"context_line":"    def stop(self):"},{"line_number":57,"context_line":"        \"\"\"Stop service.\"\"\""},{"line_number":58,"context_line":""},{"line_number":59,"context_line":"    def wait(self):"},{"line_number":60,"context_line":"        \"\"\"Wait for service to complete.\"\"\""},{"line_number":61,"context_line":""},{"line_number":62,"context_line":"    @staticmethod"},{"line_number":63,"context_line":"    def reset():"},{"line_number":64,"context_line":"        pass"},{"line_number":65,"context_line":""},{"line_number":66,"context_line":""},{"line_number":67,"context_line":"class OpenDaylightMechanismDriver(api.MechanismDriver):"}],"source_content_type":"text/x-python","patch_set":2,"id":"df140735_a0aec52b","line":64,"range":{"start_line":51,"start_character":0,"end_line":64,"end_character":12},"in_reply_to":"df140735_7bcbe9a4","updated":"2017-05-30 20:48:08.000000000","message":"If PortStatusUpdate inherits BaseWorker, \nthe feature check can be put into start method.\nThus we don\u0027t need boilar plate code.\n\nThe reason why ovn does so is that to run two threads in single worker process. OvnNbSynchronizer and OvnSbSynchronizer.\nIn our case, we need only one thread.i.e. OdlPortStatusUpdate. So such a trick isn\u0027t needed.","commit_id":"2a5e2a0d849eba4d9c2ce8442a7b11091ce69eb6"},{"author":{"_account_id":22380,"name":"Josh Hershberg","email":"jhershbe@redhat.com","username":"jhershbe"},"change_message_id":"c5ac984eaef20bb9880e3995d1e67242bb41af72","unresolved":false,"context_lines":[{"line_number":48,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":49,"context_line":""},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"class PortStatusWorker(worker.NeutronWorker):"},{"line_number":52,"context_line":"    def start(self):"},{"line_number":53,"context_line":"        super(PortStatusWorker, self).start()"},{"line_number":54,"context_line":"        LOG.debug(\u0027PortStatusWorker running\u0027)"},{"line_number":55,"context_line":""},{"line_number":56,"context_line":"    def stop(self):"},{"line_number":57,"context_line":"        \"\"\"Stop service.\"\"\""},{"line_number":58,"context_line":""},{"line_number":59,"context_line":"    def wait(self):"},{"line_number":60,"context_line":"        \"\"\"Wait for service to complete.\"\"\""},{"line_number":61,"context_line":""},{"line_number":62,"context_line":"    @staticmethod"},{"line_number":63,"context_line":"    def reset():"},{"line_number":64,"context_line":"        pass"},{"line_number":65,"context_line":""},{"line_number":66,"context_line":""},{"line_number":67,"context_line":"class OpenDaylightMechanismDriver(api.MechanismDriver):"}],"source_content_type":"text/x-python","patch_set":2,"id":"df140735_9f6d2934","line":64,"range":{"start_line":51,"start_character":0,"end_line":64,"end_character":12},"in_reply_to":"df140735_a0aec52b","updated":"2017-06-01 12:30:50.000000000","message":"Done","commit_id":"2a5e2a0d849eba4d9c2ce8442a7b11091ce69eb6"},{"author":{"_account_id":22380,"name":"Josh Hershberg","email":"jhershbe@redhat.com","username":"jhershbe"},"change_message_id":"aa36d4009937691689f28115ad9d63a0fa28df39","unresolved":false,"context_lines":[{"line_number":48,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":49,"context_line":""},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"class PortStatusWorker(worker.NeutronWorker):"},{"line_number":52,"context_line":"    def start(self):"},{"line_number":53,"context_line":"        super(PortStatusWorker, self).start()"},{"line_number":54,"context_line":"        LOG.debug(\u0027PortStatusWorker running\u0027)"},{"line_number":55,"context_line":""},{"line_number":56,"context_line":"    def stop(self):"},{"line_number":57,"context_line":"        \"\"\"Stop service.\"\"\""},{"line_number":58,"context_line":""},{"line_number":59,"context_line":"    def wait(self):"},{"line_number":60,"context_line":"        \"\"\"Wait for service to complete.\"\"\""},{"line_number":61,"context_line":""},{"line_number":62,"context_line":"    @staticmethod"},{"line_number":63,"context_line":"    def reset():"},{"line_number":64,"context_line":"        pass"},{"line_number":65,"context_line":""},{"line_number":66,"context_line":""},{"line_number":67,"context_line":"class OpenDaylightMechanismDriver(api.MechanismDriver):"}],"source_content_type":"text/x-python","patch_set":2,"id":"df140735_7bcbe9a4","line":64,"range":{"start_line":51,"start_character":0,"end_line":64,"end_character":12},"in_reply_to":"ff0f0b1f_e4aac36f","updated":"2017-05-29 10:05:38.000000000","message":"This is hte way it was done in the OVN example you sent. I sort of like it this way better because it keeps the initialization logic all in this file. Note that there is a double callback registration, once for AFTER_INIT and one for after features are pulled. It\u0027s a bit tricky and I like the idea of it all being present in here, makes it more readable. What do you think?","commit_id":"2a5e2a0d849eba4d9c2ce8442a7b11091ce69eb6"},{"author":{"_account_id":333,"name":"Isaku Yamahata","email":"isaku.yamahata@gmail.com","username":"yamahata"},"change_message_id":"8ebca7e63e1e4d3956904b847e98b03852504dcc","unresolved":false,"context_lines":[{"line_number":90,"context_line":"    def start_port_status_update(self, resource, event, trigger, **kwargs):"},{"line_number":91,"context_line":"        if trigger.im_class !\u003d PortStatusWorker:"},{"line_number":92,"context_line":"            return"},{"line_number":93,"context_line":"        if odl_features.has(odl_features.OPERATIONAL_PORT_STATUS):"},{"line_number":94,"context_line":"            self.port_status \u003d port_status_update.OdlPortStatusUpdate()"},{"line_number":95,"context_line":""},{"line_number":96,"context_line":"    def get_workers(self):"},{"line_number":97,"context_line":"        return [PortStatusWorker()]"}],"source_content_type":"text/x-python","patch_set":2,"id":"ff0f0b1f_84666729","line":94,"range":{"start_line":93,"start_character":0,"end_line":94,"end_character":71},"updated":"2017-05-25 20:10:50.000000000","message":"By making OdlPortStatusUpdate inherit NeutronWorker, this isn\u0027t needed.","commit_id":"2a5e2a0d849eba4d9c2ce8442a7b11091ce69eb6"},{"author":{"_account_id":22380,"name":"Josh Hershberg","email":"jhershbe@redhat.com","username":"jhershbe"},"change_message_id":"c5ac984eaef20bb9880e3995d1e67242bb41af72","unresolved":false,"context_lines":[{"line_number":90,"context_line":"    def start_port_status_update(self, resource, event, trigger, **kwargs):"},{"line_number":91,"context_line":"        if trigger.im_class !\u003d PortStatusWorker:"},{"line_number":92,"context_line":"            return"},{"line_number":93,"context_line":"        if odl_features.has(odl_features.OPERATIONAL_PORT_STATUS):"},{"line_number":94,"context_line":"            self.port_status \u003d port_status_update.OdlPortStatusUpdate()"},{"line_number":95,"context_line":""},{"line_number":96,"context_line":"    def get_workers(self):"},{"line_number":97,"context_line":"        return [PortStatusWorker()]"}],"source_content_type":"text/x-python","patch_set":2,"id":"df140735_3f729d12","line":94,"range":{"start_line":93,"start_character":0,"end_line":94,"end_character":71},"in_reply_to":"df140735_fbbed9fd","updated":"2017-06-01 12:30:50.000000000","message":"Done","commit_id":"2a5e2a0d849eba4d9c2ce8442a7b11091ce69eb6"},{"author":{"_account_id":22380,"name":"Josh Hershberg","email":"jhershbe@redhat.com","username":"jhershbe"},"change_message_id":"aa36d4009937691689f28115ad9d63a0fa28df39","unresolved":false,"context_lines":[{"line_number":90,"context_line":"    def start_port_status_update(self, resource, event, trigger, **kwargs):"},{"line_number":91,"context_line":"        if trigger.im_class !\u003d PortStatusWorker:"},{"line_number":92,"context_line":"            return"},{"line_number":93,"context_line":"        if odl_features.has(odl_features.OPERATIONAL_PORT_STATUS):"},{"line_number":94,"context_line":"            self.port_status \u003d port_status_update.OdlPortStatusUpdate()"},{"line_number":95,"context_line":""},{"line_number":96,"context_line":"    def get_workers(self):"},{"line_number":97,"context_line":"        return [PortStatusWorker()]"}],"source_content_type":"text/x-python","patch_set":2,"id":"df140735_fbbed9fd","line":94,"range":{"start_line":93,"start_character":0,"end_line":94,"end_character":71},"in_reply_to":"ff0f0b1f_84666729","updated":"2017-05-29 10:05:38.000000000","message":"see my previous response.","commit_id":"2a5e2a0d849eba4d9c2ce8442a7b11091ce69eb6"},{"author":{"_account_id":333,"name":"Isaku Yamahata","email":"isaku.yamahata@gmail.com","username":"yamahata"},"change_message_id":"5cfed7c4c98eef1621c23e2677774379f657dff9","unresolved":false,"context_lines":[{"line_number":47,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":48,"context_line":""},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"class PortStatusWorker(worker.NeutronWorker):"},{"line_number":51,"context_line":"    def start(self):"},{"line_number":52,"context_line":"        super(PortStatusWorker, self).start()"},{"line_number":53,"context_line":"        LOG.debug(\u0027PortStatusWorker running\u0027)"}],"source_content_type":"text/x-python","patch_set":3,"id":"df140735_1ba604c3","line":50,"range":{"start_line":50,"start_character":23,"end_line":50,"end_character":43},"updated":"2017-05-30 20:49:05.000000000","message":"This was moved into neutron-lib. BaseWorker.\nThis patch needs rebase.","commit_id":"bc7abafefb87d6b3807893ec73b5004f9dafd5ed"},{"author":{"_account_id":22380,"name":"Josh Hershberg","email":"jhershbe@redhat.com","username":"jhershbe"},"change_message_id":"57144051428c0c24f30dd47e7aa79a44487280ed","unresolved":false,"context_lines":[{"line_number":47,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":48,"context_line":""},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"class PortStatusWorker(worker.NeutronWorker):"},{"line_number":51,"context_line":"    def start(self):"},{"line_number":52,"context_line":"        super(PortStatusWorker, self).start()"},{"line_number":53,"context_line":"        LOG.debug(\u0027PortStatusWorker running\u0027)"}],"source_content_type":"text/x-python","patch_set":3,"id":"df140735_bf5fcd70","line":50,"range":{"start_line":50,"start_character":23,"end_line":50,"end_character":43},"in_reply_to":"df140735_1ba604c3","updated":"2017-06-01 12:31:06.000000000","message":"Done","commit_id":"bc7abafefb87d6b3807893ec73b5004f9dafd5ed"}]}
