)]}'
{"cinder/api/contrib/volume_actions.py":[{"author":{"_account_id":7173,"name":"Scott DAngelo","email":"scott.dangelo@gmail.com","username":"scottda"},"change_message_id":"4d4be232982127b57c6a65d1298e06e7b337f46d","unresolved":false,"context_lines":[{"line_number":229,"context_line":"        # info.pop(\u0027attachment\u0027, None), but in the future it may be worthwhile"},{"line_number":230,"context_line":"        # for nova to have an attachment_id associated with the volume so it"},{"line_number":231,"context_line":"        # can keep things straight (ie multi-attach treating each as a separate"},{"line_number":232,"context_line":"        # attach entry)"},{"line_number":233,"context_line":"        return {\u0027connection_info\u0027: info}"},{"line_number":234,"context_line":""},{"line_number":235,"context_line":"    @wsgi.action(\u0027os-terminate_connection\u0027)"}],"source_content_type":"text/x-python","patch_set":2,"id":"7af24918_b4743868","line":232,"updated":"2016-03-02 22:16:35.000000000","message":"We can use a new microversion for this. That way, nova will have to ask to get the attachment_id returned and will therefore be prepared to deal with it.","commit_id":"4ac6c58b8a91f09a9224e4554ed9942ff408a394"},{"author":{"_account_id":9562,"name":"Ildiko Vancsa","email":"ildiko.vancsa@gmail.com","username":"ildikov"},"change_message_id":"5b59d0d05d28fe079517c229f77c3b630fe480de","unresolved":false,"context_lines":[{"line_number":229,"context_line":"        # info.pop(\u0027attachment\u0027, None), but in the future it may be worthwhile"},{"line_number":230,"context_line":"        # for nova to have an attachment_id associated with the volume so it"},{"line_number":231,"context_line":"        # can keep things straight (ie multi-attach treating each as a separate"},{"line_number":232,"context_line":"        # attach entry)"},{"line_number":233,"context_line":"        return {\u0027connection_info\u0027: info}"},{"line_number":234,"context_line":""},{"line_number":235,"context_line":"    @wsgi.action(\u0027os-terminate_connection\u0027)"}],"source_content_type":"text/x-python","patch_set":2,"id":"da0c15f0_f8458817","line":232,"in_reply_to":"7af24918_368113c4","updated":"2016-03-24 20:20:58.000000000","message":"In Mitaka I added the attachment_id to the detach call. Nova retrieves the attachment_id from the volume info. I need to take a look at where initialize_connection is called and what options we have there. Currently Nova does not store the attachment_id as we always said that Cinder is the ultimate source of truth, I wonder whether we should change this principle in the future or not.","commit_id":"4ac6c58b8a91f09a9224e4554ed9942ff408a394"},{"author":{"_account_id":2243,"name":"John Griffith","email":"john.griffith8@gmail.com","username":"john-griffith"},"change_message_id":"0943ff839869d88ae438d37d96ffb923b749214a","unresolved":false,"context_lines":[{"line_number":229,"context_line":"        # info.pop(\u0027attachment\u0027, None), but in the future it may be worthwhile"},{"line_number":230,"context_line":"        # for nova to have an attachment_id associated with the volume so it"},{"line_number":231,"context_line":"        # can keep things straight (ie multi-attach treating each as a separate"},{"line_number":232,"context_line":"        # attach entry)"},{"line_number":233,"context_line":"        return {\u0027connection_info\u0027: info}"},{"line_number":234,"context_line":""},{"line_number":235,"context_line":"    @wsgi.action(\u0027os-terminate_connection\u0027)"}],"source_content_type":"text/x-python","patch_set":2,"id":"7af24918_368113c4","line":232,"in_reply_to":"7af24918_b4743868","updated":"2016-03-03 16:49:17.000000000","message":"Sure, whatever folks want to do here is good with me.  I sort of thought of it as the other way around though.  I\u0027d just return it embedded in the dict and if Nova knows how to use it; great.  Micro versions IMO would be a replacement for Nova to say \"if info.get(attachment_id, None):\"  blah blah blah\n\nBut yeah, I\u0027ll defer the micro versioning stuff to you and others that are MUCH more knowledgeable about it than myself.","commit_id":"4ac6c58b8a91f09a9224e4554ed9942ff408a394"}],"cinder/db/sqlalchemy/migrate_repo/versions/065_add_connector_fields_to_volume_attachment.py":[{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"382cbc065946347cddbb67d9434df07d6c6219bc","unresolved":false,"context_lines":[{"line_number":19,"context_line":"    meta \u003d MetaData()"},{"line_number":20,"context_line":"    meta.bind \u003d migrate_engine"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"    services \u003d Table(\u0027volume_attachment\u0027, meta, autoload\u003dTrue)"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"    initiator \u003d Column(\u0027initiator\u0027, String(length\u003d255))"},{"line_number":25,"context_line":"    ip \u003d Column(\u0027ip\u0027, String(length\u003d36))"}],"source_content_type":"text/x-python","patch_set":1,"id":"7af24918_b16a8ab1","line":22,"range":{"start_line":22,"start_character":4,"end_line":22,"end_character":12},"updated":"2016-03-02 21:53:54.000000000","message":"copy\u0026paste: services \u003d\u003evolume_attachements","commit_id":"8ca7ef02dba7412337c0a198a1306a7bdfc27a3b"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"e55b906400e85581a0306c77c3d8a38d25086573","unresolved":false,"context_lines":[{"line_number":21,"context_line":""},{"line_number":22,"context_line":"    volume_attachment \u003d Table(\u0027volume_attachment\u0027, meta, autoload\u003dTrue)"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"    initiator \u003d Column(\u0027initiator\u0027, String(length\u003d255))"},{"line_number":25,"context_line":"    ip \u003d Column(\u0027ip\u0027, String(length\u003d36))"},{"line_number":26,"context_line":"    multipath \u003d Column(\u0027multipath\u0027, Boolean, default\u003dFalse)"},{"line_number":27,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"da0c15f0_183b1ced","line":24,"updated":"2016-03-24 20:32:01.000000000","message":"We\u0027ll need to add these columns in a way that makes sense for all drivers, i.e. connectors that don\u0027t have the concept of an \"initiator\".","commit_id":"4ac6c58b8a91f09a9224e4554ed9942ff408a394"},{"author":{"_account_id":2243,"name":"John Griffith","email":"john.griffith8@gmail.com","username":"john-griffith"},"change_message_id":"57a40474256af3988ec3ef92f16ed6f0ced8a227","unresolved":false,"context_lines":[{"line_number":21,"context_line":""},{"line_number":22,"context_line":"    volume_attachment \u003d Table(\u0027volume_attachment\u0027, meta, autoload\u003dTrue)"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"    initiator \u003d Column(\u0027initiator\u0027, String(length\u003d255))"},{"line_number":25,"context_line":"    ip \u003d Column(\u0027ip\u0027, String(length\u003d36))"},{"line_number":26,"context_line":"    multipath \u003d Column(\u0027multipath\u0027, Boolean, default\u003dFalse)"},{"line_number":27,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"ba0121b8_cbe5bcdc","line":24,"in_reply_to":"da0c15f0_183b1ced","updated":"2016-03-31 04:35:03.000000000","message":"Names prove to cause problems again :)\n\nI only chose this because it mapped to what we pass in as a connector member object, my thought was that if it wasn\u0027t used then \"ok\", but we\u0027re already generalizing it a bit on the connector side of things.\n\nMaybe there\u0027s room for further improvements in the initiator modules?","commit_id":"4ac6c58b8a91f09a9224e4554ed9942ff408a394"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"e55b906400e85581a0306c77c3d8a38d25086573","unresolved":false,"context_lines":[{"line_number":22,"context_line":"    volume_attachment \u003d Table(\u0027volume_attachment\u0027, meta, autoload\u003dTrue)"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"    initiator \u003d Column(\u0027initiator\u0027, String(length\u003d255))"},{"line_number":25,"context_line":"    ip \u003d Column(\u0027ip\u0027, String(length\u003d36))"},{"line_number":26,"context_line":"    multipath \u003d Column(\u0027multipath\u0027, Boolean, default\u003dFalse)"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"    volume_attachment.create_column(initiator)"}],"source_content_type":"text/x-python","patch_set":2,"id":"da0c15f0_186ddc04","line":25,"updated":"2016-03-24 20:32:01.000000000","message":"IPv6 addresses can be longer than 36 chars, but I suspect this should be a generic \u0027host\u0027 which may be resolvable rather than specifically an IP address.","commit_id":"4ac6c58b8a91f09a9224e4554ed9942ff408a394"},{"author":{"_account_id":2243,"name":"John Griffith","email":"john.griffith8@gmail.com","username":"john-griffith"},"change_message_id":"57a40474256af3988ec3ef92f16ed6f0ced8a227","unresolved":false,"context_lines":[{"line_number":22,"context_line":"    volume_attachment \u003d Table(\u0027volume_attachment\u0027, meta, autoload\u003dTrue)"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"    initiator \u003d Column(\u0027initiator\u0027, String(length\u003d255))"},{"line_number":25,"context_line":"    ip \u003d Column(\u0027ip\u0027, String(length\u003d36))"},{"line_number":26,"context_line":"    multipath \u003d Column(\u0027multipath\u0027, Boolean, default\u003dFalse)"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"    volume_attachment.create_column(initiator)"}],"source_content_type":"text/x-python","patch_set":2,"id":"ba0121b8_cbfc9c74","line":25,"in_reply_to":"da0c15f0_186ddc04","updated":"2016-03-31 04:35:03.000000000","message":"I\u0027ll update it regardless.","commit_id":"4ac6c58b8a91f09a9224e4554ed9942ff408a394"}],"cinder/volume/manager.py":[{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"8f142095709c3d48ec942919bb279cceeee8b77c","unresolved":false,"context_lines":[{"line_number":1469,"context_line":"                  \u0027ip\u0027: connector[\u0027ip\u0027],"},{"line_number":1470,"context_line":"                  \u0027multipath\u0027: connector[\u0027multipath\u0027]}"},{"line_number":1471,"context_line":"        attachment \u003d self.db.volume_attach(context.elevated(),"},{"line_number":1472,"context_line":"                                           values)"},{"line_number":1473,"context_line":""},{"line_number":1474,"context_line":"        # NOTE(jdg): We now return the attachment ID so callers like Nova can"},{"line_number":1475,"context_line":"        # associate this data on their side and use it explicitly for detach,"}],"source_content_type":"text/x-python","patch_set":2,"id":"1a122d0e_7e799892","line":1472,"updated":"2016-04-28 13:41:29.000000000","message":"We can\u0027t create a new attachment every time initialize_connection is called.  Nova calls initialize_connection to fetch the connection_info for existing attachments.   I would propose adding the attachment_id as an optional parameter into initialize_connection.   If it\u0027s not passed in, then a new attachment is being requested and we create it.  If it is passed in, then just fetch the existing attachment entry and use that instead.  We can also update the connector for calls where the attachment_id is passed in, this will help live_migration keep the connector up to date, where the host is being switched.","commit_id":"4ac6c58b8a91f09a9224e4554ed9942ff408a394"}]}
