)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":9003,"name":"Tom Barron","email":"tpb@dyncloud.net","username":"tbarron"},"change_message_id":"b2bbfabc4ff59a5a4785a931ba3e51eed1f625eb","unresolved":false,"context_lines":[{"line_number":12,"context_line":"volume exported to the compute host, and may leave an entry in Nova\u0027s"},{"line_number":13,"context_line":"database that prevents the volume from being re-used. This"},{"line_number":14,"context_line":"blueprint+spec outlines the changes to the cinder side to allow a"},{"line_number":15,"context_line":"force_detach. In addtion, python-novaclient will need to have a"},{"line_number":16,"context_line":"\u0027--force\u0027 option added to \u0027nova volume-detach\u0027 so that Nova"},{"line_number":17,"context_line":"BlockDeviceMapping table is cleaned up after calling cinder"},{"line_number":18,"context_line":"force_detach()."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"7a016987_9ed7bf4a","line":15,"updated":"2015-05-19 21:28:08.000000000","message":"s/addtion/addition/","commit_id":"e6d982fbdd1cecd4994528437fb145c7a75bbaff"}],"specs/liberty/implement-force-detach-for-safe-cleanup.rst":[{"author":{"_account_id":170,"name":"Mike Perez","email":"thingee@gmail.com","username":"thingee"},"change_message_id":"2884370b6d777bf1df6f3100e7221d5f04555ad0","unresolved":false,"context_lines":[{"line_number":21,"context_line":"connected/exported to the compute host and nova instance. This spec proposes to"},{"line_number":22,"context_line":"plumb cinder APIs that allow an admin to set the state to \u0027available\u0027 and"},{"line_number":23,"context_line":"\u0027detached\u0027 in a safe way, meaning that the backend storage and cinder db are"},{"line_number":24,"context_line":"synchronized. A Nova blueprint+spec will be sumbitted to add a \u0027--force\u0027 option"},{"line_number":25,"context_line":"to \u0027nova volume-detatch\u0027 to allow the synchronization of state to take place"},{"line_number":26,"context_line":"between Nova, Cinder DB, and backend."},{"line_number":27,"context_line":"This API can be used anywhere that a safe force_detach is required, i.e. when"}],"source_content_type":"text/x-rst","patch_set":2,"id":"1aca2d91_c88c9f37","line":24,"updated":"2015-05-08 00:03:08.000000000","message":"/sumbitted/submitted/","commit_id":"8d7febbc8f70e935d80ac81f64b2685ca9ccb0ba"},{"author":{"_account_id":7173,"name":"Scott DAngelo","email":"scott.dangelo@gmail.com","username":"scottda"},"change_message_id":"819f52518907f63ee52d611d1dc355d04ce76472","unresolved":false,"context_lines":[{"line_number":21,"context_line":"connected/exported to the compute host and nova instance. This spec proposes to"},{"line_number":22,"context_line":"plumb cinder APIs that allow an admin to set the state to \u0027available\u0027 and"},{"line_number":23,"context_line":"\u0027detached\u0027 in a safe way, meaning that the backend storage and cinder db are"},{"line_number":24,"context_line":"synchronized. A Nova blueprint+spec will be sumbitted to add a \u0027--force\u0027 option"},{"line_number":25,"context_line":"to \u0027nova volume-detatch\u0027 to allow the synchronization of state to take place"},{"line_number":26,"context_line":"between Nova, Cinder DB, and backend."},{"line_number":27,"context_line":"This API can be used anywhere that a safe force_detach is required, i.e. when"}],"source_content_type":"text/x-rst","patch_set":2,"id":"7a016987_8410945a","line":24,"in_reply_to":"1aca2d91_c88c9f37","updated":"2015-05-19 17:15:45.000000000","message":"Done","commit_id":"8d7febbc8f70e935d80ac81f64b2685ca9ccb0ba"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"98edb859371f819a80c2bce0b4ac985f507c7c10","unresolved":false,"context_lines":[{"line_number":26,"context_line":"between Nova, Cinder DB, and backend."},{"line_number":27,"context_line":"This API can be used anywhere that a safe force_detach is required, i.e. when"},{"line_number":28,"context_line":"an attempt from Nova to initialize_connection times out, the connection can be"},{"line_number":29,"context_line":"safely cleaned up on both the storage backend and Cinder DB."},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"* The filename in the git repository should match the launchpad URL, for"},{"line_number":32,"context_line":"  example a URL of: https://blueprints.launchpad.net/cinder/+spec/awesome-thing"}],"source_content_type":"text/x-rst","patch_set":2,"id":"7a016987_5214fa42","line":29,"updated":"2015-05-15 05:22:26.000000000","message":"This is an issue we ran into as well and would like to resolve.  Good to see it here.","commit_id":"8d7febbc8f70e935d80ac81f64b2685ca9ccb0ba"},{"author":{"_account_id":170,"name":"Mike Perez","email":"thingee@gmail.com","username":"thingee"},"change_message_id":"2884370b6d777bf1df6f3100e7221d5f04555ad0","unresolved":false,"context_lines":[{"line_number":28,"context_line":"an attempt from Nova to initialize_connection times out, the connection can be"},{"line_number":29,"context_line":"safely cleaned up on both the storage backend and Cinder DB."},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"* The filename in the git repository should match the launchpad URL, for"},{"line_number":32,"context_line":"  example a URL of: https://blueprints.launchpad.net/cinder/+spec/awesome-thing"},{"line_number":33,"context_line":"  should be named awesome-thing.rst"},{"line_number":34,"context_line":""}],"source_content_type":"text/x-rst","patch_set":2,"id":"1aca2d91_687eab1a","line":31,"updated":"2015-05-08 00:03:08.000000000","message":"remove this.","commit_id":"8d7febbc8f70e935d80ac81f64b2685ca9ccb0ba"},{"author":{"_account_id":7173,"name":"Scott DAngelo","email":"scott.dangelo@gmail.com","username":"scottda"},"change_message_id":"819f52518907f63ee52d611d1dc355d04ce76472","unresolved":false,"context_lines":[{"line_number":28,"context_line":"an attempt from Nova to initialize_connection times out, the connection can be"},{"line_number":29,"context_line":"safely cleaned up on both the storage backend and Cinder DB."},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"* The filename in the git repository should match the launchpad URL, for"},{"line_number":32,"context_line":"  example a URL of: https://blueprints.launchpad.net/cinder/+spec/awesome-thing"},{"line_number":33,"context_line":"  should be named awesome-thing.rst"},{"line_number":34,"context_line":""}],"source_content_type":"text/x-rst","patch_set":2,"id":"7a016987_440f3c37","line":31,"in_reply_to":"1aca2d91_687eab1a","updated":"2015-05-19 17:15:45.000000000","message":"Done","commit_id":"8d7febbc8f70e935d80ac81f64b2685ca9ccb0ba"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"98edb859371f819a80c2bce0b4ac985f507c7c10","unresolved":false,"context_lines":[{"line_number":126,"context_line":"\u0027available\u0027, volume is attached, Nova DB does not show the block device."},{"line_number":127,"context_line":"Current Fix: None via reset-state. Manual intervention on the back end"},{"line_number":128,"context_line":"storge is required"},{"line_number":129,"context_line":"Proposed Fix: The code calling initialize_connection could call Cinder"},{"line_number":130,"context_line":"force_detach when the attempt times out. This would cleanup any connection and"},{"line_number":131,"context_line":"Cinder DB state to allow the volume to be attached at a later time."},{"line_number":132,"context_line":""}],"source_content_type":"text/x-rst","patch_set":2,"id":"7a016987_727376b2","line":129,"updated":"2015-05-15 05:22:26.000000000","message":"What does \"The code\" referring to here?  Will this be in Nova or in CinderClient?  This is a question we got in this patch which you are already reviewing:\n\nhttps://review.openstack.org/#/c/138664/6/nova/volume/cinder.py","commit_id":"8d7febbc8f70e935d80ac81f64b2685ca9ccb0ba"},{"author":{"_account_id":7173,"name":"Scott DAngelo","email":"scott.dangelo@gmail.com","username":"scottda"},"change_message_id":"819f52518907f63ee52d611d1dc355d04ce76472","unresolved":false,"context_lines":[{"line_number":126,"context_line":"\u0027available\u0027, volume is attached, Nova DB does not show the block device."},{"line_number":127,"context_line":"Current Fix: None via reset-state. Manual intervention on the back end"},{"line_number":128,"context_line":"storge is required"},{"line_number":129,"context_line":"Proposed Fix: The code calling initialize_connection could call Cinder"},{"line_number":130,"context_line":"force_detach when the attempt times out. This would cleanup any connection and"},{"line_number":131,"context_line":"Cinder DB state to allow the volume to be attached at a later time."},{"line_number":132,"context_line":""}],"source_content_type":"text/x-rst","patch_set":2,"id":"7a016987_e48e28cf","line":129,"in_reply_to":"7a016987_727376b2","updated":"2015-05-19 17:15:45.000000000","message":"The nova code should call force_detach() in the except block of the patch you are referring to:\n \t\nnova/volume/cinder.py L#380\n\nI\u0027ll add this info to the spec","commit_id":"8d7febbc8f70e935d80ac81f64b2685ca9ccb0ba"},{"author":{"_account_id":170,"name":"Mike Perez","email":"thingee@gmail.com","username":"thingee"},"change_message_id":"2884370b6d777bf1df6f3100e7221d5f04555ad0","unresolved":false,"context_lines":[{"line_number":144,"context_line":"    self.volume_api.detach(...)"},{"line_number":145,"context_line":"This will be modified to call into the VolumeManager with a new force_detach(...)"},{"line_number":146,"context_line":""},{"line_number":147,"context_line":"api/contrib/admin_actions.py: force_detatch(...)"},{"line_number":148,"context_line":"    try:"},{"line_number":149,"context_line":"        volume_rpcapi.force_detach(...)"},{"line_number":150,"context_line":"    except: #catch and add debug message"}],"source_content_type":"text/x-rst","patch_set":2,"id":"1aca2d91_48f52f81","line":147,"updated":"2015-05-08 00:03:08.000000000","message":"Is there a reason we want to limit the admin to doing the force-detach? If this is safe, is it fine for end users?","commit_id":"8d7febbc8f70e935d80ac81f64b2685ca9ccb0ba"},{"author":{"_account_id":170,"name":"Mike Perez","email":"thingee@gmail.com","username":"thingee"},"change_message_id":"dfcb497d566e32ef43ccb638b87bc4dfc56a415a","unresolved":false,"context_lines":[{"line_number":144,"context_line":"    self.volume_api.detach(...)"},{"line_number":145,"context_line":"This will be modified to call into the VolumeManager with a new force_detach(...)"},{"line_number":146,"context_line":""},{"line_number":147,"context_line":"api/contrib/admin_actions.py: force_detatch(...)"},{"line_number":148,"context_line":"    try:"},{"line_number":149,"context_line":"        volume_rpcapi.force_detach(...)"},{"line_number":150,"context_line":"    except: #catch and add debug message"}],"source_content_type":"text/x-rst","patch_set":2,"id":"7ad8896b_17e21ea0","line":147,"in_reply_to":"1aca2d91_32b47e80","updated":"2015-05-11 17:35:00.000000000","message":"Perhaps not putting it in admin action, and leave it as a volume action? By default the policy can be admin? Does anyone else have opinions on this?","commit_id":"8d7febbc8f70e935d80ac81f64b2685ca9ccb0ba"},{"author":{"_account_id":7173,"name":"Scott DAngelo","email":"scott.dangelo@gmail.com","username":"scottda"},"change_message_id":"2f61b09516e462d87979e29183fc54dc9f445b71","unresolved":false,"context_lines":[{"line_number":144,"context_line":"    self.volume_api.detach(...)"},{"line_number":145,"context_line":"This will be modified to call into the VolumeManager with a new force_detach(...)"},{"line_number":146,"context_line":""},{"line_number":147,"context_line":"api/contrib/admin_actions.py: force_detatch(...)"},{"line_number":148,"context_line":"    try:"},{"line_number":149,"context_line":"        volume_rpcapi.force_detach(...)"},{"line_number":150,"context_line":"    except: #catch and add debug message"}],"source_content_type":"text/x-rst","patch_set":2,"id":"1aca2d91_32b47e80","line":147,"in_reply_to":"1aca2d91_48f52f81","updated":"2015-05-08 20:46:39.000000000","message":"Actually, I hadn\u0027t thought about it that way, but is will be safe for end users. So there\u0027s no reason not to expose it. Unless an admin wants to investigate each instance of problems with detaching/attaching....","commit_id":"8d7febbc8f70e935d80ac81f64b2685ca9ccb0ba"},{"author":{"_account_id":7173,"name":"Scott DAngelo","email":"scott.dangelo@gmail.com","username":"scottda"},"change_message_id":"819f52518907f63ee52d611d1dc355d04ce76472","unresolved":false,"context_lines":[{"line_number":144,"context_line":"    self.volume_api.detach(...)"},{"line_number":145,"context_line":"This will be modified to call into the VolumeManager with a new force_detach(...)"},{"line_number":146,"context_line":""},{"line_number":147,"context_line":"api/contrib/admin_actions.py: force_detatch(...)"},{"line_number":148,"context_line":"    try:"},{"line_number":149,"context_line":"        volume_rpcapi.force_detach(...)"},{"line_number":150,"context_line":"    except: #catch and add debug message"}],"source_content_type":"text/x-rst","patch_set":2,"id":"7a016987_87f1b603","line":147,"in_reply_to":"7ad8896b_17e21ea0","updated":"2015-05-19 17:15:45.000000000","message":"Done","commit_id":"8d7febbc8f70e935d80ac81f64b2685ca9ccb0ba"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"98edb859371f819a80c2bce0b4ac985f507c7c10","unresolved":false,"context_lines":[{"line_number":144,"context_line":"    self.volume_api.detach(...)"},{"line_number":145,"context_line":"This will be modified to call into the VolumeManager with a new force_detach(...)"},{"line_number":146,"context_line":""},{"line_number":147,"context_line":"api/contrib/admin_actions.py: force_detatch(...)"},{"line_number":148,"context_line":"    try:"},{"line_number":149,"context_line":"        volume_rpcapi.force_detach(...)"},{"line_number":150,"context_line":"    except: #catch and add debug message"}],"source_content_type":"text/x-rst","patch_set":2,"id":"7a016987_f2b6463c","line":147,"in_reply_to":"7ad8896b_17e21ea0","updated":"2015-05-15 05:22:26.000000000","message":"Sounds reasonable.","commit_id":"8d7febbc8f70e935d80ac81f64b2685ca9ccb0ba"},{"author":{"_account_id":1207,"name":"Duncan Thomas","email":"duncan.thomas@gmail.com","username":"duncan-thomas"},"change_message_id":"adc30b34db1a0f17b9f8b19be365a35311ca11b7","unresolved":false,"context_lines":[{"line_number":188,"context_line":"Notifications impact"},{"line_number":189,"context_line":"--------------------"},{"line_number":190,"context_line":""},{"line_number":191,"context_line":"None"},{"line_number":192,"context_line":""},{"line_number":193,"context_line":"Other end user impact"},{"line_number":194,"context_line":"---------------------"}],"source_content_type":"text/x-rst","patch_set":2,"id":"7ad32947_6b7edae5","line":191,"updated":"2015-04-28 14:09:16.000000000","message":"Might  be worth ensuring that the detach notification included the force flag status, somebody might be interested in tracking this","commit_id":"8d7febbc8f70e935d80ac81f64b2685ca9ccb0ba"},{"author":{"_account_id":7173,"name":"Scott DAngelo","email":"scott.dangelo@gmail.com","username":"scottda"},"change_message_id":"819f52518907f63ee52d611d1dc355d04ce76472","unresolved":false,"context_lines":[{"line_number":188,"context_line":"Notifications impact"},{"line_number":189,"context_line":"--------------------"},{"line_number":190,"context_line":""},{"line_number":191,"context_line":"None"},{"line_number":192,"context_line":""},{"line_number":193,"context_line":"Other end user impact"},{"line_number":194,"context_line":"---------------------"}],"source_content_type":"text/x-rst","patch_set":2,"id":"7a016987_47c73e96","line":191,"in_reply_to":"7ad32947_6b7edae5","updated":"2015-05-19 17:15:45.000000000","message":"Done","commit_id":"8d7febbc8f70e935d80ac81f64b2685ca9ccb0ba"},{"author":{"_account_id":7173,"name":"Scott DAngelo","email":"scott.dangelo@gmail.com","username":"scottda"},"change_message_id":"2f61b09516e462d87979e29183fc54dc9f445b71","unresolved":false,"context_lines":[{"line_number":188,"context_line":"Notifications impact"},{"line_number":189,"context_line":"--------------------"},{"line_number":190,"context_line":""},{"line_number":191,"context_line":"None"},{"line_number":192,"context_line":""},{"line_number":193,"context_line":"Other end user impact"},{"line_number":194,"context_line":"---------------------"}],"source_content_type":"text/x-rst","patch_set":2,"id":"1aca2d91_b2a88e21","line":191,"in_reply_to":"7ad32947_6b7edae5","updated":"2015-05-08 20:46:39.000000000","message":"sure, I\u0027ll add.","commit_id":"8d7febbc8f70e935d80ac81f64b2685ca9ccb0ba"},{"author":{"_account_id":1207,"name":"Duncan Thomas","email":"duncan.thomas@gmail.com","username":"duncan-thomas"},"change_message_id":"adc30b34db1a0f17b9f8b19be365a35311ca11b7","unresolved":false,"context_lines":[{"line_number":208,"context_line":"Developer impact"},{"line_number":209,"context_line":"----------------"},{"line_number":210,"context_line":""},{"line_number":211,"context_line":"None"},{"line_number":212,"context_line":""},{"line_number":213,"context_line":"Implementation"},{"line_number":214,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"}],"source_content_type":"text/x-rst","patch_set":2,"id":"7ad32947_8b601637","line":211,"updated":"2015-04-28 14:09:16.000000000","message":"Current and future drivers will need the new function","commit_id":"8d7febbc8f70e935d80ac81f64b2685ca9ccb0ba"},{"author":{"_account_id":7173,"name":"Scott DAngelo","email":"scott.dangelo@gmail.com","username":"scottda"},"change_message_id":"819f52518907f63ee52d611d1dc355d04ce76472","unresolved":false,"context_lines":[{"line_number":208,"context_line":"Developer impact"},{"line_number":209,"context_line":"----------------"},{"line_number":210,"context_line":""},{"line_number":211,"context_line":"None"},{"line_number":212,"context_line":""},{"line_number":213,"context_line":"Implementation"},{"line_number":214,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"}],"source_content_type":"text/x-rst","patch_set":2,"id":"7a016987_a73ef289","line":211,"in_reply_to":"7ad32947_4be55b07","updated":"2015-05-19 17:15:45.000000000","message":"Done","commit_id":"8d7febbc8f70e935d80ac81f64b2685ca9ccb0ba"},{"author":{"_account_id":7173,"name":"Scott DAngelo","email":"scott.dangelo@gmail.com","username":"scottda"},"change_message_id":"c020ba450f73f835688868873d2196f7ee47f451","unresolved":false,"context_lines":[{"line_number":208,"context_line":"Developer impact"},{"line_number":209,"context_line":"----------------"},{"line_number":210,"context_line":""},{"line_number":211,"context_line":"None"},{"line_number":212,"context_line":""},{"line_number":213,"context_line":"Implementation"},{"line_number":214,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"}],"source_content_type":"text/x-rst","patch_set":2,"id":"7ad32947_4be55b07","line":211,"in_reply_to":"7ad32947_8b601637","updated":"2015-04-28 15:02:51.000000000","message":"Agreed. I\u0027ll change this. One possibility to consider: Should the BaseVD class implement this as a abc.abstractmethod and force drivers to implement something, or should it implement something like the existing force_detach, i.e. terminate_connection() and detach()? This would allow drivers to override the force_detach(), but also would keep existing functionality of force_detach() in place.","commit_id":"8d7febbc8f70e935d80ac81f64b2685ca9ccb0ba"},{"author":{"_account_id":9003,"name":"Tom Barron","email":"tpb@dyncloud.net","username":"tbarron"},"change_message_id":"b2bbfabc4ff59a5a4785a931ba3e51eed1f625eb","unresolved":false,"context_lines":[{"line_number":22,"context_line":"plumb cinder APIs that allow an admin to set the state to \u0027available\u0027 and"},{"line_number":23,"context_line":"\u0027detached\u0027 in a safe way, meaning that the backend storage and cinder db are"},{"line_number":24,"context_line":"synchronized. A Nova blueprint+spec will be submitted to add a \u0027--force\u0027 option"},{"line_number":25,"context_line":"to \u0027nova volume-detatch\u0027 to allow the synchronization of state to take place"},{"line_number":26,"context_line":"between Nova, Cinder DB, and backend."},{"line_number":27,"context_line":"This API can be used anywhere that a safe force_detach is required, i.e. when"},{"line_number":28,"context_line":"an attempt from Nova to initialize_connection times out, the connection can be"}],"source_content_type":"text/x-rst","patch_set":3,"id":"7a016987_6aeb2179","line":25,"updated":"2015-05-19 21:28:08.000000000","message":"s/detatch/detach/","commit_id":"e6d982fbdd1cecd4994528437fb145c7a75bbaff"},{"author":{"_account_id":7173,"name":"Scott DAngelo","email":"scott.dangelo@gmail.com","username":"scottda"},"change_message_id":"65fdb8658f0cc4bcd87fb32a3817193115132e3a","unresolved":false,"context_lines":[{"line_number":22,"context_line":"plumb cinder APIs that allow an admin to set the state to \u0027available\u0027 and"},{"line_number":23,"context_line":"\u0027detached\u0027 in a safe way, meaning that the backend storage and cinder db are"},{"line_number":24,"context_line":"synchronized. A Nova blueprint+spec will be submitted to add a \u0027--force\u0027 option"},{"line_number":25,"context_line":"to \u0027nova volume-detatch\u0027 to allow the synchronization of state to take place"},{"line_number":26,"context_line":"between Nova, Cinder DB, and backend."},{"line_number":27,"context_line":"This API can be used anywhere that a safe force_detach is required, i.e. when"},{"line_number":28,"context_line":"an attempt from Nova to initialize_connection times out, the connection can be"}],"source_content_type":"text/x-rst","patch_set":3,"id":"7a016987_ab10f859","line":25,"in_reply_to":"7a016987_6aeb2179","updated":"2015-05-20 00:03:12.000000000","message":"Done","commit_id":"e6d982fbdd1cecd4994528437fb145c7a75bbaff"},{"author":{"_account_id":9003,"name":"Tom Barron","email":"tpb@dyncloud.net","username":"tbarron"},"change_message_id":"b2bbfabc4ff59a5a4785a931ba3e51eed1f625eb","unresolved":false,"context_lines":[{"line_number":38,"context_line":"state desired."},{"line_number":39,"context_line":"In order to fix the problem in a safe and robust way, however, the admin must"},{"line_number":40,"context_line":"check the state of the volume with regards to the backend storage and Nova. Is"},{"line_number":41,"context_line":"the volume attached according to the metadata of the backend? Is there an Iscsi"},{"line_number":42,"context_line":"connection (or FC) to the compute host? Does Nova BlockDeviceMapping have an"},{"line_number":43,"context_line":"entry for the volume? Cleanup to the Cinder DB is possible, cleanup on the"},{"line_number":44,"context_line":"storage backend may be possible, and changing the Nova DB requires direct"}],"source_content_type":"text/x-rst","patch_set":3,"id":"7a016987_0a926df6","line":41,"updated":"2015-05-19 21:28:08.000000000","message":"iSCSI ?","commit_id":"e6d982fbdd1cecd4994528437fb145c7a75bbaff"},{"author":{"_account_id":7173,"name":"Scott DAngelo","email":"scott.dangelo@gmail.com","username":"scottda"},"change_message_id":"65fdb8658f0cc4bcd87fb32a3817193115132e3a","unresolved":false,"context_lines":[{"line_number":38,"context_line":"state desired."},{"line_number":39,"context_line":"In order to fix the problem in a safe and robust way, however, the admin must"},{"line_number":40,"context_line":"check the state of the volume with regards to the backend storage and Nova. Is"},{"line_number":41,"context_line":"the volume attached according to the metadata of the backend? Is there an Iscsi"},{"line_number":42,"context_line":"connection (or FC) to the compute host? Does Nova BlockDeviceMapping have an"},{"line_number":43,"context_line":"entry for the volume? Cleanup to the Cinder DB is possible, cleanup on the"},{"line_number":44,"context_line":"storage backend may be possible, and changing the Nova DB requires direct"}],"source_content_type":"text/x-rst","patch_set":3,"id":"7a016987_ae55a6fa","line":41,"in_reply_to":"7a016987_0a926df6","updated":"2015-05-20 00:03:12.000000000","message":"Done","commit_id":"e6d982fbdd1cecd4994528437fb145c7a75bbaff"},{"author":{"_account_id":9003,"name":"Tom Barron","email":"tpb@dyncloud.net","username":"tbarron"},"change_message_id":"b2bbfabc4ff59a5a4785a931ba3e51eed1f625eb","unresolved":false,"context_lines":[{"line_number":56,"context_line":"It could be argued that there should be an analogous \u0027force_attach\u0027 or perhaps"},{"line_number":57,"context_line":"more aptly named \u0027force_rollforward_attach\u0027, but it seems that simply forcing"},{"line_number":58,"context_line":"a detach of a volume will put the volume back in a state where the attach can"},{"line_number":59,"context_line":"be attempted again."},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"UseCase1: Cinder DB \u0027attaching\u0027, storage back end \u0027available\u0027, Nova DB"},{"line_number":62,"context_line":"does not show block device for this volume."}],"source_content_type":"text/x-rst","patch_set":3,"id":"7a016987_cabe9564","line":59,"updated":"2015-05-19 21:28:08.000000000","message":"+1","commit_id":"e6d982fbdd1cecd4994528437fb145c7a75bbaff"},{"author":{"_account_id":9003,"name":"Tom Barron","email":"tpb@dyncloud.net","username":"tbarron"},"change_message_id":"b2bbfabc4ff59a5a4785a931ba3e51eed1f625eb","unresolved":false,"context_lines":[{"line_number":58,"context_line":"a detach of a volume will put the volume back in a state where the attach can"},{"line_number":59,"context_line":"be attempted again."},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"UseCase1: Cinder DB \u0027attaching\u0027, storage back end \u0027available\u0027, Nova DB"},{"line_number":62,"context_line":"does not show block device for this volume."},{"line_number":63,"context_line":"An attempt was made to attach a volume using \u0027nova volume-attach \u003cinstance\u003e"},{"line_number":64,"context_line":"\u003cvolume_id\u003e\u0027"}],"source_content_type":"text/x-rst","patch_set":3,"id":"7a016987_0aa94d24","line":61,"updated":"2015-05-19 21:28:08.000000000","message":"I think our bp spec template now has a Use Cases section that these could go under.","commit_id":"e6d982fbdd1cecd4994528437fb145c7a75bbaff"},{"author":{"_account_id":7173,"name":"Scott DAngelo","email":"scott.dangelo@gmail.com","username":"scottda"},"change_message_id":"65fdb8658f0cc4bcd87fb32a3817193115132e3a","unresolved":false,"context_lines":[{"line_number":58,"context_line":"a detach of a volume will put the volume back in a state where the attach can"},{"line_number":59,"context_line":"be attempted again."},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"UseCase1: Cinder DB \u0027attaching\u0027, storage back end \u0027available\u0027, Nova DB"},{"line_number":62,"context_line":"does not show block device for this volume."},{"line_number":63,"context_line":"An attempt was made to attach a volume using \u0027nova volume-attach \u003cinstance\u003e"},{"line_number":64,"context_line":"\u003cvolume_id\u003e\u0027"}],"source_content_type":"text/x-rst","patch_set":3,"id":"7a016987_6e3d6ec3","line":61,"in_reply_to":"7a016987_0aa94d24","updated":"2015-05-20 00:03:12.000000000","message":"I didn\u0027t find it in the template.rst from a fresh clone of cinder-specs repo.","commit_id":"e6d982fbdd1cecd4994528437fb145c7a75bbaff"},{"author":{"_account_id":9003,"name":"Tom Barron","email":"tpb@dyncloud.net","username":"tbarron"},"change_message_id":"40920a7e3842b1327ee43fcda3e90ea17229bbc0","unresolved":false,"context_lines":[{"line_number":144,"context_line":"    volume_api.terminate_connection(...)"},{"line_number":145,"context_line":"    self.volume_api.detach(...)"},{"line_number":146,"context_line":"This will be modified to call into the VolumeManager with a new force_detach(...)"},{"line_number":147,"context_line":""},{"line_number":148,"context_line":"api/contrib/volume_actions.py: force_detatch(...)"},{"line_number":149,"context_line":"    try:"},{"line_number":150,"context_line":"        volume_rpcapi.force_detach(...)"}],"source_content_type":"text/x-rst","patch_set":4,"id":"7a016987_8e12ea07","line":147,"updated":"2015-05-20 00:19:46.000000000","message":"s/force_detatch/force_detach/","commit_id":"63061a8aa8959eab6f4bd26995ac488605539699"},{"author":{"_account_id":7173,"name":"Scott DAngelo","email":"scott.dangelo@gmail.com","username":"scottda"},"change_message_id":"acbd0de9f9f1ae74fe6a2f01638f7628ac2f62fa","unresolved":false,"context_lines":[{"line_number":144,"context_line":"    volume_api.terminate_connection(...)"},{"line_number":145,"context_line":"    self.volume_api.detach(...)"},{"line_number":146,"context_line":"This will be modified to call into the VolumeManager with a new force_detach(...)"},{"line_number":147,"context_line":""},{"line_number":148,"context_line":"api/contrib/volume_actions.py: force_detatch(...)"},{"line_number":149,"context_line":"    try:"},{"line_number":150,"context_line":"        volume_rpcapi.force_detach(...)"}],"source_content_type":"text/x-rst","patch_set":4,"id":"7a016987_416035cf","line":147,"in_reply_to":"7a016987_8e12ea07","updated":"2015-05-20 15:11:24.000000000","message":"Done","commit_id":"63061a8aa8959eab6f4bd26995ac488605539699"},{"author":{"_account_id":9003,"name":"Tom Barron","email":"tpb@dyncloud.net","username":"tbarron"},"change_message_id":"40920a7e3842b1327ee43fcda3e90ea17229bbc0","unresolved":false,"context_lines":[{"line_number":158,"context_line":""},{"line_number":159,"context_line":"Individual drivers will implement force_detach as needed by the driver, most"},{"line_number":160,"context_line":"likely calling terminate_connection(..) and possibly other cleanup. The"},{"line_number":161,"context_line":"force_detach(..) api should be idempotent: It should succeed if the volume is"},{"line_number":162,"context_line":"not detached, and succeed if the volume starts off connected and can be"},{"line_number":163,"context_line":"sucessfuly detached."},{"line_number":164,"context_line":""}],"source_content_type":"text/x-rst","patch_set":4,"id":"7a016987_8e29ca39","line":161,"updated":"2015-05-20 00:19:46.000000000","message":"not attached?  not connected?","commit_id":"63061a8aa8959eab6f4bd26995ac488605539699"},{"author":{"_account_id":7173,"name":"Scott DAngelo","email":"scott.dangelo@gmail.com","username":"scottda"},"change_message_id":"acbd0de9f9f1ae74fe6a2f01638f7628ac2f62fa","unresolved":false,"context_lines":[{"line_number":158,"context_line":""},{"line_number":159,"context_line":"Individual drivers will implement force_detach as needed by the driver, most"},{"line_number":160,"context_line":"likely calling terminate_connection(..) and possibly other cleanup. The"},{"line_number":161,"context_line":"force_detach(..) api should be idempotent: It should succeed if the volume is"},{"line_number":162,"context_line":"not detached, and succeed if the volume starts off connected and can be"},{"line_number":163,"context_line":"sucessfuly detached."},{"line_number":164,"context_line":""}],"source_content_type":"text/x-rst","patch_set":4,"id":"7a016987_a1a7e909","line":161,"in_reply_to":"7a016987_8e29ca39","updated":"2015-05-20 15:11:24.000000000","message":"yes, \u0027not attached\u0027 is what I meant. fixed.","commit_id":"63061a8aa8959eab6f4bd26995ac488605539699"},{"author":{"_account_id":9003,"name":"Tom Barron","email":"tpb@dyncloud.net","username":"tbarron"},"change_message_id":"40920a7e3842b1327ee43fcda3e90ea17229bbc0","unresolved":false,"context_lines":[{"line_number":238,"context_line":"Testing"},{"line_number":239,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":240,"context_line":""},{"line_number":241,"context_line":"Unit tests for test_force_detach* will be modified as appropriate."},{"line_number":242,"context_line":"Tempest tests will be added to verify a volume in a attaching or detaching"},{"line_number":243,"context_line":"state can be force_detached and then successfuly re-attached."},{"line_number":244,"context_line":""}],"source_content_type":"text/x-rst","patch_set":4,"id":"7a016987_4ee75211","line":241,"updated":"2015-05-20 00:19:46.000000000","message":"s/in a attaching/in attaching/","commit_id":"63061a8aa8959eab6f4bd26995ac488605539699"},{"author":{"_account_id":7173,"name":"Scott DAngelo","email":"scott.dangelo@gmail.com","username":"scottda"},"change_message_id":"acbd0de9f9f1ae74fe6a2f01638f7628ac2f62fa","unresolved":false,"context_lines":[{"line_number":238,"context_line":"Testing"},{"line_number":239,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":240,"context_line":""},{"line_number":241,"context_line":"Unit tests for test_force_detach* will be modified as appropriate."},{"line_number":242,"context_line":"Tempest tests will be added to verify a volume in a attaching or detaching"},{"line_number":243,"context_line":"state can be force_detached and then successfuly re-attached."},{"line_number":244,"context_line":""}],"source_content_type":"text/x-rst","patch_set":4,"id":"7a016987_81986dc1","line":241,"in_reply_to":"7a016987_4ee75211","updated":"2015-05-20 15:11:24.000000000","message":"changed to \"in an attaching or detaching state....\"","commit_id":"63061a8aa8959eab6f4bd26995ac488605539699"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"8b27fec03f93eb0a7906ed59322dae55d7534580","unresolved":false,"context_lines":[{"line_number":82,"context_line":"This will result in the backend force_detach() being called, which will return"},{"line_number":83,"context_line":"with success if the driver force_detach() can complete. If there is an issue"},{"line_number":84,"context_line":"during the driver\u0027s attempt to force_detach(), an exception will be returned"},{"line_number":85,"context_line":"and the problem will need to be investigated. The Nova command will fail in"},{"line_number":86,"context_line":"this case. If the driver can perform the force_detach() it will return"},{"line_number":87,"context_line":"success. The Cinder DB will set the volume to \u0027available\u0027 and Nova will remove"},{"line_number":88,"context_line":"the volume from the BlockDeviceMapping table."}],"source_content_type":"text/x-rst","patch_set":5,"id":"7a016987_c26aae19","line":85,"updated":"2015-06-01 15:30:35.000000000","message":"What state will the volume be left in, in this case?  ERROR?","commit_id":"9c63e268bde26bdf401dddb47b10eca937cf512a"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"e1c06e3ffb1824894024a2d5dfed9332784b92f4","unresolved":false,"context_lines":[{"line_number":82,"context_line":"This will result in the backend force_detach() being called, which will return"},{"line_number":83,"context_line":"with success if the driver force_detach() can complete. If there is an issue"},{"line_number":84,"context_line":"during the driver\u0027s attempt to force_detach(), an exception will be returned"},{"line_number":85,"context_line":"and the problem will need to be investigated. The Nova command will fail in"},{"line_number":86,"context_line":"this case. If the driver can perform the force_detach() it will return"},{"line_number":87,"context_line":"success. The Cinder DB will set the volume to \u0027available\u0027 and Nova will remove"},{"line_number":88,"context_line":"the volume from the BlockDeviceMapping table."}],"source_content_type":"text/x-rst","patch_set":5,"id":"5afe65bd_2ee4a639","line":85,"in_reply_to":"5afe65bd_3f2f37a3","updated":"2015-06-01 18:46:42.000000000","message":"I guess my 2 cents here is that if you have tried to force it and the force fails things are in quite a mess.  At that point make it clear that things are bad by setting it to error state and the manual clean-up has to begin.  It avoids the case of \u0027I have run my command and can\u0027t tell if anything happened.\u0027","commit_id":"9c63e268bde26bdf401dddb47b10eca937cf512a"},{"author":{"_account_id":7173,"name":"Scott DAngelo","email":"scott.dangelo@gmail.com","username":"scottda"},"change_message_id":"69368dab7ad42ece08cfac229191aca9a8325a5b","unresolved":false,"context_lines":[{"line_number":82,"context_line":"This will result in the backend force_detach() being called, which will return"},{"line_number":83,"context_line":"with success if the driver force_detach() can complete. If there is an issue"},{"line_number":84,"context_line":"during the driver\u0027s attempt to force_detach(), an exception will be returned"},{"line_number":85,"context_line":"and the problem will need to be investigated. The Nova command will fail in"},{"line_number":86,"context_line":"this case. If the driver can perform the force_detach() it will return"},{"line_number":87,"context_line":"success. The Cinder DB will set the volume to \u0027available\u0027 and Nova will remove"},{"line_number":88,"context_line":"the volume from the BlockDeviceMapping table."}],"source_content_type":"text/x-rst","patch_set":5,"id":"5afe65bd_3f2f37a3","line":85,"in_reply_to":"7a016987_c26aae19","updated":"2015-06-01 18:10:34.000000000","message":"Good question. I hadn\u0027t planned on changing the state of the volume, since one would think that using force-detach would mean that the volume is already in a bad state (attaching/detaching/error).\nIf Nova\u0027s attempt at \u0027volume-detach --force\u0027 fails during the call to Cinder force_detach, I\u0027d vote to leave the volume in the same state as at the start of the call.\nBut it could be set to error or error_detaching, if that\u0027s what the Cinder team thinks is best.","commit_id":"9c63e268bde26bdf401dddb47b10eca937cf512a"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"8b27fec03f93eb0a7906ed59322dae55d7534580","unresolved":false,"context_lines":[{"line_number":113,"context_line":"This will result in the backend force_detach() being called, which will return"},{"line_number":114,"context_line":"with success if the driver force_detach() can complete. If there is an issue"},{"line_number":115,"context_line":"during the driver\u0027s attempt to force_detach(), an exception will be returned"},{"line_number":116,"context_line":"and the problem will need to be investigated. The Nova command will fail in"},{"line_number":117,"context_line":"this case. If the driver can perform the force_detach() it will return"},{"line_number":118,"context_line":"success. The Cinder DB will set the volume to \u0027available\u0027 and Nova will remove"},{"line_number":119,"context_line":"the volume from the BlockDeviceMapping table."}],"source_content_type":"text/x-rst","patch_set":5,"id":"7a016987_c2098e32","line":116,"updated":"2015-06-01 15:30:35.000000000","message":"Same question here as above?  What state is the volume then left in?","commit_id":"9c63e268bde26bdf401dddb47b10eca937cf512a"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"cc8695635fea6482c981fd281e3446c30282a495","unresolved":false,"context_lines":[{"line_number":118,"context_line":"success. The Cinder DB will set the volume to \u0027available\u0027 and Nova will remove"},{"line_number":119,"context_line":"the volume from the BlockDeviceMapping table."},{"line_number":120,"context_line":""},{"line_number":121,"context_line":"UseCase9: During an attach, initialize_connection() times out. Cinder DB is"},{"line_number":122,"context_line":"\u0027available\u0027, volume is attached, Nova DB does not show the block device."},{"line_number":123,"context_line":"Current Fix: None via reset-state. Manual intervention on the back end"},{"line_number":124,"context_line":"storge is required"}],"source_content_type":"text/x-rst","patch_set":5,"id":"7a016987_d5797f83","line":121,"updated":"2015-05-20 17:34:36.000000000","message":"What happened to UseCase5-8? :)","commit_id":"9c63e268bde26bdf401dddb47b10eca937cf512a"},{"author":{"_account_id":7173,"name":"Scott DAngelo","email":"scott.dangelo@gmail.com","username":"scottda"},"change_message_id":"53006deb7055c9af46fdd239e7b80ce1424bcaa3","unresolved":false,"context_lines":[{"line_number":118,"context_line":"success. The Cinder DB will set the volume to \u0027available\u0027 and Nova will remove"},{"line_number":119,"context_line":"the volume from the BlockDeviceMapping table."},{"line_number":120,"context_line":""},{"line_number":121,"context_line":"UseCase9: During an attach, initialize_connection() times out. Cinder DB is"},{"line_number":122,"context_line":"\u0027available\u0027, volume is attached, Nova DB does not show the block device."},{"line_number":123,"context_line":"Current Fix: None via reset-state. Manual intervention on the back end"},{"line_number":124,"context_line":"storge is required"}],"source_content_type":"text/x-rst","patch_set":5,"id":"7a016987_d5adff84","line":121,"in_reply_to":"7a016987_d5797f83","updated":"2015-05-20 17:49:36.000000000","message":"That\u0027s a cut-n-paste error. I pulled these from an old blueprint for changing reset-state, and that included use cases for volumes stuck in creating/deleting as well. Those are no longer relevant here, so I should change UseCase9 to UseCase5. I\u0027ll do that iff another patch is needed for something else.","commit_id":"9c63e268bde26bdf401dddb47b10eca937cf512a"},{"author":{"_account_id":7173,"name":"Scott DAngelo","email":"scott.dangelo@gmail.com","username":"scottda"},"change_message_id":"0172e0c85add4b2b84d0d9499ad1fc7412bf7191","unresolved":false,"context_lines":[{"line_number":145,"context_line":"    self.volume_api.detach(...)"},{"line_number":146,"context_line":"This will be modified to call into the VolumeManager with a new force_detach(...)"},{"line_number":147,"context_line":""},{"line_number":148,"context_line":"api/contrib/volume_actions.py: force_detach(...)"},{"line_number":149,"context_line":"    try:"},{"line_number":150,"context_line":"        volume_rpcapi.force_detach(...)"},{"line_number":151,"context_line":"    except: #catch and add debug message"}],"source_content_type":"text/x-rst","patch_set":5,"id":"7a016987_f8a4594b","line":148,"updated":"2015-05-21 19:22:56.000000000","message":"Nova team wants \u0027nova --force volume-detach\u0027 to be admin only. One reason is because of boot from volume instances. Perhaps this API isn\u0027t safe to expose to all tenants.","commit_id":"9c63e268bde26bdf401dddb47b10eca937cf512a"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"e374b2e9aaae4b16d464c4ba142457ae1b3a8020","unresolved":false,"context_lines":[{"line_number":232,"context_line":"Dependencies"},{"line_number":233,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":234,"context_line":""},{"line_number":235,"context_line":"* Nova Blueprint and spec: pending"},{"line_number":236,"context_line":""},{"line_number":237,"context_line":""},{"line_number":238,"context_line":"Testing"}],"source_content_type":"text/x-rst","patch_set":5,"id":"7a016987_771caf13","line":235,"updated":"2015-05-26 07:00:37.000000000","message":"There is the bp at nova side :https://blueprints.launchpad.net/nova/+spec/add-force-detach-to-nova. You can add this as references.","commit_id":"9c63e268bde26bdf401dddb47b10eca937cf512a"},{"author":{"_account_id":9003,"name":"Tom Barron","email":"tpb@dyncloud.net","username":"tbarron"},"change_message_id":"00882f803d76dc0ca6193287d61d2ae6d4fbd612","unresolved":false,"context_lines":[{"line_number":75,"context_line":"Proposed Fix: An attempt to detach from Nova will fail, since Nova does not"},{"line_number":76,"context_line":"know about this volume."},{"line_number":77,"context_line":"Implementing Cinder force_detach and exposing to the cinderclient will allow"},{"line_number":78,"context_line":" cinder to call the backend to cleanup (default implementation is "},{"line_number":79,"context_line":"terminate_connection and detach, but can be overridden) and then set Cinder DB"},{"line_number":80,"context_line":" state to \u0027available\u0027 and \u0027detached\u0027."},{"line_number":81,"context_line":""}],"source_content_type":"text/x-rst","patch_set":6,"id":"fa32b979_8d6134d6","line":78,"updated":"2015-06-19 17:24:05.000000000","message":"trailing whitespace","commit_id":"3f83288117ccb7077ab3a786f757c82001fa4a9c"},{"author":{"_account_id":9003,"name":"Tom Barron","email":"tpb@dyncloud.net","username":"tbarron"},"change_message_id":"00882f803d76dc0ca6193287d61d2ae6d4fbd612","unresolved":false,"context_lines":[{"line_number":103,"context_line":"Proposed Fix: An attempt to detach from Nova will fail, since Nova does not"},{"line_number":104,"context_line":"know about this volume."},{"line_number":105,"context_line":"Implementing Cinder force_detach and exposing to the cinderclient will allow"},{"line_number":106,"context_line":" cinder to call the backend to cleanup (default implementation is "},{"line_number":107,"context_line":"terminate_connection and detach, but can be overridden) and then set Cinder DB"},{"line_number":108,"context_line":" state to \u0027available\u0027 and \u0027detached\u0027."},{"line_number":109,"context_line":""}],"source_content_type":"text/x-rst","patch_set":6,"id":"fa32b979_6d9f10b5","line":106,"updated":"2015-06-19 17:24:05.000000000","message":"trailing whitespace","commit_id":"3f83288117ccb7077ab3a786f757c82001fa4a9c"},{"author":{"_account_id":9003,"name":"Tom Barron","email":"tpb@dyncloud.net","username":"tbarron"},"change_message_id":"00882f803d76dc0ca6193287d61d2ae6d4fbd612","unresolved":false,"context_lines":[{"line_number":119,"context_line":"(after proposed Nova changes) but fail in Cinder since the state is"},{"line_number":120,"context_line":" \u0027attaching\u0027."},{"line_number":121,"context_line":"Implementing Cinder force_detach and exposing to the cinderclient will allow"},{"line_number":122,"context_line":" cinder to call the backend to cleanup (default implementation is "},{"line_number":123,"context_line":"terminate_connection and detach, but can be overridden) and then set Cinder DB"},{"line_number":124,"context_line":" state to \u0027available\u0027 and \u0027detached\u0027."},{"line_number":125,"context_line":""}],"source_content_type":"text/x-rst","patch_set":6,"id":"fa32b979_2da908e0","line":122,"updated":"2015-06-19 17:24:05.000000000","message":"trailing whitespace","commit_id":"3f83288117ccb7077ab3a786f757c82001fa4a9c"},{"author":{"_account_id":9003,"name":"Tom Barron","email":"tpb@dyncloud.net","username":"tbarron"},"change_message_id":"00882f803d76dc0ca6193287d61d2ae6d4fbd612","unresolved":false,"context_lines":[{"line_number":144,"context_line":"state and do the libvirt.detach and removal of volume entry in BDM. Nova will"},{"line_number":145,"context_line":"call Cinder and ignore any errors, leaving cleanup on the Cinder side to be"},{"line_number":146,"context_line":"accomplished via manual intervention (i.e. \u0027cinder force-detach....\u0027"},{"line_number":147,"context_line":"(Links to proposed Nova changes will be provided ASAP)"},{"line_number":148,"context_line":""},{"line_number":149,"context_line":"Cinder force-detach API currently calls:"},{"line_number":150,"context_line":"    volume_api.terminate_connection(...)"}],"source_content_type":"text/x-rst","patch_set":6,"id":"fa32b979_2d802846","line":147,"updated":"2015-06-19 17:24:05.000000000","message":"If you do another change to add these links, then you can get the trailing whitespace issues above as well.","commit_id":"3f83288117ccb7077ab3a786f757c82001fa4a9c"}]}
