)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"13110f93cd6e1f3294ee3bae46d47d689bd16a2f","unresolved":false,"context_lines":[{"line_number":5,"context_line":"CommitDate: 2017-08-16 23:20:44 +0200"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Tweak connection_info translation for the new Cinder attach/detach API"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Partially Implements: blueprint cinder-new-attach-apis"},{"line_number":10,"context_line":""},{"line_number":11,"context_line":"Change-Id: I8156e4da3c218b5f0cb122f161ff7f640fce00ea"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":6,"id":"7f287b81_5a66bf2b","line":8,"updated":"2017-08-24 16:04:39.000000000","message":"Please explain what this is doing and why we need to do it. I don\u0027t want to have to figure it out by reading the change and trying to grok it, and asking questions.","commit_id":"5a1a68c6d179e5224bbbe415c129d2f3c1b030ba"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"4e229422904f46fe8e81c9078f78236e4f0f46db","unresolved":false,"context_lines":[{"line_number":10,"context_line":"\u0027connection_info\u0027 data under a \u0027data\u0027 key in \u0027connection_info\u0027 and move"},{"line_number":11,"context_line":"\u0027status\u0027, \u0027instance\u0027, \u0027attach_mode\u0027, \u0027attached_at\u0027 and \u0027detached_at\u0027 into"},{"line_number":12,"context_line":"\u0027connection_info\u0027."},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"Partially Implements: blueprint cinder-new-attach-apis"},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"Change-Id: I8156e4da3c218b5f0cb122f161ff7f640fce00ea"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":13,"id":"5f2577a7_e75f103f","line":13,"updated":"2017-09-12 22:56:51.000000000","message":"Could you state the reason of the change? Something like:\nCinder changed the connection_info data structure nova uses. To avoid impacting every places where nova uses this data structure this patch introduces a translation function that adapts the new data structure to nova needs.","commit_id":"fb4134f92c9ffe5c573e31957a59cc67a7f8c05a"}],"nova/tests/unit/volume/test_cinder.py":[{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"4e229422904f46fe8e81c9078f78236e4f0f46db","unresolved":false,"context_lines":[{"line_number":343,"context_line":"             \u0027id\u0027: uuids.attachment_id,"},{"line_number":344,"context_line":"             \u0027volume_id\u0027: fake_attachment.volume_id,"},{"line_number":345,"context_line":"             \u0027connection_info\u0027:"},{"line_number":346,"context_line":"             {\u0027attach_mode\u0027: \u0027rw\u0027,"},{"line_number":347,"context_line":"              \u0027attached_at\u0027: fake_attachment.attached_at,"},{"line_number":348,"context_line":"              \u0027connector\u0027: {\u0027host\u0027: \u0027fake-host\u0027},"},{"line_number":349,"context_line":"              \u0027data\u0027: {\u0027foo\u0027: \u0027bar\u0027, \u0027target_lun\u0027: \u00271\u0027},"}],"source_content_type":"text/x-python","patch_set":13,"id":"5f2577a7_62766ea7","line":346,"updated":"2017-09-12 22:56:51.000000000","message":"Indentation seems to be off here.","commit_id":"fb4134f92c9ffe5c573e31957a59cc67a7f8c05a"},{"author":{"_account_id":9562,"name":"Ildiko Vancsa","email":"ildiko.vancsa@gmail.com","username":"ildikov"},"change_message_id":"1571961acbdbc1842a45747ab05ded80949fa849","unresolved":false,"context_lines":[{"line_number":343,"context_line":"             \u0027id\u0027: uuids.attachment_id,"},{"line_number":344,"context_line":"             \u0027volume_id\u0027: fake_attachment.volume_id,"},{"line_number":345,"context_line":"             \u0027connection_info\u0027:"},{"line_number":346,"context_line":"             {\u0027attach_mode\u0027: \u0027rw\u0027,"},{"line_number":347,"context_line":"              \u0027attached_at\u0027: fake_attachment.attached_at,"},{"line_number":348,"context_line":"              \u0027connector\u0027: {\u0027host\u0027: \u0027fake-host\u0027},"},{"line_number":349,"context_line":"              \u0027data\u0027: {\u0027foo\u0027: \u0027bar\u0027, \u0027target_lun\u0027: \u00271\u0027},"}],"source_content_type":"text/x-python","patch_set":13,"id":"5f2577a7_ffcb1447","line":346,"in_reply_to":"5f2577a7_62766ea7","updated":"2017-09-13 03:07:03.000000000","message":"Done","commit_id":"fb4134f92c9ffe5c573e31957a59cc67a7f8c05a"}],"nova/volume/cinder.py":[{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"4e229422904f46fe8e81c9078f78236e4f0f46db","unresolved":false,"context_lines":[{"line_number":219,"context_line":"    connection_info_data \u003d attachment_ref.pop(\u0027connection_info\u0027, None)"},{"line_number":220,"context_line":"    if connection_info_data:"},{"line_number":221,"context_line":"        connection_info_data.pop(\u0027attachment_id\u0027, None)"},{"line_number":222,"context_line":"        translated_con_info[\u0027driver_volume_type\u0027] \u003d \\"},{"line_number":223,"context_line":"            connection_info_data.pop(\u0027driver_volume_type\u0027, None)"},{"line_number":224,"context_line":"        translated_con_info[\u0027data\u0027] \u003d connection_info_data"},{"line_number":225,"context_line":"        translated_con_info[\u0027status\u0027] \u003d attachment_ref.pop(\u0027status\u0027, None)"},{"line_number":226,"context_line":"        translated_con_info[\u0027instance\u0027] \u003d attachment_ref.pop(\u0027instance\u0027, None)"}],"source_content_type":"text/x-python","patch_set":13,"id":"5f2577a7_670560c2","line":223,"range":{"start_line":222,"start_character":0,"end_line":223,"end_character":64},"updated":"2017-09-12 22:56:51.000000000","message":"This implements a different behavior than the original code. In the original code the \u0027driver_volume_type\u0027 key is only present in the return value if it was present in the incoming data. (see L220 in the base version) In the other hand in the new code \u0027driver_volume_type\u0027 is always present in the return value but the value at this key can be None.\n\nIs this intentional?","commit_id":"fb4134f92c9ffe5c573e31957a59cc67a7f8c05a"},{"author":{"_account_id":9562,"name":"Ildiko Vancsa","email":"ildiko.vancsa@gmail.com","username":"ildikov"},"change_message_id":"1571961acbdbc1842a45747ab05ded80949fa849","unresolved":false,"context_lines":[{"line_number":219,"context_line":"    connection_info_data \u003d attachment_ref.pop(\u0027connection_info\u0027, None)"},{"line_number":220,"context_line":"    if connection_info_data:"},{"line_number":221,"context_line":"        connection_info_data.pop(\u0027attachment_id\u0027, None)"},{"line_number":222,"context_line":"        translated_con_info[\u0027driver_volume_type\u0027] \u003d \\"},{"line_number":223,"context_line":"            connection_info_data.pop(\u0027driver_volume_type\u0027, None)"},{"line_number":224,"context_line":"        translated_con_info[\u0027data\u0027] \u003d connection_info_data"},{"line_number":225,"context_line":"        translated_con_info[\u0027status\u0027] \u003d attachment_ref.pop(\u0027status\u0027, None)"},{"line_number":226,"context_line":"        translated_con_info[\u0027instance\u0027] \u003d attachment_ref.pop(\u0027instance\u0027, None)"}],"source_content_type":"text/x-python","patch_set":13,"id":"5f2577a7_df761807","line":223,"range":{"start_line":222,"start_character":0,"end_line":223,"end_character":64},"in_reply_to":"5f2577a7_670560c2","updated":"2017-09-13 03:07:03.000000000","message":"Yes, this was intentional to match how the current Nova code is using the information in this dict.","commit_id":"fb4134f92c9ffe5c573e31957a59cc67a7f8c05a"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"4e229422904f46fe8e81c9078f78236e4f0f46db","unresolved":false,"context_lines":[{"line_number":231,"context_line":"        translated_con_info[\u0027detached_at\u0027] \u003d attachment_ref.pop(\u0027detached_at\u0027,"},{"line_number":232,"context_line":"                                                                None)"},{"line_number":233,"context_line":""},{"line_number":234,"context_line":"        # Now the catch all..."},{"line_number":235,"context_line":"        for k, v in attachment_ref.items():"},{"line_number":236,"context_line":"            if k !\u003d \"id\":"},{"line_number":237,"context_line":"                translated_con_info[k] \u003d v"},{"line_number":238,"context_line":""},{"line_number":239,"context_line":"    attachment_ref[\u0027connection_info\u0027] \u003d {}"},{"line_number":240,"context_line":"    attachment_ref[\u0027connection_info\u0027] \u003d translated_con_info"}],"source_content_type":"text/x-python","patch_set":13,"id":"5f2577a7_47a4a4b9","line":237,"range":{"start_line":234,"start_character":1,"end_line":237,"end_character":42},"updated":"2017-09-12 22:56:51.000000000","message":"in L225-L231 the code copies some of the keys explicitly then this code copies the rest implicitly. Why we are separating these two cases? Is the above explicit keys are mandatory while the rest is optional?","commit_id":"fb4134f92c9ffe5c573e31957a59cc67a7f8c05a"},{"author":{"_account_id":2243,"name":"John Griffith","email":"john.griffith8@gmail.com","username":"john-griffith"},"change_message_id":"bd63adf674fa09598c6b6807fe93e79cf9f31d5a","unresolved":false,"context_lines":[{"line_number":231,"context_line":"        translated_con_info[\u0027detached_at\u0027] \u003d attachment_ref.pop(\u0027detached_at\u0027,"},{"line_number":232,"context_line":"                                                                None)"},{"line_number":233,"context_line":""},{"line_number":234,"context_line":"        # Now the catch all..."},{"line_number":235,"context_line":"        for k, v in attachment_ref.items():"},{"line_number":236,"context_line":"            if k !\u003d \"id\":"},{"line_number":237,"context_line":"                translated_con_info[k] \u003d v"},{"line_number":238,"context_line":""},{"line_number":239,"context_line":"    attachment_ref[\u0027connection_info\u0027] \u003d {}"},{"line_number":240,"context_line":"    attachment_ref[\u0027connection_info\u0027] \u003d translated_con_info"}],"source_content_type":"text/x-python","patch_set":13,"id":"5f2577a7_86add789","line":237,"range":{"start_line":234,"start_character":1,"end_line":237,"end_character":42},"in_reply_to":"5f2577a7_47a4a4b9","updated":"2017-09-13 17:56:44.000000000","message":"That catch all is intended specifically for the \"dynamic\" keys that are dependent on driver_type and driver itself.  These will vary, and for the most part ar keys needed by Brick to make the connection.\n\nThe explicit keys above are the keys that are expected/required regardless of driver or driver_type.  So yes, kind of what you mention WRT mandatory for optional, but actually more \"mandatory\" vs \"varying\"","commit_id":"fb4134f92c9ffe5c573e31957a59cc67a7f8c05a"},{"author":{"_account_id":9562,"name":"Ildiko Vancsa","email":"ildiko.vancsa@gmail.com","username":"ildikov"},"change_message_id":"1571961acbdbc1842a45747ab05ded80949fa849","unresolved":false,"context_lines":[{"line_number":231,"context_line":"        translated_con_info[\u0027detached_at\u0027] \u003d attachment_ref.pop(\u0027detached_at\u0027,"},{"line_number":232,"context_line":"                                                                None)"},{"line_number":233,"context_line":""},{"line_number":234,"context_line":"        # Now the catch all..."},{"line_number":235,"context_line":"        for k, v in attachment_ref.items():"},{"line_number":236,"context_line":"            if k !\u003d \"id\":"},{"line_number":237,"context_line":"                translated_con_info[k] \u003d v"},{"line_number":238,"context_line":""},{"line_number":239,"context_line":"    attachment_ref[\u0027connection_info\u0027] \u003d {}"},{"line_number":240,"context_line":"    attachment_ref[\u0027connection_info\u0027] \u003d translated_con_info"}],"source_content_type":"text/x-python","patch_set":13,"id":"5f2577a7_5fd108cd","line":237,"range":{"start_line":234,"start_character":1,"end_line":237,"end_character":42},"in_reply_to":"5f2577a7_47a4a4b9","updated":"2017-09-13 03:07:03.000000000","message":"The above set of keys is supposed to be present in connection_info. As the connection_info dict is a free form data set we need to ensure we capture all the keys that are in it.","commit_id":"fb4134f92c9ffe5c573e31957a59cc67a7f8c05a"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"4e229422904f46fe8e81c9078f78236e4f0f46db","unresolved":false,"context_lines":[{"line_number":236,"context_line":"            if k !\u003d \"id\":"},{"line_number":237,"context_line":"                translated_con_info[k] \u003d v"},{"line_number":238,"context_line":""},{"line_number":239,"context_line":"    attachment_ref[\u0027connection_info\u0027] \u003d {}"},{"line_number":240,"context_line":"    attachment_ref[\u0027connection_info\u0027] \u003d translated_con_info"},{"line_number":241,"context_line":""},{"line_number":242,"context_line":"    return attachment_ref"},{"line_number":243,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"5f2577a7_c73bf4c5","line":240,"range":{"start_line":239,"start_character":0,"end_line":240,"end_character":59},"updated":"2017-09-12 22:56:51.000000000","message":"The effect of L239 is always lost, overwritten by the L240. Therefore L239 is just noise here. Could you remove it please?","commit_id":"fb4134f92c9ffe5c573e31957a59cc67a7f8c05a"},{"author":{"_account_id":9562,"name":"Ildiko Vancsa","email":"ildiko.vancsa@gmail.com","username":"ildikov"},"change_message_id":"1571961acbdbc1842a45747ab05ded80949fa849","unresolved":false,"context_lines":[{"line_number":236,"context_line":"            if k !\u003d \"id\":"},{"line_number":237,"context_line":"                translated_con_info[k] \u003d v"},{"line_number":238,"context_line":""},{"line_number":239,"context_line":"    attachment_ref[\u0027connection_info\u0027] \u003d {}"},{"line_number":240,"context_line":"    attachment_ref[\u0027connection_info\u0027] \u003d translated_con_info"},{"line_number":241,"context_line":""},{"line_number":242,"context_line":"    return attachment_ref"},{"line_number":243,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"5f2577a7_3f03dc75","line":240,"range":{"start_line":239,"start_character":0,"end_line":240,"end_character":59},"in_reply_to":"5f2577a7_c73bf4c5","updated":"2017-09-13 03:07:03.000000000","message":"Done","commit_id":"fb4134f92c9ffe5c573e31957a59cc67a7f8c05a"},{"author":{"_account_id":2243,"name":"John Griffith","email":"john.griffith8@gmail.com","username":"john-griffith"},"change_message_id":"bd63adf674fa09598c6b6807fe93e79cf9f31d5a","unresolved":false,"context_lines":[{"line_number":236,"context_line":"            if k !\u003d \"id\":"},{"line_number":237,"context_line":"                translated_con_info[k] \u003d v"},{"line_number":238,"context_line":""},{"line_number":239,"context_line":"    attachment_ref[\u0027connection_info\u0027] \u003d {}"},{"line_number":240,"context_line":"    attachment_ref[\u0027connection_info\u0027] \u003d translated_con_info"},{"line_number":241,"context_line":""},{"line_number":242,"context_line":"    return attachment_ref"},{"line_number":243,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"5f2577a7_262f43f7","line":240,"range":{"start_line":239,"start_character":0,"end_line":240,"end_character":59},"in_reply_to":"5f2577a7_c73bf4c5","updated":"2017-09-13 17:56:44.000000000","message":"I think the change to this is fine, I did this explicitly to make sure I zerod out anything under this key and copied only the actual translated info.  Anyway, seems like removing the initialization in L239 works just fine so that\u0027s cool.","commit_id":"fb4134f92c9ffe5c573e31957a59cc67a7f8c05a"},{"author":{"_account_id":2750,"name":"Sean Dague","email":"sean@dague.net","username":"sdague"},"change_message_id":"8c3ac3a2b98a0ac1f97f2d72d16fc24ae000b728","unresolved":false,"context_lines":[{"line_number":222,"context_line":"        translated_con_info[\u0027driver_volume_type\u0027] \u003d \\"},{"line_number":223,"context_line":"            connection_info_data.pop(\u0027driver_volume_type\u0027, None)"},{"line_number":224,"context_line":"        translated_con_info[\u0027data\u0027] \u003d connection_info_data"},{"line_number":225,"context_line":"        translated_con_info[\u0027status\u0027] \u003d attachment_ref.pop(\u0027status\u0027, None)"},{"line_number":226,"context_line":"        translated_con_info[\u0027instance\u0027] \u003d attachment_ref.pop(\u0027instance\u0027, None)"},{"line_number":227,"context_line":"        translated_con_info[\u0027attach_mode\u0027] \u003d attachment_ref.pop(\u0027attach_mode\u0027,"},{"line_number":228,"context_line":"                                                                None)"}],"source_content_type":"text/x-python","patch_set":14,"id":"5f2577a7_cc3e478a","line":225,"updated":"2017-09-14 15:32:48.000000000","message":"It my be better to explain in the comment what the old struct needs, and what the new one doesn\u0027t have, just to make it easier to understand longer.","commit_id":"951b88eec172f305e38dfdb67f7526a70169c99c"}]}
