)]}'
{"specs/kilo/replication_v2.rst":[{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"d9405e6439104d7fc43dc5cf002a7edc920cb5f9","unresolved":false,"context_lines":[{"line_number":10,"context_line":""},{"line_number":11,"context_line":"Include the URL of your launchpad blueprint:"},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"https://blueprints.launchpad.net/cinder/+spec/example"},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"Volume replication was implemented in the Juno release.  It was a lot"},{"line_number":16,"context_line":"of challenging and difficult work, and in the end we were fortunate to"}],"source_content_type":"text/x-rst","patch_set":2,"id":"da86d52c_b948ab8b","line":13,"updated":"2015-02-14 01:07:21.000000000","message":"Do we need to get a blueprint up for this? If not, probably just remove these first couple of lines.","commit_id":"58119f1c86eb423ef1d51d7722e82a3690d8796f"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"3063e50897cfc465c8b44fe9382ef6d2be8fe09d","unresolved":false,"context_lines":[{"line_number":10,"context_line":""},{"line_number":11,"context_line":"Include the URL of your launchpad blueprint:"},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"https://blueprints.launchpad.net/cinder/+spec/example"},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"Volume replication was implemented in the Juno release.  It was a lot"},{"line_number":16,"context_line":"of challenging and difficult work, and in the end we were fortunate to"}],"source_content_type":"text/x-rst","patch_set":2,"id":"da86d52c_b975d934","line":13,"in_reply_to":"da86d52c_b948ab8b","updated":"2015-02-16 19:18:21.000000000","message":"Yes, all specs should have a BP.","commit_id":"58119f1c86eb423ef1d51d7722e82a3690d8796f"},{"author":{"_account_id":12924,"name":"Patrick East","email":"east.patrick@gmail.com","username":"patrick.east"},"change_message_id":"c1aaa40db43ae1839e9558c132891f7dad7e3540","unresolved":false,"context_lines":[{"line_number":18,"context_line":"version 2 of the replication implementation in Cinder."},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"During the Kilo release however as the feature started to see some usage"},{"line_number":21,"context_line":"and additional backends tried to implement it, som problems were discovered."},{"line_number":22,"context_line":"The methodology we use isn\u0027t overly efficient, it\u0027s somewhat complex in"},{"line_number":23,"context_line":"places where it doesn\u0027t necessarily need to be."},{"line_number":24,"context_line":""}],"source_content_type":"text/x-rst","patch_set":2,"id":"da86d52c_c82e6bfa","line":21,"updated":"2015-02-13 22:56:51.000000000","message":"som -\u003e some","commit_id":"58119f1c86eb423ef1d51d7722e82a3690d8796f"},{"author":{"_account_id":4418,"name":"Ronen Kat","email":"ronenkat@il.ibm.com","username":"ronenkat"},"change_message_id":"a92ce4f67b59637f1c86724212eccb244f8f3471","unresolved":false,"context_lines":[{"line_number":25,"context_line":"The point of this spec is not to criticize or throw rocks at the existing"},{"line_number":26,"context_line":"implementation, however I think we can do better.  I\u0027d propose a simplified"},{"line_number":27,"context_line":"version of replication that will also provide the ability to easily handle"},{"line_number":28,"context_line":"fail over."},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"By using Volume Capabilities to first pick a backend that supports replication,"},{"line_number":31,"context_line":"we can then add an API call to \"enable\" replication, rather than stuffing more"}],"source_content_type":"text/x-rst","patch_set":2,"id":"da86d52c_3fda7f78","line":28,"updated":"2015-02-17 19:58:26.000000000","message":"I mostly see in this spec making Cinder aware of replication, which is a good thing.\nAdding this understanding to the replication implementation in Cinder is good.","commit_id":"58119f1c86eb423ef1d51d7722e82a3690d8796f"},{"author":{"_account_id":170,"name":"Mike Perez","email":"thingee@gmail.com","username":"thingee"},"change_message_id":"253cacd023e549592335f230610bc0786a7ff628","unresolved":false,"context_lines":[{"line_number":29,"context_line":""},{"line_number":30,"context_line":"By using Volume Capabilities to first pick a backend that supports replication,"},{"line_number":31,"context_line":"we can then add an API call to \"enable\" replication, rather than stuffing more"},{"line_number":32,"context_line":"logic in to create as we\u0027re doing now."},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"This would also allow us to simplify the state management and trasition of"},{"line_number":35,"context_line":"replicated volumes."}],"source_content_type":"text/x-rst","patch_set":2,"id":"da86d52c_bbc11150","line":32,"updated":"2015-02-18 05:42:04.000000000","message":"/in to/into/","commit_id":"58119f1c86eb423ef1d51d7722e82a3690d8796f"},{"author":{"_account_id":170,"name":"Mike Perez","email":"thingee@gmail.com","username":"thingee"},"change_message_id":"253cacd023e549592335f230610bc0786a7ff628","unresolved":false,"context_lines":[{"line_number":49,"context_line":"do easily get out of sync."},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"There\u0027s a good deal of work that\u0027s been identified to try and clean up things"},{"line_number":52,"context_line":"like data base polling and free from strings/sentences being used to store"},{"line_number":53,"context_line":"extended_status information in the data base."},{"line_number":54,"context_line":""},{"line_number":55,"context_line":""}],"source_content_type":"text/x-rst","patch_set":2,"id":"da86d52c_9b9b6d72","line":52,"updated":"2015-02-18 05:42:04.000000000","message":"/data base/database/","commit_id":"58119f1c86eb423ef1d51d7722e82a3690d8796f"},{"author":{"_account_id":4418,"name":"Ronen Kat","email":"ronenkat@il.ibm.com","username":"ronenkat"},"change_message_id":"a92ce4f67b59637f1c86724212eccb244f8f3471","unresolved":false,"context_lines":[{"line_number":50,"context_line":""},{"line_number":51,"context_line":"There\u0027s a good deal of work that\u0027s been identified to try and clean up things"},{"line_number":52,"context_line":"like data base polling and free from strings/sentences being used to store"},{"line_number":53,"context_line":"extended_status information in the data base."},{"line_number":54,"context_line":""},{"line_number":55,"context_line":""},{"line_number":56,"context_line":"Proposed change"}],"source_content_type":"text/x-rst","patch_set":2,"id":"da86d52c_9fd36b37","line":53,"updated":"2015-02-17 19:58:26.000000000","message":"+1 indeed making replication a 1st class citizen in Cinder will make the replication metatdata (extended status and driver data) structured instead of free form as needed when only the driver was aware of replication.","commit_id":"58119f1c86eb423ef1d51d7722e82a3690d8796f"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"d9405e6439104d7fc43dc5cf002a7edc920cb5f9","unresolved":false,"context_lines":[{"line_number":65,"context_line":"remote device, but this is something that\u0027s considered in this spec and"},{"line_number":66,"context_line":"could easily be extended to be included in future work. Backend devices"},{"line_number":67,"context_line":"(drivers) would be listed in the cinder.conf file and we add entries"},{"line_number":68,"context_line":"to indicate pairing."},{"line_number":69,"context_line":""},{"line_number":70,"context_line":"Note, this would propose also adding a setting for a driver in the conf"},{"line_number":71,"context_line":"file \"secondary_only\u003dTrue\" (default \u003d False).  That way a secondary can"}],"source_content_type":"text/x-rst","patch_set":2,"id":"da86d52c_59208fb0","line":68,"updated":"2015-02-14 01:07:21.000000000","message":"Does this mean we can only have a single pairing per array? Or can we do A-\u003eB, A-\u003eC, B-\u003eC?","commit_id":"58119f1c86eb423ef1d51d7722e82a3690d8796f"},{"author":{"_account_id":170,"name":"Mike Perez","email":"thingee@gmail.com","username":"thingee"},"change_message_id":"253cacd023e549592335f230610bc0786a7ff628","unresolved":false,"context_lines":[{"line_number":69,"context_line":""},{"line_number":70,"context_line":"Note, this would propose also adding a setting for a driver in the conf"},{"line_number":71,"context_line":"file \"secondary_only\u003dTrue\" (default \u003d False).  That way a secondary can"},{"line_number":72,"context_line":"be elimated from create placement filtering, and used ONLY for replication"},{"line_number":73,"context_line":"and fail over if desired."},{"line_number":74,"context_line":""},{"line_number":75,"context_line":"This proposal suggests that we would decouple the replication information"}],"source_content_type":"text/x-rst","patch_set":2,"id":"da86d52c_7b79592e","line":72,"updated":"2015-02-18 05:42:04.000000000","message":"/elimated/eliminated/","commit_id":"58119f1c86eb423ef1d51d7722e82a3690d8796f"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"3063e50897cfc465c8b44fe9382ef6d2be8fe09d","unresolved":false,"context_lines":[{"line_number":70,"context_line":"Note, this would propose also adding a setting for a driver in the conf"},{"line_number":71,"context_line":"file \"secondary_only\u003dTrue\" (default \u003d False).  That way a secondary can"},{"line_number":72,"context_line":"be elimated from create placement filtering, and used ONLY for replication"},{"line_number":73,"context_line":"and fail over if desired."},{"line_number":74,"context_line":""},{"line_number":75,"context_line":"This proposal suggests that we would decouple the replication information"},{"line_number":76,"context_line":"from the create call.  The flow would be something like this:"}],"source_content_type":"text/x-rst","patch_set":2,"id":"da86d52c_54402407","line":73,"updated":"2015-02-16 19:18:21.000000000","message":"Good idea.  Wonder if secondary_only is the best config option (as I am writing other comments maybe it is because secondary comes out naturally).  One thing we should fix is the way that secondary and replica are used from a terminology standpoint.  As I was reviewing the code and docs it seemed secondary and replica were used interchangably which got confusing.  It would help if we made sure to use \u0027replica\u0027 to reference the volume and \u0027secondary\u0027 to reference the host.","commit_id":"58119f1c86eb423ef1d51d7722e82a3690d8796f"},{"author":{"_account_id":2243,"name":"John Griffith","email":"john.griffith8@gmail.com","username":"john-griffith"},"change_message_id":"75069d34e4369a8b5920552a341de97d9ac9805f","unresolved":false,"context_lines":[{"line_number":70,"context_line":"Note, this would propose also adding a setting for a driver in the conf"},{"line_number":71,"context_line":"file \"secondary_only\u003dTrue\" (default \u003d False).  That way a secondary can"},{"line_number":72,"context_line":"be elimated from create placement filtering, and used ONLY for replication"},{"line_number":73,"context_line":"and fail over if desired."},{"line_number":74,"context_line":""},{"line_number":75,"context_line":"This proposal suggests that we would decouple the replication information"},{"line_number":76,"context_line":"from the create call.  The flow would be something like this:"}],"source_content_type":"text/x-rst","patch_set":2,"id":"da86d52c_18887ac5","line":73,"in_reply_to":"da86d52c_54402407","updated":"2015-02-17 17:35:52.000000000","message":"replication_target_only\u003dTrue","commit_id":"58119f1c86eb423ef1d51d7722e82a3690d8796f"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"d9405e6439104d7fc43dc5cf002a7edc920cb5f9","unresolved":false,"context_lines":[{"line_number":72,"context_line":"be elimated from create placement filtering, and used ONLY for replication"},{"line_number":73,"context_line":"and fail over if desired."},{"line_number":74,"context_line":""},{"line_number":75,"context_line":"This proposal suggests that we would decouple the replication information"},{"line_number":76,"context_line":"from the create call.  The flow would be something like this:"},{"line_number":77,"context_line":"* Create a volume of type \"replication_capable\u003dTrue\""},{"line_number":78,"context_line":"* Cinder uses the existing functionality of the cpabilities filter to pick"}],"source_content_type":"text/x-rst","patch_set":2,"id":"da86d52c_b916eb56","line":75,"updated":"2015-02-14 01:07:21.000000000","message":"+1","commit_id":"58119f1c86eb423ef1d51d7722e82a3690d8796f"},{"author":{"_account_id":4418,"name":"Ronen Kat","email":"ronenkat@il.ibm.com","username":"ronenkat"},"change_message_id":"618e22d8c7e262aaccddbfd20fbefb4b05300453","unresolved":false,"context_lines":[{"line_number":72,"context_line":"be elimated from create placement filtering, and used ONLY for replication"},{"line_number":73,"context_line":"and fail over if desired."},{"line_number":74,"context_line":""},{"line_number":75,"context_line":"This proposal suggests that we would decouple the replication information"},{"line_number":76,"context_line":"from the create call.  The flow would be something like this:"},{"line_number":77,"context_line":"* Create a volume of type \"replication_capable\u003dTrue\""},{"line_number":78,"context_line":"* Cinder uses the existing functionality of the cpabilities filter to pick"}],"source_content_type":"text/x-rst","patch_set":2,"id":"da86d52c_c800f437","line":75,"updated":"2015-02-16 20:16:53.000000000","message":"What good does it make from the user perspective?\nWe are splitting a single user action into two.\nWhat is the use-case of creating a volume in a replication\" type, but don\u0027t enable replication?\n\nJohn, Sean, I am interested to understand what user benefit you see in this.","commit_id":"58119f1c86eb423ef1d51d7722e82a3690d8796f"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"d9405e6439104d7fc43dc5cf002a7edc920cb5f9","unresolved":false,"context_lines":[{"line_number":75,"context_line":"This proposal suggests that we would decouple the replication information"},{"line_number":76,"context_line":"from the create call.  The flow would be something like this:"},{"line_number":77,"context_line":"* Create a volume of type \"replication_capable\u003dTrue\""},{"line_number":78,"context_line":"* Cinder uses the existing functionality of the cpabilities filter to pick"},{"line_number":79,"context_line":"  a backend that support the requested replication type and creates a volume"},{"line_number":80,"context_line":"  nothing different than the existing workflow."},{"line_number":81,"context_line":"* Add API calls for replication-enable, replication-disable,"}],"source_content_type":"text/x-rst","patch_set":2,"id":"da86d52c_d91b9f7e","line":78,"updated":"2015-02-14 01:07:21.000000000","message":"/cpabilities/capabilities/","commit_id":"58119f1c86eb423ef1d51d7722e82a3690d8796f"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"3063e50897cfc465c8b44fe9382ef6d2be8fe09d","unresolved":false,"context_lines":[{"line_number":76,"context_line":"from the create call.  The flow would be something like this:"},{"line_number":77,"context_line":"* Create a volume of type \"replication_capable\u003dTrue\""},{"line_number":78,"context_line":"* Cinder uses the existing functionality of the cpabilities filter to pick"},{"line_number":79,"context_line":"  a backend that support the requested replication type and creates a volume"},{"line_number":80,"context_line":"  nothing different than the existing workflow."},{"line_number":81,"context_line":"* Add API calls for replication-enable, replication-disable,"},{"line_number":82,"context_line":"  replication-failover"}],"source_content_type":"text/x-rst","patch_set":2,"id":"da86d52c_f44e7837","line":79,"updated":"2015-02-16 19:18:21.000000000","message":"support -\u003e supports","commit_id":"58119f1c86eb423ef1d51d7722e82a3690d8796f"},{"author":{"_account_id":15506,"name":"zhangli","email":"zhangli09@huawei.com"},"change_message_id":"78f71bc99d1949fd03de94a5e78045aa34aed8ed","unresolved":false,"context_lines":[{"line_number":77,"context_line":"* Create a volume of type \"replication_capable\u003dTrue\""},{"line_number":78,"context_line":"* Cinder uses the existing functionality of the cpabilities filter to pick"},{"line_number":79,"context_line":"  a backend that support the requested replication type and creates a volume"},{"line_number":80,"context_line":"  nothing different than the existing workflow."},{"line_number":81,"context_line":"* Add API calls for replication-enable, replication-disable,"},{"line_number":82,"context_line":"  replication-failover"},{"line_number":83,"context_line":""}],"source_content_type":"text/x-rst","patch_set":2,"id":"9a80dd14_05cf8558","line":80,"updated":"2015-03-18 09:14:39.000000000","message":"please clarify the \"the existing workflow\" of create call:\na)only create a volume on primary; or\nb)create volume and replica, and enable the replication (as we see in IBM storwize driver);","commit_id":"58119f1c86eb423ef1d51d7722e82a3690d8796f"},{"author":{"_account_id":12131,"name":"Seth Mason","username":"setmason"},"change_message_id":"34a62011a810a5816ca2fdbb72ef19aee50c0f89","unresolved":false,"context_lines":[{"line_number":79,"context_line":"  a backend that support the requested replication type and creates a volume"},{"line_number":80,"context_line":"  nothing different than the existing workflow."},{"line_number":81,"context_line":"* Add API calls for replication-enable, replication-disable,"},{"line_number":82,"context_line":"  replication-failover"},{"line_number":83,"context_line":""},{"line_number":84,"context_line":"** replication-enable:"},{"line_number":85,"context_line":"   cinder replication-enable \u003cvolume-id\u003e"}],"source_content_type":"text/x-rst","patch_set":2,"id":"da86d52c_3c48cd2c","line":82,"updated":"2015-02-17 19:10:40.000000000","message":"How about an option to \"reverse\" the replication without destroying the pairing such that if normal operation is A-\u003eB, one could reverse the flow in the event of a disaster/dataloss.","commit_id":"58119f1c86eb423ef1d51d7722e82a3690d8796f"},{"author":{"_account_id":4418,"name":"Ronen Kat","email":"ronenkat@il.ibm.com","username":"ronenkat"},"change_message_id":"a92ce4f67b59637f1c86724212eccb244f8f3471","unresolved":false,"context_lines":[{"line_number":79,"context_line":"  a backend that support the requested replication type and creates a volume"},{"line_number":80,"context_line":"  nothing different than the existing workflow."},{"line_number":81,"context_line":"* Add API calls for replication-enable, replication-disable,"},{"line_number":82,"context_line":"  replication-failover"},{"line_number":83,"context_line":""},{"line_number":84,"context_line":"** replication-enable:"},{"line_number":85,"context_line":"   cinder replication-enable \u003cvolume-id\u003e"}],"source_content_type":"text/x-rst","patch_set":2,"id":"da86d52c_a23734af","line":82,"updated":"2015-02-17 19:58:26.000000000","message":"Missing replication-test that was requested to allow administrator to test the failover process.","commit_id":"58119f1c86eb423ef1d51d7722e82a3690d8796f"},{"author":{"_account_id":15556,"name":"luyingxi","email":"luyingxi@huawei.com","username":"lu"},"change_message_id":"9844883b2f4bdaf85775d446ba88d7ae9f50057b","unresolved":false,"context_lines":[{"line_number":79,"context_line":"  a backend that support the requested replication type and creates a volume"},{"line_number":80,"context_line":"  nothing different than the existing workflow."},{"line_number":81,"context_line":"* Add API calls for replication-enable, replication-disable,"},{"line_number":82,"context_line":"  replication-failover"},{"line_number":83,"context_line":""},{"line_number":84,"context_line":"** replication-enable:"},{"line_number":85,"context_line":"   cinder replication-enable \u003cvolume-id\u003e"}],"source_content_type":"text/x-rst","patch_set":2,"id":"9a80dd14_472a6f91","line":82,"updated":"2015-03-17 08:24:15.000000000","message":"Step 1 --\u003e create primary volume;\nStep 2 --\u003e create secondary volume;\nStep 3 --\u003e build a replication relationship?","commit_id":"58119f1c86eb423ef1d51d7722e82a3690d8796f"},{"author":{"_account_id":9924,"name":"Jeegn Chen","email":"Jeegn.Chen@emc.com","username":"jeegn-chen"},"change_message_id":"563b39b92ac38e5f6b06d8cb4683bec23b573b5b","unresolved":false,"context_lines":[{"line_number":82,"context_line":"  replication-failover"},{"line_number":83,"context_line":""},{"line_number":84,"context_line":"** replication-enable:"},{"line_number":85,"context_line":"   cinder replication-enable \u003cvolume-id\u003e"},{"line_number":86,"context_line":""},{"line_number":87,"context_line":"   The default would simply require the volume-id one wishes to start"},{"line_number":88,"context_line":"   replicating.  Using the cinder.conf entries the driver will be able"}],"source_content_type":"text/x-rst","patch_set":2,"id":"1a6ced46_d2b4cc83","line":85,"updated":"2015-03-26 14:37:30.000000000","message":"Will replicate-enable also create the secondary volume if it does not exist yet?\n\nHow does Cinder decide which back end can be use for the secondary volume?\n\nDue to topology limitation, one back end may not be able to access as the secondary for all other back ends. And the cloud admin may what some specific pairing between back ends.\n\nAdditional parameter may be needed to specify the back end for secondary creation?","commit_id":"58119f1c86eb423ef1d51d7722e82a3690d8796f"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"d9405e6439104d7fc43dc5cf002a7edc920cb5f9","unresolved":false,"context_lines":[{"line_number":95,"context_line":"   backend driver to setup and start replicating."},{"line_number":96,"context_line":""},{"line_number":97,"context_line":"** replication-disable"},{"line_number":98,"context_line":"   cinder replciation-disable \u003cvolume-id\u003e"},{"line_number":99,"context_line":""},{"line_number":100,"context_line":"   Pretty self explanatory, again a call directly to the manager and then the"},{"line_number":101,"context_line":"   driver that disables replication operations."}],"source_content_type":"text/x-rst","patch_set":2,"id":"da86d52c_b44b525e","line":98,"updated":"2015-02-14 01:07:21.000000000","message":"/replciation/replication/","commit_id":"58119f1c86eb423ef1d51d7722e82a3690d8796f"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"d9405e6439104d7fc43dc5cf002a7edc920cb5f9","unresolved":false,"context_lines":[{"line_number":100,"context_line":"   Pretty self explanatory, again a call directly to the manager and then the"},{"line_number":101,"context_line":"   driver that disables replication operations."},{"line_number":102,"context_line":""},{"line_number":103,"context_line":"   Optional arguments include \"--delete\" to delete the replica, so for"},{"line_number":104,"context_line":"   example if you needed to stop replicating temporarily but keep things in"},{"line_number":105,"context_line":"   place so you can resume later, you can and just call enable again."},{"line_number":106,"context_line":""}],"source_content_type":"text/x-rst","patch_set":2,"id":"da86d52c_346682ef","line":103,"updated":"2015-02-14 01:07:21.000000000","message":"Maybe explicitly call out that the default is to not delete the replica.","commit_id":"58119f1c86eb423ef1d51d7722e82a3690d8796f"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"3063e50897cfc465c8b44fe9382ef6d2be8fe09d","unresolved":false,"context_lines":[{"line_number":102,"context_line":""},{"line_number":103,"context_line":"   Optional arguments include \"--delete\" to delete the replica, so for"},{"line_number":104,"context_line":"   example if you needed to stop replicating temporarily but keep things in"},{"line_number":105,"context_line":"   place so you can resume later, you can and just call enable again."},{"line_number":106,"context_line":""},{"line_number":107,"context_line":"** replicaton-failover"},{"line_number":108,"context_line":"   cinder replication-failover \u003cvolume-id\u003e"}],"source_content_type":"text/x-rst","patch_set":2,"id":"da86d52c_f4fcb8b7","line":105,"updated":"2015-02-16 19:18:21.000000000","message":"+1","commit_id":"58119f1c86eb423ef1d51d7722e82a3690d8796f"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"d9405e6439104d7fc43dc5cf002a7edc920cb5f9","unresolved":false,"context_lines":[{"line_number":102,"context_line":""},{"line_number":103,"context_line":"   Optional arguments include \"--delete\" to delete the replica, so for"},{"line_number":104,"context_line":"   example if you needed to stop replicating temporarily but keep things in"},{"line_number":105,"context_line":"   place so you can resume later, you can and just call enable again."},{"line_number":106,"context_line":""},{"line_number":107,"context_line":"** replicaton-failover"},{"line_number":108,"context_line":"   cinder replication-failover \u003cvolume-id\u003e"}],"source_content_type":"text/x-rst","patch_set":2,"id":"da86d52c_94464e4e","line":105,"updated":"2015-02-14 01:07:21.000000000","message":"/can and just/can just/","commit_id":"58119f1c86eb423ef1d51d7722e82a3690d8796f"},{"author":{"_account_id":4418,"name":"Ronen Kat","email":"ronenkat@il.ibm.com","username":"ronenkat"},"change_message_id":"618e22d8c7e262aaccddbfd20fbefb4b05300453","unresolved":false,"context_lines":[{"line_number":102,"context_line":""},{"line_number":103,"context_line":"   Optional arguments include \"--delete\" to delete the replica, so for"},{"line_number":104,"context_line":"   example if you needed to stop replicating temporarily but keep things in"},{"line_number":105,"context_line":"   place so you can resume later, you can and just call enable again."},{"line_number":106,"context_line":""},{"line_number":107,"context_line":"** replicaton-failover"},{"line_number":108,"context_line":"   cinder replication-failover \u003cvolume-id\u003e"}],"source_content_type":"text/x-rst","patch_set":2,"id":"da86d52c_8b08b629","line":105,"updated":"2015-02-16 20:16:53.000000000","message":"So is this replication-stop? we should put more semantics of what we expect. Backend keep state so it would copy deltas. Would this indicate that the backend should keep the replication relationship, that is we pause/stop replication, or this is removing the replication relationship?\nUsing --delete is self explanatory, but disable, by itself, is not specific enough.","commit_id":"58119f1c86eb423ef1d51d7722e82a3690d8796f"},{"author":{"_account_id":12924,"name":"Patrick East","email":"east.patrick@gmail.com","username":"patrick.east"},"change_message_id":"c1aaa40db43ae1839e9558c132891f7dad7e3540","unresolved":false,"context_lines":[{"line_number":105,"context_line":"   place so you can resume later, you can and just call enable again."},{"line_number":106,"context_line":""},{"line_number":107,"context_line":"** replicaton-failover"},{"line_number":108,"context_line":"   cinder replication-failover \u003cvolume-id\u003e"},{"line_number":109,"context_line":""},{"line_number":110,"context_line":"   This would work in one of two ways;  First it would try the \"nice\""},{"line_number":111,"context_line":"   approach, if the primary is up and available, the call will go to the"}],"source_content_type":"text/x-rst","patch_set":2,"id":"da86d52c_8801d308","line":108,"updated":"2015-02-13 22:56:51.000000000","message":"Is the plan here to have similar behavior to how promote is right now where you can bounce volumes back and forth between backends if you keep calling it? or after a failover is there some other intervention to put things back the way they were?\n\nin the case of multiple backends, should this allow for a target backend? just take the first one in the list (that isn\u0027t unresponsive) if there are multiple? Or just wait and extend the command later on to support multiple targets?","commit_id":"58119f1c86eb423ef1d51d7722e82a3690d8796f"},{"author":{"_account_id":2243,"name":"John Griffith","email":"john.griffith8@gmail.com","username":"john-griffith"},"change_message_id":"08b5b85b02948b460127566574e5625ca1317acd","unresolved":false,"context_lines":[{"line_number":105,"context_line":"   place so you can resume later, you can and just call enable again."},{"line_number":106,"context_line":""},{"line_number":107,"context_line":"** replicaton-failover"},{"line_number":108,"context_line":"   cinder replication-failover \u003cvolume-id\u003e"},{"line_number":109,"context_line":""},{"line_number":110,"context_line":"   This would work in one of two ways;  First it would try the \"nice\""},{"line_number":111,"context_line":"   approach, if the primary is up and available, the call will go to the"}],"source_content_type":"text/x-rst","patch_set":2,"id":"da86d52c_4880a546","line":108,"in_reply_to":"da86d52c_8801d308","updated":"2015-02-15 23:42:14.000000000","message":"Yes, for now I\u0027m limiting the use case to a single replication pairing and it would in fact just bounce from current host to next host.\n\nWhen it comes to multiple replication targets, we\u0027d need to add an option to specify, maybe that should be done up front... not sure.","commit_id":"58119f1c86eb423ef1d51d7722e82a3690d8796f"},{"author":{"_account_id":4418,"name":"Ronen Kat","email":"ronenkat@il.ibm.com","username":"ronenkat"},"change_message_id":"618e22d8c7e262aaccddbfd20fbefb4b05300453","unresolved":false,"context_lines":[{"line_number":113,"context_line":"   might need."},{"line_number":114,"context_line":""},{"line_number":115,"context_line":"   The reality is that fail over is something usually done due to a failure"},{"line_number":116,"context_line":"   of a device.  In that case, I propose that when an operation request for"},{"line_number":117,"context_line":"   a volume arrives at the scheduler, and the host is unreachable it checks"},{"line_number":118,"context_line":"   if the volume is replicated, if it is, then it uses that host for the"},{"line_number":119,"context_line":"   requested call.  This indicates that there are mutliple hosts possible"}],"source_content_type":"text/x-rst","patch_set":2,"id":"da86d52c_2beb4add","line":116,"updated":"2015-02-16 20:16:53.000000000","message":"\"an operation\"? or failover?\nI am a bit conservative allowing Cinder to \"move\" the volume from a back end to back end if the Cinder hosts stops responding for five minutes.\nThere is a big difference if the back end (data path) stops responding and the Cinder host (control path) stops responding.\nA control path failover should not result in a volume failover action - admin should fix the Cinder node or use HA Cinder.","commit_id":"58119f1c86eb423ef1d51d7722e82a3690d8796f"},{"author":{"_account_id":15506,"name":"zhangli","email":"zhangli09@huawei.com"},"change_message_id":"78f71bc99d1949fd03de94a5e78045aa34aed8ed","unresolved":false,"context_lines":[{"line_number":113,"context_line":"   might need."},{"line_number":114,"context_line":""},{"line_number":115,"context_line":"   The reality is that fail over is something usually done due to a failure"},{"line_number":116,"context_line":"   of a device.  In that case, I propose that when an operation request for"},{"line_number":117,"context_line":"   a volume arrives at the scheduler, and the host is unreachable it checks"},{"line_number":118,"context_line":"   if the volume is replicated, if it is, then it uses that host for the"},{"line_number":119,"context_line":"   requested call.  This indicates that there are mutliple hosts possible"}],"source_content_type":"text/x-rst","patch_set":2,"id":"9a80dd14_00f025c8","line":116,"in_reply_to":"da86d52c_2beb4add","updated":"2015-03-18 09:14:39.000000000","message":"I have the same question here, does \"an operation\" particularly mean replicaton-failover? or something like delete/extent/retype etc?\nDoes cinder should have the ability of auto failure decection and failver?","commit_id":"58119f1c86eb423ef1d51d7722e82a3690d8796f"},{"author":{"_account_id":9924,"name":"Jeegn Chen","email":"Jeegn.Chen@emc.com","username":"jeegn-chen"},"change_message_id":"563b39b92ac38e5f6b06d8cb4683bec23b573b5b","unresolved":false,"context_lines":[{"line_number":114,"context_line":""},{"line_number":115,"context_line":"   The reality is that fail over is something usually done due to a failure"},{"line_number":116,"context_line":"   of a device.  In that case, I propose that when an operation request for"},{"line_number":117,"context_line":"   a volume arrives at the scheduler, and the host is unreachable it checks"},{"line_number":118,"context_line":"   if the volume is replicated, if it is, then it uses that host for the"},{"line_number":119,"context_line":"   requested call.  This indicates that there are mutliple hosts possible"},{"line_number":120,"context_line":"   in the Volume object, which are added as part of replication-enable,"}],"source_content_type":"text/x-rst","patch_set":2,"id":"1a6ced46_d2392cf3","line":117,"updated":"2015-03-26 14:37:30.000000000","message":"For simplicity, shall the request go directly to the back end hosting the secondary volume since the back end hosting the primary one is usually down when fail-over is performed?","commit_id":"58119f1c86eb423ef1d51d7722e82a3690d8796f"},{"author":{"_account_id":4418,"name":"Ronen Kat","email":"ronenkat@il.ibm.com","username":"ronenkat"},"change_message_id":"a92ce4f67b59637f1c86724212eccb244f8f3471","unresolved":false,"context_lines":[{"line_number":115,"context_line":"   The reality is that fail over is something usually done due to a failure"},{"line_number":116,"context_line":"   of a device.  In that case, I propose that when an operation request for"},{"line_number":117,"context_line":"   a volume arrives at the scheduler, and the host is unreachable it checks"},{"line_number":118,"context_line":"   if the volume is replicated, if it is, then it uses that host for the"},{"line_number":119,"context_line":"   requested call.  This indicates that there are mutliple hosts possible"},{"line_number":120,"context_line":"   in the Volume object, which are added as part of replication-enable,"},{"line_number":121,"context_line":"   and marked unavailable on replication-disable."}],"source_content_type":"text/x-rst","patch_set":2,"id":"da86d52c_a2e9f41b","line":118,"updated":"2015-02-17 19:58:26.000000000","message":"Before forward the request to that host, Cinder should verify that the volume is consistent (replica can be either consistent or inconsistent).\nThis requires either a status in Cinder, which should be refreshed periodically, or an API call to the storage before going to the host.\nOtherwise, data loss is ahead of us.","commit_id":"58119f1c86eb423ef1d51d7722e82a3690d8796f"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"d9405e6439104d7fc43dc5cf002a7edc920cb5f9","unresolved":false,"context_lines":[{"line_number":116,"context_line":"   of a device.  In that case, I propose that when an operation request for"},{"line_number":117,"context_line":"   a volume arrives at the scheduler, and the host is unreachable it checks"},{"line_number":118,"context_line":"   if the volume is replicated, if it is, then it uses that host for the"},{"line_number":119,"context_line":"   requested call.  This indicates that there are mutliple hosts possible"},{"line_number":120,"context_line":"   in the Volume object, which are added as part of replication-enable,"},{"line_number":121,"context_line":"   and marked unavailable on replication-disable."},{"line_number":122,"context_line":""}],"source_content_type":"text/x-rst","patch_set":2,"id":"da86d52c_f4a30afe","line":119,"updated":"2015-02-14 01:07:21.000000000","message":"/mutliple/multiple/","commit_id":"58119f1c86eb423ef1d51d7722e82a3690d8796f"},{"author":{"_account_id":9924,"name":"Jeegn Chen","email":"Jeegn.Chen@emc.com","username":"jeegn-chen"},"change_message_id":"563b39b92ac38e5f6b06d8cb4683bec23b573b5b","unresolved":false,"context_lines":[{"line_number":116,"context_line":"   of a device.  In that case, I propose that when an operation request for"},{"line_number":117,"context_line":"   a volume arrives at the scheduler, and the host is unreachable it checks"},{"line_number":118,"context_line":"   if the volume is replicated, if it is, then it uses that host for the"},{"line_number":119,"context_line":"   requested call.  This indicates that there are mutliple hosts possible"},{"line_number":120,"context_line":"   in the Volume object, which are added as part of replication-enable,"},{"line_number":121,"context_line":"   and marked unavailable on replication-disable."},{"line_number":122,"context_line":""}],"source_content_type":"text/x-rst","patch_set":2,"id":"1a6ced46_72531839","line":119,"in_reply_to":"da86d52c_f4a30afe","updated":"2015-03-26 14:37:30.000000000","message":"So it is 1-to-N mapping between the primary volume and the secondary volumes?","commit_id":"58119f1c86eb423ef1d51d7722e82a3690d8796f"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"d9405e6439104d7fc43dc5cf002a7edc920cb5f9","unresolved":false,"context_lines":[{"line_number":118,"context_line":"   if the volume is replicated, if it is, then it uses that host for the"},{"line_number":119,"context_line":"   requested call.  This indicates that there are mutliple hosts possible"},{"line_number":120,"context_line":"   in the Volume object, which are added as part of replication-enable,"},{"line_number":121,"context_line":"   and marked unavailable on replication-disable."},{"line_number":122,"context_line":""},{"line_number":123,"context_line":"Workflow diagram"},{"line_number":124,"context_line":"-----------------"}],"source_content_type":"text/x-rst","patch_set":2,"id":"da86d52c_54913699","line":121,"updated":"2015-02-14 01:07:21.000000000","message":"What would happen if the replica target is marked with the secondary_only\u003dTrue?","commit_id":"58119f1c86eb423ef1d51d7722e82a3690d8796f"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"3063e50897cfc465c8b44fe9382ef6d2be8fe09d","unresolved":false,"context_lines":[{"line_number":118,"context_line":"   if the volume is replicated, if it is, then it uses that host for the"},{"line_number":119,"context_line":"   requested call.  This indicates that there are mutliple hosts possible"},{"line_number":120,"context_line":"   in the Volume object, which are added as part of replication-enable,"},{"line_number":121,"context_line":"   and marked unavailable on replication-disable."},{"line_number":122,"context_line":""},{"line_number":123,"context_line":"Workflow diagram"},{"line_number":124,"context_line":"-----------------"}],"source_content_type":"text/x-rst","patch_set":2,"id":"da86d52c_b4c7a064","line":121,"updated":"2015-02-16 19:18:21.000000000","message":"Would need a way to also remove secondary_only in the case that the primary was going to be out of commission for an extended period.","commit_id":"58119f1c86eb423ef1d51d7722e82a3690d8796f"},{"author":{"_account_id":2243,"name":"John Griffith","email":"john.griffith8@gmail.com","username":"john-griffith"},"change_message_id":"08b5b85b02948b460127566574e5625ca1317acd","unresolved":false,"context_lines":[{"line_number":118,"context_line":"   if the volume is replicated, if it is, then it uses that host for the"},{"line_number":119,"context_line":"   requested call.  This indicates that there are mutliple hosts possible"},{"line_number":120,"context_line":"   in the Volume object, which are added as part of replication-enable,"},{"line_number":121,"context_line":"   and marked unavailable on replication-disable."},{"line_number":122,"context_line":""},{"line_number":123,"context_line":"Workflow diagram"},{"line_number":124,"context_line":"-----------------"}],"source_content_type":"text/x-rst","patch_set":2,"id":"da86d52c_a88e8177","line":121,"in_reply_to":"da86d52c_54913699","updated":"2015-02-15 23:42:14.000000000","message":"The idea behind the \"secondary_only\" is just to prevent scheduling new volumes, promotion, attach etc are fair game if the primary isn\u0027t available.","commit_id":"58119f1c86eb423ef1d51d7722e82a3690d8796f"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"d9405e6439104d7fc43dc5cf002a7edc920cb5f9","unresolved":false,"context_lines":[{"line_number":119,"context_line":"   requested call.  This indicates that there are mutliple hosts possible"},{"line_number":120,"context_line":"   in the Volume object, which are added as part of replication-enable,"},{"line_number":121,"context_line":"   and marked unavailable on replication-disable."},{"line_number":122,"context_line":""},{"line_number":123,"context_line":"Workflow diagram"},{"line_number":124,"context_line":"-----------------"},{"line_number":125,"context_line":"Create call on the left:"}],"source_content_type":"text/x-rst","patch_set":2,"id":"da86d52c_14f7bef6","line":122,"updated":"2015-02-14 01:07:21.000000000","message":"Would we also want a reverse option? I\u0027m thinking in the case of a planned migration. The user could failover to the replica and have the replication direction reversed so that the former primary is now the secondary. \n\nGranted, the same can probably be accomplished by called replication-failover followed by a replication-enable.","commit_id":"58119f1c86eb423ef1d51d7722e82a3690d8796f"},{"author":{"_account_id":2243,"name":"John Griffith","email":"john.griffith8@gmail.com","username":"john-griffith"},"change_message_id":"08b5b85b02948b460127566574e5625ca1317acd","unresolved":false,"context_lines":[{"line_number":119,"context_line":"   requested call.  This indicates that there are mutliple hosts possible"},{"line_number":120,"context_line":"   in the Volume object, which are added as part of replication-enable,"},{"line_number":121,"context_line":"   and marked unavailable on replication-disable."},{"line_number":122,"context_line":""},{"line_number":123,"context_line":"Workflow diagram"},{"line_number":124,"context_line":"-----------------"},{"line_number":125,"context_line":"Create call on the left:"}],"source_content_type":"text/x-rst","patch_set":2,"id":"da86d52c_48f7c5f5","line":122,"in_reply_to":"da86d52c_14f7bef6","updated":"2015-02-15 23:42:14.000000000","message":"Oh, I like that... assumes 2 way replication which may or may not be available on the backend though.  Maybe we let the capabilities report that and set a field to notify that\u0027s how it\u0027s working?\n\nIt\u0027d be cool if initially we could leave this up to the backend, or make it something that goes in the extra-specs to turn it on or off for those that support it.","commit_id":"58119f1c86eb423ef1d51d7722e82a3690d8796f"},{"author":{"_account_id":4418,"name":"Ronen Kat","email":"ronenkat@il.ibm.com","username":"ronenkat"},"change_message_id":"a92ce4f67b59637f1c86724212eccb244f8f3471","unresolved":false,"context_lines":[{"line_number":126,"context_line":"  No change to workflow"},{"line_number":127,"context_line":""},{"line_number":128,"context_line":"Replication calls on the right:"},{"line_number":129,"context_line":"  Direct to manager then driver via host entry"},{"line_number":130,"context_line":""},{"line_number":131,"context_line":"      +-----------+"},{"line_number":132,"context_line":" +--\u003c +Volume API + \u003e---------+        Enable routing directly to"}],"source_content_type":"text/x-rst","patch_set":2,"id":"da86d52c_df088382","line":129,"updated":"2015-02-17 19:58:26.000000000","message":"Won\u0027t work, something is missing. If the \"primary\" has failed then we it says we go to one of the secondaries, right? how does this happen, one manager host calls another? via scheduler? back to the API?\n\nNeed to add how requests are forwarded between the hosts.","commit_id":"58119f1c86eb423ef1d51d7722e82a3690d8796f"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"d9405e6439104d7fc43dc5cf002a7edc920cb5f9","unresolved":false,"context_lines":[{"line_number":152,"context_line":" +--\u003e +  Driver   + \u003c---------+"},{"line_number":153,"context_line":"      +-----+-----+"},{"line_number":154,"context_line":""},{"line_number":155,"context_line":"In the case of calls like attach, extend, clone, delete etc;"},{"line_number":156,"context_line":"if either the backend host is not reachable, or if the primary_host_status"},{"line_number":157,"context_line":"column is set, we\u0027ll redirect to the host in the secondary_hosts"},{"line_number":158,"context_line":"column.  If that\u0027s unavailalbe then we fail, just like we do today."}],"source_content_type":"text/x-rst","patch_set":2,"id":"da86d52c_94b9ee17","line":155,"updated":"2015-02-14 01:07:21.000000000","message":"Do we want to enforce replication-disable before delete is allowed?","commit_id":"58119f1c86eb423ef1d51d7722e82a3690d8796f"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"8fdbecc48095673472316dd0c577e426ce991e81","unresolved":false,"context_lines":[{"line_number":152,"context_line":" +--\u003e +  Driver   + \u003c---------+"},{"line_number":153,"context_line":"      +-----+-----+"},{"line_number":154,"context_line":""},{"line_number":155,"context_line":"In the case of calls like attach, extend, clone, delete etc;"},{"line_number":156,"context_line":"if either the backend host is not reachable, or if the primary_host_status"},{"line_number":157,"context_line":"column is set, we\u0027ll redirect to the host in the secondary_hosts"},{"line_number":158,"context_line":"column.  If that\u0027s unavailalbe then we fail, just like we do today."}],"source_content_type":"text/x-rst","patch_set":2,"id":"da86d52c_08ba2dc0","line":155,"in_reply_to":"da86d52c_68dba97d","updated":"2015-02-16 01:08:57.000000000","message":"Good point about keeping it hidden. I can see arguments either way, but the brute force method is probably just fine.\n\nIf we got feedback from the community that it causes problems by allowing it we could always tweak the behavior in a future release.","commit_id":"58119f1c86eb423ef1d51d7722e82a3690d8796f"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"3063e50897cfc465c8b44fe9382ef6d2be8fe09d","unresolved":false,"context_lines":[{"line_number":152,"context_line":" +--\u003e +  Driver   + \u003c---------+"},{"line_number":153,"context_line":"      +-----+-----+"},{"line_number":154,"context_line":""},{"line_number":155,"context_line":"In the case of calls like attach, extend, clone, delete etc;"},{"line_number":156,"context_line":"if either the backend host is not reachable, or if the primary_host_status"},{"line_number":157,"context_line":"column is set, we\u0027ll redirect to the host in the secondary_hosts"},{"line_number":158,"context_line":"column.  If that\u0027s unavailalbe then we fail, just like we do today."}],"source_content_type":"text/x-rst","patch_set":2,"id":"da86d52c_d4d97423","line":155,"in_reply_to":"da86d52c_94b9ee17","updated":"2015-02-16 19:18:21.000000000","message":"I would think that we want to keep this hidden from the user and have the replica automatically deleted.  In this case replication isn\u0027t meant to be a backup but to help in the case of a disaster.  If the user wants more protection for the volume that come when we pull this together with Consistency Groups.","commit_id":"58119f1c86eb423ef1d51d7722e82a3690d8796f"},{"author":{"_account_id":2243,"name":"John Griffith","email":"john.griffith8@gmail.com","username":"john-griffith"},"change_message_id":"08b5b85b02948b460127566574e5625ca1317acd","unresolved":false,"context_lines":[{"line_number":152,"context_line":" +--\u003e +  Driver   + \u003c---------+"},{"line_number":153,"context_line":"      +-----+-----+"},{"line_number":154,"context_line":""},{"line_number":155,"context_line":"In the case of calls like attach, extend, clone, delete etc;"},{"line_number":156,"context_line":"if either the backend host is not reachable, or if the primary_host_status"},{"line_number":157,"context_line":"column is set, we\u0027ll redirect to the host in the secondary_hosts"},{"line_number":158,"context_line":"column.  If that\u0027s unavailalbe then we fail, just like we do today."}],"source_content_type":"text/x-rst","patch_set":2,"id":"da86d52c_68dba97d","line":155,"in_reply_to":"da86d52c_94b9ee17","updated":"2015-02-15 23:42:14.000000000","message":"Maybe so, I was thinking just brute force, you call delete and I delete both and get on with life.  There are probably some advantages to disabling replication first.  The thought I had though was try to keep the uniqueness of replication \"hidden\" from the end user though.  In other words, other than he/she asking for a special volume type, they shouldn\u0027t have to treat said volume any differently.","commit_id":"58119f1c86eb423ef1d51d7722e82a3690d8796f"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"d9405e6439104d7fc43dc5cf002a7edc920cb5f9","unresolved":false,"context_lines":[{"line_number":155,"context_line":"In the case of calls like attach, extend, clone, delete etc;"},{"line_number":156,"context_line":"if either the backend host is not reachable, or if the primary_host_status"},{"line_number":157,"context_line":"column is set, we\u0027ll redirect to the host in the secondary_hosts"},{"line_number":158,"context_line":"column.  If that\u0027s unavailalbe then we fail, just like we do today."},{"line_number":159,"context_line":""},{"line_number":160,"context_line":"See DB section below"},{"line_number":161,"context_line":""}],"source_content_type":"text/x-rst","patch_set":2,"id":"da86d52c_d4d3665d","line":158,"updated":"2015-02-14 01:07:21.000000000","message":"/unavailalbe/unavailable/","commit_id":"58119f1c86eb423ef1d51d7722e82a3690d8796f"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"3063e50897cfc465c8b44fe9382ef6d2be8fe09d","unresolved":false,"context_lines":[{"line_number":155,"context_line":"In the case of calls like attach, extend, clone, delete etc;"},{"line_number":156,"context_line":"if either the backend host is not reachable, or if the primary_host_status"},{"line_number":157,"context_line":"column is set, we\u0027ll redirect to the host in the secondary_hosts"},{"line_number":158,"context_line":"column.  If that\u0027s unavailalbe then we fail, just like we do today."},{"line_number":159,"context_line":""},{"line_number":160,"context_line":"See DB section below"},{"line_number":161,"context_line":""}],"source_content_type":"text/x-rst","patch_set":2,"id":"da86d52c_94753cce","line":158,"updated":"2015-02-16 19:18:21.000000000","message":"So, this is quite a step forward from the original replication proposal if I am reading it correctly.  In the case that the primary host is not available Cinder will automatically use the secondary host?  Doesn\u0027t that mean that two way replication must be enabled.  I.E. you go to attach your volume, the primary is hosed so you end up using the secondary.  Now, the data in the secondary is updated while the volume is attached.  That needs to get back to the primary somehow.\n\nJust wondering, if this all happens automatically, how the user is going to know that now they have an updated replica that isn\u0027t being replicated.","commit_id":"58119f1c86eb423ef1d51d7722e82a3690d8796f"},{"author":{"_account_id":4418,"name":"Ronen Kat","email":"ronenkat@il.ibm.com","username":"ronenkat"},"change_message_id":"a92ce4f67b59637f1c86724212eccb244f8f3471","unresolved":false,"context_lines":[{"line_number":155,"context_line":"In the case of calls like attach, extend, clone, delete etc;"},{"line_number":156,"context_line":"if either the backend host is not reachable, or if the primary_host_status"},{"line_number":157,"context_line":"column is set, we\u0027ll redirect to the host in the secondary_hosts"},{"line_number":158,"context_line":"column.  If that\u0027s unavailalbe then we fail, just like we do today."},{"line_number":159,"context_line":""},{"line_number":160,"context_line":"See DB section below"},{"line_number":161,"context_line":""}],"source_content_type":"text/x-rst","patch_set":2,"id":"da86d52c_9f31ab0d","line":158,"in_reply_to":"da86d52c_1824fac4","updated":"2015-02-17 19:58:26.000000000","message":"It can introduce orphan volumes if not managed properly, thing will not show in OpenStack but may stay on the storage. Cinder has this problem today, but this has the potential to increase this inconsistency.\nHere is one possible story: Storage fails. Replica is in another data center. Now all volumes are \"moved\". Storage comes back up after 15 minutes. Ops... latencies and costs are now up.","commit_id":"58119f1c86eb423ef1d51d7722e82a3690d8796f"},{"author":{"_account_id":4418,"name":"Ronen Kat","email":"ronenkat@il.ibm.com","username":"ronenkat"},"change_message_id":"618e22d8c7e262aaccddbfd20fbefb4b05300453","unresolved":false,"context_lines":[{"line_number":155,"context_line":"In the case of calls like attach, extend, clone, delete etc;"},{"line_number":156,"context_line":"if either the backend host is not reachable, or if the primary_host_status"},{"line_number":157,"context_line":"column is set, we\u0027ll redirect to the host in the secondary_hosts"},{"line_number":158,"context_line":"column.  If that\u0027s unavailalbe then we fail, just like we do today."},{"line_number":159,"context_line":""},{"line_number":160,"context_line":"See DB section below"},{"line_number":161,"context_line":""}],"source_content_type":"text/x-rst","patch_set":2,"id":"da86d52c_ab373a4c","line":158,"in_reply_to":"da86d52c_94753cce","updated":"2015-02-16 20:16:53.000000000","message":"I think we are confusing control path and data path.\nI see here concepts that helps Cinder volume driver be highly available, but has nothing with replication which addresses data path solutions.\nWe should be careful not to mix between control path failures and data path failures - replication addresses a back end failure, not Cinder host failures.\n\nFollowing this path I see multiple switches between backends just because the Cinder node fails... This behaviour introduces unpredictability and noise into the system.","commit_id":"58119f1c86eb423ef1d51d7722e82a3690d8796f"},{"author":{"_account_id":2243,"name":"John Griffith","email":"john.griffith8@gmail.com","username":"john-griffith"},"change_message_id":"75069d34e4369a8b5920552a341de97d9ac9805f","unresolved":false,"context_lines":[{"line_number":155,"context_line":"In the case of calls like attach, extend, clone, delete etc;"},{"line_number":156,"context_line":"if either the backend host is not reachable, or if the primary_host_status"},{"line_number":157,"context_line":"column is set, we\u0027ll redirect to the host in the secondary_hosts"},{"line_number":158,"context_line":"column.  If that\u0027s unavailalbe then we fail, just like we do today."},{"line_number":159,"context_line":""},{"line_number":160,"context_line":"See DB section below"},{"line_number":161,"context_line":""}],"source_content_type":"text/x-rst","patch_set":2,"id":"da86d52c_1824fac4","line":158,"in_reply_to":"da86d52c_ab373a4c","updated":"2015-02-17 17:35:52.000000000","message":"@Ronen,\nSorry, I\u0027m not following your comments.  Particularly IMO this actually greatly reduces the \"unpredictability and noise\" in the system.\n\nEasy add here is also \"auto_failover\u003dTrue/False\" for targets.","commit_id":"58119f1c86eb423ef1d51d7722e82a3690d8796f"},{"author":{"_account_id":4418,"name":"Ronen Kat","email":"ronenkat@il.ibm.com","username":"ronenkat"},"change_message_id":"a92ce4f67b59637f1c86724212eccb244f8f3471","unresolved":false,"context_lines":[{"line_number":163,"context_line":"------------"},{"line_number":164,"context_line":""},{"line_number":165,"context_line":"There are all sorts of alternatives, the most obvious of which is to leave"},{"line_number":166,"context_line":"the implementation we have and iron it out.  Maybe that\u0027s good, maybe that\u0027s"},{"line_number":167,"context_line":"not.  In my opinion this approach is simpler, easier to maintain and more"},{"line_number":168,"context_line":"flexible; otherwise I wouldn\u0027t propose it.  The fact that there\u0027s only"},{"line_number":169,"context_line":"one vendor that\u0027s implemented replication in the existing setup and they"}],"source_content_type":"text/x-rst","patch_set":2,"id":"da86d52c_3f099f31","line":166,"updated":"2015-02-17 19:58:26.000000000","message":"I mostly see an extension of the current implementation, moving into where the original replication proposal was aiming.","commit_id":"58119f1c86eb423ef1d51d7722e82a3690d8796f"},{"author":{"_account_id":4418,"name":"Ronen Kat","email":"ronenkat@il.ibm.com","username":"ronenkat"},"change_message_id":"618e22d8c7e262aaccddbfd20fbefb4b05300453","unresolved":false,"context_lines":[{"line_number":168,"context_line":"flexible; otherwise I wouldn\u0027t propose it.  The fact that there\u0027s only"},{"line_number":169,"context_line":"one vendor that\u0027s implemented replication in the existing setup and they"},{"line_number":170,"context_line":"have a number of open issues currently we\u0027re not causing a terrible amount"},{"line_number":171,"context_line":"of churn or disturbance if we move forward with this now."},{"line_number":172,"context_line":""},{"line_number":173,"context_line":"The result will be something that should be easier to implement and as an"},{"line_number":174,"context_line":"option will have less impact on the core code."}],"source_content_type":"text/x-rst","patch_set":2,"id":"da86d52c_abb81a76","line":171,"updated":"2015-02-16 20:16:53.000000000","message":"There is a 3rd replication design, the first one proposed by Avishay.\nThis design is somewhat between the current one we have and the original.\nIf opting out of the current design, we should review and consider all options.","commit_id":"58119f1c86eb423ef1d51d7722e82a3690d8796f"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"d9405e6439104d7fc43dc5cf002a7edc920cb5f9","unresolved":false,"context_lines":[{"line_number":185,"context_line":""},{"line_number":186,"context_line":"First we would want a secondary_hosts column added.  In reality"},{"line_number":187,"context_line":"to allow for expansion of things like three way replication we"},{"line_number":188,"context_line":"should make this a comma seperated list so we can add to it."},{"line_number":189,"context_line":""},{"line_number":190,"context_line":"I\u0027d propose something like this:"},{"line_number":191,"context_line":"  secondary_hosts None                     (default)"}],"source_content_type":"text/x-rst","patch_set":2,"id":"da86d52c_1445fe16","line":188,"updated":"2015-02-14 01:07:21.000000000","message":"+1","commit_id":"58119f1c86eb423ef1d51d7722e82a3690d8796f"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"3063e50897cfc465c8b44fe9382ef6d2be8fe09d","unresolved":false,"context_lines":[{"line_number":185,"context_line":""},{"line_number":186,"context_line":"First we would want a secondary_hosts column added.  In reality"},{"line_number":187,"context_line":"to allow for expansion of things like three way replication we"},{"line_number":188,"context_line":"should make this a comma seperated list so we can add to it."},{"line_number":189,"context_line":""},{"line_number":190,"context_line":"I\u0027d propose something like this:"},{"line_number":191,"context_line":"  secondary_hosts None                     (default)"}],"source_content_type":"text/x-rst","patch_set":2,"id":"da86d52c_543ae4e7","line":188,"updated":"2015-02-16 19:18:21.000000000","message":"+1","commit_id":"58119f1c86eb423ef1d51d7722e82a3690d8796f"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"d9405e6439104d7fc43dc5cf002a7edc920cb5f9","unresolved":false,"context_lines":[{"line_number":195,"context_line":"There may be a much better way to represent this in the DB but this"},{"line_number":196,"context_line":"is the gist of it."},{"line_number":197,"context_line":""},{"line_number":198,"context_line":"Additionaly we would want to have a way to short cut the host timeout"},{"line_number":199,"context_line":"process, or to force use of a secondary even if the primary host is"},{"line_number":200,"context_line":"available.  This is where the second column in the volume table would"},{"line_number":201,"context_line":"come in:"}],"source_content_type":"text/x-rst","patch_set":2,"id":"da86d52c_54469622","line":198,"updated":"2015-02-14 01:07:21.000000000","message":"/Additionaly/Additionally/","commit_id":"58119f1c86eb423ef1d51d7722e82a3690d8796f"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"3063e50897cfc465c8b44fe9382ef6d2be8fe09d","unresolved":false,"context_lines":[{"line_number":200,"context_line":"available.  This is where the second column in the volume table would"},{"line_number":201,"context_line":"come in:"},{"line_number":202,"context_line":"  primary_host_enabled True  (default)"},{"line_number":203,"context_line":"  primary_host_enabled False (means use secondary if there is one)"},{"line_number":204,"context_line":""},{"line_number":205,"context_line":"* What database migrations will accompany this change."},{"line_number":206,"context_line":""}],"source_content_type":"text/x-rst","patch_set":2,"id":"da86d52c_2817d046","line":203,"updated":"2015-02-16 19:18:21.000000000","message":"Ah, is this how you are handling the concerns I raised above w/r/t two way replication?  Limit it to using just the primary host unless this is set to false?","commit_id":"58119f1c86eb423ef1d51d7722e82a3690d8796f"},{"author":{"_account_id":4418,"name":"Ronen Kat","email":"ronenkat@il.ibm.com","username":"ronenkat"},"change_message_id":"618e22d8c7e262aaccddbfd20fbefb4b05300453","unresolved":false,"context_lines":[{"line_number":200,"context_line":"available.  This is where the second column in the volume table would"},{"line_number":201,"context_line":"come in:"},{"line_number":202,"context_line":"  primary_host_enabled True  (default)"},{"line_number":203,"context_line":"  primary_host_enabled False (means use secondary if there is one)"},{"line_number":204,"context_line":""},{"line_number":205,"context_line":"* What database migrations will accompany this change."},{"line_number":206,"context_line":""}],"source_content_type":"text/x-rst","patch_set":2,"id":"da86d52c_3ee8ea15","line":203,"in_reply_to":"da86d52c_2817d046","updated":"2015-02-16 20:16:53.000000000","message":"Why not have a mechanism to switch between a primary and secondary?\nBTW, an alternative DB scheme would be adding a new \"replication table\" where we could list all replicas and their state.","commit_id":"58119f1c86eb423ef1d51d7722e82a3690d8796f"},{"author":{"_account_id":4418,"name":"Ronen Kat","email":"ronenkat@il.ibm.com","username":"ronenkat"},"change_message_id":"618e22d8c7e262aaccddbfd20fbefb4b05300453","unresolved":false,"context_lines":[{"line_number":201,"context_line":"come in:"},{"line_number":202,"context_line":"  primary_host_enabled True  (default)"},{"line_number":203,"context_line":"  primary_host_enabled False (means use secondary if there is one)"},{"line_number":204,"context_line":""},{"line_number":205,"context_line":"* What database migrations will accompany this change."},{"line_number":206,"context_line":""},{"line_number":207,"context_line":"Simple DB migrate on the Volumes table, defaults will be acceptable"}],"source_content_type":"text/x-rst","patch_set":2,"id":"da86d52c_1eb3264e","line":204,"updated":"2015-02-16 20:16:53.000000000","message":"Where would you report replication status? how would the user/admin know that replication is working ok? keep in mind that the back end know the progress of replication and if the replica is in consistent state or not - this should be visible to the cloud admin, so he can take actions if needed.\nFailover can\u0027t happen if the replica is not consistent - how would we verify this?","commit_id":"58119f1c86eb423ef1d51d7722e82a3690d8796f"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"d9405e6439104d7fc43dc5cf002a7edc920cb5f9","unresolved":false,"context_lines":[{"line_number":206,"context_line":""},{"line_number":207,"context_line":"Simple DB migrate on the Volumes table, defaults will be acceptable"},{"line_number":208,"context_line":"in the majority of the cases, although we\u0027ll have to ensure we do"},{"line_number":209,"context_line":"something to preserve/reenable IBM backends that may be using replication"},{"line_number":210,"context_line":""},{"line_number":211,"context_line":"REST API impact"},{"line_number":212,"context_line":"---------------"}],"source_content_type":"text/x-rst","patch_set":2,"id":"da86d52c_d461a6a9","line":209,"updated":"2015-02-14 01:07:21.000000000","message":".","commit_id":"58119f1c86eb423ef1d51d7722e82a3690d8796f"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"05bd0ae6ba441341e63fc089707b6ace9c8e0a72","unresolved":false,"context_lines":[{"line_number":206,"context_line":""},{"line_number":207,"context_line":"Simple DB migrate on the Volumes table, defaults will be acceptable"},{"line_number":208,"context_line":"in the majority of the cases, although we\u0027ll have to ensure we do"},{"line_number":209,"context_line":"something to preserve/reenable IBM backends that may be using replication"},{"line_number":210,"context_line":""},{"line_number":211,"context_line":"REST API impact"},{"line_number":212,"context_line":"---------------"}],"source_content_type":"text/x-rst","patch_set":2,"id":"da86d52c_ffecb02b","line":209,"in_reply_to":"da86d52c_d461a6a9","updated":"2015-02-16 03:35:34.000000000","message":"The following columns are existing for the current replication implementation:\n\n    replication_status \u003d Column(String(255))\n    replication_extended_status \u003d Column(String(255))\n    replication_driver_data \u003d Column(String(255))","commit_id":"58119f1c86eb423ef1d51d7722e82a3690d8796f"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"d9405e6439104d7fc43dc5cf002a7edc920cb5f9","unresolved":false,"context_lines":[{"line_number":221,"context_line":"* Specification for the methods"},{"line_number":222,"context_line":"   cinder replication-enable \u003cvolume-id\u003e"},{"line_number":223,"context_line":"     Enables replication services on the specified volume."},{"line_number":224,"context_line":"     Checks to ensure that recplication capabilities are available"},{"line_number":225,"context_line":"     on the volumes current host, if not returns an InvalidRequest"},{"line_number":226,"context_line":"     error, but does not put the volume in an error status."},{"line_number":227,"context_line":""}],"source_content_type":"text/x-rst","patch_set":2,"id":"da86d52c_34704273","line":224,"updated":"2015-02-14 01:07:21.000000000","message":"/recplication/replication/","commit_id":"58119f1c86eb423ef1d51d7722e82a3690d8796f"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"d9405e6439104d7fc43dc5cf002a7edc920cb5f9","unresolved":false,"context_lines":[{"line_number":222,"context_line":"   cinder replication-enable \u003cvolume-id\u003e"},{"line_number":223,"context_line":"     Enables replication services on the specified volume."},{"line_number":224,"context_line":"     Checks to ensure that recplication capabilities are available"},{"line_number":225,"context_line":"     on the volumes current host, if not returns an InvalidRequest"},{"line_number":226,"context_line":"     error, but does not put the volume in an error status."},{"line_number":227,"context_line":""},{"line_number":228,"context_line":"     Requires the volume has been created using the extra-spec"}],"source_content_type":"text/x-rst","patch_set":2,"id":"da86d52c_d408c6db","line":225,"updated":"2015-02-14 01:07:21.000000000","message":"Would we want to introduce a new error other than InvalidRequest to make the case clear where a backend is being used that is either not capable or not configured for replication?","commit_id":"58119f1c86eb423ef1d51d7722e82a3690d8796f"},{"author":{"_account_id":2243,"name":"John Griffith","email":"john.griffith8@gmail.com","username":"john-griffith"},"change_message_id":"08b5b85b02948b460127566574e5625ca1317acd","unresolved":false,"context_lines":[{"line_number":222,"context_line":"   cinder replication-enable \u003cvolume-id\u003e"},{"line_number":223,"context_line":"     Enables replication services on the specified volume."},{"line_number":224,"context_line":"     Checks to ensure that recplication capabilities are available"},{"line_number":225,"context_line":"     on the volumes current host, if not returns an InvalidRequest"},{"line_number":226,"context_line":"     error, but does not put the volume in an error status."},{"line_number":227,"context_line":""},{"line_number":228,"context_line":"     Requires the volume has been created using the extra-spec"}],"source_content_type":"text/x-rst","patch_set":2,"id":"da86d52c_88d8dd80","line":225,"in_reply_to":"da86d52c_d408c6db","updated":"2015-02-15 23:42:14.000000000","message":"I like that... probably a really good idea","commit_id":"58119f1c86eb423ef1d51d7722e82a3690d8796f"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"3063e50897cfc465c8b44fe9382ef6d2be8fe09d","unresolved":false,"context_lines":[{"line_number":226,"context_line":"     error, but does not put the volume in an error status."},{"line_number":227,"context_line":""},{"line_number":228,"context_line":"     Requires the volume has been created using the extra-spec"},{"line_number":229,"context_line":"     replication_capable\u003dTrue."},{"line_number":230,"context_line":""},{"line_number":231,"context_line":"     In addition this assumes that the target devices are configured"},{"line_number":232,"context_line":"     properly in the cinder.conf file and the devices are linked."}],"source_content_type":"text/x-rst","patch_set":2,"id":"da86d52c_c8ad54ec","line":229,"updated":"2015-02-16 19:18:21.000000000","message":"Could there be a config option added like replication_autostart so that users don\u0027t have to do cinder replication-enable \u003cvolume-id\u003e on their volumes?","commit_id":"58119f1c86eb423ef1d51d7722e82a3690d8796f"},{"author":{"_account_id":2243,"name":"John Griffith","email":"john.griffith8@gmail.com","username":"john-griffith"},"change_message_id":"75069d34e4369a8b5920552a341de97d9ac9805f","unresolved":false,"context_lines":[{"line_number":226,"context_line":"     error, but does not put the volume in an error status."},{"line_number":227,"context_line":""},{"line_number":228,"context_line":"     Requires the volume has been created using the extra-spec"},{"line_number":229,"context_line":"     replication_capable\u003dTrue."},{"line_number":230,"context_line":""},{"line_number":231,"context_line":"     In addition this assumes that the target devices are configured"},{"line_number":232,"context_line":"     properly in the cinder.conf file and the devices are linked."}],"source_content_type":"text/x-rst","patch_set":2,"id":"da86d52c_53b8152a","line":229,"in_reply_to":"da86d52c_c8ad54ec","updated":"2015-02-17 17:35:52.000000000","message":"For clarity, users wouldn\u0027t do this anyway, admins would.  Also, yes; we could certainly do it via Types... but I wanted to provide the opportunity to turn it on for an existing volume if it\u0027s supported.\n\nThere are other cases where this is useful, like a new backend is added to the cloud deployment, we want to migrate efficiently without downtime using replication in the background.","commit_id":"58119f1c86eb423ef1d51d7722e82a3690d8796f"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"d9405e6439104d7fc43dc5cf002a7edc920cb5f9","unresolved":false,"context_lines":[{"line_number":235,"context_line":"     Disables replication services on a volume that is currently"},{"line_number":236,"context_line":"     in a replication enabled state.  If the volume is not in a"},{"line_number":237,"context_line":"     replication enabled state, we ignore the request and return an"},{"line_number":238,"context_line":"     InvalidStatus error, but do not set the volume to error status."},{"line_number":239,"context_line":""},{"line_number":240,"context_line":""},{"line_number":241,"context_line":"   cinder replication-failover \u003cvolume-id\u003e"}],"source_content_type":"text/x-rst","patch_set":2,"id":"da86d52c_b42a722d","line":238,"updated":"2015-02-14 01:07:21.000000000","message":"I would propose we just return success. If they want replication disabled, the end result is it is disabled (as it was never enabled in the first place).\n\nThen again, I could also see the value in erroring in case they call this on the wrong volume. Then it is clear something was wrong and they have a chance of recognizing that they made a mistake.","commit_id":"58119f1c86eb423ef1d51d7722e82a3690d8796f"},{"author":{"_account_id":2243,"name":"John Griffith","email":"john.griffith8@gmail.com","username":"john-griffith"},"change_message_id":"08b5b85b02948b460127566574e5625ca1317acd","unresolved":false,"context_lines":[{"line_number":235,"context_line":"     Disables replication services on a volume that is currently"},{"line_number":236,"context_line":"     in a replication enabled state.  If the volume is not in a"},{"line_number":237,"context_line":"     replication enabled state, we ignore the request and return an"},{"line_number":238,"context_line":"     InvalidStatus error, but do not set the volume to error status."},{"line_number":239,"context_line":""},{"line_number":240,"context_line":""},{"line_number":241,"context_line":"   cinder replication-failover \u003cvolume-id\u003e"}],"source_content_type":"text/x-rst","patch_set":2,"id":"da86d52c_a8e5a139","line":238,"in_reply_to":"da86d52c_b42a722d","updated":"2015-02-15 23:42:14.000000000","message":"Hehe... good point.  Especially since a while back I pushed that through for delete :)","commit_id":"58119f1c86eb423ef1d51d7722e82a3690d8796f"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"d9405e6439104d7fc43dc5cf002a7edc920cb5f9","unresolved":false,"context_lines":[{"line_number":239,"context_line":""},{"line_number":240,"context_line":""},{"line_number":241,"context_line":"   cinder replication-failover \u003cvolume-id\u003e"},{"line_number":242,"context_line":"     Sets things up so taht subsequent calls should be serviced"},{"line_number":243,"context_line":"     by the secondary_host."},{"line_number":244,"context_line":""},{"line_number":245,"context_line":""}],"source_content_type":"text/x-rst","patch_set":2,"id":"da86d52c_142a5e2c","line":242,"updated":"2015-02-14 01:07:21.000000000","message":"/taht/that/","commit_id":"58119f1c86eb423ef1d51d7722e82a3690d8796f"},{"author":{"_account_id":15506,"name":"zhangli","email":"zhangli09@huawei.com"},"change_message_id":"78f71bc99d1949fd03de94a5e78045aa34aed8ed","unresolved":false,"context_lines":[{"line_number":249,"context_line":"Use case is to provide highly available data to end users.  By using"},{"line_number":250,"context_line":"replication and fail over to a secondary the device storing the users"},{"line_number":251,"context_line":"data can burst into flames, but a copy of that data is still available"},{"line_number":252,"context_line":"on another device, perhaps in another data center and Cinder has the"},{"line_number":253,"context_line":"capability of just redirecting requests for that data with minimal or zero"},{"line_number":254,"context_line":"down time."},{"line_number":255,"context_line":""}],"source_content_type":"text/x-rst","patch_set":2,"id":"9a80dd14_7e0edee6","line":252,"updated":"2015-03-18 09:14:39.000000000","message":"Will this v2 replication support the cross-site DR?","commit_id":"58119f1c86eb423ef1d51d7722e82a3690d8796f"},{"author":{"_account_id":6825,"name":"Gary W. Smith","email":"garysmith123@gmail.com","username":"gary-w-smith"},"change_message_id":"83f309177be1b6b88951d773ed181c23af68e516","unresolved":false,"context_lines":[{"line_number":251,"context_line":"data can burst into flames, but a copy of that data is still available"},{"line_number":252,"context_line":"on another device, perhaps in another data center and Cinder has the"},{"line_number":253,"context_line":"capability of just redirecting requests for that data with minimal or zero"},{"line_number":254,"context_line":"down time."},{"line_number":255,"context_line":""},{"line_number":256,"context_line":"* Discuss any policy changes, and discuss what things a deployer needs to"},{"line_number":257,"context_line":"  think about when defining their policy."}],"source_content_type":"text/x-rst","patch_set":2,"id":"ba7be1f8_1f7c3020","line":254,"updated":"2015-02-20 20:53:25.000000000","message":"If the primary volume is attached to a vm, then how does failover deal with the attachment?  Is there administrative intervention required to detach and re-attach or does it happen automatically?  Is it expected that a single volume service connect to both the primary array (the one hosting the primary volume) and to the secondary array?","commit_id":"58119f1c86eb423ef1d51d7722e82a3690d8796f"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"3063e50897cfc465c8b44fe9382ef6d2be8fe09d","unresolved":false,"context_lines":[{"line_number":321,"context_line":"--------------------"},{"line_number":322,"context_line":""},{"line_number":323,"context_line":"Please specify any changes to notifications. Be that an extra notification,"},{"line_number":324,"context_line":"changes to an existing notification, or removing a notification."},{"line_number":325,"context_line":""},{"line_number":326,"context_line":"Other end user impact"},{"line_number":327,"context_line":"---------------------"}],"source_content_type":"text/x-rst","patch_set":2,"id":"da86d52c_880efce3","line":324,"updated":"2015-02-16 19:18:21.000000000","message":"I would think there would still be notification impacts here...","commit_id":"58119f1c86eb423ef1d51d7722e82a3690d8796f"},{"author":{"_account_id":4418,"name":"Ronen Kat","email":"ronenkat@il.ibm.com","username":"ronenkat"},"change_message_id":"618e22d8c7e262aaccddbfd20fbefb4b05300453","unresolved":false,"context_lines":[{"line_number":321,"context_line":"--------------------"},{"line_number":322,"context_line":""},{"line_number":323,"context_line":"Please specify any changes to notifications. Be that an extra notification,"},{"line_number":324,"context_line":"changes to an existing notification, or removing a notification."},{"line_number":325,"context_line":""},{"line_number":326,"context_line":"Other end user impact"},{"line_number":327,"context_line":"---------------------"}],"source_content_type":"text/x-rst","patch_set":2,"id":"da86d52c_1efde6b1","line":324,"in_reply_to":"da86d52c_880efce3","updated":"2015-02-16 20:16:53.000000000","message":"+1 enable/disable and failover seems good candidates for notifcations","commit_id":"58119f1c86eb423ef1d51d7722e82a3690d8796f"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"d9405e6439104d7fc43dc5cf002a7edc920cb5f9","unresolved":false,"context_lines":[{"line_number":330,"context_line":"feature?"},{"line_number":331,"context_line":""},{"line_number":332,"context_line":"* Does this change have an impact on python-cinderclient? What does the user"},{"line_number":333,"context_line":"  interface there look like?"},{"line_number":334,"context_line":""},{"line_number":335,"context_line":"Performance Impact"},{"line_number":336,"context_line":"------------------"}],"source_content_type":"text/x-rst","patch_set":2,"id":"da86d52c_34e5a20a","line":333,"updated":"2015-02-14 01:07:21.000000000","message":"I think we should consider the changes required to cinderclient, openstacksdk, and Horizon. At least as follow on work to be done once this functionality is introduced.","commit_id":"58119f1c86eb423ef1d51d7722e82a3690d8796f"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"05bd0ae6ba441341e63fc089707b6ace9c8e0a72","unresolved":false,"context_lines":[{"line_number":330,"context_line":"feature?"},{"line_number":331,"context_line":""},{"line_number":332,"context_line":"* Does this change have an impact on python-cinderclient? What does the user"},{"line_number":333,"context_line":"  interface there look like?"},{"line_number":334,"context_line":""},{"line_number":335,"context_line":"Performance Impact"},{"line_number":336,"context_line":"------------------"}],"source_content_type":"text/x-rst","patch_set":2,"id":"da86d52c_dfce0cb7","line":333,"in_reply_to":"da86d52c_34e5a20a","updated":"2015-02-16 03:35:34.000000000","message":"+1","commit_id":"58119f1c86eb423ef1d51d7722e82a3690d8796f"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"d9405e6439104d7fc43dc5cf002a7edc920cb5f9","unresolved":false,"context_lines":[{"line_number":407,"context_line":"  john-griffith"},{"line_number":408,"context_line":""},{"line_number":409,"context_line":"Other contributors:"},{"line_number":410,"context_line":"  \u003claunchpad-id or None\u003e"},{"line_number":411,"context_line":""},{"line_number":412,"context_line":"Work Items"},{"line_number":413,"context_line":"----------"}],"source_content_type":"text/x-rst","patch_set":2,"id":"da86d52c_5490564e","line":410,"updated":"2015-02-14 01:07:21.000000000","message":"In order to prevent this from being a single vendor implementation we should consider having at least a few different vendors implement this from the get go to make sure it works consistently across different platforms. I would be interested in contributing to this and being one of those. Looks like Patrick would be another good candidate.\n\nProbably good to get IBM onboard as well since they will be migrating from the v1 implementation. It would be good to have them involved to identify any migration issues with this.","commit_id":"58119f1c86eb423ef1d51d7722e82a3690d8796f"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"3063e50897cfc465c8b44fe9382ef6d2be8fe09d","unresolved":false,"context_lines":[{"line_number":407,"context_line":"  john-griffith"},{"line_number":408,"context_line":""},{"line_number":409,"context_line":"Other contributors:"},{"line_number":410,"context_line":"  \u003claunchpad-id or None\u003e"},{"line_number":411,"context_line":""},{"line_number":412,"context_line":"Work Items"},{"line_number":413,"context_line":"----------"}],"source_content_type":"text/x-rst","patch_set":2,"id":"da86d52c_e8c77863","line":410,"in_reply_to":"da86d52c_5490564e","updated":"2015-02-16 19:18:21.000000000","message":"Agreed.  We would get Tao and Nilesh or Sasi on board with this ASAP.","commit_id":"58119f1c86eb423ef1d51d7722e82a3690d8796f"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"05bd0ae6ba441341e63fc089707b6ace9c8e0a72","unresolved":false,"context_lines":[{"line_number":407,"context_line":"  john-griffith"},{"line_number":408,"context_line":""},{"line_number":409,"context_line":"Other contributors:"},{"line_number":410,"context_line":"  \u003claunchpad-id or None\u003e"},{"line_number":411,"context_line":""},{"line_number":412,"context_line":"Work Items"},{"line_number":413,"context_line":"----------"}],"source_content_type":"text/x-rst","patch_set":2,"id":"da86d52c_2d43836d","line":410,"in_reply_to":"da86d52c_5490564e","updated":"2015-02-16 03:35:34.000000000","message":"I would definitely like to help with this.","commit_id":"58119f1c86eb423ef1d51d7722e82a3690d8796f"},{"author":{"_account_id":2243,"name":"John Griffith","email":"john.griffith8@gmail.com","username":"john-griffith"},"change_message_id":"08b5b85b02948b460127566574e5625ca1317acd","unresolved":false,"context_lines":[{"line_number":407,"context_line":"  john-griffith"},{"line_number":408,"context_line":""},{"line_number":409,"context_line":"Other contributors:"},{"line_number":410,"context_line":"  \u003claunchpad-id or None\u003e"},{"line_number":411,"context_line":""},{"line_number":412,"context_line":"Work Items"},{"line_number":413,"context_line":"----------"}],"source_content_type":"text/x-rst","patch_set":2,"id":"da86d52c_c8e2d52e","line":410,"in_reply_to":"da86d52c_5490564e","updated":"2015-02-15 23:42:14.000000000","message":"sure, I\u0027d like to POC it and get yourself, Patrick, Walt, Xing somebody from IBM... (basically everybody) on board.","commit_id":"58119f1c86eb423ef1d51d7722e82a3690d8796f"},{"author":{"_account_id":170,"name":"Mike Perez","email":"thingee@gmail.com","username":"thingee"},"change_message_id":"253cacd023e549592335f230610bc0786a7ff628","unresolved":false,"context_lines":[{"line_number":452,"context_line":"donating resources to the docs team to have the documentation updated. Don\u0027t"},{"line_number":453,"context_line":"repeat details discussed above, but please reference them here."},{"line_number":454,"context_line":""},{"line_number":455,"context_line":"Obviously this is going to need docs"},{"line_number":456,"context_line":""},{"line_number":457,"context_line":""},{"line_number":458,"context_line":"References"}],"source_content_type":"text/x-rst","patch_set":2,"id":"da86d52c_3bea8174","line":455,"updated":"2015-02-18 05:42:04.000000000","message":"* API reference docs\n* OpenStack operator docs","commit_id":"58119f1c86eb423ef1d51d7722e82a3690d8796f"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"3063e50897cfc465c8b44fe9382ef6d2be8fe09d","unresolved":false,"context_lines":[{"line_number":474,"context_line":""},{"line_number":475,"context_line":"  The specs process is a bit much, we should revisit it.  It\u0027s rather"},{"line_number":476,"context_line":"  bloated, and while the first few sections are fantastic for requiring"},{"line_number":477,"context_line":"  thought and planning, towards the end it just gets silly."}],"source_content_type":"text/x-rst","patch_set":2,"id":"da86d52c_089e8c63","line":477,"updated":"2015-02-16 19:18:21.000000000","message":"Where did these extra questions come in?  Don\u0027t remember them originally being here.","commit_id":"58119f1c86eb423ef1d51d7722e82a3690d8796f"}],"specs/liberty/replication_v2.rst":[{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"3c57a20f4b59f4dcffee0f70d80d8528bccf2d51","unresolved":false,"context_lines":[{"line_number":10,"context_line":""},{"line_number":11,"context_line":"Include the URL of your launchpad blueprint:"},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"https://blueprints.launchpad.net/cinder/+spec/example"},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"Volume replication was implemented in the Juno release.  It was a lot"},{"line_number":16,"context_line":"of challenging and difficult work, and in the end we were fortunate to"}],"source_content_type":"text/x-rst","patch_set":3,"id":"dac4157f_6865c243","line":13,"updated":"2015-04-28 16:27:26.000000000","message":"Need to create a blueprint and link it here.","commit_id":"5e4bc6caacde6c0379746d963c43f7e093588a42"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"1257baa09d2aebbf5d4eb54e4b4f7fd2c2314b77","unresolved":false,"context_lines":[{"line_number":38,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"The replication feature added in Juno was a great start, but now that it\u0027s"},{"line_number":41,"context_line":"been out in the wild for a little while and other are trying to write"},{"line_number":42,"context_line":"implementations against, there are some places that we could simplify a bit"},{"line_number":43,"context_line":"and likely do better."},{"line_number":44,"context_line":""}],"source_content_type":"text/x-rst","patch_set":3,"id":"7aaa499b_4e5e5177","line":41,"updated":"2015-04-15 05:09:08.000000000","message":"other -\u003e others","commit_id":"5e4bc6caacde6c0379746d963c43f7e093588a42"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"3c57a20f4b59f4dcffee0f70d80d8528bccf2d51","unresolved":false,"context_lines":[{"line_number":39,"context_line":""},{"line_number":40,"context_line":"The replication feature added in Juno was a great start, but now that it\u0027s"},{"line_number":41,"context_line":"been out in the wild for a little while and other are trying to write"},{"line_number":42,"context_line":"implementations against, there are some places that we could simplify a bit"},{"line_number":43,"context_line":"and likely do better."},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"The current implementation is fairly complex and  has proven to be difficult"}],"source_content_type":"text/x-rst","patch_set":3,"id":"dac4157f_e379f530","line":42,"updated":"2015-04-28 16:27:26.000000000","message":"Having trouble parsing this sentence.  Suggest:\n\"The replication feature added in Juno was a great start, but as others have tried to implement it in their drivers problem have been found.  There are things that could be simplified in the implementation.\"","commit_id":"5e4bc6caacde6c0379746d963c43f7e093588a42"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"1257baa09d2aebbf5d4eb54e4b4f7fd2c2314b77","unresolved":false,"context_lines":[{"line_number":62,"context_line":"can place a volume correctly if we want to use the feature.  The big"},{"line_number":63,"context_line":"difference however is around the creation of the replica and the life-cycle"},{"line_number":64,"context_line":"that goes with it.  For the first iteration we would only support a single"},{"line_number":65,"context_line":"remote device, but this is something that\u0027s considered in this spec and"},{"line_number":66,"context_line":"could easily be extended to be included in future work. Backend devices"},{"line_number":67,"context_line":"(drivers) would be listed in the cinder.conf file and we add entries"},{"line_number":68,"context_line":"to indicate pairing.  Note, single pairing for first iteration, with a"}],"source_content_type":"text/x-rst","patch_set":3,"id":"7aaa499b_71133067","line":65,"updated":"2015-04-15 05:09:08.000000000","message":"So this supports remote replication. Does this also support local replication? I think replication v1 can support either local or remote depending on driver implementation. local implementation already exists today in some drivers.","commit_id":"5e4bc6caacde6c0379746d963c43f7e093588a42"},{"author":{"_account_id":2243,"name":"John Griffith","email":"john.griffith8@gmail.com","username":"john-griffith"},"change_message_id":"79a9d07aebe4003e05454422cd58b69e60a4619f","unresolved":false,"context_lines":[{"line_number":62,"context_line":"can place a volume correctly if we want to use the feature.  The big"},{"line_number":63,"context_line":"difference however is around the creation of the replica and the life-cycle"},{"line_number":64,"context_line":"that goes with it.  For the first iteration we would only support a single"},{"line_number":65,"context_line":"remote device, but this is something that\u0027s considered in this spec and"},{"line_number":66,"context_line":"could easily be extended to be included in future work. Backend devices"},{"line_number":67,"context_line":"(drivers) would be listed in the cinder.conf file and we add entries"},{"line_number":68,"context_line":"to indicate pairing.  Note, single pairing for first iteration, with a"}],"source_content_type":"text/x-rst","patch_set":3,"id":"1adf8d57_ebfe9104","line":65,"in_reply_to":"5ad0253b_f5c67815","updated":"2015-05-11 23:39:02.000000000","message":"local replication makes little sense to me, if for some reason somebody wants to replicate to the same device that\u0027s fine, but that should be done via a volume-type/extra-spec.  The concept of replication source and target being the same device doesn\u0027t make a ton of sense for a lot of people IMHO.  It also creates confusion in the API and how it works; vs what the users expectations are.\n\nOne of my complaints about Cinder of late is lack of crisp definitions for what these features actually do.","commit_id":"5e4bc6caacde6c0379746d963c43f7e093588a42"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"3c57a20f4b59f4dcffee0f70d80d8528bccf2d51","unresolved":false,"context_lines":[{"line_number":62,"context_line":"can place a volume correctly if we want to use the feature.  The big"},{"line_number":63,"context_line":"difference however is around the creation of the replica and the life-cycle"},{"line_number":64,"context_line":"that goes with it.  For the first iteration we would only support a single"},{"line_number":65,"context_line":"remote device, but this is something that\u0027s considered in this spec and"},{"line_number":66,"context_line":"could easily be extended to be included in future work. Backend devices"},{"line_number":67,"context_line":"(drivers) would be listed in the cinder.conf file and we add entries"},{"line_number":68,"context_line":"to indicate pairing.  Note, single pairing for first iteration, with a"}],"source_content_type":"text/x-rst","patch_set":3,"id":"5ad0253b_f5c67815","line":65,"in_reply_to":"7aaa499b_71133067","updated":"2015-04-28 16:27:26.000000000","message":"Agree, we need to make sure the approach supports local replication as well as replication to remote systems.  I think it might be best to have a configuration option that allows specification of the type of replication to be used.","commit_id":"5e4bc6caacde6c0379746d963c43f7e093588a42"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"ea7bddfa8c057b0e31fd6141408421b483ab9a43","unresolved":false,"context_lines":[{"line_number":64,"context_line":"that goes with it.  For the first iteration we would only support a single"},{"line_number":65,"context_line":"remote device, but this is something that\u0027s considered in this spec and"},{"line_number":66,"context_line":"could easily be extended to be included in future work. Backend devices"},{"line_number":67,"context_line":"(drivers) would be listed in the cinder.conf file and we add entries"},{"line_number":68,"context_line":"to indicate pairing.  Note, single pairing for first iteration, with a"},{"line_number":69,"context_line":"follow up patch to add multiple targets.  This could be done easily by"},{"line_number":70,"context_line":"using a list of available replication targets."}],"source_content_type":"text/x-rst","patch_set":3,"id":"7aaa499b_d4a560b5","line":67,"updated":"2015-04-14 18:57:09.000000000","message":"Maybe good to include an example of how you see this looking in the cinder.conf file?","commit_id":"5e4bc6caacde6c0379746d963c43f7e093588a42"},{"author":{"_account_id":2243,"name":"John Griffith","email":"john.griffith8@gmail.com","username":"john-griffith"},"change_message_id":"79a9d07aebe4003e05454422cd58b69e60a4619f","unresolved":false,"context_lines":[{"line_number":64,"context_line":"that goes with it.  For the first iteration we would only support a single"},{"line_number":65,"context_line":"remote device, but this is something that\u0027s considered in this spec and"},{"line_number":66,"context_line":"could easily be extended to be included in future work. Backend devices"},{"line_number":67,"context_line":"(drivers) would be listed in the cinder.conf file and we add entries"},{"line_number":68,"context_line":"to indicate pairing.  Note, single pairing for first iteration, with a"},{"line_number":69,"context_line":"follow up patch to add multiple targets.  This could be done easily by"},{"line_number":70,"context_line":"using a list of available replication targets."}],"source_content_type":"text/x-rst","patch_set":3,"id":"1adf8d57_2b6259d9","line":67,"in_reply_to":"7aaa499b_d4a560b5","updated":"2015-05-11 23:39:02.000000000","message":"Done","commit_id":"5e4bc6caacde6c0379746d963c43f7e093588a42"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"1257baa09d2aebbf5d4eb54e4b4f7fd2c2314b77","unresolved":false,"context_lines":[{"line_number":76,"context_line":""},{"line_number":77,"context_line":"This proposal suggests that we would decouple the replication information"},{"line_number":78,"context_line":"from the create call.  The flow would be something like this:"},{"line_number":79,"context_line":"* Create a volume of type \"replication_capable\u003dTrue\""},{"line_number":80,"context_line":"* Cinder uses the existing functionality of the cpabilities filter to pick"},{"line_number":81,"context_line":"  a backend that supports the requested replication type and creates a volume"},{"line_number":82,"context_line":"  nothing different than the existing workflow."}],"source_content_type":"text/x-rst","patch_set":3,"id":"7aaa499b_0eade930","line":79,"updated":"2015-04-15 05:09:08.000000000","message":"I\u0027m thinking about integrating CG and replication.\n\nThe scheduler can handle \"replication_capable\u003dTrue\" and \"consistencygroup_support\u003dTrue\". It should be able to pick a backend that supports both replication and consistency group. \n\nWe can have \"cinder consisgroup-create \u003cvolume-types\u003e --name \u003cname\u003e --replication\". It will choose a primary and a secondary backend (maybe the secondary is picked from pairing in cinder.conf).\n\nIn this case, \"cinder create --consisgroup-id \u003cid\u003e --replication \u003csize\u003e\" can create a volume on the already chosen primary and secondary backend.\n\nThe \"--replication\" flag may not be needed if volume type has replication_capable\u003dTrue.","commit_id":"5e4bc6caacde6c0379746d963c43f7e093588a42"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"fe144e7b1c30b57846986e5b87845dc2d5cb70f8","unresolved":false,"context_lines":[{"line_number":76,"context_line":""},{"line_number":77,"context_line":"This proposal suggests that we would decouple the replication information"},{"line_number":78,"context_line":"from the create call.  The flow would be something like this:"},{"line_number":79,"context_line":"* Create a volume of type \"replication_capable\u003dTrue\""},{"line_number":80,"context_line":"* Cinder uses the existing functionality of the cpabilities filter to pick"},{"line_number":81,"context_line":"  a backend that supports the requested replication type and creates a volume"},{"line_number":82,"context_line":"  nothing different than the existing workflow."}],"source_content_type":"text/x-rst","patch_set":3,"id":"fabf19d9_8e5e0b44","line":79,"in_reply_to":"3ab451fb_63e2a2a1","updated":"2015-04-18 14:08:30.000000000","message":"Tao,\n\nI think driver should be able to handle that if the replication mode is passed on to the driver.","commit_id":"5e4bc6caacde6c0379746d963c43f7e093588a42"},{"author":{"_account_id":11079,"name":"TaoBai","email":"baitao5@huawei.com","username":"TaoBai"},"change_message_id":"93e6122c091987264514a1fd1c93c75c053dd8c3","unresolved":false,"context_lines":[{"line_number":76,"context_line":""},{"line_number":77,"context_line":"This proposal suggests that we would decouple the replication information"},{"line_number":78,"context_line":"from the create call.  The flow would be something like this:"},{"line_number":79,"context_line":"* Create a volume of type \"replication_capable\u003dTrue\""},{"line_number":80,"context_line":"* Cinder uses the existing functionality of the cpabilities filter to pick"},{"line_number":81,"context_line":"  a backend that supports the requested replication type and creates a volume"},{"line_number":82,"context_line":"  nothing different than the existing workflow."}],"source_content_type":"text/x-rst","patch_set":3,"id":"3ab451fb_63e2a2a1","line":79,"in_reply_to":"5aa745d1_6f638cb2","updated":"2015-04-17 11:25:30.000000000","message":"Hi, Xing\n\nFor your design, whether have you thought about that, some replication mode can not be consistency for failover. For example, IBM Storwize streched cluster.","commit_id":"5e4bc6caacde6c0379746d963c43f7e093588a42"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"c748dc1593dafe788db958a74955ce409c74c9d1","unresolved":false,"context_lines":[{"line_number":76,"context_line":""},{"line_number":77,"context_line":"This proposal suggests that we would decouple the replication information"},{"line_number":78,"context_line":"from the create call.  The flow would be something like this:"},{"line_number":79,"context_line":"* Create a volume of type \"replication_capable\u003dTrue\""},{"line_number":80,"context_line":"* Cinder uses the existing functionality of the cpabilities filter to pick"},{"line_number":81,"context_line":"  a backend that supports the requested replication type and creates a volume"},{"line_number":82,"context_line":"  nothing different than the existing workflow."}],"source_content_type":"text/x-rst","patch_set":3,"id":"5aa745d1_6f638cb2","line":79,"in_reply_to":"7aaa499b_0eade930","updated":"2015-04-16 19:39:40.000000000","message":"This will need some change in CG creation code to take care of the CG on the secondary backend, but I think it can be done later after the volume replication is sorted out.\n\nIf at volume creation time, it can take a CG  id and figure out that the volume supports both CG and replication, then it will create a volume in the CG on the primary and also create another volume and place it in the CG on the secondary backend.","commit_id":"5e4bc6caacde6c0379746d963c43f7e093588a42"},{"author":{"_account_id":2243,"name":"John Griffith","email":"john.griffith8@gmail.com","username":"john-griffith"},"change_message_id":"79a9d07aebe4003e05454422cd58b69e60a4619f","unresolved":false,"context_lines":[{"line_number":76,"context_line":""},{"line_number":77,"context_line":"This proposal suggests that we would decouple the replication information"},{"line_number":78,"context_line":"from the create call.  The flow would be something like this:"},{"line_number":79,"context_line":"* Create a volume of type \"replication_capable\u003dTrue\""},{"line_number":80,"context_line":"* Cinder uses the existing functionality of the cpabilities filter to pick"},{"line_number":81,"context_line":"  a backend that supports the requested replication type and creates a volume"},{"line_number":82,"context_line":"  nothing different than the existing workflow."}],"source_content_type":"text/x-rst","patch_set":3,"id":"da1255d7_890dd939","line":79,"in_reply_to":"fabf19d9_8e5e0b44","updated":"2015-05-11 23:39:02.000000000","message":"@Xing\nIdeally yes, we could simplify the crazy create method we have now if we shove some of this sort of thing into existing containers like types.  I think it would be a big win to do this with both replication and CG\u0027s.","commit_id":"5e4bc6caacde6c0379746d963c43f7e093588a42"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"ea7bddfa8c057b0e31fd6141408421b483ab9a43","unresolved":false,"context_lines":[{"line_number":77,"context_line":"This proposal suggests that we would decouple the replication information"},{"line_number":78,"context_line":"from the create call.  The flow would be something like this:"},{"line_number":79,"context_line":"* Create a volume of type \"replication_capable\u003dTrue\""},{"line_number":80,"context_line":"* Cinder uses the existing functionality of the cpabilities filter to pick"},{"line_number":81,"context_line":"  a backend that supports the requested replication type and creates a volume"},{"line_number":82,"context_line":"  nothing different than the existing workflow."},{"line_number":83,"context_line":"* Add API calls for replication-enable, replication-disable,"}],"source_content_type":"text/x-rst","patch_set":3,"id":"7aaa499b_143188ec","line":80,"updated":"2015-04-14 18:57:09.000000000","message":"/cpabilities/capabilities/\n\nSorry, just pointing it out. :)","commit_id":"5e4bc6caacde6c0379746d963c43f7e093588a42"},{"author":{"_account_id":2243,"name":"John Griffith","email":"john.griffith8@gmail.com","username":"john-griffith"},"change_message_id":"79a9d07aebe4003e05454422cd58b69e60a4619f","unresolved":false,"context_lines":[{"line_number":77,"context_line":"This proposal suggests that we would decouple the replication information"},{"line_number":78,"context_line":"from the create call.  The flow would be something like this:"},{"line_number":79,"context_line":"* Create a volume of type \"replication_capable\u003dTrue\""},{"line_number":80,"context_line":"* Cinder uses the existing functionality of the cpabilities filter to pick"},{"line_number":81,"context_line":"  a backend that supports the requested replication type and creates a volume"},{"line_number":82,"context_line":"  nothing different than the existing workflow."},{"line_number":83,"context_line":"* Add API calls for replication-enable, replication-disable,"}],"source_content_type":"text/x-rst","patch_set":3,"id":"da1255d7_6913c55d","line":80,"in_reply_to":"7aaa499b_143188ec","updated":"2015-05-11 23:39:02.000000000","message":"Done","commit_id":"5e4bc6caacde6c0379746d963c43f7e093588a42"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"1257baa09d2aebbf5d4eb54e4b4f7fd2c2314b77","unresolved":false,"context_lines":[{"line_number":78,"context_line":"from the create call.  The flow would be something like this:"},{"line_number":79,"context_line":"* Create a volume of type \"replication_capable\u003dTrue\""},{"line_number":80,"context_line":"* Cinder uses the existing functionality of the cpabilities filter to pick"},{"line_number":81,"context_line":"  a backend that supports the requested replication type and creates a volume"},{"line_number":82,"context_line":"  nothing different than the existing workflow."},{"line_number":83,"context_line":"* Add API calls for replication-enable, replication-disable,"},{"line_number":84,"context_line":"  replication-failover"}],"source_content_type":"text/x-rst","patch_set":3,"id":"7aaa499b_d1d7a4eb","line":81,"updated":"2015-04-15 05:09:08.000000000","message":"The filter scheduler will pick a primary backend as well as a secondary backend (defined in cinder.conf)?","commit_id":"5e4bc6caacde6c0379746d963c43f7e093588a42"},{"author":{"_account_id":2243,"name":"John Griffith","email":"john.griffith8@gmail.com","username":"john-griffith"},"change_message_id":"79a9d07aebe4003e05454422cd58b69e60a4619f","unresolved":false,"context_lines":[{"line_number":78,"context_line":"from the create call.  The flow would be something like this:"},{"line_number":79,"context_line":"* Create a volume of type \"replication_capable\u003dTrue\""},{"line_number":80,"context_line":"* Cinder uses the existing functionality of the cpabilities filter to pick"},{"line_number":81,"context_line":"  a backend that supports the requested replication type and creates a volume"},{"line_number":82,"context_line":"  nothing different than the existing workflow."},{"line_number":83,"context_line":"* Add API calls for replication-enable, replication-disable,"},{"line_number":84,"context_line":"  replication-failover"}],"source_content_type":"text/x-rst","patch_set":3,"id":"da1255d7_8924b9af","line":81,"in_reply_to":"7aaa499b_d1d7a4eb","updated":"2015-05-11 23:39:02.000000000","message":"@Xing\nSee if my comments/example in the cinder.conf section help clarify this.\n\nYes, this would be scheduler aware but target/pairing would not necessarily be dependent on it (unless you\u0027re replicating to a configured backend, then yes, both need to state they\u0027re capable.  In fact what I\u0027d like to do is have capabilities of the driver formed from the conf file entries and return the valid pairs in the capabilities for the scheduler to use.","commit_id":"5e4bc6caacde6c0379746d963c43f7e093588a42"},{"author":{"_account_id":12924,"name":"Patrick East","email":"east.patrick@gmail.com","username":"patrick.east"},"change_message_id":"7436cec03dd4e431a59cf1085987b62c2bec57d5","unresolved":false,"context_lines":[{"line_number":79,"context_line":"* Create a volume of type \"replication_capable\u003dTrue\""},{"line_number":80,"context_line":"* Cinder uses the existing functionality of the cpabilities filter to pick"},{"line_number":81,"context_line":"  a backend that supports the requested replication type and creates a volume"},{"line_number":82,"context_line":"  nothing different than the existing workflow."},{"line_number":83,"context_line":"* Add API calls for replication-enable, replication-disable,"},{"line_number":84,"context_line":"  replication-failover"},{"line_number":85,"context_line":""}],"source_content_type":"text/x-rst","patch_set":3,"id":"7aaa499b_4f6539df","line":82,"updated":"2015-04-14 20:08:56.000000000","message":"When that volume is first created is replication already enabled, or its a two-step\n\ncinder create ...\n\ncinder replication-enable ...\n\nIs the intent to give tenants the ability to mess with the replication settings (ie. turn it on/off/failover) or just have the ability to create a replicated disk and leave these new api\u0027s for the cloud admin? I\u0027m not really sure which way is better... just curious what the current approach is aiming for.","commit_id":"5e4bc6caacde6c0379746d963c43f7e093588a42"},{"author":{"_account_id":2243,"name":"John Griffith","email":"john.griffith8@gmail.com","username":"john-griffith"},"change_message_id":"79a9d07aebe4003e05454422cd58b69e60a4619f","unresolved":false,"context_lines":[{"line_number":79,"context_line":"* Create a volume of type \"replication_capable\u003dTrue\""},{"line_number":80,"context_line":"* Cinder uses the existing functionality of the cpabilities filter to pick"},{"line_number":81,"context_line":"  a backend that supports the requested replication type and creates a volume"},{"line_number":82,"context_line":"  nothing different than the existing workflow."},{"line_number":83,"context_line":"* Add API calls for replication-enable, replication-disable,"},{"line_number":84,"context_line":"  replication-failover"},{"line_number":85,"context_line":""}],"source_content_type":"text/x-rst","patch_set":3,"id":"da1255d7_897279ac","line":82,"in_reply_to":"7aaa499b_4f6539df","updated":"2015-05-11 23:39:02.000000000","message":"@patrick\nHonestly I\u0027m mixed on this.  On one hand I\u0027d like to just say when they create with the replication type that\u0027s set up (or retype) it just \"does it\".  No second step.\n\nI don\u0027t want to give the tenants much visibility, insight or option.  For the most part they don\u0027t need it and it only complicates things and creates issues.\n\nThe idea of this approach is the bulk of the work is left up to the driver, not the Admin.  The more we can automate the better and given the specifics of each backend device and how it defines replication I think this is the most sane approach.","commit_id":"5e4bc6caacde6c0379746d963c43f7e093588a42"},{"author":{"_account_id":12924,"name":"Patrick East","email":"east.patrick@gmail.com","username":"patrick.east"},"change_message_id":"7083548b5895f097d9ef22c60f3ccf1fce8ae96a","unresolved":false,"context_lines":[{"line_number":79,"context_line":"* Create a volume of type \"replication_capable\u003dTrue\""},{"line_number":80,"context_line":"* Cinder uses the existing functionality of the cpabilities filter to pick"},{"line_number":81,"context_line":"  a backend that supports the requested replication type and creates a volume"},{"line_number":82,"context_line":"  nothing different than the existing workflow."},{"line_number":83,"context_line":"* Add API calls for replication-enable, replication-disable,"},{"line_number":84,"context_line":"  replication-failover"},{"line_number":85,"context_line":""}],"source_content_type":"text/x-rst","patch_set":3,"id":"9a0c5dc1_e7a002a8","line":82,"in_reply_to":"da1255d7_897279ac","updated":"2015-05-13 20:10:33.000000000","message":"Sounds good to me.","commit_id":"5e4bc6caacde6c0379746d963c43f7e093588a42"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"1257baa09d2aebbf5d4eb54e4b4f7fd2c2314b77","unresolved":false,"context_lines":[{"line_number":81,"context_line":"  a backend that supports the requested replication type and creates a volume"},{"line_number":82,"context_line":"  nothing different than the existing workflow."},{"line_number":83,"context_line":"* Add API calls for replication-enable, replication-disable,"},{"line_number":84,"context_line":"  replication-failover"},{"line_number":85,"context_line":""},{"line_number":86,"context_line":"** replication-enable:"},{"line_number":87,"context_line":"   cinder replication-enable \u003cvolume-id\u003e"}],"source_content_type":"text/x-rst","patch_set":3,"id":"7aaa499b_3156c85c","line":84,"updated":"2015-04-15 05:09:08.000000000","message":"We need equivalent APIs for CG:\n\nconsisgroup-enable, consisgroup-disable, consisgroup-failover\n\nMaybe I should create another spec for CG and make it dependent on this one?","commit_id":"5e4bc6caacde6c0379746d963c43f7e093588a42"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"d676a9755110c3bda9d363a06f50224c887fc1c3","unresolved":false,"context_lines":[{"line_number":81,"context_line":"  a backend that supports the requested replication type and creates a volume"},{"line_number":82,"context_line":"  nothing different than the existing workflow."},{"line_number":83,"context_line":"* Add API calls for replication-enable, replication-disable,"},{"line_number":84,"context_line":"  replication-failover"},{"line_number":85,"context_line":""},{"line_number":86,"context_line":"** replication-enable:"},{"line_number":87,"context_line":"   cinder replication-enable \u003cvolume-id\u003e"}],"source_content_type":"text/x-rst","patch_set":3,"id":"3ab451fb_b9a3484f","line":84,"in_reply_to":"3ab451fb_79238006","updated":"2015-04-17 02:53:46.000000000","message":"Good point. This check may need to be added to the modify CG API. Before adding/remove volumes, if the CG supports replication, we may need to make sure it is not replication-enabled.","commit_id":"5e4bc6caacde6c0379746d963c43f7e093588a42"},{"author":{"_account_id":2243,"name":"John Griffith","email":"john.griffith8@gmail.com","username":"john-griffith"},"change_message_id":"79a9d07aebe4003e05454422cd58b69e60a4619f","unresolved":false,"context_lines":[{"line_number":81,"context_line":"  a backend that supports the requested replication type and creates a volume"},{"line_number":82,"context_line":"  nothing different than the existing workflow."},{"line_number":83,"context_line":"* Add API calls for replication-enable, replication-disable,"},{"line_number":84,"context_line":"  replication-failover"},{"line_number":85,"context_line":""},{"line_number":86,"context_line":"** replication-enable:"},{"line_number":87,"context_line":"   cinder replication-enable \u003cvolume-id\u003e"}],"source_content_type":"text/x-rst","patch_set":3,"id":"da1255d7_696865bb","line":84,"in_reply_to":"3ab451fb_b9a3484f","updated":"2015-05-11 23:39:02.000000000","message":"@Xing\nI would like to look at what we can learn and improve off of this WRT CG\u0027s after we get something landed.","commit_id":"5e4bc6caacde6c0379746d963c43f7e093588a42"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"c748dc1593dafe788db958a74955ce409c74c9d1","unresolved":false,"context_lines":[{"line_number":81,"context_line":"  a backend that supports the requested replication type and creates a volume"},{"line_number":82,"context_line":"  nothing different than the existing workflow."},{"line_number":83,"context_line":"* Add API calls for replication-enable, replication-disable,"},{"line_number":84,"context_line":"  replication-failover"},{"line_number":85,"context_line":""},{"line_number":86,"context_line":"** replication-enable:"},{"line_number":87,"context_line":"   cinder replication-enable \u003cvolume-id\u003e"}],"source_content_type":"text/x-rst","patch_set":3,"id":"5aa745d1_540ce993","line":84,"in_reply_to":"7aaa499b_3156c85c","updated":"2015-04-16 19:39:40.000000000","message":"Discussed with John about this. Maybe we don\u0027t need additional APIs for CG. If a volume belongs to a CG, then replication-enable, replication-disable, and replication-failover will operate at the group level. Any relevant db changes will happen for the consistencygroups table in addition to the volumes table.  Driver will do the right thing depending on whether the volume is in a CG or not.","commit_id":"5e4bc6caacde6c0379746d963c43f7e093588a42"},{"author":{"_account_id":9924,"name":"Jeegn Chen","email":"Jeegn.Chen@emc.com","username":"jeegn-chen"},"change_message_id":"c4a77b062fc72197f03e17470de773cbac67fb9e","unresolved":false,"context_lines":[{"line_number":81,"context_line":"  a backend that supports the requested replication type and creates a volume"},{"line_number":82,"context_line":"  nothing different than the existing workflow."},{"line_number":83,"context_line":"* Add API calls for replication-enable, replication-disable,"},{"line_number":84,"context_line":"  replication-failover"},{"line_number":85,"context_line":""},{"line_number":86,"context_line":"** replication-enable:"},{"line_number":87,"context_line":"   cinder replication-enable \u003cvolume-id\u003e"}],"source_content_type":"text/x-rst","patch_set":3,"id":"3ab451fb_79238006","line":84,"in_reply_to":"7aaa499b_3156c85c","updated":"2015-04-17 02:46:16.000000000","message":"Volumes can be added and remove with new CG APIs.\n\nReplication APIs may need take this into consideration as well.","commit_id":"5e4bc6caacde6c0379746d963c43f7e093588a42"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"3c57a20f4b59f4dcffee0f70d80d8528bccf2d51","unresolved":false,"context_lines":[{"line_number":83,"context_line":"* Add API calls for replication-enable, replication-disable,"},{"line_number":84,"context_line":"  replication-failover"},{"line_number":85,"context_line":""},{"line_number":86,"context_line":"** replication-enable:"},{"line_number":87,"context_line":"   cinder replication-enable \u003cvolume-id\u003e"},{"line_number":88,"context_line":""},{"line_number":89,"context_line":"   The default would simply require the volume-id one wishes to start"}],"source_content_type":"text/x-rst","patch_set":3,"id":"5ad0253b_3bc85f74","line":86,"updated":"2015-04-28 16:27:26.000000000","message":"How do we indicate the state of replication after it is enabled?  Obviously there is going to be a period of time, when it is newly enabled, where the replica isn\u0027t consistent, or when it is enabled after being disabled for a period of time.  Are we just not going to surface that to the end user?\n\nI think it is something we need to consider further.","commit_id":"5e4bc6caacde6c0379746d963c43f7e093588a42"},{"author":{"_account_id":2243,"name":"John Griffith","email":"john.griffith8@gmail.com","username":"john-griffith"},"change_message_id":"79a9d07aebe4003e05454422cd58b69e60a4619f","unresolved":false,"context_lines":[{"line_number":83,"context_line":"* Add API calls for replication-enable, replication-disable,"},{"line_number":84,"context_line":"  replication-failover"},{"line_number":85,"context_line":""},{"line_number":86,"context_line":"** replication-enable:"},{"line_number":87,"context_line":"   cinder replication-enable \u003cvolume-id\u003e"},{"line_number":88,"context_line":""},{"line_number":89,"context_line":"   The default would simply require the volume-id one wishes to start"}],"source_content_type":"text/x-rst","patch_set":3,"id":"da1255d7_c9863165","line":86,"in_reply_to":"5ad0253b_3bc85f74","updated":"2015-05-11 23:39:02.000000000","message":"No, I don\u0027t think this should be surfaced to the end user to start.  I think it should be internal driver info, and it can make decisions based on the info that it has.\n\nTo be clear, I don\u0027t even want the end user to have visibility of the replicated volume.  They don\u0027t need it for now (and maybe never will).  We don\u0027t want end-users to be storage admins, that\u0027s the whole point here.\n\nIf we want an admin-status or admin-view of replication that\u0027s a different story, and should be handled again by the driver(s)","commit_id":"5e4bc6caacde6c0379746d963c43f7e093588a42"},{"author":{"_account_id":12924,"name":"Patrick East","email":"east.patrick@gmail.com","username":"patrick.east"},"change_message_id":"7436cec03dd4e431a59cf1085987b62c2bec57d5","unresolved":false,"context_lines":[{"line_number":84,"context_line":"  replication-failover"},{"line_number":85,"context_line":""},{"line_number":86,"context_line":"** replication-enable:"},{"line_number":87,"context_line":"   cinder replication-enable \u003cvolume-id\u003e"},{"line_number":88,"context_line":""},{"line_number":89,"context_line":"   The default would simply require the volume-id one wishes to start"},{"line_number":90,"context_line":"   replicating.  Using the cinder.conf entries the driver will be able"}],"source_content_type":"text/x-rst","patch_set":3,"id":"7aaa499b_cf514910","line":87,"updated":"2015-04-14 20:08:56.000000000","message":"Would it be beneficial to allow this to take a list of id\u0027s? I guess the same for the other 2 api\u0027s.","commit_id":"5e4bc6caacde6c0379746d963c43f7e093588a42"},{"author":{"_account_id":2243,"name":"John Griffith","email":"john.griffith8@gmail.com","username":"john-griffith"},"change_message_id":"79a9d07aebe4003e05454422cd58b69e60a4619f","unresolved":false,"context_lines":[{"line_number":84,"context_line":"  replication-failover"},{"line_number":85,"context_line":""},{"line_number":86,"context_line":"** replication-enable:"},{"line_number":87,"context_line":"   cinder replication-enable \u003cvolume-id\u003e"},{"line_number":88,"context_line":""},{"line_number":89,"context_line":"   The default would simply require the volume-id one wishes to start"},{"line_number":90,"context_line":"   replicating.  Using the cinder.conf entries the driver will be able"}],"source_content_type":"text/x-rst","patch_set":3,"id":"da1255d7_89803948","line":87,"in_reply_to":"7aaa499b_cf514910","updated":"2015-05-11 23:39:02.000000000","message":"for sure, assuming we don\u0027t do something clever as mentioned above and just skip the second step altogether.","commit_id":"5e4bc6caacde6c0379746d963c43f7e093588a42"},{"author":{"_account_id":9924,"name":"Jeegn Chen","email":"Jeegn.Chen@emc.com","username":"jeegn-chen"},"change_message_id":"b8579b41a34f615b6a3dba09931215cca7073a8f","unresolved":false,"context_lines":[{"line_number":87,"context_line":"   cinder replication-enable \u003cvolume-id\u003e"},{"line_number":88,"context_line":""},{"line_number":89,"context_line":"   The default would simply require the volume-id one wishes to start"},{"line_number":90,"context_line":"   replicating.  Using the cinder.conf entries the driver will be able"},{"line_number":91,"context_line":"   to pull the required information it needs to set up the replication"},{"line_number":92,"context_line":"   calls.  This leaves the majority of the work up to the driver that"},{"line_number":93,"context_line":"   implements and understands replication, allowing flexibility and"}],"source_content_type":"text/x-rst","patch_set":3,"id":"9af37de9_11b69fdc","line":90,"updated":"2015-05-11 02:58:31.000000000","message":"The \u003cvolume-id\u003e here must be the primary volume\u0027s, right?\n\nWhat information can be retrieved from cinder.conf entries?  If a back end can only have replication connection to another specific back end, will this information be specified in cinder.conf?","commit_id":"5e4bc6caacde6c0379746d963c43f7e093588a42"},{"author":{"_account_id":2243,"name":"John Griffith","email":"john.griffith8@gmail.com","username":"john-griffith"},"change_message_id":"79a9d07aebe4003e05454422cd58b69e60a4619f","unresolved":false,"context_lines":[{"line_number":87,"context_line":"   cinder replication-enable \u003cvolume-id\u003e"},{"line_number":88,"context_line":""},{"line_number":89,"context_line":"   The default would simply require the volume-id one wishes to start"},{"line_number":90,"context_line":"   replicating.  Using the cinder.conf entries the driver will be able"},{"line_number":91,"context_line":"   to pull the required information it needs to set up the replication"},{"line_number":92,"context_line":"   calls.  This leaves the majority of the work up to the driver that"},{"line_number":93,"context_line":"   implements and understands replication, allowing flexibility and"}],"source_content_type":"text/x-rst","patch_set":3,"id":"da1255d7_499361a4","line":90,"in_reply_to":"9af37de9_11b69fdc","updated":"2015-05-11 23:39:02.000000000","message":"@Jeegn\nSee my comments regarding conf file examples and usage and let me know if this makes sense.","commit_id":"5e4bc6caacde6c0379746d963c43f7e093588a42"},{"author":{"_account_id":11079,"name":"TaoBai","email":"baitao5@huawei.com","username":"TaoBai"},"change_message_id":"93e6122c091987264514a1fd1c93c75c053dd8c3","unresolved":false,"context_lines":[{"line_number":97,"context_line":"   backend driver to setup and start replicating.  Note that this would also"},{"line_number":98,"context_line":"   create the replciation target volume as well.  The creation of the secondary"},{"line_number":99,"context_line":"   (or tertiary or whatever) will be handled by the driver that\u0027s setting up"},{"line_number":100,"context_line":"   replication."},{"line_number":101,"context_line":""},{"line_number":102,"context_line":"** replication-disable"},{"line_number":103,"context_line":"   cinder replication-disable \u003cvolume-id\u003e"}],"source_content_type":"text/x-rst","patch_set":3,"id":"3ab451fb_881dcd68","line":100,"updated":"2015-04-17 11:25:30.000000000","message":"For volume-replication, usually there are 3 types. 1. \"Sync\u0027, 2. \"Async\",3. \"sync, active-active(means both connected to vm)\".\n\n\nI think it maybe similiar case for some drivers.\n\n\nDo you think we should define unique volume type similiar like rpo, rdo to filter right volume-backend to create right replication.??\n\nIn orignal Avishay\u0027s spec, it defined it, but was missed in Juno version.","commit_id":"5e4bc6caacde6c0379746d963c43f7e093588a42"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"fe144e7b1c30b57846986e5b87845dc2d5cb70f8","unresolved":false,"context_lines":[{"line_number":97,"context_line":"   backend driver to setup and start replicating.  Note that this would also"},{"line_number":98,"context_line":"   create the replciation target volume as well.  The creation of the secondary"},{"line_number":99,"context_line":"   (or tertiary or whatever) will be handled by the driver that\u0027s setting up"},{"line_number":100,"context_line":"   replication."},{"line_number":101,"context_line":""},{"line_number":102,"context_line":"** replication-disable"},{"line_number":103,"context_line":"   cinder replication-disable \u003cvolume-id\u003e"}],"source_content_type":"text/x-rst","patch_set":3,"id":"fabf19d9_ae3f8fd5","line":100,"in_reply_to":"3ab451fb_881dcd68","updated":"2015-04-18 14:08:30.000000000","message":"I think replication mode such as sync and async can be passed to the API.  I don\u0027t think cinder-volume can do active-active yet due to other limitations, but that is a different discussion and there\u0027s another effort going on trying to address that in Liberty.","commit_id":"5e4bc6caacde6c0379746d963c43f7e093588a42"},{"author":{"_account_id":2243,"name":"John Griffith","email":"john.griffith8@gmail.com","username":"john-griffith"},"change_message_id":"79a9d07aebe4003e05454422cd58b69e60a4619f","unresolved":false,"context_lines":[{"line_number":97,"context_line":"   backend driver to setup and start replicating.  Note that this would also"},{"line_number":98,"context_line":"   create the replciation target volume as well.  The creation of the secondary"},{"line_number":99,"context_line":"   (or tertiary or whatever) will be handled by the driver that\u0027s setting up"},{"line_number":100,"context_line":"   replication."},{"line_number":101,"context_line":""},{"line_number":102,"context_line":"** replication-disable"},{"line_number":103,"context_line":"   cinder replication-disable \u003cvolume-id\u003e"}],"source_content_type":"text/x-rst","patch_set":3,"id":"da1255d7_89f719f5","line":100,"in_reply_to":"7ad32947_ffa99ae0","updated":"2015-05-11 23:39:02.000000000","message":"@Tao\nI agree with you, my goal is to keep this as simple as possible and put the burden on the drivers and use the heck out of types.","commit_id":"5e4bc6caacde6c0379746d963c43f7e093588a42"},{"author":{"_account_id":11079,"name":"TaoBai","email":"baitao5@huawei.com","username":"TaoBai"},"change_message_id":"44ad12e97c4c91c36795d4a4f8ae82146b448adb","unresolved":false,"context_lines":[{"line_number":97,"context_line":"   backend driver to setup and start replicating.  Note that this would also"},{"line_number":98,"context_line":"   create the replciation target volume as well.  The creation of the secondary"},{"line_number":99,"context_line":"   (or tertiary or whatever) will be handled by the driver that\u0027s setting up"},{"line_number":100,"context_line":"   replication."},{"line_number":101,"context_line":""},{"line_number":102,"context_line":"** replication-disable"},{"line_number":103,"context_line":"   cinder replication-disable \u003cvolume-id\u003e"}],"source_content_type":"text/x-rst","patch_set":3,"id":"7ad32947_ffa99ae0","line":100,"in_reply_to":"fabf19d9_ae3f8fd5","updated":"2015-04-28 06:04:37.000000000","message":"Hi Xing\n\nThe active-active mode I addressed here could be by iscsi-multipath or FC multipath.\n\nNo need special effort in cinder-volume that\u0027s what I am thinking.\n\n\nThanks for your reply.","commit_id":"5e4bc6caacde6c0379746d963c43f7e093588a42"},{"author":{"_account_id":15556,"name":"luyingxi","email":"luyingxi@huawei.com","username":"lu"},"change_message_id":"e18c487814e7d2217cd5f9f5e0fd8baaee625344","unresolved":false,"context_lines":[{"line_number":98,"context_line":"   create the replciation target volume as well.  The creation of the secondary"},{"line_number":99,"context_line":"   (or tertiary or whatever) will be handled by the driver that\u0027s setting up"},{"line_number":100,"context_line":"   replication."},{"line_number":101,"context_line":""},{"line_number":102,"context_line":"** replication-disable"},{"line_number":103,"context_line":"   cinder replication-disable \u003cvolume-id\u003e"},{"line_number":104,"context_line":""}],"source_content_type":"text/x-rst","patch_set":3,"id":"7aaa499b_22dd54e0","line":101,"updated":"2015-04-15 07:29:44.000000000","message":"What time to create a secondary volume and start replicating? Calls to create or replication-enable?","commit_id":"5e4bc6caacde6c0379746d963c43f7e093588a42"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"ea7bddfa8c057b0e31fd6141408421b483ab9a43","unresolved":false,"context_lines":[{"line_number":104,"context_line":""},{"line_number":105,"context_line":"   Pretty self explanatory, again a call directly to the manager and then the"},{"line_number":106,"context_line":"   driver that disables replication operations.  Well, I thought it was self"},{"line_number":107,"context_line":"   explanatory, but maybe not.  This call by itself woudl simply \"stop\" the"},{"line_number":108,"context_line":"   replciation process.  It would not delete the secondaries etc, but would"},{"line_number":109,"context_line":"   stop the process of actually updating them.  The delete option would not"},{"line_number":110,"context_line":"   only stop the process, but also delete any secondaries."}],"source_content_type":"text/x-rst","patch_set":3,"id":"7aaa499b_543ef0b8","line":107,"updated":"2015-04-14 18:57:09.000000000","message":"/woudl/would/\n\nDon\u0027t shoot me.","commit_id":"5e4bc6caacde6c0379746d963c43f7e093588a42"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"ea7bddfa8c057b0e31fd6141408421b483ab9a43","unresolved":false,"context_lines":[{"line_number":105,"context_line":"   Pretty self explanatory, again a call directly to the manager and then the"},{"line_number":106,"context_line":"   driver that disables replication operations.  Well, I thought it was self"},{"line_number":107,"context_line":"   explanatory, but maybe not.  This call by itself woudl simply \"stop\" the"},{"line_number":108,"context_line":"   replciation process.  It would not delete the secondaries etc, but would"},{"line_number":109,"context_line":"   stop the process of actually updating them.  The delete option would not"},{"line_number":110,"context_line":"   only stop the process, but also delete any secondaries."},{"line_number":111,"context_line":""}],"source_content_type":"text/x-rst","patch_set":3,"id":"7aaa499b_f475fc97","line":108,"updated":"2015-04-14 18:57:09.000000000","message":"/replciation/replication/","commit_id":"5e4bc6caacde6c0379746d963c43f7e093588a42"},{"author":{"_account_id":12924,"name":"Patrick East","email":"east.patrick@gmail.com","username":"patrick.east"},"change_message_id":"7436cec03dd4e431a59cf1085987b62c2bec57d5","unresolved":false,"context_lines":[{"line_number":124,"context_line":"   The reality is that fail over is something usually done due to a failure"},{"line_number":125,"context_line":"   of a device.  In that case, I propose that when an operation request for"},{"line_number":126,"context_line":"   a volume arrives at the scheduler, and the host is unreachable it checks"},{"line_number":127,"context_line":"   if the volume is replicated, if it is, then it uses that host for the"},{"line_number":128,"context_line":"   requested call.  This indicates that there are mutliple hosts possible"},{"line_number":129,"context_line":"   in the Volume object, which are added as part of replication-enable,"},{"line_number":130,"context_line":"   and marked unavailable on replication-disable."}],"source_content_type":"text/x-rst","patch_set":3,"id":"7aaa499b_cf3b899b","line":127,"updated":"2015-04-14 20:08:56.000000000","message":"Just to make sure I understand, you mean regardless of if the failover has happened if the cinder host (maybe/maybe not the backend) fails to respond we route commands to the other backend? Any thoughts on how we determine if a backend is still responding? Would that trigger an automatic \u0027replication-failover\u0027 command to get sent first? How does a backend know if its been promoted?\n\nAs an example, and maybe more specific to Pure\u0027s backend, but our replicated volumes are actually snapshots on the replication target. So, if we start getting calls to do things we need to know to have created a volume from the last snapshot first. I would guess we aren\u0027t the only backend that would need a \u0027heads up\u0027 that the replicated volume has become the active one.","commit_id":"5e4bc6caacde6c0379746d963c43f7e093588a42"},{"author":{"_account_id":2243,"name":"John Griffith","email":"john.griffith8@gmail.com","username":"john-griffith"},"change_message_id":"79a9d07aebe4003e05454422cd58b69e60a4619f","unresolved":false,"context_lines":[{"line_number":124,"context_line":"   The reality is that fail over is something usually done due to a failure"},{"line_number":125,"context_line":"   of a device.  In that case, I propose that when an operation request for"},{"line_number":126,"context_line":"   a volume arrives at the scheduler, and the host is unreachable it checks"},{"line_number":127,"context_line":"   if the volume is replicated, if it is, then it uses that host for the"},{"line_number":128,"context_line":"   requested call.  This indicates that there are mutliple hosts possible"},{"line_number":129,"context_line":"   in the Volume object, which are added as part of replication-enable,"},{"line_number":130,"context_line":"   and marked unavailable on replication-disable."}],"source_content_type":"text/x-rst","patch_set":3,"id":"da1255d7_29e70d42","line":127,"in_reply_to":"7aaa499b_b19658ee","updated":"2015-05-11 23:39:02.000000000","message":"It\u0027s probably trivial to do more than one pairing, but if there\u0027s only one pairing, then obviously we can only have 1 backend to fail over to.","commit_id":"5e4bc6caacde6c0379746d963c43f7e093588a42"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"1257baa09d2aebbf5d4eb54e4b4f7fd2c2314b77","unresolved":false,"context_lines":[{"line_number":124,"context_line":"   The reality is that fail over is something usually done due to a failure"},{"line_number":125,"context_line":"   of a device.  In that case, I propose that when an operation request for"},{"line_number":126,"context_line":"   a volume arrives at the scheduler, and the host is unreachable it checks"},{"line_number":127,"context_line":"   if the volume is replicated, if it is, then it uses that host for the"},{"line_number":128,"context_line":"   requested call.  This indicates that there are mutliple hosts possible"},{"line_number":129,"context_line":"   in the Volume object, which are added as part of replication-enable,"},{"line_number":130,"context_line":"   and marked unavailable on replication-disable."}],"source_content_type":"text/x-rst","patch_set":3,"id":"7aaa499b_b19658ee","line":127,"in_reply_to":"7aaa499b_cf3b899b","updated":"2015-04-15 05:09:08.000000000","message":"On line 68, you said we support single pairing in first iteration. So in iteration #1, we won\u0027t be able to have more than 1 backend to fail over?","commit_id":"5e4bc6caacde6c0379746d963c43f7e093588a42"},{"author":{"_account_id":2243,"name":"John Griffith","email":"john.griffith8@gmail.com","username":"john-griffith"},"change_message_id":"79a9d07aebe4003e05454422cd58b69e60a4619f","unresolved":false,"context_lines":[{"line_number":124,"context_line":"   The reality is that fail over is something usually done due to a failure"},{"line_number":125,"context_line":"   of a device.  In that case, I propose that when an operation request for"},{"line_number":126,"context_line":"   a volume arrives at the scheduler, and the host is unreachable it checks"},{"line_number":127,"context_line":"   if the volume is replicated, if it is, then it uses that host for the"},{"line_number":128,"context_line":"   requested call.  This indicates that there are mutliple hosts possible"},{"line_number":129,"context_line":"   in the Volume object, which are added as part of replication-enable,"},{"line_number":130,"context_line":"   and marked unavailable on replication-disable."}],"source_content_type":"text/x-rst","patch_set":3,"id":"da1255d7_09bb2910","line":127,"in_reply_to":"7aaa499b_cf3b899b","updated":"2015-05-11 23:39:02.000000000","message":"So ideally I thought it would be good to just auto-failover yes.  The way that would work is if the scheduler sees the primary as unreachable (no stats update, timed out commands, bad status etc) it could then reroute to the secondary.\n\nIn the case of an external this is dependent upon the driver, so it only works with failures like backend NoReach, and it would be up to the driver to understand how to detect and handle that.","commit_id":"5e4bc6caacde6c0379746d963c43f7e093588a42"},{"author":{"_account_id":9924,"name":"Jeegn Chen","email":"Jeegn.Chen@emc.com","username":"jeegn-chen"},"change_message_id":"b8579b41a34f615b6a3dba09931215cca7073a8f","unresolved":false,"context_lines":[{"line_number":126,"context_line":"   a volume arrives at the scheduler, and the host is unreachable it checks"},{"line_number":127,"context_line":"   if the volume is replicated, if it is, then it uses that host for the"},{"line_number":128,"context_line":"   requested call.  This indicates that there are mutliple hosts possible"},{"line_number":129,"context_line":"   in the Volume object, which are added as part of replication-enable,"},{"line_number":130,"context_line":"   and marked unavailable on replication-disable."},{"line_number":131,"context_line":""},{"line_number":132,"context_line":"From a user perspective the end user is not required to set all the details on"}],"source_content_type":"text/x-rst","patch_set":3,"id":"9af37de9_31d8831d","line":129,"updated":"2015-05-11 02:58:31.000000000","message":"Since fail-over is usually due to the primary failure, should we require that \u003cvolume-id\u003e is the secondary volume and the request should be routed to the back end hosting the secondary volume?\n\nAfter the fail-over, will the DB be updated so that the original primary is marked as the secondary and the original secondary is marked as the primary?","commit_id":"5e4bc6caacde6c0379746d963c43f7e093588a42"},{"author":{"_account_id":2243,"name":"John Griffith","email":"john.griffith8@gmail.com","username":"john-griffith"},"change_message_id":"79a9d07aebe4003e05454422cd58b69e60a4619f","unresolved":false,"context_lines":[{"line_number":126,"context_line":"   a volume arrives at the scheduler, and the host is unreachable it checks"},{"line_number":127,"context_line":"   if the volume is replicated, if it is, then it uses that host for the"},{"line_number":128,"context_line":"   requested call.  This indicates that there are mutliple hosts possible"},{"line_number":129,"context_line":"   in the Volume object, which are added as part of replication-enable,"},{"line_number":130,"context_line":"   and marked unavailable on replication-disable."},{"line_number":131,"context_line":""},{"line_number":132,"context_line":"From a user perspective the end user is not required to set all the details on"}],"source_content_type":"text/x-rst","patch_set":3,"id":"da1255d7_e93695b3","line":129,"in_reply_to":"9af37de9_31d8831d","updated":"2015-05-11 23:39:02.000000000","message":"I don\u0027t have any intention of exposing the \"secondary\" volume-id as anything different to start with.","commit_id":"5e4bc6caacde6c0379746d963c43f7e093588a42"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"ea7bddfa8c057b0e31fd6141408421b483ab9a43","unresolved":false,"context_lines":[{"line_number":127,"context_line":"   if the volume is replicated, if it is, then it uses that host for the"},{"line_number":128,"context_line":"   requested call.  This indicates that there are mutliple hosts possible"},{"line_number":129,"context_line":"   in the Volume object, which are added as part of replication-enable,"},{"line_number":130,"context_line":"   and marked unavailable on replication-disable."},{"line_number":131,"context_line":""},{"line_number":132,"context_line":"From a user perspective the end user is not required to set all the details on"},{"line_number":133,"context_line":"replication ahead of time (during creation).  This provide flexibility.  Also"}],"source_content_type":"text/x-rst","patch_set":3,"id":"7aaa499b_b47d3470","line":130,"updated":"2015-04-14 18:57:09.000000000","message":"This addresses the case where the cinder volume host fails. How do you see this being handled if there is some sort of storage array outage?\n\nIn the case of a host failure, is this just a replication stop? Or an unexpose from the original host and a reexpose to the new host?","commit_id":"5e4bc6caacde6c0379746d963c43f7e093588a42"},{"author":{"_account_id":2243,"name":"John Griffith","email":"john.griffith8@gmail.com","username":"john-griffith"},"change_message_id":"79a9d07aebe4003e05454422cd58b69e60a4619f","unresolved":false,"context_lines":[{"line_number":127,"context_line":"   if the volume is replicated, if it is, then it uses that host for the"},{"line_number":128,"context_line":"   requested call.  This indicates that there are mutliple hosts possible"},{"line_number":129,"context_line":"   in the Volume object, which are added as part of replication-enable,"},{"line_number":130,"context_line":"   and marked unavailable on replication-disable."},{"line_number":131,"context_line":""},{"line_number":132,"context_line":"From a user perspective the end user is not required to set all the details on"},{"line_number":133,"context_line":"replication ahead of time (during creation).  This provide flexibility.  Also"}],"source_content_type":"text/x-rst","patch_set":3,"id":"da1255d7_694bc52c","line":130,"in_reply_to":"7aaa499b_b47d3470","updated":"2015-05-11 23:39:02.000000000","message":"See my comment above, around line 129","commit_id":"5e4bc6caacde6c0379746d963c43f7e093588a42"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"3c57a20f4b59f4dcffee0f70d80d8528bccf2d51","unresolved":false,"context_lines":[{"line_number":130,"context_line":"   and marked unavailable on replication-disable."},{"line_number":131,"context_line":""},{"line_number":132,"context_line":"From a user perspective the end user is not required to set all the details on"},{"line_number":133,"context_line":"replication ahead of time (during creation).  This provide flexibility.  Also"},{"line_number":134,"context_line":"this takes the spaghetti code that we currently have for replciation that lives"},{"line_number":135,"context_line":"in the create flow, out of the create flow and isolates it.  From and end users"},{"line_number":136,"context_line":"perspective the biggest advantage is that this approach will actually work and"}],"source_content_type":"text/x-rst","patch_set":3,"id":"5ad0253b_18bb6910","line":133,"updated":"2015-04-28 16:27:26.000000000","message":"/provide/provides/","commit_id":"5e4bc6caacde6c0379746d963c43f7e093588a42"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"ea7bddfa8c057b0e31fd6141408421b483ab9a43","unresolved":false,"context_lines":[{"line_number":131,"context_line":""},{"line_number":132,"context_line":"From a user perspective the end user is not required to set all the details on"},{"line_number":133,"context_line":"replication ahead of time (during creation).  This provide flexibility.  Also"},{"line_number":134,"context_line":"this takes the spaghetti code that we currently have for replciation that lives"},{"line_number":135,"context_line":"in the create flow, out of the create flow and isolates it.  From and end users"},{"line_number":136,"context_line":"perspective the biggest advantage is that this approach will actually work and"},{"line_number":137,"context_line":"will not be brittle like what we have currently."}],"source_content_type":"text/x-rst","patch_set":3,"id":"7aaa499b_f4ea9c0e","line":134,"updated":"2015-04-14 18:57:09.000000000","message":"/replciation/replication/","commit_id":"5e4bc6caacde6c0379746d963c43f7e093588a42"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"3c57a20f4b59f4dcffee0f70d80d8528bccf2d51","unresolved":false,"context_lines":[{"line_number":132,"context_line":"From a user perspective the end user is not required to set all the details on"},{"line_number":133,"context_line":"replication ahead of time (during creation).  This provide flexibility.  Also"},{"line_number":134,"context_line":"this takes the spaghetti code that we currently have for replciation that lives"},{"line_number":135,"context_line":"in the create flow, out of the create flow and isolates it.  From and end users"},{"line_number":136,"context_line":"perspective the biggest advantage is that this approach will actually work and"},{"line_number":137,"context_line":"will not be brittle like what we have currently."},{"line_number":138,"context_line":""}],"source_content_type":"text/x-rst","patch_set":3,"id":"5ad0253b_5848c12d","line":135,"updated":"2015-04-28 16:27:26.000000000","message":"/and/an/\n/users/user\u0027s/","commit_id":"5e4bc6caacde6c0379746d963c43f7e093588a42"},{"author":{"_account_id":9924,"name":"Jeegn Chen","email":"Jeegn.Chen@emc.com","username":"jeegn-chen"},"change_message_id":"1212e668222676a51e857bf6cd0af590140408f9","unresolved":false,"context_lines":[{"line_number":171,"context_line":" +--\u003e +  Driver   + \u003c---------+"},{"line_number":172,"context_line":"      +-----+-----+"},{"line_number":173,"context_line":""},{"line_number":174,"context_line":"In the case of calls like attach, extend, clone, delete etc;"},{"line_number":175,"context_line":"if either the backend host is not reachable, or if the primary_host_status"},{"line_number":176,"context_line":"column is set, we\u0027ll redirect to the host in the secondary_hosts"},{"line_number":177,"context_line":"column.  If that\u0027s unavailalbe then we fail, just like we do today."}],"source_content_type":"text/x-rst","patch_set":3,"id":"9af37de9_6cb9922e","line":174,"updated":"2015-05-11 03:32:24.000000000","message":"extend, clone and delete may be somewhat different from attach.\n\nFor example, what is the expect behavior of extend? It will extend all volumes including the primary and the secondary?\n\nIf the calls are routed to the secondary, which is the expected behavior? Only affect the secondary and leave the primary alone?","commit_id":"5e4bc6caacde6c0379746d963c43f7e093588a42"},{"author":{"_account_id":2243,"name":"John Griffith","email":"john.griffith8@gmail.com","username":"john-griffith"},"change_message_id":"79a9d07aebe4003e05454422cd58b69e60a4619f","unresolved":false,"context_lines":[{"line_number":171,"context_line":" +--\u003e +  Driver   + \u003c---------+"},{"line_number":172,"context_line":"      +-----+-----+"},{"line_number":173,"context_line":""},{"line_number":174,"context_line":"In the case of calls like attach, extend, clone, delete etc;"},{"line_number":175,"context_line":"if either the backend host is not reachable, or if the primary_host_status"},{"line_number":176,"context_line":"column is set, we\u0027ll redirect to the host in the secondary_hosts"},{"line_number":177,"context_line":"column.  If that\u0027s unavailalbe then we fail, just like we do today."}],"source_content_type":"text/x-rst","patch_set":3,"id":"da1255d7_4948012e","line":174,"in_reply_to":"9af37de9_6cb9922e","updated":"2015-05-11 23:39:02.000000000","message":"Of course if a backend does replication similar to mirroring they will have to extend both.","commit_id":"5e4bc6caacde6c0379746d963c43f7e093588a42"},{"author":{"_account_id":11079,"name":"TaoBai","email":"baitao5@huawei.com","username":"TaoBai"},"change_message_id":"93e6122c091987264514a1fd1c93c75c053dd8c3","unresolved":false,"context_lines":[{"line_number":174,"context_line":"In the case of calls like attach, extend, clone, delete etc;"},{"line_number":175,"context_line":"if either the backend host is not reachable, or if the primary_host_status"},{"line_number":176,"context_line":"column is set, we\u0027ll redirect to the host in the secondary_hosts"},{"line_number":177,"context_line":"column.  If that\u0027s unavailalbe then we fail, just like we do today."},{"line_number":178,"context_line":""},{"line_number":179,"context_line":"See DB section below"},{"line_number":180,"context_line":""}],"source_content_type":"text/x-rst","patch_set":3,"id":"3ab451fb_a3ff8a33","line":177,"updated":"2015-04-17 11:25:30.000000000","message":"How about snapshot.\n\nWhat will happens do snapshot or clone after failover? I think they will be on secondary array, isn\u0027t it?","commit_id":"5e4bc6caacde6c0379746d963c43f7e093588a42"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"fe144e7b1c30b57846986e5b87845dc2d5cb70f8","unresolved":false,"context_lines":[{"line_number":174,"context_line":"In the case of calls like attach, extend, clone, delete etc;"},{"line_number":175,"context_line":"if either the backend host is not reachable, or if the primary_host_status"},{"line_number":176,"context_line":"column is set, we\u0027ll redirect to the host in the secondary_hosts"},{"line_number":177,"context_line":"column.  If that\u0027s unavailalbe then we fail, just like we do today."},{"line_number":178,"context_line":""},{"line_number":179,"context_line":"See DB section below"},{"line_number":180,"context_line":""}],"source_content_type":"text/x-rst","patch_set":3,"id":"fabf19d9_cefd2370","line":177,"in_reply_to":"3ab451fb_a3ff8a33","updated":"2015-04-18 14:08:30.000000000","message":"If we are taking snapshot of a replicated volume, maybe we should also create a snapshot on the secondary volume at the same time.\n\nHowever if a volume becomes replicated volume after it already has snapshot, I don\u0027t think we should clone the snapshot when the volume is failed over.\n\nThis needs some thoughts and discussion.","commit_id":"5e4bc6caacde6c0379746d963c43f7e093588a42"},{"author":{"_account_id":2243,"name":"John Griffith","email":"john.griffith8@gmail.com","username":"john-griffith"},"change_message_id":"79a9d07aebe4003e05454422cd58b69e60a4619f","unresolved":false,"context_lines":[{"line_number":174,"context_line":"In the case of calls like attach, extend, clone, delete etc;"},{"line_number":175,"context_line":"if either the backend host is not reachable, or if the primary_host_status"},{"line_number":176,"context_line":"column is set, we\u0027ll redirect to the host in the secondary_hosts"},{"line_number":177,"context_line":"column.  If that\u0027s unavailalbe then we fail, just like we do today."},{"line_number":178,"context_line":""},{"line_number":179,"context_line":"See DB section below"},{"line_number":180,"context_line":""}],"source_content_type":"text/x-rst","patch_set":3,"id":"da1255d7_a9577dc9","line":177,"in_reply_to":"7ad32947_fff75af3","updated":"2015-05-11 23:39:02.000000000","message":"Snapshots are a good point, we\u0027ll have to consider that for sure.  It would seem that replicating them would be feasible.  I\u0027m only interested in delivering replication for Volumes in the first iteration however, we can add snapshot replication in future work perhaps.\n\nOne of the problems we run into IMO is we always feel the need to implement EVERY possible combination/scenario up front at once, instead of iteratively developing a feature.","commit_id":"5e4bc6caacde6c0379746d963c43f7e093588a42"},{"author":{"_account_id":11079,"name":"TaoBai","email":"baitao5@huawei.com","username":"TaoBai"},"change_message_id":"44ad12e97c4c91c36795d4a4f8ae82146b448adb","unresolved":false,"context_lines":[{"line_number":174,"context_line":"In the case of calls like attach, extend, clone, delete etc;"},{"line_number":175,"context_line":"if either the backend host is not reachable, or if the primary_host_status"},{"line_number":176,"context_line":"column is set, we\u0027ll redirect to the host in the secondary_hosts"},{"line_number":177,"context_line":"column.  If that\u0027s unavailalbe then we fail, just like we do today."},{"line_number":178,"context_line":""},{"line_number":179,"context_line":"See DB section below"},{"line_number":180,"context_line":""}],"source_content_type":"text/x-rst","patch_set":3,"id":"7ad32947_fff75af3","line":177,"in_reply_to":"fabf19d9_cefd2370","updated":"2015-04-28 06:04:37.000000000","message":"Hi Xing\n\n\nI agree that this part need to be discussed(also clone)and that\u0027s what I confused on Juno version.","commit_id":"5e4bc6caacde6c0379746d963c43f7e093588a42"},{"author":{"_account_id":9924,"name":"Jeegn Chen","email":"Jeegn.Chen@emc.com","username":"jeegn-chen"},"change_message_id":"b8579b41a34f615b6a3dba09931215cca7073a8f","unresolved":false,"context_lines":[{"line_number":209,"context_line":"I\u0027d propose something like this:"},{"line_number":210,"context_line":"  secondary_hosts None                     (default)"},{"line_number":211,"context_line":"  secondary_hosts foo:enabled              (2 way example)"},{"line_number":212,"context_line":"  secondary_hosts foo:enabled,biz:disabled (3 way example)"},{"line_number":213,"context_line":""},{"line_number":214,"context_line":"There may be a much better way to represent this in the DB but this"},{"line_number":215,"context_line":"is the gist of it."}],"source_content_type":"text/x-rst","patch_set":3,"id":"9af37de9_913f2f25","line":212,"updated":"2015-05-11 02:58:31.000000000","message":"So even if fail-over happens, the orignal secondary is not marked as primary and the original primary will not be put in secondary_hosts?","commit_id":"5e4bc6caacde6c0379746d963c43f7e093588a42"},{"author":{"_account_id":12924,"name":"Patrick East","email":"east.patrick@gmail.com","username":"patrick.east"},"change_message_id":"7436cec03dd4e431a59cf1085987b62c2bec57d5","unresolved":false,"context_lines":[{"line_number":225,"context_line":""},{"line_number":226,"context_line":"Simple DB migrate on the Volumes table, defaults will be acceptable"},{"line_number":227,"context_line":"in the majority of the cases, although we\u0027ll have to ensure we do"},{"line_number":228,"context_line":"something to preserve/reenable IBM backends that may be using replication"},{"line_number":229,"context_line":""},{"line_number":230,"context_line":"REST API impact"},{"line_number":231,"context_line":"---------------"}],"source_content_type":"text/x-rst","patch_set":3,"id":"7aaa499b_81ac35a1","line":228,"updated":"2015-04-14 20:08:56.000000000","message":"So the plan is a non-disruptive change to any existing replication setups? We would leave in the old replication db tables/columns and api\u0027s?","commit_id":"5e4bc6caacde6c0379746d963c43f7e093588a42"},{"author":{"_account_id":2243,"name":"John Griffith","email":"john.griffith8@gmail.com","username":"john-griffith"},"change_message_id":"79a9d07aebe4003e05454422cd58b69e60a4619f","unresolved":false,"context_lines":[{"line_number":225,"context_line":""},{"line_number":226,"context_line":"Simple DB migrate on the Volumes table, defaults will be acceptable"},{"line_number":227,"context_line":"in the majority of the cases, although we\u0027ll have to ensure we do"},{"line_number":228,"context_line":"something to preserve/reenable IBM backends that may be using replication"},{"line_number":229,"context_line":""},{"line_number":230,"context_line":"REST API impact"},{"line_number":231,"context_line":"---------------"}],"source_content_type":"text/x-rst","patch_set":3,"id":"da1255d7_6972a57e","line":228,"in_reply_to":"7aaa499b_81ac35a1","updated":"2015-05-11 23:39:02.000000000","message":"That was the plan, but given it flat out doesn\u0027t work as is I\u0027ve kinda lost interest in trying to worry about that.","commit_id":"5e4bc6caacde6c0379746d963c43f7e093588a42"},{"author":{"_account_id":12924,"name":"Patrick East","email":"east.patrick@gmail.com","username":"patrick.east"},"change_message_id":"7083548b5895f097d9ef22c60f3ccf1fce8ae96a","unresolved":false,"context_lines":[{"line_number":225,"context_line":""},{"line_number":226,"context_line":"Simple DB migrate on the Volumes table, defaults will be acceptable"},{"line_number":227,"context_line":"in the majority of the cases, although we\u0027ll have to ensure we do"},{"line_number":228,"context_line":"something to preserve/reenable IBM backends that may be using replication"},{"line_number":229,"context_line":""},{"line_number":230,"context_line":"REST API impact"},{"line_number":231,"context_line":"---------------"}],"source_content_type":"text/x-rst","patch_set":3,"id":"9a0c5dc1_a7dc4a47","line":228,"in_reply_to":"da1255d7_6972a57e","updated":"2015-05-13 20:10:33.000000000","message":"Ok cool, I was actually concerned that we would hold on to the v1 stuff tightly and increase complexity for v2. I think its the right priority to focus on making v2 work the way we want first.","commit_id":"5e4bc6caacde6c0379746d963c43f7e093588a42"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"3c57a20f4b59f4dcffee0f70d80d8528bccf2d51","unresolved":false,"context_lines":[{"line_number":241,"context_line":"   cinder replication-enable \u003cvolume-id\u003e"},{"line_number":242,"context_line":"     Enables replication services on the specified volume."},{"line_number":243,"context_line":"     Checks to ensure that recplication capabilities are available"},{"line_number":244,"context_line":"     on the volumes current host, if not returns an InvalidRequest"},{"line_number":245,"context_line":"     error, but does not put the volume in an error status."},{"line_number":246,"context_line":""},{"line_number":247,"context_line":"     Requires the volume has been created using the extra-spec"}],"source_content_type":"text/x-rst","patch_set":3,"id":"5ad0253b_38c4e53e","line":244,"updated":"2015-04-28 16:27:26.000000000","message":"/volumes/volume\u0027s/","commit_id":"5e4bc6caacde6c0379746d963c43f7e093588a42"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"3c57a20f4b59f4dcffee0f70d80d8528bccf2d51","unresolved":false,"context_lines":[{"line_number":245,"context_line":"     error, but does not put the volume in an error status."},{"line_number":246,"context_line":""},{"line_number":247,"context_line":"     Requires the volume has been created using the extra-spec"},{"line_number":248,"context_line":"     replication_capable\u003dTrue."},{"line_number":249,"context_line":""},{"line_number":250,"context_line":"     In addition this assumes that the target devices are configured"},{"line_number":251,"context_line":"     properly in the cinder.conf file and the devices are linked."}],"source_content_type":"text/x-rst","patch_set":3,"id":"5ad0253b_583c412f","line":248,"updated":"2015-04-28 16:27:26.000000000","message":"So, if we have a volume that didn\u0027t previously have replication enabled and we wanted to enable replication, we would have to retype to add replication_capable\u003dTrue ?","commit_id":"5e4bc6caacde6c0379746d963c43f7e093588a42"},{"author":{"_account_id":2243,"name":"John Griffith","email":"john.griffith8@gmail.com","username":"john-griffith"},"change_message_id":"79a9d07aebe4003e05454422cd58b69e60a4619f","unresolved":false,"context_lines":[{"line_number":245,"context_line":"     error, but does not put the volume in an error status."},{"line_number":246,"context_line":""},{"line_number":247,"context_line":"     Requires the volume has been created using the extra-spec"},{"line_number":248,"context_line":"     replication_capable\u003dTrue."},{"line_number":249,"context_line":""},{"line_number":250,"context_line":"     In addition this assumes that the target devices are configured"},{"line_number":251,"context_line":"     properly in the cinder.conf file and the devices are linked."}],"source_content_type":"text/x-rst","patch_set":3,"id":"da1255d7_296cad9b","line":248,"in_reply_to":"5ad0253b_583c412f","updated":"2015-05-11 23:39:02.000000000","message":"yes","commit_id":"5e4bc6caacde6c0379746d963c43f7e093588a42"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"3c57a20f4b59f4dcffee0f70d80d8528bccf2d51","unresolved":false,"context_lines":[{"line_number":258,"context_line":""},{"line_number":259,"context_line":""},{"line_number":260,"context_line":"   cinder replication-failover \u003cvolume-id\u003e"},{"line_number":261,"context_line":"     Sets things up so taht subsequent calls should be serviced"},{"line_number":262,"context_line":"     by the secondary_host."},{"line_number":263,"context_line":""},{"line_number":264,"context_line":""}],"source_content_type":"text/x-rst","patch_set":3,"id":"5ad0253b_b80b557d","line":261,"updated":"2015-04-28 16:27:26.000000000","message":"/taht/that/","commit_id":"5e4bc6caacde6c0379746d963c43f7e093588a42"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"3c57a20f4b59f4dcffee0f70d80d8528bccf2d51","unresolved":false,"context_lines":[{"line_number":259,"context_line":""},{"line_number":260,"context_line":"   cinder replication-failover \u003cvolume-id\u003e"},{"line_number":261,"context_line":"     Sets things up so taht subsequent calls should be serviced"},{"line_number":262,"context_line":"     by the secondary_host."},{"line_number":263,"context_line":""},{"line_number":264,"context_line":""},{"line_number":265,"context_line":"* Example use case including typical API samples for both data supplied"}],"source_content_type":"text/x-rst","patch_set":3,"id":"5ad0253b_786dbd31","line":262,"updated":"2015-04-28 16:27:26.000000000","message":"I assume that this could be used the opposite way as well, right?  If we are running on the secondary it would would fail back to the primary.","commit_id":"5e4bc6caacde6c0379746d963c43f7e093588a42"},{"author":{"_account_id":2243,"name":"John Griffith","email":"john.griffith8@gmail.com","username":"john-griffith"},"change_message_id":"79a9d07aebe4003e05454422cd58b69e60a4619f","unresolved":false,"context_lines":[{"line_number":259,"context_line":""},{"line_number":260,"context_line":"   cinder replication-failover \u003cvolume-id\u003e"},{"line_number":261,"context_line":"     Sets things up so taht subsequent calls should be serviced"},{"line_number":262,"context_line":"     by the secondary_host."},{"line_number":263,"context_line":""},{"line_number":264,"context_line":""},{"line_number":265,"context_line":"* Example use case including typical API samples for both data supplied"}],"source_content_type":"text/x-rst","patch_set":3,"id":"da1255d7_0969e98b","line":262,"in_reply_to":"5ad0253b_786dbd31","updated":"2015-05-11 23:39:02.000000000","message":"yes","commit_id":"5e4bc6caacde6c0379746d963c43f7e093588a42"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"3c57a20f4b59f4dcffee0f70d80d8528bccf2d51","unresolved":false,"context_lines":[{"line_number":266,"context_line":"  by the caller and the response"},{"line_number":267,"context_line":""},{"line_number":268,"context_line":"Use case is to provide highly available data to end users.  By using"},{"line_number":269,"context_line":"replication and fail over to a secondary the device storing the users"},{"line_number":270,"context_line":"data can burst into flames, but a copy of that data is still available"},{"line_number":271,"context_line":"on another device, perhaps in another data center and Cinder has the"},{"line_number":272,"context_line":"capability of just redirecting requests for that data with minimal or zero"}],"source_content_type":"text/x-rst","patch_set":3,"id":"5ad0253b_1855a91c","line":269,"updated":"2015-04-28 16:27:26.000000000","message":"/users/user\u0027s/","commit_id":"5e4bc6caacde6c0379746d963c43f7e093588a42"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"3c57a20f4b59f4dcffee0f70d80d8528bccf2d51","unresolved":false,"context_lines":[{"line_number":290,"context_line":"possible. Parameters which are required should be marked as such and"},{"line_number":291,"context_line":"only under exceptional circumstances should additional parameters"},{"line_number":292,"context_line":"which are not defined in the schema be permitted (eg"},{"line_number":293,"context_line":"additionaProperties should be False)."},{"line_number":294,"context_line":""},{"line_number":295,"context_line":"Reuse of existing predefined parameter types such as regexps for"},{"line_number":296,"context_line":"passwords and user defined names is highly encouraged."}],"source_content_type":"text/x-rst","patch_set":3,"id":"5ad0253b_bb08ef29","line":293,"updated":"2015-04-28 16:27:26.000000000","message":"/additionaProperties/additionalProperties/ ?","commit_id":"5e4bc6caacde6c0379746d963c43f7e093588a42"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"3c57a20f4b59f4dcffee0f70d80d8528bccf2d51","unresolved":false,"context_lines":[{"line_number":340,"context_line":"--------------------"},{"line_number":341,"context_line":""},{"line_number":342,"context_line":"Please specify any changes to notifications. Be that an extra notification,"},{"line_number":343,"context_line":"changes to an existing notification, or removing a notification."},{"line_number":344,"context_line":""},{"line_number":345,"context_line":"Other end user impact"},{"line_number":346,"context_line":"---------------------"}],"source_content_type":"text/x-rst","patch_set":3,"id":"5ad0253b_5bac3bed","line":343,"updated":"2015-04-28 16:27:26.000000000","message":"Seems to me like there may be notifcations impacts.  Do we need to have notifcations for when a volume is in the process of being replicated completes the process?","commit_id":"5e4bc6caacde6c0379746d963c43f7e093588a42"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"3c57a20f4b59f4dcffee0f70d80d8528bccf2d51","unresolved":false,"context_lines":[{"line_number":349,"context_line":"feature?"},{"line_number":350,"context_line":""},{"line_number":351,"context_line":"* Does this change have an impact on python-cinderclient? What does the user"},{"line_number":352,"context_line":"  interface there look like?"},{"line_number":353,"context_line":""},{"line_number":354,"context_line":"Performance Impact"},{"line_number":355,"context_line":"------------------"}],"source_content_type":"text/x-rst","patch_set":3,"id":"5ad0253b_bbf22f05","line":352,"updated":"2015-04-28 16:27:26.000000000","message":"Additional commands, as noted above to support interacting with replication.","commit_id":"5e4bc6caacde6c0379746d963c43f7e093588a42"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"3c57a20f4b59f4dcffee0f70d80d8528bccf2d51","unresolved":false,"context_lines":[{"line_number":475,"context_line":""},{"line_number":476,"context_line":""},{"line_number":477,"context_line":"References"},{"line_number":478,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":479,"context_line":""},{"line_number":480,"context_line":"Please add any useful references here. You are not required to have any"},{"line_number":481,"context_line":"reference. Moreover, this specification should still make sense when your"}],"source_content_type":"text/x-rst","patch_set":3,"id":"5ad0253b_fb0427c7","line":478,"updated":"2015-04-28 16:27:26.000000000","message":"Should include links here to the previous BPs, etc for the relication V1 work.","commit_id":"5e4bc6caacde6c0379746d963c43f7e093588a42"},{"author":{"_account_id":7173,"name":"Scott DAngelo","email":"scott.dangelo@gmail.com","username":"scottda"},"change_message_id":"0ffe0bd084c6667ff809004d93518bdb1f497882","unresolved":false,"context_lines":[{"line_number":91,"context_line":"and fail over if desired."},{"line_number":92,"context_line":""},{"line_number":93,"context_line":"This proposal suggests that we would decouple the replication information"},{"line_number":94,"context_line":"from the create call.  The flow would be something like this:"},{"line_number":95,"context_line":"* Create a volume of type \"replication_capable\u003dTrue\""},{"line_number":96,"context_line":"* Cinder uses the existing functionality of the capabilities filter to pick"},{"line_number":97,"context_line":"  a backend that supports the requested replication type and creates a volume"}],"source_content_type":"text/x-rst","patch_set":4,"id":"7a016987_14432b6e","line":94,"updated":"2015-05-26 13:55:26.000000000","message":"Maybe I\u0027m missing a discussion on this, but it seems a common use case might be a volume type that includes \"replicated\". In this case, there is no need to call \"replication-enabled \u003cvol_id\u003e since it is always desired that the volume be replicated. So, when a user creates a volume which includes \"replicated\" in the volume type, would an API call for \"replication-enabled \u003cvol_id\u003e\" be made? Or should there be some other mechanism to indicate that this volume cannot/will_not be enabled/disabled at some future time?","commit_id":"be33c1912f778f1c67b7566e73a7b1c5102be814"},{"author":{"_account_id":2243,"name":"John Griffith","email":"john.griffith8@gmail.com","username":"john-griffith"},"change_message_id":"68e89ae75702e05b4b689e2be1fb09826cbcfc4d","unresolved":false,"context_lines":[{"line_number":91,"context_line":"and fail over if desired."},{"line_number":92,"context_line":""},{"line_number":93,"context_line":"This proposal suggests that we would decouple the replication information"},{"line_number":94,"context_line":"from the create call.  The flow would be something like this:"},{"line_number":95,"context_line":"* Create a volume of type \"replication_capable\u003dTrue\""},{"line_number":96,"context_line":"* Cinder uses the existing functionality of the capabilities filter to pick"},{"line_number":97,"context_line":"  a backend that supports the requested replication type and creates a volume"}],"source_content_type":"text/x-rst","patch_set":4,"id":"7a016987_19c67849","line":94,"in_reply_to":"7a016987_14432b6e","updated":"2015-05-28 05:20:22.000000000","message":"Hey Scott\nyes, I agree completely.  Honestly my initial draft/proposal eliminated the whole \"replicate-enable\" call altogether.  BUT there was some push-back on that (I have no idea why).\n\nHonestly I\u0027m trying to turn over a new leaf and compromise as much as possible so we can actually get this approved.  It\u0027s a bit frustrating, I just want to write the code already!!! :)","commit_id":"be33c1912f778f1c67b7566e73a7b1c5102be814"},{"author":{"_account_id":7173,"name":"Scott DAngelo","email":"scott.dangelo@gmail.com","username":"scottda"},"change_message_id":"0af7331ccb311332ff6846ea121c52e9a172ddba","unresolved":false,"context_lines":[{"line_number":91,"context_line":"and fail over if desired."},{"line_number":92,"context_line":""},{"line_number":93,"context_line":"This proposal suggests that we would decouple the replication information"},{"line_number":94,"context_line":"from the create call.  The flow would be something like this:"},{"line_number":95,"context_line":"* Create a volume of type \"replication_capable\u003dTrue\""},{"line_number":96,"context_line":"* Cinder uses the existing functionality of the capabilities filter to pick"},{"line_number":97,"context_line":"  a backend that supports the requested replication type and creates a volume"}],"source_content_type":"text/x-rst","patch_set":4,"id":"7a016987_59d97756","line":94,"in_reply_to":"7a016987_19c67849","updated":"2015-05-28 16:16:23.000000000","message":"For starters, \"I feel your pain\". I think the use of specs is generally good, allowing for refined questions and critique at the line-by-line level. The trade-off is that it slows velocity down tremendously.\nAnyway, I\u0027m in favour of just getting things done and moving on to the code (which will entail more review process anyway). If we cannot get support in for a replicated volume-type mechanism now, it can be done later.","commit_id":"be33c1912f778f1c67b7566e73a7b1c5102be814"},{"author":{"_account_id":428,"name":"Robert Esker","email":"esker@me.com","username":"esker"},"change_message_id":"f989ebaacde20b144610e74fc6853a644861221b","unresolved":false,"context_lines":[{"line_number":95,"context_line":"* Create a volume of type \"replication_capable\u003dTrue\""},{"line_number":96,"context_line":"* Cinder uses the existing functionality of the capabilities filter to pick"},{"line_number":97,"context_line":"  a backend that supports the requested replication type and creates a volume"},{"line_number":98,"context_line":"  nothing different than the existing workflow."},{"line_number":99,"context_line":"* Add API calls for replication-enable, replication-disable,"},{"line_number":100,"context_line":"  replication-failover"},{"line_number":101,"context_line":""}],"source_content_type":"text/x-rst","patch_set":4,"id":"7a016987_35dbda1d","line":98,"updated":"2015-05-14 03:23:59.000000000","message":"odd wording - perhaps:  ... creates a volume in the same manner as the existing workflow.","commit_id":"be33c1912f778f1c67b7566e73a7b1c5102be814"},{"author":{"_account_id":2243,"name":"John Griffith","email":"john.griffith8@gmail.com","username":"john-griffith"},"change_message_id":"bb11a7eba64a6572cc4c1ac7a9543721464c8acc","unresolved":false,"context_lines":[{"line_number":95,"context_line":"* Create a volume of type \"replication_capable\u003dTrue\""},{"line_number":96,"context_line":"* Cinder uses the existing functionality of the capabilities filter to pick"},{"line_number":97,"context_line":"  a backend that supports the requested replication type and creates a volume"},{"line_number":98,"context_line":"  nothing different than the existing workflow."},{"line_number":99,"context_line":"* Add API calls for replication-enable, replication-disable,"},{"line_number":100,"context_line":"  replication-failover"},{"line_number":101,"context_line":""}],"source_content_type":"text/x-rst","patch_set":4,"id":"7a016987_b904047e","line":98,"in_reply_to":"7a016987_35dbda1d","updated":"2015-05-28 05:43:26.000000000","message":"Done","commit_id":"be33c1912f778f1c67b7566e73a7b1c5102be814"},{"author":{"_account_id":4418,"name":"Ronen Kat","email":"ronenkat@il.ibm.com","username":"ronenkat"},"change_message_id":"61320c4154bd84d02054b45d2dbad25cc15edecb","unresolved":false,"context_lines":[{"line_number":110,"context_line":"  requirement for testing purposes (although I still contend that one"},{"line_number":111,"context_line":"  could test by taking the primary offline)."},{"line_number":112,"context_line":""},{"line_number":113,"context_line":"* replication-enable, replication-disable,"},{"line_number":114,"context_line":"  replication-failover"},{"line_number":115,"context_line":""},{"line_number":116,"context_line":"** replication-enable:"}],"source_content_type":"text/x-rst","patch_set":5,"id":"5afe65bd_880b0a8e","line":113,"updated":"2015-06-04 14:32:55.000000000","message":"Replication V1 API didn\u0027t have enable/disable replication REST API, it was done via the change volume type.\nDon\u0027t see a need to change that.","commit_id":"137ffdfcb40b21920b6257c7ce3ba0b5024f6251"},{"author":{"_account_id":4418,"name":"Ronen Kat","email":"ronenkat@il.ibm.com","username":"ronenkat"},"change_message_id":"f9699d454b9bba1b87446b47a86d401c8ead7345","unresolved":false,"context_lines":[{"line_number":110,"context_line":"  requirement for testing purposes (although I still contend that one"},{"line_number":111,"context_line":"  could test by taking the primary offline)."},{"line_number":112,"context_line":""},{"line_number":113,"context_line":"* replication-enable, replication-disable,"},{"line_number":114,"context_line":"  replication-failover"},{"line_number":115,"context_line":""},{"line_number":116,"context_line":"** replication-enable:"}],"source_content_type":"text/x-rst","patch_set":5,"id":"3afb71cf_296b5720","line":113,"in_reply_to":"3afb71cf_9ab60f89","updated":"2015-06-06 02:05:31.000000000","message":"Spec suggested not to implement \"replication-enable\", \"replication-disable\" - comment was supportive of the notion in the spec.\nHave no opposition to have it implemented.","commit_id":"137ffdfcb40b21920b6257c7ce3ba0b5024f6251"},{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"ec1d7cece812d0444247936de65a43643d7f29d3","unresolved":false,"context_lines":[{"line_number":110,"context_line":"  requirement for testing purposes (although I still contend that one"},{"line_number":111,"context_line":"  could test by taking the primary offline)."},{"line_number":112,"context_line":""},{"line_number":113,"context_line":"* replication-enable, replication-disable,"},{"line_number":114,"context_line":"  replication-failover"},{"line_number":115,"context_line":""},{"line_number":116,"context_line":"** replication-enable:"}],"source_content_type":"text/x-rst","patch_set":5,"id":"3afb71cf_9ab60f89","line":113,"in_reply_to":"5afe65bd_880b0a8e","updated":"2015-06-05 21:44:06.000000000","message":"That\u0027s why this is v2 of the spec.   I think it\u0027s very useful to be able to enable/disable this in the API.","commit_id":"137ffdfcb40b21920b6257c7ce3ba0b5024f6251"},{"author":{"_account_id":12924,"name":"Patrick East","email":"east.patrick@gmail.com","username":"patrick.east"},"change_message_id":"4f1a6a603a7c56dbb68fe8d2fde83da14fbe9fe9","unresolved":false,"context_lines":[{"line_number":110,"context_line":"  requirement for testing purposes (although I still contend that one"},{"line_number":111,"context_line":"  could test by taking the primary offline)."},{"line_number":112,"context_line":""},{"line_number":113,"context_line":"* replication-enable, replication-disable,"},{"line_number":114,"context_line":"  replication-failover"},{"line_number":115,"context_line":""},{"line_number":116,"context_line":"** replication-enable:"}],"source_content_type":"text/x-rst","patch_set":5,"id":"3afb71cf_973712b0","line":113,"in_reply_to":"5afe65bd_880b0a8e","updated":"2015-06-05 16:00:29.000000000","message":"They seem like fairly useful commands if, for example, if was going to disable my replication target to do maintenance and wanted to stop replication from occurring temporarily without retyping a volume which would be visible from a non-admin user.\n\nI don\u0027t really understand why them not being in v1 makes for a case that it shouldn\u0027t be in v2. The whole point of this spec is because v1 was deemed insufficient as a solution.","commit_id":"137ffdfcb40b21920b6257c7ce3ba0b5024f6251"},{"author":{"_account_id":4418,"name":"Ronen Kat","email":"ronenkat@il.ibm.com","username":"ronenkat"},"change_message_id":"61320c4154bd84d02054b45d2dbad25cc15edecb","unresolved":false,"context_lines":[{"line_number":112,"context_line":""},{"line_number":113,"context_line":"* replication-enable, replication-disable,"},{"line_number":114,"context_line":"  replication-failover"},{"line_number":115,"context_line":""},{"line_number":116,"context_line":"** replication-enable:"},{"line_number":117,"context_line":"   cinder replication-enable \u003cvolume-id\u003e"},{"line_number":118,"context_line":""}],"source_content_type":"text/x-rst","patch_set":5,"id":"5afe65bd_a87b66f4","line":115,"updated":"2015-06-04 14:32:55.000000000","message":"Failover should be provided, as some customers would require to control when failover is done. Not all OpenStack users would be comfortable with the auto option.","commit_id":"137ffdfcb40b21920b6257c7ce3ba0b5024f6251"},{"author":{"_account_id":4418,"name":"Ronen Kat","email":"ronenkat@il.ibm.com","username":"ronenkat"},"change_message_id":"f9699d454b9bba1b87446b47a86d401c8ead7345","unresolved":false,"context_lines":[{"line_number":112,"context_line":""},{"line_number":113,"context_line":"* replication-enable, replication-disable,"},{"line_number":114,"context_line":"  replication-failover"},{"line_number":115,"context_line":""},{"line_number":116,"context_line":"** replication-enable:"},{"line_number":117,"context_line":"   cinder replication-enable \u003cvolume-id\u003e"},{"line_number":118,"context_line":""}],"source_content_type":"text/x-rst","patch_set":5,"id":"3afb71cf_09941be0","line":115,"in_reply_to":"3afb71cf_17fa02be","updated":"2015-06-06 02:05:31.000000000","message":"That would be great. However, see above, it says would not be implemented at first.","commit_id":"137ffdfcb40b21920b6257c7ce3ba0b5024f6251"},{"author":{"_account_id":12924,"name":"Patrick East","email":"east.patrick@gmail.com","username":"patrick.east"},"change_message_id":"4f1a6a603a7c56dbb68fe8d2fde83da14fbe9fe9","unresolved":false,"context_lines":[{"line_number":112,"context_line":""},{"line_number":113,"context_line":"* replication-enable, replication-disable,"},{"line_number":114,"context_line":"  replication-failover"},{"line_number":115,"context_line":""},{"line_number":116,"context_line":"** replication-enable:"},{"line_number":117,"context_line":"   cinder replication-enable \u003cvolume-id\u003e"},{"line_number":118,"context_line":""}],"source_content_type":"text/x-rst","patch_set":5,"id":"3afb71cf_17fa02be","line":115,"in_reply_to":"3afb71cf_1a5ec2e9","updated":"2015-06-05 16:00:29.000000000","message":"Please go read about 30 lines further in the spec... there is literally a command proposed called \u0027replication-failover\u0027 that does what you guys are asking for....","commit_id":"137ffdfcb40b21920b6257c7ce3ba0b5024f6251"},{"author":{"_account_id":11079,"name":"TaoBai","email":"baitao5@huawei.com","username":"TaoBai"},"change_message_id":"0874f20a97a0489002e038486351c2b17c576e51","unresolved":false,"context_lines":[{"line_number":112,"context_line":""},{"line_number":113,"context_line":"* replication-enable, replication-disable,"},{"line_number":114,"context_line":"  replication-failover"},{"line_number":115,"context_line":""},{"line_number":116,"context_line":"** replication-enable:"},{"line_number":117,"context_line":"   cinder replication-enable \u003cvolume-id\u003e"},{"line_number":118,"context_line":""}],"source_content_type":"text/x-rst","patch_set":5,"id":"3afb71cf_1a5ec2e9","line":115,"in_reply_to":"5afe65bd_a87b66f4","updated":"2015-06-05 02:38:17.000000000","message":"Hi Ronen, I quite agree with you on this point!!!\n\n\nI have raised similar question on summit Friday meetup whether there is a failover CLI for customer could manually control it.\n\n\nBut John is not there, I did not get the answer what I want and not  attracted enough attention from others.","commit_id":"137ffdfcb40b21920b6257c7ce3ba0b5024f6251"},{"author":{"_account_id":4418,"name":"Ronen Kat","email":"ronenkat@il.ibm.com","username":"ronenkat"},"change_message_id":"61320c4154bd84d02054b45d2dbad25cc15edecb","unresolved":false,"context_lines":[{"line_number":153,"context_line":""},{"line_number":154,"context_line":"   The reality is that fail over is something usually done due to a failure"},{"line_number":155,"context_line":"   of a device.  In that case, I propose that when an operation request for"},{"line_number":156,"context_line":"   a volume arrives at the scheduler, and the host is unreachable it checks"},{"line_number":157,"context_line":"   if the volume is replicated, if it is, then it uses that host for the"},{"line_number":158,"context_line":"   requested call.  This indicates that there are multiple hosts possible"},{"line_number":159,"context_line":"   in the Volume object, which are added as part of replication-enable,"}],"source_content_type":"text/x-rst","patch_set":5,"id":"5afe65bd_e36740b5","line":156,"updated":"2015-06-04 14:32:55.000000000","message":"This is HA for the volume driver and has nothing to do with replication. \n\nA failover should not happen if the volume driver is not responsive.\n\nA failover should take place if there is a failure on the DATA path, not the control path.","commit_id":"137ffdfcb40b21920b6257c7ce3ba0b5024f6251"},{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"ec1d7cece812d0444247936de65a43643d7f29d3","unresolved":false,"context_lines":[{"line_number":153,"context_line":""},{"line_number":154,"context_line":"   The reality is that fail over is something usually done due to a failure"},{"line_number":155,"context_line":"   of a device.  In that case, I propose that when an operation request for"},{"line_number":156,"context_line":"   a volume arrives at the scheduler, and the host is unreachable it checks"},{"line_number":157,"context_line":"   if the volume is replicated, if it is, then it uses that host for the"},{"line_number":158,"context_line":"   requested call.  This indicates that there are multiple hosts possible"},{"line_number":159,"context_line":"   in the Volume object, which are added as part of replication-enable,"}],"source_content_type":"text/x-rst","patch_set":5,"id":"3afb71cf_fa03c30d","line":156,"in_reply_to":"3afb71cf_37e29e04","updated":"2015-06-05 21:44:06.000000000","message":"I\u0027m unclear how the Cinder scheduler is going to determine if the backend is \u0027unresponsive\u0027?   Is the scheduler going to call the driver and the driver is supposed to ping the array to make sure it\u0027s there?   Or are we going to rely on get_volume_stats update calls returning data and checking that time against the last time it got an update?","commit_id":"137ffdfcb40b21920b6257c7ce3ba0b5024f6251"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"6ada98911449b8d48d504cf3f3e2fa252888a322","unresolved":false,"context_lines":[{"line_number":153,"context_line":""},{"line_number":154,"context_line":"   The reality is that fail over is something usually done due to a failure"},{"line_number":155,"context_line":"   of a device.  In that case, I propose that when an operation request for"},{"line_number":156,"context_line":"   a volume arrives at the scheduler, and the host is unreachable it checks"},{"line_number":157,"context_line":"   if the volume is replicated, if it is, then it uses that host for the"},{"line_number":158,"context_line":"   requested call.  This indicates that there are multiple hosts possible"},{"line_number":159,"context_line":"   in the Volume object, which are added as part of replication-enable,"}],"source_content_type":"text/x-rst","patch_set":5,"id":"1af86dd1_7b4ed5c2","line":156,"in_reply_to":"3afb71cf_a96867f6","updated":"2015-06-12 09:54:14.000000000","message":"I agree that \u0027the host is unreachable\u0027 need to more detail explanation, as Ronen said, it is possible that the control path is  failure but Data patch is still alive. In this situation, we should not make the replication-failover.","commit_id":"137ffdfcb40b21920b6257c7ce3ba0b5024f6251"},{"author":{"_account_id":4418,"name":"Ronen Kat","email":"ronenkat@il.ibm.com","username":"ronenkat"},"change_message_id":"f9699d454b9bba1b87446b47a86d401c8ead7345","unresolved":false,"context_lines":[{"line_number":153,"context_line":""},{"line_number":154,"context_line":"   The reality is that fail over is something usually done due to a failure"},{"line_number":155,"context_line":"   of a device.  In that case, I propose that when an operation request for"},{"line_number":156,"context_line":"   a volume arrives at the scheduler, and the host is unreachable it checks"},{"line_number":157,"context_line":"   if the volume is replicated, if it is, then it uses that host for the"},{"line_number":158,"context_line":"   requested call.  This indicates that there are multiple hosts possible"},{"line_number":159,"context_line":"   in the Volume object, which are added as part of replication-enable,"}],"source_content_type":"text/x-rst","patch_set":5,"id":"3afb71cf_a96867f6","line":156,"in_reply_to":"3afb71cf_fa03c30d","updated":"2015-06-06 02:05:31.000000000","message":"my experience shows that there are cases when a backend may not response to control commands but still provides data access.\nI would automate failover when the compute can\u0027t access its data anymore, not before that (at least not automatically inside Cinder)","commit_id":"137ffdfcb40b21920b6257c7ce3ba0b5024f6251"},{"author":{"_account_id":12924,"name":"Patrick East","email":"east.patrick@gmail.com","username":"patrick.east"},"change_message_id":"4f1a6a603a7c56dbb68fe8d2fde83da14fbe9fe9","unresolved":false,"context_lines":[{"line_number":153,"context_line":""},{"line_number":154,"context_line":"   The reality is that fail over is something usually done due to a failure"},{"line_number":155,"context_line":"   of a device.  In that case, I propose that when an operation request for"},{"line_number":156,"context_line":"   a volume arrives at the scheduler, and the host is unreachable it checks"},{"line_number":157,"context_line":"   if the volume is replicated, if it is, then it uses that host for the"},{"line_number":158,"context_line":"   requested call.  This indicates that there are multiple hosts possible"},{"line_number":159,"context_line":"   in the Volume object, which are added as part of replication-enable,"}],"source_content_type":"text/x-rst","patch_set":5,"id":"3afb71cf_37e29e04","line":156,"in_reply_to":"5afe65bd_e36740b5","updated":"2015-06-05 16:00:29.000000000","message":"I agree that we maybe want to scale back the automatic part of this. For any volume operation in the scheduler that fails maybe we don\u0027t want to failover and go to the other backend, but for the command being described here (replication-failover) if the backend is not responsive it should go to the other one...","commit_id":"137ffdfcb40b21920b6257c7ce3ba0b5024f6251"},{"author":{"_account_id":4418,"name":"Ronen Kat","email":"ronenkat@il.ibm.com","username":"ronenkat"},"change_message_id":"61320c4154bd84d02054b45d2dbad25cc15edecb","unresolved":false,"context_lines":[{"line_number":156,"context_line":"   a volume arrives at the scheduler, and the host is unreachable it checks"},{"line_number":157,"context_line":"   if the volume is replicated, if it is, then it uses that host for the"},{"line_number":158,"context_line":"   requested call.  This indicates that there are multiple hosts possible"},{"line_number":159,"context_line":"   in the Volume object, which are added as part of replication-enable,"},{"line_number":160,"context_line":"   and marked unavailable on replication-disable."},{"line_number":161,"context_line":""},{"line_number":162,"context_line":"From a user perspective the end user is not required to set all the details on"}],"source_content_type":"text/x-rst","patch_set":5,"id":"5afe65bd_43ea94dc","line":159,"updated":"2015-06-04 14:32:55.000000000","message":"This should be a config option. Some customer admins, mostly enterprise, would like to determine if the infrastructure changes - not all five minute blackouts should result in moving to your secondary storage, especially if it does not provide the same performance/reliability.","commit_id":"137ffdfcb40b21920b6257c7ce3ba0b5024f6251"},{"author":{"_account_id":4418,"name":"Ronen Kat","email":"ronenkat@il.ibm.com","username":"ronenkat"},"change_message_id":"61320c4154bd84d02054b45d2dbad25cc15edecb","unresolved":false,"context_lines":[{"line_number":158,"context_line":"   requested call.  This indicates that there are multiple hosts possible"},{"line_number":159,"context_line":"   in the Volume object, which are added as part of replication-enable,"},{"line_number":160,"context_line":"   and marked unavailable on replication-disable."},{"line_number":161,"context_line":""},{"line_number":162,"context_line":"From a user perspective the end user is not required to set all the details on"},{"line_number":163,"context_line":"replication ahead of time (during creation).  This provide flexibility.  Also"},{"line_number":164,"context_line":"this takes the spaghetti code that we currently have for replication that lives"}],"source_content_type":"text/x-rst","patch_set":5,"id":"5afe65bd_464e223c","line":161,"updated":"2015-06-04 14:32:55.000000000","message":"Some storage systems have unidirectional replication, so moving back and forth require more than a change of config option of who is the primary or secondary, but rather a command line and a driver action.\nBasically I am missing a fail-back/repair command and will handle the \"repair\" of replication when the \"catastrophe\" is remedied.","commit_id":"137ffdfcb40b21920b6257c7ce3ba0b5024f6251"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"cf1cbf43b50b91e544cd4de21e2f4fb77c43f645","unresolved":false,"context_lines":[{"line_number":158,"context_line":"   requested call.  This indicates that there are multiple hosts possible"},{"line_number":159,"context_line":"   in the Volume object, which are added as part of replication-enable,"},{"line_number":160,"context_line":"   and marked unavailable on replication-disable."},{"line_number":161,"context_line":""},{"line_number":162,"context_line":"From a user perspective the end user is not required to set all the details on"},{"line_number":163,"context_line":"replication ahead of time (during creation).  This provide flexibility.  Also"},{"line_number":164,"context_line":"this takes the spaghetti code that we currently have for replication that lives"}],"source_content_type":"text/x-rst","patch_set":5,"id":"3afb71cf_9100f002","line":161,"in_reply_to":"3afb71cf_0921bbfb","updated":"2015-06-08 22:59:22.000000000","message":"Xing, It was my understanding from the discussions at the summit, that Cinder would always try the primary first.  So, if the primary comes back then we have an issue where the user could get inconsistent data for unidirectional replication.","commit_id":"137ffdfcb40b21920b6257c7ce3ba0b5024f6251"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"a5ede5e42fa92da6ee5c98b25cc068302953be33","unresolved":false,"context_lines":[{"line_number":158,"context_line":"   requested call.  This indicates that there are multiple hosts possible"},{"line_number":159,"context_line":"   in the Volume object, which are added as part of replication-enable,"},{"line_number":160,"context_line":"   and marked unavailable on replication-disable."},{"line_number":161,"context_line":""},{"line_number":162,"context_line":"From a user perspective the end user is not required to set all the details on"},{"line_number":163,"context_line":"replication ahead of time (during creation).  This provide flexibility.  Also"},{"line_number":164,"context_line":"this takes the spaghetti code that we currently have for replication that lives"}],"source_content_type":"text/x-rst","patch_set":5,"id":"3afb71cf_0921bbfb","line":161,"in_reply_to":"3afb71cf_5d69b1bd","updated":"2015-06-06 02:29:47.000000000","message":"I asked John about failback at the summit. Here is my understanding after a brief discussion with him (and with others in the room) during that work session on Replication V2:\n\nAfter you fail over to the secondary site, the secondary site becomes the primary (if the array has bidirectional replication) . You just do another failover to go back to the original primary site (assume replication-enable will be run first).","commit_id":"137ffdfcb40b21920b6257c7ce3ba0b5024f6251"},{"author":{"_account_id":4418,"name":"Ronen Kat","email":"ronenkat@il.ibm.com","username":"ronenkat"},"change_message_id":"f9699d454b9bba1b87446b47a86d401c8ead7345","unresolved":false,"context_lines":[{"line_number":158,"context_line":"   requested call.  This indicates that there are multiple hosts possible"},{"line_number":159,"context_line":"   in the Volume object, which are added as part of replication-enable,"},{"line_number":160,"context_line":"   and marked unavailable on replication-disable."},{"line_number":161,"context_line":""},{"line_number":162,"context_line":"From a user perspective the end user is not required to set all the details on"},{"line_number":163,"context_line":"replication ahead of time (during creation).  This provide flexibility.  Also"},{"line_number":164,"context_line":"this takes the spaghetti code that we currently have for replication that lives"}],"source_content_type":"text/x-rst","patch_set":5,"id":"3afb71cf_745c8225","line":161,"in_reply_to":"3afb71cf_5d69b1bd","updated":"2015-06-06 02:05:31.000000000","message":"In most use-cases we would expect the need to \"go back\" - although doing so automatically is hard.\nThis functionality was in replication v1 (re-enable), following it you would be able to \"failover\" back\n\nI can see a scenario that if you have \"replication-enable\", it could provide the same functionality.","commit_id":"137ffdfcb40b21920b6257c7ce3ba0b5024f6251"},{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"ec1d7cece812d0444247936de65a43643d7f29d3","unresolved":false,"context_lines":[{"line_number":158,"context_line":"   requested call.  This indicates that there are multiple hosts possible"},{"line_number":159,"context_line":"   in the Volume object, which are added as part of replication-enable,"},{"line_number":160,"context_line":"   and marked unavailable on replication-disable."},{"line_number":161,"context_line":""},{"line_number":162,"context_line":"From a user perspective the end user is not required to set all the details on"},{"line_number":163,"context_line":"replication ahead of time (during creation).  This provide flexibility.  Also"},{"line_number":164,"context_line":"this takes the spaghetti code that we currently have for replication that lives"}],"source_content_type":"text/x-rst","patch_set":5,"id":"3afb71cf_5d69b1bd","line":161,"in_reply_to":"3afb71cf_971272b3","updated":"2015-06-05 21:44:06.000000000","message":"I think Patrick has a good point here.  I don\u0027t see anywhere in the spec explanation where we are talking about switching that volume back to a primary after we\u0027ve gone to the failover (secondary).\n\nIndeed though, there are several Cinder backends that are unidirectional that can\u0027t go back to the primary after it\u0027s back up, for that volume.  This is a valid concern and I think the spec should at least address what the plan is with it.  Maybe once the failover happens, the primary is no longer available for requests against the volume.   Flag the volume as failed over to a secondary, and then never try to revert or failover again.","commit_id":"137ffdfcb40b21920b6257c7ce3ba0b5024f6251"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"67037c7c67fa7f80970597c65524c41403a3463a","unresolved":false,"context_lines":[{"line_number":158,"context_line":"   requested call.  This indicates that there are multiple hosts possible"},{"line_number":159,"context_line":"   in the Volume object, which are added as part of replication-enable,"},{"line_number":160,"context_line":"   and marked unavailable on replication-disable."},{"line_number":161,"context_line":""},{"line_number":162,"context_line":"From a user perspective the end user is not required to set all the details on"},{"line_number":163,"context_line":"replication ahead of time (during creation).  This provide flexibility.  Also"},{"line_number":164,"context_line":"this takes the spaghetti code that we currently have for replication that lives"}],"source_content_type":"text/x-rst","patch_set":5,"id":"5afe65bd_82eabdaa","line":161,"in_reply_to":"5afe65bd_464e223c","updated":"2015-06-04 17:39:40.000000000","message":"Ronen, good point!  I did not consider this when we discussed this at the Summit.  For backends that do uni-direction replication we need to ensure that we can explicitly failover to the secondary host.","commit_id":"137ffdfcb40b21920b6257c7ce3ba0b5024f6251"},{"author":{"_account_id":12924,"name":"Patrick East","email":"east.patrick@gmail.com","username":"patrick.east"},"change_message_id":"4f1a6a603a7c56dbb68fe8d2fde83da14fbe9fe9","unresolved":false,"context_lines":[{"line_number":158,"context_line":"   requested call.  This indicates that there are multiple hosts possible"},{"line_number":159,"context_line":"   in the Volume object, which are added as part of replication-enable,"},{"line_number":160,"context_line":"   and marked unavailable on replication-disable."},{"line_number":161,"context_line":""},{"line_number":162,"context_line":"From a user perspective the end user is not required to set all the details on"},{"line_number":163,"context_line":"replication ahead of time (during creation).  This provide flexibility.  Also"},{"line_number":164,"context_line":"this takes the spaghetti code that we currently have for replication that lives"}],"source_content_type":"text/x-rst","patch_set":5,"id":"3afb71cf_971272b3","line":161,"in_reply_to":"5afe65bd_82eabdaa","updated":"2015-06-05 16:00:29.000000000","message":"I don\u0027t see anywhere that this spec talks about failing over back and forth... maybe its implied, but IMO if we can handle one-way single time disaster recovery its a huge step in the right direction.\n\nI think as something that could be added on to this you could add the hooks required for uni-directional replication to go back and forth between backends.","commit_id":"137ffdfcb40b21920b6257c7ce3ba0b5024f6251"},{"author":{"_account_id":14339,"name":"Philipp Marek","email":"philipp.marek@linbit.com","username":"pmarek"},"change_message_id":"dc867aab32dedfd68342055c2629df532beb728a","unresolved":false,"context_lines":[{"line_number":162,"context_line":"From a user perspective the end user is not required to set all the details on"},{"line_number":163,"context_line":"replication ahead of time (during creation).  This provide flexibility.  Also"},{"line_number":164,"context_line":"this takes the spaghetti code that we currently have for replication that lives"},{"line_number":165,"context_line":"in the create flow, out of the create flow and isolates it.  From and end users"},{"line_number":166,"context_line":"perspective the biggest advantage is that this approach will actually work and"},{"line_number":167,"context_line":"will not be brittle like what we have currently."},{"line_number":168,"context_line":""}],"source_content_type":"text/x-rst","patch_set":5,"id":"3a50d1a3_3f46517b","line":165,"updated":"2015-07-23 07:36:08.000000000","message":"\"lives in the create flow out of there and isolates it\" ;)\n\"From an end users\"","commit_id":"137ffdfcb40b21920b6257c7ce3ba0b5024f6251"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"05223ab0d8ce9b1aaafaf951fa99985181e272ec","unresolved":false,"context_lines":[{"line_number":181,"context_line":"  the driver via a retype/modification after the failover, that\u0027s fine as well."},{"line_number":182,"context_line":""},{"line_number":183,"context_line":"* async vs sync"},{"line_number":184,"context_line":"  This spec assumes async replication only for now.  It can easily be"},{"line_number":185,"context_line":"  extended later for the synchronous case, but for now it\u0027s specific"},{"line_number":186,"context_line":"  to async.  If/When sync is added it can be specified as an additional"},{"line_number":187,"context_line":"  backend capability."}],"source_content_type":"text/x-rst","patch_set":5,"id":"5afe65bd_f1b5fc30","line":184,"updated":"2015-06-03 14:13:48.000000000","message":"Is this correct?  I thought this was assuming synchronous replication for now, as that is what most backends implement currently..?","commit_id":"137ffdfcb40b21920b6257c7ce3ba0b5024f6251"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"cf1cbf43b50b91e544cd4de21e2f4fb77c43f645","unresolved":false,"context_lines":[{"line_number":181,"context_line":"  the driver via a retype/modification after the failover, that\u0027s fine as well."},{"line_number":182,"context_line":""},{"line_number":183,"context_line":"* async vs sync"},{"line_number":184,"context_line":"  This spec assumes async replication only for now.  It can easily be"},{"line_number":185,"context_line":"  extended later for the synchronous case, but for now it\u0027s specific"},{"line_number":186,"context_line":"  to async.  If/When sync is added it can be specified as an additional"},{"line_number":187,"context_line":"  backend capability."}],"source_content_type":"text/x-rst","patch_set":5,"id":"3afb71cf_d11e6862","line":184,"in_reply_to":"3afb71cf_09789bf1","updated":"2015-06-08 22:59:22.000000000","message":"Xing is correct.  I think the backends can handle this as they need to do so.","commit_id":"137ffdfcb40b21920b6257c7ce3ba0b5024f6251"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"a5ede5e42fa92da6ee5c98b25cc068302953be33","unresolved":false,"context_lines":[{"line_number":181,"context_line":"  the driver via a retype/modification after the failover, that\u0027s fine as well."},{"line_number":182,"context_line":""},{"line_number":183,"context_line":"* async vs sync"},{"line_number":184,"context_line":"  This spec assumes async replication only for now.  It can easily be"},{"line_number":185,"context_line":"  extended later for the synchronous case, but for now it\u0027s specific"},{"line_number":186,"context_line":"  to async.  If/When sync is added it can be specified as an additional"},{"line_number":187,"context_line":"  backend capability."}],"source_content_type":"text/x-rst","patch_set":5,"id":"3afb71cf_09789bf1","line":184,"in_reply_to":"5afe65bd_ab0a691f","updated":"2015-06-06 02:29:47.000000000","message":"For VNX, we are actually planning to implement sync first, and async will be the next step.  John also mentioned async/sync can be reported as capabilities.  If that is case, it should be able to support both.","commit_id":"137ffdfcb40b21920b6257c7ce3ba0b5024f6251"},{"author":{"_account_id":12924,"name":"Patrick East","email":"east.patrick@gmail.com","username":"patrick.east"},"change_message_id":"a4eba42ad83a3e835164d86296cdfbb04eb483ba","unresolved":false,"context_lines":[{"line_number":181,"context_line":"  the driver via a retype/modification after the failover, that\u0027s fine as well."},{"line_number":182,"context_line":""},{"line_number":183,"context_line":"* async vs sync"},{"line_number":184,"context_line":"  This spec assumes async replication only for now.  It can easily be"},{"line_number":185,"context_line":"  extended later for the synchronous case, but for now it\u0027s specific"},{"line_number":186,"context_line":"  to async.  If/When sync is added it can be specified as an additional"},{"line_number":187,"context_line":"  backend capability."}],"source_content_type":"text/x-rst","patch_set":5,"id":"5afe65bd_ab0a691f","line":184,"in_reply_to":"5afe65bd_f1b5fc30","updated":"2015-06-03 15:57:30.000000000","message":"I think its only supporting async in the sense that there is no replicate_now() or progress of the replication, etc. As far as cinder is concerned there is a volume that is replicated... no distinction really on how it happened. This means its only same to assume it is async even though under the hood a backend may be doing periodic synchronous backups.","commit_id":"137ffdfcb40b21920b6257c7ce3ba0b5024f6251"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"07e2db2a515ca53ce5e8a9e52d33ec22bc60244e","unresolved":false,"context_lines":[{"line_number":194,"context_line":"* Cinder does not need to be aware of both backend devices"},{"line_number":195,"context_line":"  This spec is intended to provide flexibility, that means that if an"},{"line_number":196,"context_line":"  admin wishes to configure a backend device that is unknown to Cinder"},{"line_number":197,"context_line":"  that absolutley fine.  The opposite is true as well of course, that"},{"line_number":198,"context_line":"  detail is outlined in this spec."},{"line_number":199,"context_line":""},{"line_number":200,"context_line":"* Tenant visibility"}],"source_content_type":"text/x-rst","patch_set":5,"id":"7a016987_2c09da2c","line":197,"updated":"2015-05-28 15:26:26.000000000","message":"missing \u0027is\u0027 and absolutely is misspelled. ... \u0027that is absolutely fine\u0027\n\nIf you push another draft.","commit_id":"137ffdfcb40b21920b6257c7ce3ba0b5024f6251"},{"author":{"_account_id":2243,"name":"John Griffith","email":"john.griffith8@gmail.com","username":"john-griffith"},"change_message_id":"b1ffab6571cd7ebe7e1e09080a506bea70694155","unresolved":false,"context_lines":[{"line_number":194,"context_line":"* Cinder does not need to be aware of both backend devices"},{"line_number":195,"context_line":"  This spec is intended to provide flexibility, that means that if an"},{"line_number":196,"context_line":"  admin wishes to configure a backend device that is unknown to Cinder"},{"line_number":197,"context_line":"  that absolutley fine.  The opposite is true as well of course, that"},{"line_number":198,"context_line":"  detail is outlined in this spec."},{"line_number":199,"context_line":""},{"line_number":200,"context_line":"* Tenant visibility"}],"source_content_type":"text/x-rst","patch_set":5,"id":"7a016987_77b3e84d","line":197,"in_reply_to":"7a016987_2c09da2c","updated":"2015-05-29 19:42:18.000000000","message":"darn it!  If this ever gets a +2 I\u0027ll update and push the typo fix with a ninja merge.\n\nIf it gets yet another minus 1 I\u0027ll incorporate the typo fix.\n\nThx","commit_id":"137ffdfcb40b21920b6257c7ce3ba0b5024f6251"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"67037c7c67fa7f80970597c65524c41403a3463a","unresolved":false,"context_lines":[{"line_number":194,"context_line":"* Cinder does not need to be aware of both backend devices"},{"line_number":195,"context_line":"  This spec is intended to provide flexibility, that means that if an"},{"line_number":196,"context_line":"  admin wishes to configure a backend device that is unknown to Cinder"},{"line_number":197,"context_line":"  that absolutley fine.  The opposite is true as well of course, that"},{"line_number":198,"context_line":"  detail is outlined in this spec."},{"line_number":199,"context_line":""},{"line_number":200,"context_line":"* Tenant visibility"}],"source_content_type":"text/x-rst","patch_set":5,"id":"7a016987_c5265fcd","line":197,"in_reply_to":"7a016987_77b3e84d","updated":"2015-06-04 17:39:40.000000000","message":"Welcome.  Thanks for continuing to work on this.","commit_id":"137ffdfcb40b21920b6257c7ce3ba0b5024f6251"},{"author":{"_account_id":10796,"name":"Deepak C Shetty (deepakcs)","email":"dpkshetty@gmail.com","username":"deepakcs"},"change_message_id":"df7d6fb9eb3622f7da85da50f173bb68d18e3691","unresolved":false,"context_lines":[{"line_number":209,"context_line":""},{"line_number":210,"context_line":"* What about devices that can\u0027t do individual volume-rep"},{"line_number":211,"context_line":"  It\u0027s up to them to figure out what they want to do.  If for example"},{"line_number":212,"context_line":"  that replicate by pool, then maybe they can be sophisticated enough to"},{"line_number":213,"context_line":"  put all the volumes of replication type in the same pool and replicate"},{"line_number":214,"context_line":"  the entire pool."},{"line_number":215,"context_line":""}],"source_content_type":"text/x-rst","patch_set":5,"id":"3afb71cf_4c994178","line":212,"updated":"2015-06-11 10:06:03.000000000","message":"s/that replicate/ they replicate/","commit_id":"137ffdfcb40b21920b6257c7ce3ba0b5024f6251"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"6ada98911449b8d48d504cf3f3e2fa252888a322","unresolved":false,"context_lines":[{"line_number":286,"context_line":"I\u0027d propose something like this:"},{"line_number":287,"context_line":"  secondary_hosts None                     (default)"},{"line_number":288,"context_line":"  secondary_hosts foo:enabled              (2 way example)"},{"line_number":289,"context_line":"  secondary_hosts foo:enabled,biz:disabled (3 way example)"},{"line_number":290,"context_line":""},{"line_number":291,"context_line":"There may be a much better way to represent this in the DB but this"},{"line_number":292,"context_line":"is the gist of it."}],"source_content_type":"text/x-rst","patch_set":5,"id":"1af86dd1_5e7427fc","line":289,"updated":"2015-06-12 09:54:14.000000000","message":"What\u0027s the length of this new column, 255? or we need more?","commit_id":"137ffdfcb40b21920b6257c7ce3ba0b5024f6251"},{"author":{"_account_id":14339,"name":"Philipp Marek","email":"philipp.marek@linbit.com","username":"pmarek"},"change_message_id":"dc867aab32dedfd68342055c2629df532beb728a","unresolved":false,"context_lines":[{"line_number":289,"context_line":"  secondary_hosts foo:enabled,biz:disabled (3 way example)"},{"line_number":290,"context_line":""},{"line_number":291,"context_line":"There may be a much better way to represent this in the DB but this"},{"line_number":292,"context_line":"is the gist of it."},{"line_number":293,"context_line":""},{"line_number":294,"context_line":"Additionally we would want to have a way to short cut the host timeout"},{"line_number":295,"context_line":"process, or to force use of a secondary even if the primary host is"}],"source_content_type":"text/x-rst","patch_set":5,"id":"3a50d1a3_cafc4dba","line":292,"updated":"2015-07-23 07:36:08.000000000","message":"This is a simple way, but ...\nI know that typically machines won\u0027t be called \"foo\", but rather \"random-id.storage-1.datacenter-16b.infrastructure.bigvendor.com\", and such a name (plus the \"enabled/disabled\" flag) means that only 3 replicas will find space in 255 chars.\n\nI think that this should be fine most of the time... but I fear that there will some installations where this will be too small.\n\nRight, having another table for that is more expensive - in code, DB changes, etc.","commit_id":"137ffdfcb40b21920b6257c7ce3ba0b5024f6251"},{"author":{"_account_id":14339,"name":"Philipp Marek","email":"philipp.marek@linbit.com","username":"pmarek"},"change_message_id":"dc867aab32dedfd68342055c2629df532beb728a","unresolved":false,"context_lines":[{"line_number":296,"context_line":"available.  This is where the second column in the volume table would"},{"line_number":297,"context_line":"come in:"},{"line_number":298,"context_line":"  primary_host_enabled True  (default)"},{"line_number":299,"context_line":"  primary_host_enabled False (means use secondary if there is one)"},{"line_number":300,"context_line":""},{"line_number":301,"context_line":"* What database migrations will accompany this change."},{"line_number":302,"context_line":""}],"source_content_type":"text/x-rst","patch_set":5,"id":"3a50d1a3_0ac9d5ab","line":299,"updated":"2015-07-23 07:36:08.000000000","message":"yeah, but which one, if there are multiple replicas?\nperhaps that should be a string containing the host name instead.","commit_id":"137ffdfcb40b21920b6257c7ce3ba0b5024f6251"},{"author":{"_account_id":14339,"name":"Philipp Marek","email":"philipp.marek@linbit.com","username":"pmarek"},"change_message_id":"dc867aab32dedfd68342055c2629df532beb728a","unresolved":false,"context_lines":[{"line_number":311,"context_line":"of removing the old replication variables which don\u0027t seem to work right now"},{"line_number":312,"context_line":"anyway."},{"line_number":313,"context_line":""},{"line_number":314,"context_line":"In addition the three calls mentioned earlier would need to be introduced to"},{"line_number":315,"context_line":"the V2 API\u003e"},{"line_number":316,"context_line":""},{"line_number":317,"context_line":"* Specification for the methods"}],"source_content_type":"text/x-rst","patch_set":5,"id":"3a50d1a3_4a2fdd3e","line":314,"updated":"2015-07-23 07:36:08.000000000","message":"four, because of replication_delete?","commit_id":"137ffdfcb40b21920b6257c7ce3ba0b5024f6251"},{"author":{"_account_id":14532,"name":"Gerald McBrearty","email":"gfm@us.ibm.com","username":"gfm"},"change_message_id":"2e3fd798f66a3d792847ab8b24746876ba19dccb","unresolved":false,"context_lines":[{"line_number":336,"context_line":""},{"line_number":337,"context_line":"   cinder replication-failover \u003cvolume-id\u003e"},{"line_number":338,"context_line":"     Sets things up so that subsequent calls should be serviced"},{"line_number":339,"context_line":"     by the secondary_host."},{"line_number":340,"context_line":""},{"line_number":341,"context_line":""},{"line_number":342,"context_line":"* Example use case including typical API samples for both data supplied"}],"source_content_type":"text/x-rst","patch_set":5,"id":"7a016987_3da10047","line":339,"updated":"2015-05-28 20:53:15.000000000","message":"Can you clarify this statement. I was assuming that you are saying the VM would have seamless access to the alternate volume? But you could also be saying the backend volume driver operations are now being sent to the 2ndary host?","commit_id":"137ffdfcb40b21920b6257c7ce3ba0b5024f6251"},{"author":{"_account_id":2243,"name":"John Griffith","email":"john.griffith8@gmail.com","username":"john-griffith"},"change_message_id":"b1ffab6571cd7ebe7e1e09080a506bea70694155","unresolved":false,"context_lines":[{"line_number":336,"context_line":""},{"line_number":337,"context_line":"   cinder replication-failover \u003cvolume-id\u003e"},{"line_number":338,"context_line":"     Sets things up so that subsequent calls should be serviced"},{"line_number":339,"context_line":"     by the secondary_host."},{"line_number":340,"context_line":""},{"line_number":341,"context_line":""},{"line_number":342,"context_line":"* Example use case including typical API samples for both data supplied"}],"source_content_type":"text/x-rst","patch_set":5,"id":"7a016987_f7a6b80d","line":339,"in_reply_to":"7a016987_3da10047","updated":"2015-05-29 19:42:18.000000000","message":"Ideally this should be seamless access from Instance; yes.\n\nAdditionally it\u0027s possible that management/API commands fail over as well.","commit_id":"137ffdfcb40b21920b6257c7ce3ba0b5024f6251"},{"author":{"_account_id":14339,"name":"Philipp Marek","email":"philipp.marek@linbit.com","username":"pmarek"},"change_message_id":"dc867aab32dedfd68342055c2629df532beb728a","unresolved":false,"context_lines":[{"line_number":336,"context_line":""},{"line_number":337,"context_line":"   cinder replication-failover \u003cvolume-id\u003e"},{"line_number":338,"context_line":"     Sets things up so that subsequent calls should be serviced"},{"line_number":339,"context_line":"     by the secondary_host."},{"line_number":340,"context_line":""},{"line_number":341,"context_line":""},{"line_number":342,"context_line":"* Example use case including typical API samples for both data supplied"}],"source_content_type":"text/x-rst","patch_set":5,"id":"3a50d1a3_4aa4bdb8","line":339,"in_reply_to":"7a016987_f7a6b80d","updated":"2015-07-23 07:36:08.000000000","message":"Hmmm, how about setups where there\u0027s no failover necessary (eg. DRBD driver with DRBD transport), because the Instance already talks to all storage backends?\n\nOh, that reminds me ... does the driver have some way to tell Nova to update some storage driver configuration?","commit_id":"137ffdfcb40b21920b6257c7ce3ba0b5024f6251"},{"author":{"_account_id":10796,"name":"Deepak C Shetty (deepakcs)","email":"dpkshetty@gmail.com","username":"deepakcs"},"change_message_id":"df7d6fb9eb3622f7da85da50f173bb68d18e3691","unresolved":false,"context_lines":[{"line_number":367,"context_line":"possible. Parameters which are required should be marked as such and"},{"line_number":368,"context_line":"only under exceptional circumstances should additional parameters"},{"line_number":369,"context_line":"which are not defined in the schema be permitted (eg"},{"line_number":370,"context_line":"additionaProperties should be False)."},{"line_number":371,"context_line":""},{"line_number":372,"context_line":"Reuse of existing predefined parameter types such as regexps for"},{"line_number":373,"context_line":"passwords and user defined names is highly encouraged."}],"source_content_type":"text/x-rst","patch_set":5,"id":"3afb71cf_c70aaa1f","line":370,"updated":"2015-06-11 10:06:03.000000000","message":"s/additionaProperties/additionalProperties","commit_id":"137ffdfcb40b21920b6257c7ce3ba0b5024f6251"},{"author":{"_account_id":14339,"name":"Philipp Marek","email":"philipp.marek@linbit.com","username":"pmarek"},"change_message_id":"dc867aab32dedfd68342055c2629df532beb728a","unresolved":false,"context_lines":[{"line_number":417,"context_line":"--------------------"},{"line_number":418,"context_line":""},{"line_number":419,"context_line":"Please specify any changes to notifications. Be that an extra notification,"},{"line_number":420,"context_line":"changes to an existing notification, or removing a notification."},{"line_number":421,"context_line":""},{"line_number":422,"context_line":"Other end user impact"},{"line_number":423,"context_line":"---------------------"}],"source_content_type":"text/x-rst","patch_set":5,"id":"3a50d1a3_2a85b1cd","line":420,"updated":"2015-07-23 07:36:08.000000000","message":"\"notification to nova that storage driver config should be updated\"?","commit_id":"137ffdfcb40b21920b6257c7ce3ba0b5024f6251"},{"author":{"_account_id":170,"name":"Mike Perez","email":"thingee@gmail.com","username":"thingee"},"change_message_id":"94a87287ed9b422747d913c7ae7a7b84b541451e","unresolved":false,"context_lines":[{"line_number":89,"context_line":"  enable_replication(volume)"},{"line_number":90,"context_line":"  disable_replication(volume)"},{"line_number":91,"context_line":"  failover_replicated_volume(volume)"},{"line_number":92,"context_line":"  udpate_replication_targets() [mechanism to add tgts external to the conf file * optional]"},{"line_number":93,"context_line":"  get_replication_targets() [mechanism for an admin to query what a backend has configured]"},{"line_number":94,"context_line":""},{"line_number":95,"context_line":""}],"source_content_type":"text/x-rst","patch_set":6,"id":"3a50d1a3_0873b616","line":92,"range":{"start_line":92,"start_character":2,"end_line":92,"end_character":28},"updated":"2015-07-31 03:56:55.000000000","message":"/udpate/update/","commit_id":"df4971baaff3d571178a87341109eeba8d08e4ca"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"28d39507008e3711ccd77ab00c514b3cee582042","unresolved":false,"context_lines":[{"line_number":89,"context_line":"  enable_replication(volume)"},{"line_number":90,"context_line":"  disable_replication(volume)"},{"line_number":91,"context_line":"  failover_replicated_volume(volume)"},{"line_number":92,"context_line":"  udpate_replication_targets() [mechanism to add tgts external to the conf file * optional]"},{"line_number":93,"context_line":"  get_replication_targets() [mechanism for an admin to query what a backend has configured]"},{"line_number":94,"context_line":""},{"line_number":95,"context_line":""}],"source_content_type":"text/x-rst","patch_set":6,"id":"3a50d1a3_b2b8efe9","line":92,"updated":"2015-07-31 01:44:56.000000000","message":"Sorry I may miss something, but this API you mean will update the the conf: valid_repilcation_devices, right?","commit_id":"df4971baaff3d571178a87341109eeba8d08e4ca"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"4554417fd74ac4e3ac599e23dd78b1f0c3eedfd6","unresolved":false,"context_lines":[{"line_number":89,"context_line":"  enable_replication(volume)"},{"line_number":90,"context_line":"  disable_replication(volume)"},{"line_number":91,"context_line":"  failover_replicated_volume(volume)"},{"line_number":92,"context_line":"  udpate_replication_targets() [mechanism to add tgts external to the conf file * optional]"},{"line_number":93,"context_line":"  get_replication_targets() [mechanism for an admin to query what a backend has configured]"},{"line_number":94,"context_line":""},{"line_number":95,"context_line":""}],"source_content_type":"text/x-rst","patch_set":6,"id":"3a50d1a3_476b961e","line":92,"in_reply_to":"3a50d1a3_15c4ff8f","updated":"2015-08-03 08:42:23.000000000","message":"Understood, Thanks John.","commit_id":"df4971baaff3d571178a87341109eeba8d08e4ca"},{"author":{"_account_id":2243,"name":"John Griffith","email":"john.griffith8@gmail.com","username":"john-griffith"},"change_message_id":"28be15b80fd41c989f2f4090fc0cfebbc7a49cee","unresolved":false,"context_lines":[{"line_number":89,"context_line":"  enable_replication(volume)"},{"line_number":90,"context_line":"  disable_replication(volume)"},{"line_number":91,"context_line":"  failover_replicated_volume(volume)"},{"line_number":92,"context_line":"  udpate_replication_targets() [mechanism to add tgts external to the conf file * optional]"},{"line_number":93,"context_line":"  get_replication_targets() [mechanism for an admin to query what a backend has configured]"},{"line_number":94,"context_line":""},{"line_number":95,"context_line":""}],"source_content_type":"text/x-rst","patch_set":6,"id":"3a50d1a3_15c4ff8f","line":92,"in_reply_to":"3a50d1a3_b2b8efe9","updated":"2015-07-31 20:40:43.000000000","message":"Yeah, this seems to be causing all sorts of debate for people.  The idea is simply to provide an admin call that sends a message back to the driver to configure an additional replication target.\n\nThe remaining detail is persistence of that info.  I\u0027\u0027m likely going to leave this particular featuer/call out of patch; and it can be added as an enhancement later if desired.","commit_id":"df4971baaff3d571178a87341109eeba8d08e4ca"},{"author":{"_account_id":170,"name":"Mike Perez","email":"thingee@gmail.com","username":"thingee"},"change_message_id":"94a87287ed9b422747d913c7ae7a7b84b541451e","unresolved":false,"context_lines":[{"line_number":100,"context_line":"  primary and secondary volumes in the replication set.  If a backend \"can\" match"},{"line_number":101,"context_line":"  these exactly, then that\u0027s fine, if they can\u0027t, that\u0027s ok as well."},{"line_number":102,"context_line":""},{"line_number":103,"context_line":"  Ideally, if the volume fails over the type specifications would match, but if"},{"line_number":104,"context_line":"  this isn\u0027t possible it\u0027s probably acceptable, and if it needs to be handled by"},{"line_number":105,"context_line":"  the driver via a retype/modification after the failover, that\u0027s fine as well."},{"line_number":106,"context_line":""}],"source_content_type":"text/x-rst","patch_set":6,"id":"3a50d1a3_433d1fba","line":103,"updated":"2015-07-31 03:56:55.000000000","message":"I\u0027d really appreciate it matching in volume types. I think this can get confusing otherwise for operators creating volume types. What sort of push back is there today on this idea?","commit_id":"df4971baaff3d571178a87341109eeba8d08e4ca"},{"author":{"_account_id":2243,"name":"John Griffith","email":"john.griffith8@gmail.com","username":"john-griffith"},"change_message_id":"28be15b80fd41c989f2f4090fc0cfebbc7a49cee","unresolved":false,"context_lines":[{"line_number":100,"context_line":"  primary and secondary volumes in the replication set.  If a backend \"can\" match"},{"line_number":101,"context_line":"  these exactly, then that\u0027s fine, if they can\u0027t, that\u0027s ok as well."},{"line_number":102,"context_line":""},{"line_number":103,"context_line":"  Ideally, if the volume fails over the type specifications would match, but if"},{"line_number":104,"context_line":"  this isn\u0027t possible it\u0027s probably acceptable, and if it needs to be handled by"},{"line_number":105,"context_line":"  the driver via a retype/modification after the failover, that\u0027s fine as well."},{"line_number":106,"context_line":""}],"source_content_type":"text/x-rst","patch_set":6,"id":"3a50d1a3_b5ebcb11","line":103,"in_reply_to":"3a50d1a3_433d1fba","updated":"2015-07-31 20:40:43.000000000","message":"The only push back is for example QoS settings.  One would not want to be replicating a high level QoS volume and require that the \u0027backup\u0027 also be a high QoS level and \"waste\" valuable IOP\u0027s.\n\nI can fake anything around that I need to in the driver here though so frankly it\u0027s not an issue.  If somebody wants to expand on this in the review that\u0027s cool; we can certainly just modify it to a requirement that the types must match.","commit_id":"df4971baaff3d571178a87341109eeba8d08e4ca"},{"author":{"_account_id":170,"name":"Mike Perez","email":"thingee@gmail.com","username":"thingee"},"change_message_id":"94a87287ed9b422747d913c7ae7a7b84b541451e","unresolved":false,"context_lines":[{"line_number":108,"context_line":"  This spec assumes async replication only for now.  It can easily be"},{"line_number":109,"context_line":"  extended later for the synchronous case, but for now it\u0027s specific"},{"line_number":110,"context_line":"  to async.  If/When sync is added it can be specified as an additional"},{"line_number":111,"context_line":"  backend capability.  It\u0027s also possible for this to be specified via"},{"line_number":112,"context_line":"  extra-specs if desired."},{"line_number":113,"context_line":""},{"line_number":114,"context_line":"* transport"}],"source_content_type":"text/x-rst","patch_set":6,"id":"3a50d1a3_88a2664a","line":111,"updated":"2015-07-31 03:56:55.000000000","message":"Does it make sense for us to be specific on the capability key then? async_replication\u003dTrue instead of just replication\u003dtrue?","commit_id":"df4971baaff3d571178a87341109eeba8d08e4ca"},{"author":{"_account_id":2243,"name":"John Griffith","email":"john.griffith8@gmail.com","username":"john-griffith"},"change_message_id":"28be15b80fd41c989f2f4090fc0cfebbc7a49cee","unresolved":false,"context_lines":[{"line_number":108,"context_line":"  This spec assumes async replication only for now.  It can easily be"},{"line_number":109,"context_line":"  extended later for the synchronous case, but for now it\u0027s specific"},{"line_number":110,"context_line":"  to async.  If/When sync is added it can be specified as an additional"},{"line_number":111,"context_line":"  backend capability.  It\u0027s also possible for this to be specified via"},{"line_number":112,"context_line":"  extra-specs if desired."},{"line_number":113,"context_line":""},{"line_number":114,"context_line":"* transport"}],"source_content_type":"text/x-rst","patch_set":6,"id":"3a50d1a3_b5766ba1","line":111,"in_reply_to":"3a50d1a3_88a2664a","updated":"2015-07-31 20:40:43.000000000","message":"yeah, that might be the best answer here","commit_id":"df4971baaff3d571178a87341109eeba8d08e4ca"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"19ab8075493c5bef29f49408c4b428f381363b0c","unresolved":false,"context_lines":[{"line_number":108,"context_line":"  This spec assumes async replication only for now.  It can easily be"},{"line_number":109,"context_line":"  extended later for the synchronous case, but for now it\u0027s specific"},{"line_number":110,"context_line":"  to async.  If/When sync is added it can be specified as an additional"},{"line_number":111,"context_line":"  backend capability.  It\u0027s also possible for this to be specified via"},{"line_number":112,"context_line":"  extra-specs if desired."},{"line_number":113,"context_line":""},{"line_number":114,"context_line":"* transport"}],"source_content_type":"text/x-rst","patch_set":6,"id":"3a50d1a3_e6dd1271","line":111,"in_reply_to":"3a50d1a3_b5766ba1","updated":"2015-08-02 19:28:35.000000000","message":"John,\n\nIn the replication_volume API in your POC code, I see asynchronous is default to True, but it will still allow \"asynchronous\u003dFalse\".  Is this correct?  I\u0027m asking because VNX will be implementing synchronous only first.  I just want to make sure that is possible.  Thanks.\n\n    def replicate_volume(self, ctxt,\n                         volume, asynchronous\u003dTrue,\n\t\t\t                         replica_count\u003d1):","commit_id":"df4971baaff3d571178a87341109eeba8d08e4ca"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"5acc29d2ad86f4073aae01e0c6c61c7464d0e70a","unresolved":false,"context_lines":[{"line_number":119,"context_line":"* Cinder does not need to be aware of both backend devices but CAN be"},{"line_number":120,"context_line":"  This spec is intended to provide flexibility, that means that if an"},{"line_number":121,"context_line":"  admin wishes to configure a backend device that is unknown to Cinder"},{"line_number":122,"context_line":"  that absolutley fine.  The opposite is true as well of course, that"},{"line_number":123,"context_line":"  detail is outlined in this spec."},{"line_number":124,"context_line":""},{"line_number":125,"context_line":"* Tenant visibility"}],"source_content_type":"text/x-rst","patch_set":6,"id":"3a50d1a3_39760ad9","line":122,"updated":"2015-07-31 00:16:36.000000000","message":"that is absolutely","commit_id":"df4971baaff3d571178a87341109eeba8d08e4ca"},{"author":{"_account_id":170,"name":"Mike Perez","email":"thingee@gmail.com","username":"thingee"},"change_message_id":"94a87287ed9b422747d913c7ae7a7b84b541451e","unresolved":false,"context_lines":[{"line_number":123,"context_line":"  detail is outlined in this spec."},{"line_number":124,"context_line":""},{"line_number":125,"context_line":"* Tenant visibility"},{"line_number":126,"context_line":"  The visibility by tenants is LIMITED!!!  In other words the tenant"},{"line_number":127,"context_line":"  should know very little about what\u0027s going on (if anything at all)."},{"line_number":128,"context_line":""},{"line_number":129,"context_line":"  For example, a service provider may sell replication simply as a"}],"source_content_type":"text/x-rst","patch_set":6,"id":"3a50d1a3_e891aaf2","line":126,"updated":"2015-07-31 03:56:55.000000000","message":"+1!!!!!!!!!!!!!!!!!!! ran out of exclamation marks.","commit_id":"df4971baaff3d571178a87341109eeba8d08e4ca"}]}
