)]}'
{"neutron/plugins/ml2/drivers/l2pop/mech_driver.py":[{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"change_message_id":"f711fd044b15ac8b8c686b716525c313c2595c7a","unresolved":false,"context_lines":[{"line_number":107,"context_line":"                l2pop_rpc.L2populationAgentNotify.remove_fdb_entries("},{"line_number":108,"context_line":"                    self.rpc_ctx, fdb_entries)"},{"line_number":109,"context_line":"            elif port[\u0027status\u0027] \u003d\u003d const.PORT_STATUS_BUILD:"},{"line_number":110,"context_line":"                orig \u003d self.migrated_ports.pop(port[\u0027id\u0027], None)"},{"line_number":111,"context_line":"                if orig:"},{"line_number":112,"context_line":"                    # this port has been migrated : remove its entries from fdb"},{"line_number":113,"context_line":"                    fdb_entries \u003d self._update_port_down(context, orig)"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAT3%2F%2FxTg%3D","line":110,"updated":"2014-01-01 20:52:08.000000000","message":"is a \u0027pop\u0027 safe?\nIs it possible to have 2 update_port events while the port is still in BUILD status?","commit_id":"89dc25db293d233ecb15b51517321b7e4785da99"},{"author":{"_account_id":2888,"name":"Mathieu Rohon","email":"mathieu.rohon@gmail.com","username":"mathieu-rohon"},"change_message_id":"a6d44855d3e5db224f4a1d900fe27013612f8fbc","unresolved":false,"context_lines":[{"line_number":107,"context_line":"                l2pop_rpc.L2populationAgentNotify.remove_fdb_entries("},{"line_number":108,"context_line":"                    self.rpc_ctx, fdb_entries)"},{"line_number":109,"context_line":"            elif port[\u0027status\u0027] \u003d\u003d const.PORT_STATUS_BUILD:"},{"line_number":110,"context_line":"                orig \u003d self.migrated_ports.pop(port[\u0027id\u0027], None)"},{"line_number":111,"context_line":"                if orig:"},{"line_number":112,"context_line":"                    # this port has been migrated : remove its entries from fdb"},{"line_number":113,"context_line":"                    fdb_entries \u003d self._update_port_down(context, orig)"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAUH%2F%2F8%2FI%3D","line":110,"in_reply_to":"AAAAT3%2F%2FxTg%3D","updated":"2014-01-06 09:36:52.000000000","message":"the change to build  means that a get_device_details has been handled by the plugin, which means that the new agent owns the migrated port if any. So we can invalidate the previous fdb entries.","commit_id":"89dc25db293d233ecb15b51517321b7e4785da99"},{"author":{"_account_id":2888,"name":"Mathieu Rohon","email":"mathieu.rohon@gmail.com","username":"mathieu-rohon"},"change_message_id":"7929c13b74e13926ed4f3d0e55abf069a867a6f2","unresolved":false,"context_lines":[{"line_number":107,"context_line":"                l2pop_rpc.L2populationAgentNotify.remove_fdb_entries("},{"line_number":108,"context_line":"                    self.rpc_ctx, fdb_entries)"},{"line_number":109,"context_line":"            elif port[\u0027status\u0027] \u003d\u003d const.PORT_STATUS_BUILD:"},{"line_number":110,"context_line":"                orig \u003d self.migrated_ports.pop(port[\u0027id\u0027], None)"},{"line_number":111,"context_line":"                if orig:"},{"line_number":112,"context_line":"                    # this port has been migrated : remove its entries from fdb"},{"line_number":113,"context_line":"                    fdb_entries \u003d self._update_port_down(context, orig)"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAUH%2F%2Fxlk%3D","line":110,"in_reply_to":"AAAAUH%2F%2F8%2FI%3D","updated":"2014-01-08 17:03:04.000000000","message":"If another thread change the status of the port in the DB, we shouldn\u0027t be impacted, since we use the status cached in the portContext\n\nNova prevents processing a migration while the Instance is still in migrating state. If another migration order is processed, this means that the previous one has finished. \n\nThe only race condition I see is if two migrations occurs, and the l2 agent on the targeted first migration host hasn\u0027t necessary time to see the port before it is re-migrated : in my code the orig context stored in the dict would be replaced by the orig of the second migration host, which is not the one which stores for the good info about fdb entries to delete","commit_id":"89dc25db293d233ecb15b51517321b7e4785da99"},{"author":{"_account_id":2888,"name":"Mathieu Rohon","email":"mathieu.rohon@gmail.com","username":"mathieu-rohon"},"change_message_id":"1ce5c05cf0a421c4e3c45ec39beee146ad8c0d6c","unresolved":false,"context_lines":[{"line_number":107,"context_line":"                l2pop_rpc.L2populationAgentNotify.remove_fdb_entries("},{"line_number":108,"context_line":"                    self.rpc_ctx, fdb_entries)"},{"line_number":109,"context_line":"            elif port[\u0027status\u0027] \u003d\u003d const.PORT_STATUS_BUILD:"},{"line_number":110,"context_line":"                orig \u003d self.migrated_ports.pop(port[\u0027id\u0027], None)"},{"line_number":111,"context_line":"                if orig:"},{"line_number":112,"context_line":"                    # this port has been migrated : remove its entries from fdb"},{"line_number":113,"context_line":"                    fdb_entries \u003d self._update_port_down(context, orig)"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAUH%2F%2FsNI%3D","line":110,"in_reply_to":"AAAAUH%2F%2Fxlk%3D","updated":"2014-01-09 15:28:45.000000000","message":"another race condition that can occur for live-migration is when an agent performs \"get_device_details/update_device_up\" before the port_update with the good binding has been received. In such a case the port might stay in BUILD state","commit_id":"89dc25db293d233ecb15b51517321b7e4785da99"},{"author":{"_account_id":7141,"name":"Sylvain Afchain","email":"safchain@redhat.com","username":"sylvainA"},"change_message_id":"3f6a62e2b60151080f3a1d1abf37ef97089cb2fc","unresolved":false,"context_lines":[{"line_number":51,"context_line":"        # won\u0027t need agent_active_ports_count_for_flooding anymore"},{"line_number":52,"context_line":"        port_context \u003d context.current"},{"line_number":53,"context_line":"        fdb_entries \u003d self._update_port_down(context, port_context, 1)"},{"line_number":54,"context_line":"        self.deleted_ports[context.current[\u0027id\u0027]] \u003d fdb_entries"},{"line_number":55,"context_line":""},{"line_number":56,"context_line":"    def delete_port_postcommit(self, context):"},{"line_number":57,"context_line":"        fanout_msg \u003d self.deleted_ports.pop(context.current[\u0027id\u0027], None)"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAVn%2F%2Fkmo%3D","line":54,"updated":"2014-03-05 10:02:06.000000000","message":"nit: why not using port_context[\u0027id\u0027]","commit_id":"b42bac256261e0f279f2e974b0f51148a3583c94"}]}
