)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"e125bb7b2f20ad225c14f355dd8f22c882d30130","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"d2b2b118_ea0ff282","updated":"2021-11-30 16:51:46.000000000","message":"Nice one!","commit_id":"6ee7dbb86f44019a136ac3615387c88dbfe28469"},{"author":{"_account_id":13861,"name":"yatin","email":"ykarel@redhat.com","username":"yatinkarel"},"change_message_id":"02be904dbf26cb39491b94972f9d434c563f205c","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"bb5c7bef_cc112f81","updated":"2021-12-03 16:12:49.000000000","message":"Should clear random CI issue with these tests.\nA suggestion inline but may be that can be follow up if found valid. while investigating this i noticed https://github.com/openstack/neutron/blob/master/neutron/plugins/ml2/drivers/ovn/mech_driver/ovsdb/ovsdb_monitor.py#L337 parent is not ChassisAgentEvent, likely due to this only in logs don\u0027t see the event name ChassisAgentTypeChangeEvent.\n\nAlso may be can add some debug logs at https://github.com/openstack/neutron/blob/master/neutron/tests/functional/base.py#L229 to debug such issues.","commit_id":"8035e8e04639218376855d789fd23e40531a3718"},{"author":{"_account_id":8313,"name":"Lajos Katona","display_name":"lajoskatona","email":"katonalala@gmail.com","username":"elajkat","status":"Ericsson Software Technology"},"change_message_id":"5c8d9445c4f4ee6b62af2dbc7d95cf2d9fe4541a","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"26a23d15_3b3f3972","updated":"2021-12-14 08:57:21.000000000","message":"Thanks","commit_id":"1af63e881261ac3a160e9e6d2bea89ac65856cea"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"b93915454c7b9cb7341d86f6ebd6a14144004dcd","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"69827dfd_2c815144","updated":"2021-12-15 08:04:43.000000000","message":"recheck","commit_id":"1af63e881261ac3a160e9e6d2bea89ac65856cea"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"7899ce7b904321262f043f8d661ed31cdeac1c41","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"a1605253_060d11d8","updated":"2021-12-14 11:57:49.000000000","message":"recheck\n\nproblem with some dependencies:\n\n2021-12-14 10:00:13.463335 | controller | The conflict is caused by:\n2021-12-14 10:00:13.463365 | controller |     keystone 20.1.0.dev19 depends on PyJWT\u003e\u003d1.6.1\n2021-12-14 10:00:13.463387 | controller |     The user requested (constraint) pyjwt\u003d\u003d\u003d2.3.0\n\n2021-12-14 10:01:01.388089 | controller | The conflict is caused by:\n2021-12-14 10:01:01.388120 | controller |     neutron 19.1.0.dev279 depends on pecan\u003e\u003d1.3.2\n2021-12-14 10:01:01.388178 | controller |     The user requested (constraint) pecan\u003d\u003d\u003d1.4.1\n","commit_id":"1af63e881261ac3a160e9e6d2bea89ac65856cea"},{"author":{"_account_id":13861,"name":"yatin","email":"ykarel@redhat.com","username":"yatinkarel"},"change_message_id":"b292a61d55cd4b6b4c91de440e9da69df3f32049","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"162b07d0_f0a7b623","updated":"2021-12-14 14:04:23.000000000","message":"recheck pypi mirror issue","commit_id":"1af63e881261ac3a160e9e6d2bea89ac65856cea"}],"neutron/tests/functional/plugins/ml2/drivers/ovn/mech_driver/ovsdb/test_ovsdb_monitor.py":[{"author":{"_account_id":5756,"name":"Terry Wilson","email":"twilson@redhat.com","username":"otherwiseguy"},"change_message_id":"f159f8c33d581892f06b4bd093c65b94f45dd9ce","unresolved":true,"context_lines":[{"line_number":314,"context_line":"        self.handler \u003d self.sb_api.idl.notify_handler"},{"line_number":315,"context_line":"        self.mock_ovsdb_idl \u003d mock.Mock()"},{"line_number":316,"context_line":"        chassis_name \u003d uuidutils.generate_uuid()"},{"line_number":317,"context_line":"        row_event \u003d WaitForChassisCreateEvent(chassis_name)"},{"line_number":318,"context_line":"        self.mech_driver.sb_ovn.idl.notify_handler.watch_event(row_event)"},{"line_number":319,"context_line":"        self.chassis_name \u003d self.add_fake_chassis("},{"line_number":320,"context_line":"            self.FAKE_CHASSIS_HOST,"}],"source_content_type":"text/x-python","patch_set":1,"id":"0fb5b669_140c2596","line":317,"updated":"2021-11-30 18:58:02.000000000","message":"The AgentCache is updated/agent is created via ChassisAgentWriteEvent, on which the table property would possibly be Chassis_Private I think.","commit_id":"6ee7dbb86f44019a136ac3615387c88dbfe28469"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"74ca0a81be6cad5ddaaf6f2b977e27fd4a02b64a","unresolved":true,"context_lines":[{"line_number":314,"context_line":"        self.handler \u003d self.sb_api.idl.notify_handler"},{"line_number":315,"context_line":"        self.mock_ovsdb_idl \u003d mock.Mock()"},{"line_number":316,"context_line":"        chassis_name \u003d uuidutils.generate_uuid()"},{"line_number":317,"context_line":"        row_event \u003d WaitForChassisCreateEvent(chassis_name)"},{"line_number":318,"context_line":"        self.mech_driver.sb_ovn.idl.notify_handler.watch_event(row_event)"},{"line_number":319,"context_line":"        self.chassis_name \u003d self.add_fake_chassis("},{"line_number":320,"context_line":"            self.FAKE_CHASSIS_HOST,"}],"source_content_type":"text/x-python","patch_set":1,"id":"4a2d71ba_7bc5b454","line":317,"in_reply_to":"0fb5b669_140c2596","updated":"2021-12-01 10:06:58.000000000","message":"Right. We create both registers (Chassis and Chassis_Private) at the same time, this is why is working. But let\u0027s be accurate and use the correct table, the one triggering the AgentCache updates.","commit_id":"6ee7dbb86f44019a136ac3615387c88dbfe28469"},{"author":{"_account_id":5756,"name":"Terry Wilson","email":"twilson@redhat.com","username":"otherwiseguy"},"change_message_id":"f159f8c33d581892f06b4bd093c65b94f45dd9ce","unresolved":true,"context_lines":[{"line_number":320,"context_line":"            self.FAKE_CHASSIS_HOST,"},{"line_number":321,"context_line":"            external_ids\u003d{\u0027ovn-cms-options\u0027: \u0027enable-chassis-as-gw\u0027},"},{"line_number":322,"context_line":"            name\u003dchassis_name)"},{"line_number":323,"context_line":"        self.assertTrue(row_event.wait())"},{"line_number":324,"context_line":"        n_utils.wait_until_true("},{"line_number":325,"context_line":"            lambda: len(list(neutron_agent.AgentCache())) \u003d\u003d 1)"},{"line_number":326,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"93f6617f_fc4f2907","line":323,"updated":"2021-11-30 18:58:02.000000000","message":"Even if the WaitEvent is waiting on the same table as ChassisAgentWriteEvent (which creates the agent), the WaitEvent might actually fire before the ChassisAgentWriteEvent does, because events are stored in a set() so are not ordered (I have a fix that forces WaitEvents to be processed after all other events here: https://review.opendev.org/c/openstack/ovsdbapp/+/819116). So without that patch, I don\u0027t think the WaitEvent ends up buying us anything that the following wait_until_true doesn\u0027t since 50% of the time we\u0027ll return True here before the agent is created.","commit_id":"6ee7dbb86f44019a136ac3615387c88dbfe28469"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"74ca0a81be6cad5ddaaf6f2b977e27fd4a02b64a","unresolved":false,"context_lines":[{"line_number":320,"context_line":"            self.FAKE_CHASSIS_HOST,"},{"line_number":321,"context_line":"            external_ids\u003d{\u0027ovn-cms-options\u0027: \u0027enable-chassis-as-gw\u0027},"},{"line_number":322,"context_line":"            name\u003dchassis_name)"},{"line_number":323,"context_line":"        self.assertTrue(row_event.wait())"},{"line_number":324,"context_line":"        n_utils.wait_until_true("},{"line_number":325,"context_line":"            lambda: len(list(neutron_agent.AgentCache())) \u003d\u003d 1)"},{"line_number":326,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"66024c7a_ed904305","line":323,"in_reply_to":"93f6617f_fc4f2907","updated":"2021-12-01 10:06:58.000000000","message":"This is why I have L324: I check the number of agents in the cache is 1. With the wait event I ensure the event that triggers the cache update is happening (half of the process). With L324 I ensure the other half (agent cache creation) is done.","commit_id":"6ee7dbb86f44019a136ac3615387c88dbfe28469"},{"author":{"_account_id":13861,"name":"yatin","email":"ykarel@redhat.com","username":"yatinkarel"},"change_message_id":"02be904dbf26cb39491b94972f9d434c563f205c","unresolved":true,"context_lines":[{"line_number":44,"context_line":"        super(WaitForDataPathBindingCreateEvent, self).__init__("},{"line_number":45,"context_line":"            events, table, conditions, timeout\u003d15)"},{"line_number":46,"context_line":""},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"class WaitForChassisPrivateCreateEvent(event.WaitEvent):"},{"line_number":49,"context_line":"    event_name \u003d \u0027WaitForChassisPrivateCreateEvent\u0027"},{"line_number":50,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"85a8b12d_92fc6895","line":47,"updated":"2021-12-03 16:12:49.000000000","message":"Also found a duplicate bug https://bugs.launchpad.net/neutron/+bug/1951225","commit_id":"8035e8e04639218376855d789fd23e40531a3718"},{"author":{"_account_id":13861,"name":"yatin","email":"ykarel@redhat.com","username":"yatinkarel"},"change_message_id":"02be904dbf26cb39491b94972f9d434c563f205c","unresolved":true,"context_lines":[{"line_number":49,"context_line":"    event_name \u003d \u0027WaitForChassisPrivateCreateEvent\u0027"},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"    def __init__(self, chassis_name):"},{"line_number":52,"context_line":"        table \u003d \u0027Chassis_Private\u0027"},{"line_number":53,"context_line":"        events \u003d (self.ROW_CREATE,)"},{"line_number":54,"context_line":"        conditions \u003d ((\u0027name\u0027, \u0027\u003d\u0027, chassis_name),)"},{"line_number":55,"context_line":"        super().__init__(events, table, conditions, timeout\u003d15)"}],"source_content_type":"text/x-python","patch_set":2,"id":"f43b90b5_d6cf2b66","line":52,"range":{"start_line":52,"start_character":17,"end_line":52,"end_character":32},"updated":"2021-12-03 16:12:49.000000000","message":"may be not hardcode it? and provide option to pass table name like def __init__(self, chassis_name, table_name\u003d\u0027Chassis_Private\u0027):\n    table \u003d table_name\n\nand while calling pass table_name like row_event \u003d WaitForChassisPrivateCreateEvent(chassis_name,self.mech_driver.agent_chassis_table)\n\nsaying because in my local it didn\u0027t worked with Chassis_Private because of\n$ sudo ovn-sbctl list chassis_private\novn-sbctl: unknown table \"chassis_private\n\n$ ovn-sbctl --version\novn-sbctl 20.03.2\nOpen vSwitch Library 2.13.3\nDB Schema 2.7.0","commit_id":"8035e8e04639218376855d789fd23e40531a3718"},{"author":{"_account_id":8313,"name":"Lajos Katona","display_name":"lajoskatona","email":"katonalala@gmail.com","username":"elajkat","status":"Ericsson Software Technology"},"change_message_id":"17e5ee50252888c19d371de36dca80fc81034975","unresolved":true,"context_lines":[{"line_number":49,"context_line":"    event_name \u003d \u0027WaitForChassisPrivateCreateEvent\u0027"},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"    def __init__(self, chassis_name):"},{"line_number":52,"context_line":"        table \u003d \u0027Chassis_Private\u0027"},{"line_number":53,"context_line":"        events \u003d (self.ROW_CREATE,)"},{"line_number":54,"context_line":"        conditions \u003d ((\u0027name\u0027, \u0027\u003d\u0027, chassis_name),)"},{"line_number":55,"context_line":"        super().__init__(events, table, conditions, timeout\u003d15)"}],"source_content_type":"text/x-python","patch_set":2,"id":"e6ca39a4_c4c5d080","line":52,"range":{"start_line":52,"start_character":17,"end_line":52,"end_character":32},"in_reply_to":"3f48e13e_6cbf3d96","updated":"2021-12-13 12:28:14.000000000","message":"Do we need a new patchset for it?","commit_id":"8035e8e04639218376855d789fd23e40531a3718"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"773ddefa5fee2e9da2e1f373a6e4319b3b3a1e89","unresolved":true,"context_lines":[{"line_number":49,"context_line":"    event_name \u003d \u0027WaitForChassisPrivateCreateEvent\u0027"},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"    def __init__(self, chassis_name):"},{"line_number":52,"context_line":"        table \u003d \u0027Chassis_Private\u0027"},{"line_number":53,"context_line":"        events \u003d (self.ROW_CREATE,)"},{"line_number":54,"context_line":"        conditions \u003d ((\u0027name\u0027, \u0027\u003d\u0027, chassis_name),)"},{"line_number":55,"context_line":"        super().__init__(events, table, conditions, timeout\u003d15)"}],"source_content_type":"text/x-python","patch_set":2,"id":"3f48e13e_6cbf3d96","line":52,"range":{"start_line":52,"start_character":17,"end_line":52,"end_character":32},"in_reply_to":"d13b297b_e2f7a13f","updated":"2021-12-07 15:45:26.000000000","message":"I\u0027ll use the driver configured table.","commit_id":"8035e8e04639218376855d789fd23e40531a3718"},{"author":{"_account_id":8313,"name":"Lajos Katona","display_name":"lajoskatona","email":"katonalala@gmail.com","username":"elajkat","status":"Ericsson Software Technology"},"change_message_id":"5c8d9445c4f4ee6b62af2dbc7d95cf2d9fe4541a","unresolved":true,"context_lines":[{"line_number":49,"context_line":"    event_name \u003d \u0027WaitForChassisPrivateCreateEvent\u0027"},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"    def __init__(self, chassis_name):"},{"line_number":52,"context_line":"        table \u003d \u0027Chassis_Private\u0027"},{"line_number":53,"context_line":"        events \u003d (self.ROW_CREATE,)"},{"line_number":54,"context_line":"        conditions \u003d ((\u0027name\u0027, \u0027\u003d\u0027, chassis_name),)"},{"line_number":55,"context_line":"        super().__init__(events, table, conditions, timeout\u003d15)"}],"source_content_type":"text/x-python","patch_set":2,"id":"31f99026_d26fed07","line":52,"range":{"start_line":52,"start_character":17,"end_line":52,"end_character":32},"in_reply_to":"df550022_cbfeca8b","updated":"2021-12-14 08:57:21.000000000","message":"that I totally understand, it happens with me all the time 😊","commit_id":"8035e8e04639218376855d789fd23e40531a3718"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"974d0207372bf9c3811115f4f0959b9f300cd736","unresolved":true,"context_lines":[{"line_number":49,"context_line":"    event_name \u003d \u0027WaitForChassisPrivateCreateEvent\u0027"},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"    def __init__(self, chassis_name):"},{"line_number":52,"context_line":"        table \u003d \u0027Chassis_Private\u0027"},{"line_number":53,"context_line":"        events \u003d (self.ROW_CREATE,)"},{"line_number":54,"context_line":"        conditions \u003d ((\u0027name\u0027, \u0027\u003d\u0027, chassis_name),)"},{"line_number":55,"context_line":"        super().__init__(events, table, conditions, timeout\u003d15)"}],"source_content_type":"text/x-python","patch_set":2,"id":"df550022_cbfeca8b","line":52,"range":{"start_line":52,"start_character":17,"end_line":52,"end_character":32},"in_reply_to":"e6ca39a4_c4c5d080","updated":"2021-12-13 16:29:17.000000000","message":"Sorry, yes. I was coding the next PS and, as usual, something else came up and I forgot it.","commit_id":"8035e8e04639218376855d789fd23e40531a3718"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"b9fb4a6ba955e45a8bb65a63c8342eadb8b01bc7","unresolved":true,"context_lines":[{"line_number":49,"context_line":"    event_name \u003d \u0027WaitForChassisPrivateCreateEvent\u0027"},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"    def __init__(self, chassis_name):"},{"line_number":52,"context_line":"        table \u003d \u0027Chassis_Private\u0027"},{"line_number":53,"context_line":"        events \u003d (self.ROW_CREATE,)"},{"line_number":54,"context_line":"        conditions \u003d ((\u0027name\u0027, \u0027\u003d\u0027, chassis_name),)"},{"line_number":55,"context_line":"        super().__init__(events, table, conditions, timeout\u003d15)"}],"source_content_type":"text/x-python","patch_set":2,"id":"d13b297b_e2f7a13f","line":52,"range":{"start_line":52,"start_character":17,"end_line":52,"end_character":32},"in_reply_to":"f43b90b5_d6cf2b66","updated":"2021-12-07 08:37:21.000000000","message":"Maybe it can be WaitForChassisCreateEvent() and check if Chassis_Private is there or if maybe Chassis table name should be used. Wdyt?","commit_id":"8035e8e04639218376855d789fd23e40531a3718"}]}
