)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"a3ff61fe772f3795f1bf16603f8dad641d691a8a","unresolved":false,"context_lines":[{"line_number":11,"context_line":"also calls query.get() prior to join() so we don\u0027t run into"},{"line_number":12,"context_line":"a deadlock."},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"Change-Id: I67fa8b9b2733440b8e8a373a8f89a0834144ea7e"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"9fdfeff1_4f09e981","line":14,"updated":"2019-02-26 16:24:13.000000000","message":"nit: Would be nice to mention the change-id of the cinder patch that adds this feature (I3e7db26ef3df24a12e3bfa219fe25bfb315335ec).","commit_id":"27aa25ebafa20801e1c8ed3d451925a39a7e9ab8"}],"cinderlib/cinderlib.py":[{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"a3ff61fe772f3795f1bf16603f8dad641d691a8a","unresolved":false,"context_lines":[{"line_number":397,"context_line":"        def convert_oslo_config(oslo_options):"},{"line_number":398,"context_line":"            options \u003d []"},{"line_number":399,"context_line":"            for opt in oslo_options:"},{"line_number":400,"context_line":"                tmp_dict \u003d {}"},{"line_number":401,"context_line":"                for key in vars(opt):"},{"line_number":402,"context_line":"                    if not key.startswith(\u0027_\u0027):"},{"line_number":403,"context_line":"                        tmp_dict[key] \u003d str(getattr(opt, key))"},{"line_number":404,"context_line":"                options.append(tmp_dict)"},{"line_number":405,"context_line":"            return options"},{"line_number":406,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"9fdfeff1_0f21a14d","line":403,"range":{"start_line":400,"start_character":0,"end_line":403,"end_character":62},"updated":"2019-02-26 16:24:13.000000000","message":"nit: I think it looks nicer with dict comprehension\n\n tmp_dict \u003d {k: str(v) for k, v in vars(opt).items()\n             if not k.startswith(\u0027_\u0027)}\n\nWe could construct the whole `options` this way, but maybe it loses clarity:\n\n options \u003d [{k: str(v) for k, v in vars(opt).items()\n             if not k.startswith(\u0027_\u0027)}\n            for opt in oslo_options]","commit_id":"27aa25ebafa20801e1c8ed3d451925a39a7e9ab8"},{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"34b7350ffc95348d3cae3d255ec308796fbdaef5","unresolved":false,"context_lines":[{"line_number":397,"context_line":"        def convert_oslo_config(oslo_options):"},{"line_number":398,"context_line":"            options \u003d []"},{"line_number":399,"context_line":"            for opt in oslo_options:"},{"line_number":400,"context_line":"                tmp_dict \u003d {}"},{"line_number":401,"context_line":"                for key in vars(opt):"},{"line_number":402,"context_line":"                    if not key.startswith(\u0027_\u0027):"},{"line_number":403,"context_line":"                        tmp_dict[key] \u003d str(getattr(opt, key))"},{"line_number":404,"context_line":"                options.append(tmp_dict)"},{"line_number":405,"context_line":"            return options"},{"line_number":406,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"9fdfeff1_2f5ca549","line":403,"range":{"start_line":400,"start_character":0,"end_line":403,"end_character":62},"in_reply_to":"9fdfeff1_0f21a14d","updated":"2019-02-26 16:36:39.000000000","message":"Done","commit_id":"27aa25ebafa20801e1c8ed3d451925a39a7e9ab8"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"a3ff61fe772f3795f1bf16603f8dad641d691a8a","unresolved":false,"context_lines":[{"line_number":427,"context_line":"        p \u003d multiprocessing.Process(target\u003dlist_drivers, args\u003d(queue,))"},{"line_number":428,"context_line":"        p.start()"},{"line_number":429,"context_line":"        result \u003d queue.get()"},{"line_number":430,"context_line":"        p.join()"},{"line_number":431,"context_line":"        return result"},{"line_number":432,"context_line":""},{"line_number":433,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"9fdfeff1_af0975dd","line":430,"updated":"2019-02-26 16:24:13.000000000","message":"nit: I think it\u0027s clearer to see the join first (like it was) waiting for the other process to finish before checking the queue instead of just relying on the fact that `queue.get` defaults to blocking without timeout.","commit_id":"27aa25ebafa20801e1c8ed3d451925a39a7e9ab8"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"f103b442e4f497b7c1576990b1d0e1c470201df1","unresolved":false,"context_lines":[{"line_number":427,"context_line":"        p \u003d multiprocessing.Process(target\u003dlist_drivers, args\u003d(queue,))"},{"line_number":428,"context_line":"        p.start()"},{"line_number":429,"context_line":"        result \u003d queue.get()"},{"line_number":430,"context_line":"        p.join()"},{"line_number":431,"context_line":"        return result"},{"line_number":432,"context_line":""},{"line_number":433,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"9fdfeff1_58fadf74","line":430,"in_reply_to":"9fdfeff1_4f36c904","updated":"2019-02-28 11:03:57.000000000","message":"Apparently the problem is the size of the data we are putting in the queue. If it\u0027s 65559 bytes or less we are fine.\n\nWhich means your order is definitely the right one.\n\nThank you for changing the order, because this has saved us a bug in the project if the number of drivers increased, even without the driver_options.  :-)","commit_id":"27aa25ebafa20801e1c8ed3d451925a39a7e9ab8"},{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"34b7350ffc95348d3cae3d255ec308796fbdaef5","unresolved":false,"context_lines":[{"line_number":427,"context_line":"        p \u003d multiprocessing.Process(target\u003dlist_drivers, args\u003d(queue,))"},{"line_number":428,"context_line":"        p.start()"},{"line_number":429,"context_line":"        result \u003d queue.get()"},{"line_number":430,"context_line":"        p.join()"},{"line_number":431,"context_line":"        return result"},{"line_number":432,"context_line":""},{"line_number":433,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"9fdfeff1_4f36c904","line":430,"in_reply_to":"9fdfeff1_af0975dd","updated":"2019-02-26 16:36:39.000000000","message":"when I did this with p.join() first, it NEVER returned as there is nothing consuming the queue.  join simply blocks until the queue is consumed.  It deadlocked 100% of the time.","commit_id":"27aa25ebafa20801e1c8ed3d451925a39a7e9ab8"}]}
