)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"629f057d3e2df50c4b68c49cf204fef873bde53a","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"51153101_11f515ad","updated":"2022-10-25 09:11:11.000000000","message":"I think that fullstack test failure may be related to that patch. Please check it","commit_id":"8d248d7266297565dc8d7b56d2aceb14e6458014"},{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"25e8a439444f76bca47405936240c451ba8079e1","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":6,"id":"2d546cd6_4826ef7e","updated":"2022-11-14 06:19:02.000000000","message":"recheck","commit_id":"b5d2752783c37a97606f86fb2f621d2770fd4f9c"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"95819a379d4ac3f5db6c746d1296ceb45562535b","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":7,"id":"77133bd7_933cd45f","updated":"2022-11-23 12:07:45.000000000","message":"Look OK. Just some questions.","commit_id":"c3ebefa5f73e8cb89c3c9c12b385b21e8749299f"},{"author":{"_account_id":13861,"name":"yatin","email":"ykarel@redhat.com","username":"yatinkarel"},"change_message_id":"eeedad7f3e123ca0ef07550cf2fd5146c8c015da","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":7,"id":"364446df_bf38258c","updated":"2022-12-05 07:38:11.000000000","message":"The newly added unit test with this patch is randomly failing https://bugs.launchpad.net/neutron/+bug/1998474","commit_id":"c3ebefa5f73e8cb89c3c9c12b385b21e8749299f"},{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"d70fbde7581426ac1bde8a5c05dc48386e210552","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":7,"id":"888639f1_69b21a51","updated":"2022-11-29 00:59:08.000000000","message":"recheck","commit_id":"c3ebefa5f73e8cb89c3c9c12b385b21e8749299f"}],"neutron/plugins/ml2/drivers/openvswitch/agent/extension_drivers/qos_driver.py":[{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"50a110821de53bec3d52adb9ca52dec8dc51418c","unresolved":true,"context_lines":[{"line_number":48,"context_line":"    def __init__(self, max_meter):"},{"line_number":49,"context_line":"        self.max_meter \u003d max_meter"},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"    def generate_meter_id(self):"},{"line_number":52,"context_line":"        if self.max_meter \u003c\u003d 0:"},{"line_number":53,"context_line":"            return"},{"line_number":54,"context_line":"        used_meter_ids \u003d self.PORT_METER_ID.values()"}],"source_content_type":"text/x-python","patch_set":6,"id":"0b73a75e_2b3a6e6b","line":51,"updated":"2022-11-15 15:44:49.000000000","message":"shouldn\u0027t this be private method?","commit_id":"b5d2752783c37a97606f86fb2f621d2770fd4f9c"},{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"92727cd8fda42be190503bd9b6759f73b8b84c5b","unresolved":false,"context_lines":[{"line_number":48,"context_line":"    def __init__(self, max_meter):"},{"line_number":49,"context_line":"        self.max_meter \u003d max_meter"},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"    def generate_meter_id(self):"},{"line_number":52,"context_line":"        if self.max_meter \u003c\u003d 0:"},{"line_number":53,"context_line":"            return"},{"line_number":54,"context_line":"        used_meter_ids \u003d self.PORT_METER_ID.values()"}],"source_content_type":"text/x-python","patch_set":6,"id":"c71b65b1_3cbcc4d5","line":51,"in_reply_to":"0b73a75e_2b3a6e6b","updated":"2022-11-16 01:33:02.000000000","message":"Done","commit_id":"b5d2752783c37a97606f86fb2f621d2770fd4f9c"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"50a110821de53bec3d52adb9ca52dec8dc51418c","unresolved":true,"context_lines":[{"line_number":51,"context_line":"    def generate_meter_id(self):"},{"line_number":52,"context_line":"        if self.max_meter \u003c\u003d 0:"},{"line_number":53,"context_line":"            return"},{"line_number":54,"context_line":"        used_meter_ids \u003d self.PORT_METER_ID.values()"},{"line_number":55,"context_line":"        cid \u003d None"},{"line_number":56,"context_line":"        times \u003d 0"},{"line_number":57,"context_line":"        while not cid or cid in used_meter_ids:"}],"source_content_type":"text/x-python","patch_set":6,"id":"8992ea82_4d7aeb84","line":54,"range":{"start_line":54,"start_character":30,"end_line":54,"end_character":43},"updated":"2022-11-15 15:44:49.000000000","message":"nit: just a question - why this is all uppercase?","commit_id":"b5d2752783c37a97606f86fb2f621d2770fd4f9c"},{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"92727cd8fda42be190503bd9b6759f73b8b84c5b","unresolved":false,"context_lines":[{"line_number":51,"context_line":"    def generate_meter_id(self):"},{"line_number":52,"context_line":"        if self.max_meter \u003c\u003d 0:"},{"line_number":53,"context_line":"            return"},{"line_number":54,"context_line":"        used_meter_ids \u003d self.PORT_METER_ID.values()"},{"line_number":55,"context_line":"        cid \u003d None"},{"line_number":56,"context_line":"        times \u003d 0"},{"line_number":57,"context_line":"        while not cid or cid in used_meter_ids:"}],"source_content_type":"text/x-python","patch_set":6,"id":"5379ed5d_7cb8ef8d","line":54,"range":{"start_line":54,"start_character":30,"end_line":54,"end_character":43},"in_reply_to":"8992ea82_4d7aeb84","updated":"2022-11-16 01:33:02.000000000","message":"It\u0027s a global cache for this singleton generator.","commit_id":"b5d2752783c37a97606f86fb2f621d2770fd4f9c"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"50a110821de53bec3d52adb9ca52dec8dc51418c","unresolved":true,"context_lines":[{"line_number":65,"context_line":"        meter_id \u003d self.generate_meter_id()"},{"line_number":66,"context_line":"        if not meter_id:"},{"line_number":67,"context_line":"            return"},{"line_number":68,"context_line":"        self.PORT_METER_ID[key] \u003d meter_id"},{"line_number":69,"context_line":"        return meter_id"},{"line_number":70,"context_line":""},{"line_number":71,"context_line":"    def remove_port_meter_id(self, key):"}],"source_content_type":"text/x-python","patch_set":6,"id":"aee1286a_68f1323b","line":68,"updated":"2022-11-15 15:44:49.000000000","message":"why You don\u0027t use set_meter_id() method here?","commit_id":"b5d2752783c37a97606f86fb2f621d2770fd4f9c"},{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"92727cd8fda42be190503bd9b6759f73b8b84c5b","unresolved":false,"context_lines":[{"line_number":65,"context_line":"        meter_id \u003d self.generate_meter_id()"},{"line_number":66,"context_line":"        if not meter_id:"},{"line_number":67,"context_line":"            return"},{"line_number":68,"context_line":"        self.PORT_METER_ID[key] \u003d meter_id"},{"line_number":69,"context_line":"        return meter_id"},{"line_number":70,"context_line":""},{"line_number":71,"context_line":"    def remove_port_meter_id(self, key):"}],"source_content_type":"text/x-python","patch_set":6,"id":"234c7dac_7a6306fc","line":68,"in_reply_to":"aee1286a_68f1323b","updated":"2022-11-16 01:33:02.000000000","message":"Done","commit_id":"b5d2752783c37a97606f86fb2f621d2770fd4f9c"},{"author":{"_account_id":8313,"name":"Lajos Katona","display_name":"lajoskatona","email":"katonalala@gmail.com","username":"elajkat","status":"Ericsson Software Technology"},"change_message_id":"229e5d341b8ec6b2bfbfc3a7c2aca2a614e868b5","unresolved":true,"context_lines":[{"line_number":84,"context_line":"        self.rule_type \u003d type_"},{"line_number":85,"context_line":"        self.generator \u003d MeterIDGenerator(self.max_meter)"},{"line_number":86,"context_line":"        # This will be:"},{"line_number":87,"context_line":"        #  PORT_INFO_INGRESS \u003d {\"port_id_1\": (mac_1, 1),"},{"line_number":88,"context_line":"        #                       \"port_id_2\": (mac_2, 2),"},{"line_number":89,"context_line":"        #                       \"port_id_3\": (mac_3, 3),"},{"line_number":90,"context_line":"        #                       \"port_id_4\": (mac_4, 4)}"},{"line_number":91,"context_line":"        self.PORT_INFO_INGRESS \u003d {}"},{"line_number":92,"context_line":"        #  PORT_INFO_EGRESS \u003d {\"port_id_1\": (mac_1, 1),"},{"line_number":93,"context_line":"        #                      \"port_id_2\": (mac_2, 1),"}],"source_content_type":"text/x-python","patch_set":6,"id":"42224427_b37a4d39","line":90,"range":{"start_line":87,"start_character":11,"end_line":90,"end_character":56},"updated":"2022-11-14 10:36:50.000000000","message":"+1 for docsting/comment","commit_id":"b5d2752783c37a97606f86fb2f621d2770fd4f9c"},{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"92727cd8fda42be190503bd9b6759f73b8b84c5b","unresolved":false,"context_lines":[{"line_number":84,"context_line":"        self.rule_type \u003d type_"},{"line_number":85,"context_line":"        self.generator \u003d MeterIDGenerator(self.max_meter)"},{"line_number":86,"context_line":"        # This will be:"},{"line_number":87,"context_line":"        #  PORT_INFO_INGRESS \u003d {\"port_id_1\": (mac_1, 1),"},{"line_number":88,"context_line":"        #                       \"port_id_2\": (mac_2, 2),"},{"line_number":89,"context_line":"        #                       \"port_id_3\": (mac_3, 3),"},{"line_number":90,"context_line":"        #                       \"port_id_4\": (mac_4, 4)}"},{"line_number":91,"context_line":"        self.PORT_INFO_INGRESS \u003d {}"},{"line_number":92,"context_line":"        #  PORT_INFO_EGRESS \u003d {\"port_id_1\": (mac_1, 1),"},{"line_number":93,"context_line":"        #                      \"port_id_2\": (mac_2, 1),"}],"source_content_type":"text/x-python","patch_set":6,"id":"8873b66c_01981ad3","line":90,"range":{"start_line":87,"start_character":11,"end_line":90,"end_character":56},"in_reply_to":"42224427_b37a4d39","updated":"2022-11-16 01:33:02.000000000","message":"Ack","commit_id":"b5d2752783c37a97606f86fb2f621d2770fd4f9c"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"95819a379d4ac3f5db6c746d1296ceb45562535b","unresolved":true,"context_lines":[{"line_number":39,"context_line":"    #                   \"port_id_2_egress: 4}"},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"    def __new__(cls, *args, **kwargs):"},{"line_number":42,"context_line":"        # make it a singleton"},{"line_number":43,"context_line":"        if not hasattr(cls, \u0027_instance\u0027):"},{"line_number":44,"context_line":"            cls._instance \u003d super(MeterIDGenerator, cls).__new__(cls)"},{"line_number":45,"context_line":"            cls.PORT_METER_ID \u003d {}"}],"source_content_type":"text/x-python","patch_set":7,"id":"542a7f43_422727de","line":42,"range":{"start_line":42,"start_character":8,"end_line":42,"end_character":29},"updated":"2022-11-23 12:07:45.000000000","message":"nit: Why a singleton? Are we instantiating this class more than once?","commit_id":"c3ebefa5f73e8cb89c3c9c12b385b21e8749299f"},{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"38131cb9d2d304f3e9cbbe318c7f84940410fb66","unresolved":false,"context_lines":[{"line_number":39,"context_line":"    #                   \"port_id_2_egress: 4}"},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"    def __new__(cls, *args, **kwargs):"},{"line_number":42,"context_line":"        # make it a singleton"},{"line_number":43,"context_line":"        if not hasattr(cls, \u0027_instance\u0027):"},{"line_number":44,"context_line":"            cls._instance \u003d super(MeterIDGenerator, cls).__new__(cls)"},{"line_number":45,"context_line":"            cls.PORT_METER_ID \u003d {}"}],"source_content_type":"text/x-python","patch_set":7,"id":"f09f2b41_5309f078","line":42,"range":{"start_line":42,"start_character":8,"end_line":42,"end_character":29},"in_reply_to":"542a7f43_422727de","updated":"2022-11-24 01:54:08.000000000","message":"Commit message has some informations, because for one bridge the meter ID\nis a sharing range. We create meter rules for pps and bps on the same br-int. So we must not create a same meter ID for different rules.","commit_id":"c3ebefa5f73e8cb89c3c9c12b385b21e8749299f"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"38d34d069b35a69c7351ae66ca9a9f373f16ead8","unresolved":false,"context_lines":[{"line_number":39,"context_line":"    #                   \"port_id_2_egress: 4}"},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"    def __new__(cls, *args, **kwargs):"},{"line_number":42,"context_line":"        # make it a singleton"},{"line_number":43,"context_line":"        if not hasattr(cls, \u0027_instance\u0027):"},{"line_number":44,"context_line":"            cls._instance \u003d super(MeterIDGenerator, cls).__new__(cls)"},{"line_number":45,"context_line":"            cls.PORT_METER_ID \u003d {}"}],"source_content_type":"text/x-python","patch_set":7,"id":"112222fd_1cc3ee7a","line":42,"range":{"start_line":42,"start_character":8,"end_line":42,"end_character":29},"in_reply_to":"f09f2b41_5309f078","updated":"2022-11-25 15:14:41.000000000","message":"Ok, I couldn\u0027t manually check when this instance is called twice. In my env I instantiate MeterRuleManager only once and this is instantiating one single MeterIDGenerator.","commit_id":"c3ebefa5f73e8cb89c3c9c12b385b21e8749299f"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"95819a379d4ac3f5db6c746d1296ceb45562535b","unresolved":true,"context_lines":[{"line_number":42,"context_line":"        # make it a singleton"},{"line_number":43,"context_line":"        if not hasattr(cls, \u0027_instance\u0027):"},{"line_number":44,"context_line":"            cls._instance \u003d super(MeterIDGenerator, cls).__new__(cls)"},{"line_number":45,"context_line":"            cls.PORT_METER_ID \u003d {}"},{"line_number":46,"context_line":"        return cls._instance"},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"    def __init__(self, max_meter):"}],"source_content_type":"text/x-python","patch_set":7,"id":"3ed3e88f_40242258","line":45,"range":{"start_line":45,"start_character":12,"end_line":45,"end_character":34},"updated":"2022-11-23 12:07:45.000000000","message":"nit: just asking: this could be a class variable, as before. Why this change?","commit_id":"c3ebefa5f73e8cb89c3c9c12b385b21e8749299f"},{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"38131cb9d2d304f3e9cbbe318c7f84940410fb66","unresolved":false,"context_lines":[{"line_number":42,"context_line":"        # make it a singleton"},{"line_number":43,"context_line":"        if not hasattr(cls, \u0027_instance\u0027):"},{"line_number":44,"context_line":"            cls._instance \u003d super(MeterIDGenerator, cls).__new__(cls)"},{"line_number":45,"context_line":"            cls.PORT_METER_ID \u003d {}"},{"line_number":46,"context_line":"        return cls._instance"},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"    def __init__(self, max_meter):"}],"source_content_type":"text/x-python","patch_set":7,"id":"30540bcd_06578684","line":45,"range":{"start_line":45,"start_character":12,"end_line":45,"end_character":34},"in_reply_to":"3ed3e88f_40242258","updated":"2022-11-24 01:54:08.000000000","message":"Nothing special, just move the shared cache to the singleton related place, an explicit notice.","commit_id":"c3ebefa5f73e8cb89c3c9c12b385b21e8749299f"}]}
