)]}'
{"doc/source/contributor/drivers_locking_examples.rst":[{"author":{"_account_id":10058,"name":"Erlon R. Cruz","email":"erlon.rodrigues.cruz@canonical.com","username":"sombrafam"},"change_message_id":"a0a739418ca9916ff797ea4df4d9434905a2d9a5","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":".. note:: Each driver may support different deployment options.  Some may only"},{"line_number":8,"context_line":"  support running one backend on each node.  Others may support running"},{"line_number":9,"context_line":"  multiple backends in a single node.  And some may even support Active-Active"},{"line_number":10,"context_line":"  deployments."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"LIO target"}],"source_content_type":"text/x-rst","patch_set":1,"id":"5f7c97a3_3111c054","line":9,"range":{"start_line":9,"start_character":37,"end_line":9,"end_character":38},"updated":"2018-06-06 13:16:52.000000000","message":"nit: extra space","commit_id":"a9f2a902f1bf116d9ec1fbe90aab4464fdc29b1b"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"a2a7599cf00dd855b36da55e58fdc456c0e31903","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":".. note:: Each driver may support different deployment options.  Some may only"},{"line_number":8,"context_line":"  support running one backend on each node.  Others may support running"},{"line_number":9,"context_line":"  multiple backends in a single node.  And some may even support Active-Active"},{"line_number":10,"context_line":"  deployments."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"LIO target"}],"source_content_type":"text/x-rst","patch_set":1,"id":"5f7c97a3_9bf2fce2","line":9,"range":{"start_line":9,"start_character":37,"end_line":9,"end_character":38},"in_reply_to":"5f7c97a3_3111c054","updated":"2018-06-08 09:13:06.000000000","message":"That\u0027s on purpose, I do double spacing to make it easier to read the raw file (it\u0027s also in the previous 2 lines).  Once this is rendered it is reduced to a single space.","commit_id":"a9f2a902f1bf116d9ec1fbe90aab4464fdc29b1b"},{"author":{"_account_id":10058,"name":"Erlon R. Cruz","email":"erlon.rodrigues.cruz@canonical.com","username":"sombrafam"},"change_message_id":"a0a739418ca9916ff797ea4df4d9434905a2d9a5","unresolved":false,"context_lines":[{"line_number":60,"context_line":"  - Where: `initialize_connection` and `terminate_connection` methods."},{"line_number":61,"context_line":"  - File: `cinder/volume/drivers/kaminario/kaminario_iscsi.py`"},{"line_number":62,"context_line":""},{"line_number":63,"context_line":".. todo:: Complete the drivers locking examples."},{"line_number":64,"context_line":""},{"line_number":65,"context_line":"Other driver:"},{"line_number":66,"context_line":"  - Lock scope:"}],"source_content_type":"text/x-rst","patch_set":1,"id":"5f7c97a3_d14e4c6d","line":63,"range":{"start_line":63,"start_character":2,"end_line":63,"end_character":48},"updated":"2018-06-06 13:16:52.000000000","message":"Do we need more examples than those? Seems good enough for an example list.","commit_id":"a9f2a902f1bf116d9ec1fbe90aab4464fdc29b1b"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"a2a7599cf00dd855b36da55e58fdc456c0e31903","unresolved":false,"context_lines":[{"line_number":60,"context_line":"  - Where: `initialize_connection` and `terminate_connection` methods."},{"line_number":61,"context_line":"  - File: `cinder/volume/drivers/kaminario/kaminario_iscsi.py`"},{"line_number":62,"context_line":""},{"line_number":63,"context_line":".. todo:: Complete the drivers locking examples."},{"line_number":64,"context_line":""},{"line_number":65,"context_line":"Other driver:"},{"line_number":66,"context_line":"  - Lock scope:"}],"source_content_type":"text/x-rst","patch_set":1,"id":"5f7c97a3_bb26d867","line":63,"range":{"start_line":63,"start_character":2,"end_line":63,"end_character":48},"in_reply_to":"5f7c97a3_d14e4c6d","updated":"2018-06-08 09:13:06.000000000","message":"I think the more we have the better.  That way developers can come to this list, have a read and think if they have problems in all those places.","commit_id":"a9f2a902f1bf116d9ec1fbe90aab4464fdc29b1b"},{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"aa6abcdc1bbe1962a6daf9fc9069b34295d6474b","unresolved":false,"context_lines":[{"line_number":8,"context_line":"  support running one backend on each node.  Others may support running"},{"line_number":9,"context_line":"  multiple backends in a single node.  And some may even support Active-Active"},{"line_number":10,"context_line":"  deployments."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"LIO target"},{"line_number":13,"context_line":"  - Lock scope: Node."},{"line_number":14,"context_line":"  - Critical section: Calls to `cinder-rtstool` CLI."}],"source_content_type":"text/x-rst","patch_set":2,"id":"5f7c97a3_c050410d","line":11,"updated":"2018-06-30 20:08:33.000000000","message":"Do we want to mention tgtd too?","commit_id":"5a1692a1fbc08ecfc352f2744d2e3ad7bfd974b5"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"635da7bba2ee1a3bcc1ea6789a0150d88cd5decb","unresolved":false,"context_lines":[{"line_number":115,"context_line":"  - Where: `_get_session_key` and `_api_request` methods."},{"line_number":116,"context_line":"  - File: `cinder/volume/drivers/dothill/dothill_client.py`."},{"line_number":117,"context_line":""},{"line_number":118,"context_line":"Dothill:"},{"line_number":119,"context_line":"  - Lock scope: Global"},{"line_number":120,"context_line":"  - Critical section: Mapping a volume as part of the `initialize_connection`"},{"line_number":121,"context_line":"    process."},{"line_number":122,"context_line":"  - Lock name: `{driver_name}-{array_name}-map`"},{"line_number":123,"context_line":"  - Where: `map_volume` method."},{"line_number":124,"context_line":"  - File: `cinder/volume/drivers/dothill/dothill_client.py`."},{"line_number":125,"context_line":""},{"line_number":126,"context_line":""},{"line_number":127,"context_line":"Other files"}],"source_content_type":"text/x-rst","patch_set":3,"id":"5f7c97a3_1a88efc0","line":124,"range":{"start_line":118,"start_character":0,"end_line":124,"end_character":60},"updated":"2018-07-18 15:08:23.000000000","message":"The Dothill driver isn\u0027t actually a driver anymore.  It is just a library consumed by Lenovo and the HPMSA driver.  Maybe that doesn\u0027t really matter here though.","commit_id":"1c014dd15eec18056250ecc90d5da313c1ed5d3e"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"7b3001eac55ce512b3f229574ece8cb015f4fc54","unresolved":false,"context_lines":[{"line_number":115,"context_line":"  - Where: `_get_session_key` and `_api_request` methods."},{"line_number":116,"context_line":"  - File: `cinder/volume/drivers/dothill/dothill_client.py`."},{"line_number":117,"context_line":""},{"line_number":118,"context_line":"Dothill:"},{"line_number":119,"context_line":"  - Lock scope: Global"},{"line_number":120,"context_line":"  - Critical section: Mapping a volume as part of the `initialize_connection`"},{"line_number":121,"context_line":"    process."},{"line_number":122,"context_line":"  - Lock name: `{driver_name}-{array_name}-map`"},{"line_number":123,"context_line":"  - Where: `map_volume` method."},{"line_number":124,"context_line":"  - File: `cinder/volume/drivers/dothill/dothill_client.py`."},{"line_number":125,"context_line":""},{"line_number":126,"context_line":""},{"line_number":127,"context_line":"Other files"}],"source_content_type":"text/x-rst","patch_set":3,"id":"5f7c97a3_0f25f45a","line":124,"range":{"start_line":118,"start_character":0,"end_line":124,"end_character":60},"in_reply_to":"5f7c97a3_1a88efc0","updated":"2018-07-19 11:34:20.000000000","message":"I\u0027ll update the top description to mention that this is driver code, not necessarily drivers per se","commit_id":"1c014dd15eec18056250ecc90d5da313c1ed5d3e"}],"doc/source/contributor/high_availability.rst":[{"author":{"_account_id":10058,"name":"Erlon R. Cruz","email":"erlon.rodrigues.cruz@canonical.com","username":"sombrafam"},"change_message_id":"a0a739418ca9916ff797ea4df4d9434905a2d9a5","unresolved":false,"context_lines":[{"line_number":10,"context_line":"Cinder developers must always have these aspects present during the design and"},{"line_number":11,"context_line":"programming of the Cinder core code, as well as the drivers\u0027 code."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"Most topics will focus on Active-Active deployments.  Some topics covering node"},{"line_number":14,"context_line":"and process concurrency will also apply to Active-Passive deployments."},{"line_number":15,"context_line":""},{"line_number":16,"context_line":""}],"source_content_type":"text/x-rst","patch_set":1,"id":"5f7c97a3_2c23a3c0","line":13,"range":{"start_line":13,"start_character":52,"end_line":13,"end_character":53},"updated":"2018-06-06 13:16:52.000000000","message":"Not sure why you always leave double spaces, just notice that. Please ignore if you have a good reason to.","commit_id":"a9f2a902f1bf116d9ec1fbe90aab4464fdc29b1b"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"a2a7599cf00dd855b36da55e58fdc456c0e31903","unresolved":false,"context_lines":[{"line_number":10,"context_line":"Cinder developers must always have these aspects present during the design and"},{"line_number":11,"context_line":"programming of the Cinder core code, as well as the drivers\u0027 code."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"Most topics will focus on Active-Active deployments.  Some topics covering node"},{"line_number":14,"context_line":"and process concurrency will also apply to Active-Passive deployments."},{"line_number":15,"context_line":""},{"line_number":16,"context_line":""}],"source_content_type":"text/x-rst","patch_set":1,"id":"5f7c97a3_1ba34cb3","line":13,"range":{"start_line":13,"start_character":52,"end_line":13,"end_character":53},"in_reply_to":"5f7c97a3_2c23a3c0","updated":"2018-06-08 09:13:06.000000000","message":"Good reason may be a strong word, but I do have *a* reason.  ;-)\n\nIt\u0027s for clarity when writing and reading.","commit_id":"a9f2a902f1bf116d9ec1fbe90aab4464fdc29b1b"},{"author":{"_account_id":10058,"name":"Erlon R. Cruz","email":"erlon.rodrigues.cruz@canonical.com","username":"sombrafam"},"change_message_id":"a0a739418ca9916ff797ea4df4d9434905a2d9a5","unresolved":false,"context_lines":[{"line_number":60,"context_line":""},{"line_number":61,"context_line":"We use single listener queues to send RPC calls to a specific service in a"},{"line_number":62,"context_line":"node. For example, when the API calls a non clustered Volume service to create"},{"line_number":63,"context_line":"a snapshot.  A clustered volume service is one deployed as Active-Active, even"},{"line_number":64,"context_line":"if there is only one node in the cluster."},{"line_number":65,"context_line":""},{"line_number":66,"context_line":"Message queues having multiple listeners are used in operations such as:"},{"line_number":67,"context_line":""}],"source_content_type":"text/x-rst","patch_set":1,"id":"5f7c97a3_3149c031","line":64,"range":{"start_line":63,"start_character":13,"end_line":64,"end_character":41},"updated":"2018-06-06 13:16:52.000000000","message":"Not clear to me here. Is a clustered volume an example of multiple listener?","commit_id":"a9f2a902f1bf116d9ec1fbe90aab4464fdc29b1b"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"a2a7599cf00dd855b36da55e58fdc456c0e31903","unresolved":false,"context_lines":[{"line_number":60,"context_line":""},{"line_number":61,"context_line":"We use single listener queues to send RPC calls to a specific service in a"},{"line_number":62,"context_line":"node. For example, when the API calls a non clustered Volume service to create"},{"line_number":63,"context_line":"a snapshot.  A clustered volume service is one deployed as Active-Active, even"},{"line_number":64,"context_line":"if there is only one node in the cluster."},{"line_number":65,"context_line":""},{"line_number":66,"context_line":"Message queues having multiple listeners are used in operations such as:"},{"line_number":67,"context_line":""}],"source_content_type":"text/x-rst","patch_set":1,"id":"5f7c97a3_fb777007","line":64,"range":{"start_line":63,"start_character":13,"end_line":64,"end_character":41},"in_reply_to":"5f7c97a3_3149c031","updated":"2018-06-08 09:13:06.000000000","message":"It is, but that was not the point I was trying to make (and failing).  The idea was to explain what clustered and non clustered meant.  Will try to improve this by introducing these concepts during the overview.","commit_id":"a9f2a902f1bf116d9ec1fbe90aab4464fdc29b1b"},{"author":{"_account_id":23083,"name":"TommyLike","email":"tommylikehu@gmail.com","username":"TommyLike"},"change_message_id":"6d48ccd4f064cc0a39a69006d50c94430fbf3821","unresolved":false,"context_lines":[{"line_number":68,"context_line":"- Creating any volume.  Call made from the API to the Scheduler."},{"line_number":69,"context_line":"- Creating a volume in a clustered volume service.  Call made from the"},{"line_number":70,"context_line":"  Scheduler to the Volume service."},{"line_number":71,"context_line":"- Creating snapshots in a clustered Volume service.  Call made from the API to"},{"line_number":72,"context_line":"  the volume service."},{"line_number":73,"context_line":""},{"line_number":74,"context_line":"Regardless of the number of listeners, all the above RPC calls a single node"},{"line_number":75,"context_line":"will receive each RPC call to continue the operation.  There are other kind of"}],"source_content_type":"text/x-rst","patch_set":1,"id":"5f7c97a3_dad6c54f","line":72,"range":{"start_line":71,"start_character":53,"end_line":72,"end_character":21},"updated":"2018-06-01 01:25:23.000000000","message":"Now it\u0027s scheduled to the scheduler service to check the capacity now.","commit_id":"a9f2a902f1bf116d9ec1fbe90aab4464fdc29b1b"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"a2a7599cf00dd855b36da55e58fdc456c0e31903","unresolved":false,"context_lines":[{"line_number":68,"context_line":"- Creating any volume.  Call made from the API to the Scheduler."},{"line_number":69,"context_line":"- Creating a volume in a clustered volume service.  Call made from the"},{"line_number":70,"context_line":"  Scheduler to the Volume service."},{"line_number":71,"context_line":"- Creating snapshots in a clustered Volume service.  Call made from the API to"},{"line_number":72,"context_line":"  the volume service."},{"line_number":73,"context_line":""},{"line_number":74,"context_line":"Regardless of the number of listeners, all the above RPC calls a single node"},{"line_number":75,"context_line":"will receive each RPC call to continue the operation.  There are other kind of"}],"source_content_type":"text/x-rst","patch_set":1,"id":"5f7c97a3_7b5e0046","line":72,"range":{"start_line":71,"start_character":53,"end_line":72,"end_character":21},"in_reply_to":"5f7c97a3_dad6c54f","updated":"2018-06-08 09:13:06.000000000","message":"Good catch!","commit_id":"a9f2a902f1bf116d9ec1fbe90aab4464fdc29b1b"},{"author":{"_account_id":10058,"name":"Erlon R. Cruz","email":"erlon.rodrigues.cruz@canonical.com","username":"sombrafam"},"change_message_id":"a0a739418ca9916ff797ea4df4d9434905a2d9a5","unresolved":false,"context_lines":[{"line_number":71,"context_line":"- Creating snapshots in a clustered Volume service.  Call made from the API to"},{"line_number":72,"context_line":"  the volume service."},{"line_number":73,"context_line":""},{"line_number":74,"context_line":"Regardless of the number of listeners, all the above RPC calls a single node"},{"line_number":75,"context_line":"will receive each RPC call to continue the operation.  There are other kind of"},{"line_number":76,"context_line":"RPC calls, those where we broadcast a single RPC call to multiple nodes.  The"},{"line_number":77,"context_line":"best example of this type of call is the Volume service capabilities report"},{"line_number":78,"context_line":"sent to all the Schedulers."}],"source_content_type":"text/x-rst","patch_set":1,"id":"5f7c97a3_9110d402","line":75,"range":{"start_line":74,"start_character":39,"end_line":75,"end_character":53},"updated":"2018-06-06 13:16:52.000000000","message":"? didn\u0027t get what you mean here.","commit_id":"a9f2a902f1bf116d9ec1fbe90aab4464fdc29b1b"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"a2a7599cf00dd855b36da55e58fdc456c0e31903","unresolved":false,"context_lines":[{"line_number":71,"context_line":"- Creating snapshots in a clustered Volume service.  Call made from the API to"},{"line_number":72,"context_line":"  the volume service."},{"line_number":73,"context_line":""},{"line_number":74,"context_line":"Regardless of the number of listeners, all the above RPC calls a single node"},{"line_number":75,"context_line":"will receive each RPC call to continue the operation.  There are other kind of"},{"line_number":76,"context_line":"RPC calls, those where we broadcast a single RPC call to multiple nodes.  The"},{"line_number":77,"context_line":"best example of this type of call is the Volume service capabilities report"},{"line_number":78,"context_line":"sent to all the Schedulers."}],"source_content_type":"text/x-rst","patch_set":1,"id":"5f7c97a3_9b1e7c72","line":75,"range":{"start_line":74,"start_character":39,"end_line":75,"end_character":53},"in_reply_to":"5f7c97a3_9110d402","updated":"2018-06-08 09:13:06.000000000","message":"Wow!! That\u0027s a terrible sentence.  I understand it just because I know what I wanted to say.   XD","commit_id":"a9f2a902f1bf116d9ec1fbe90aab4464fdc29b1b"},{"author":{"_account_id":10058,"name":"Erlon R. Cruz","email":"erlon.rodrigues.cruz@canonical.com","username":"sombrafam"},"change_message_id":"a0a739418ca9916ff797ea4df4d9434905a2d9a5","unresolved":false,"context_lines":[{"line_number":86,"context_line":"the quick and easy jobs while another one gets all the heavy lifting and its"},{"line_number":87,"context_line":"ongoing workload keeps increasing."},{"line_number":88,"context_line":""},{"line_number":89,"context_line":"Developers must pay attention to where they want to send RPC calls and ask"},{"line_number":90,"context_line":"themselves: Is the target a clustered service?  Is the RPC call intended for"},{"line_number":91,"context_line":"*any* node running the service?  Is it for a *specific* node?  For *all* nodes?"},{"line_number":92,"context_line":""},{"line_number":93,"context_line":"The code in charge of deciding the target message queue, therefore the"},{"line_number":94,"context_line":"recipient, is in the `rpcapi.py` files.  Each service has its own file with the"}],"source_content_type":"text/x-rst","patch_set":1,"id":"5f7c97a3_f19ca86b","line":91,"range":{"start_line":89,"start_character":0,"end_line":91,"end_character":79},"updated":"2018-06-06 13:16:52.000000000","message":"So, its possible to send a message to a specific node in the cluster right?","commit_id":"a9f2a902f1bf116d9ec1fbe90aab4464fdc29b1b"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"a2a7599cf00dd855b36da55e58fdc456c0e31903","unresolved":false,"context_lines":[{"line_number":86,"context_line":"the quick and easy jobs while another one gets all the heavy lifting and its"},{"line_number":87,"context_line":"ongoing workload keeps increasing."},{"line_number":88,"context_line":""},{"line_number":89,"context_line":"Developers must pay attention to where they want to send RPC calls and ask"},{"line_number":90,"context_line":"themselves: Is the target a clustered service?  Is the RPC call intended for"},{"line_number":91,"context_line":"*any* node running the service?  Is it for a *specific* node?  For *all* nodes?"},{"line_number":92,"context_line":""},{"line_number":93,"context_line":"The code in charge of deciding the target message queue, therefore the"},{"line_number":94,"context_line":"recipient, is in the `rpcapi.py` files.  Each service has its own file with the"}],"source_content_type":"text/x-rst","patch_set":1,"id":"5f7c97a3_8e6398dd","line":91,"range":{"start_line":89,"start_character":0,"end_line":91,"end_character":79},"in_reply_to":"5f7c97a3_f19ca86b","updated":"2018-06-08 09:13:06.000000000","message":"Yes that is correct.  I\u0027ll make it clearer.","commit_id":"a9f2a902f1bf116d9ec1fbe90aab4464fdc29b1b"},{"author":{"_account_id":10058,"name":"Erlon R. Cruz","email":"erlon.rodrigues.cruz@canonical.com","username":"sombrafam"},"change_message_id":"a0a739418ca9916ff797ea4df4d9434905a2d9a5","unresolved":false,"context_lines":[{"line_number":223,"context_line":"to restart the service to get the resources clean by the node startup cleanup"},{"line_number":224,"context_line":"process."},{"line_number":225,"context_line":""},{"line_number":226,"context_line":"We keep track of the resources our Cinder services are working on in the"},{"line_number":227,"context_line":"`workers` table.  Only resources that can be cleaned are tracked.  This table"},{"line_number":228,"context_line":"stores the resource type and id, the status that should be cleared on service"},{"line_number":229,"context_line":"failure, the service that is working on it, etc.  And we\u0027ll be updating this"},{"line_number":230,"context_line":"table as the resources move from service to service."},{"line_number":231,"context_line":""},{"line_number":232,"context_line":"`Worker` entries are not passed as RPC parameters, so we don\u0027t need a Versioned"},{"line_number":233,"context_line":"Object class to represent them.  We only have the `Worker` ORM class to"}],"source_content_type":"text/x-rst","patch_set":1,"id":"5f7c97a3_51079c1e","line":230,"range":{"start_line":226,"start_character":0,"end_line":230,"end_character":52},"updated":"2018-06-06 13:16:52.000000000","message":"Just a question, what/who triggers the cleaning up? What node from the cluster do the clean up? Next in the queue?","commit_id":"a9f2a902f1bf116d9ec1fbe90aab4464fdc29b1b"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"a2a7599cf00dd855b36da55e58fdc456c0e31903","unresolved":false,"context_lines":[{"line_number":223,"context_line":"to restart the service to get the resources clean by the node startup cleanup"},{"line_number":224,"context_line":"process."},{"line_number":225,"context_line":""},{"line_number":226,"context_line":"We keep track of the resources our Cinder services are working on in the"},{"line_number":227,"context_line":"`workers` table.  Only resources that can be cleaned are tracked.  This table"},{"line_number":228,"context_line":"stores the resource type and id, the status that should be cleared on service"},{"line_number":229,"context_line":"failure, the service that is working on it, etc.  And we\u0027ll be updating this"},{"line_number":230,"context_line":"table as the resources move from service to service."},{"line_number":231,"context_line":""},{"line_number":232,"context_line":"`Worker` entries are not passed as RPC parameters, so we don\u0027t need a Versioned"},{"line_number":233,"context_line":"Object class to represent them.  We only have the `Worker` ORM class to"}],"source_content_type":"text/x-rst","patch_set":1,"id":"5f7c97a3_ae58d4f9","line":230,"range":{"start_line":226,"start_character":0,"end_line":230,"end_character":52},"in_reply_to":"5f7c97a3_51079c1e","updated":"2018-06-08 09:13:06.000000000","message":"What/who is answered earlier on L187-189.\n\nYou are right, I never mentioned who cleans things up.  I also notice that the cleanup explanation on the scheduler is a little bit lacking. Adding this in next patch.\n\nAnd I forgot of a feature I added...  We can request cleanups for non clustered services so we can improve the cleanup mechanisms and avoid reset states.  XD","commit_id":"a9f2a902f1bf116d9ec1fbe90aab4464fdc29b1b"},{"author":{"_account_id":10058,"name":"Erlon R. Cruz","email":"erlon.rodrigues.cruz@canonical.com","username":"sombrafam"},"change_message_id":"a0a739418ca9916ff797ea4df4d9434905a2d9a5","unresolved":false,"context_lines":[{"line_number":531,"context_line":"  simultaneously for the same backend, but only one of them can run the cleanup"},{"line_number":532,"context_line":"  code on start."},{"line_number":533,"context_line":""},{"line_number":534,"context_line":"- Drivers not supporting Active-Active configurations.  Any operation that can"},{"line_number":535,"context_line":"  should only performed by one driver at a time.  For example creating target"},{"line_number":536,"context_line":"  groups for a node."},{"line_number":537,"context_line":""},{"line_number":538,"context_line":"This type of locks use the same method as the `Process locks`_, `synchronized`"}],"source_content_type":"text/x-rst","patch_set":1,"id":"5f7c97a3_ac9fb363","line":535,"range":{"start_line":534,"start_character":75,"end_line":535,"end_character":8},"updated":"2018-06-06 13:16:52.000000000","message":"should","commit_id":"a9f2a902f1bf116d9ec1fbe90aab4464fdc29b1b"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"a2a7599cf00dd855b36da55e58fdc456c0e31903","unresolved":false,"context_lines":[{"line_number":531,"context_line":"  simultaneously for the same backend, but only one of them can run the cleanup"},{"line_number":532,"context_line":"  code on start."},{"line_number":533,"context_line":""},{"line_number":534,"context_line":"- Drivers not supporting Active-Active configurations.  Any operation that can"},{"line_number":535,"context_line":"  should only performed by one driver at a time.  For example creating target"},{"line_number":536,"context_line":"  groups for a node."},{"line_number":537,"context_line":""},{"line_number":538,"context_line":"This type of locks use the same method as the `Process locks`_, `synchronized`"}],"source_content_type":"text/x-rst","patch_set":1,"id":"5f7c97a3_2e47e4be","line":535,"range":{"start_line":534,"start_character":75,"end_line":535,"end_character":8},"in_reply_to":"5f7c97a3_ac9fb363","updated":"2018-06-08 09:13:06.000000000","message":"Done","commit_id":"a9f2a902f1bf116d9ec1fbe90aab4464fdc29b1b"},{"author":{"_account_id":10058,"name":"Erlon R. Cruz","email":"erlon.rodrigues.cruz@canonical.com","username":"sombrafam"},"change_message_id":"a0a739418ca9916ff797ea4df4d9434905a2d9a5","unresolved":false,"context_lines":[{"line_number":722,"context_line":"run in a separate subprocess and will run a predefined maximum number of green"},{"line_number":723,"context_line":"threads."},{"line_number":724,"context_line":""},{"line_number":725,"context_line":"Number of API workers is defined by the `osapi_volume_workers` configuration"},{"line_number":726,"context_line":"option.  Defaults to the number of CPUs available."},{"line_number":727,"context_line":""},{"line_number":728,"context_line":"Number of green threads per worker is defined by the `wsgi_default_pool_size`"}],"source_content_type":"text/x-rst","patch_set":1,"id":"5f7c97a3_6c5afb83","line":725,"range":{"start_line":725,"start_character":0,"end_line":725,"end_character":6},"updated":"2018-06-06 13:16:52.000000000","message":"The number","commit_id":"a9f2a902f1bf116d9ec1fbe90aab4464fdc29b1b"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"a2a7599cf00dd855b36da55e58fdc456c0e31903","unresolved":false,"context_lines":[{"line_number":722,"context_line":"run in a separate subprocess and will run a predefined maximum number of green"},{"line_number":723,"context_line":"threads."},{"line_number":724,"context_line":""},{"line_number":725,"context_line":"Number of API workers is defined by the `osapi_volume_workers` configuration"},{"line_number":726,"context_line":"option.  Defaults to the number of CPUs available."},{"line_number":727,"context_line":""},{"line_number":728,"context_line":"Number of green threads per worker is defined by the `wsgi_default_pool_size`"}],"source_content_type":"text/x-rst","patch_set":1,"id":"5f7c97a3_ae0c5494","line":725,"range":{"start_line":725,"start_character":0,"end_line":725,"end_character":6},"in_reply_to":"5f7c97a3_6c5afb83","updated":"2018-06-08 09:13:06.000000000","message":"Done","commit_id":"a9f2a902f1bf116d9ec1fbe90aab4464fdc29b1b"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"635da7bba2ee1a3bcc1ea6789a0150d88cd5decb","unresolved":false,"context_lines":[{"line_number":24,"context_line":"concurrent and multi node code execution."},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"This document provides a general overview of Cinder aspects related to high"},{"line_number":27,"context_line":"availability, together with implementation details.  Given the breath and depth"},{"line_number":28,"context_line":"required to properly explain them all, it will fall sort in some places.  It"},{"line_number":29,"context_line":"will provide external references to expand on some of the topics hoping to help"},{"line_number":30,"context_line":"better understand them."}],"source_content_type":"text/x-rst","patch_set":3,"id":"5f7c97a3_7a0c8343","line":27,"range":{"start_line":27,"start_character":63,"end_line":27,"end_character":70},"updated":"2018-07-18 15:08:23.000000000","message":"breadth","commit_id":"1c014dd15eec18056250ecc90d5da313c1ed5d3e"},{"author":{"_account_id":19844,"name":"Kien Ha","email":"kienha9922@gmail.com","username":"kien.ha"},"change_message_id":"abd9e129408065f9db0e982dd9bde110de0d27ad","unresolved":false,"context_lines":[{"line_number":25,"context_line":""},{"line_number":26,"context_line":"This document provides a general overview of Cinder aspects related to high"},{"line_number":27,"context_line":"availability, together with implementation details.  Given the breath and depth"},{"line_number":28,"context_line":"required to properly explain them all, it will fall sort in some places.  It"},{"line_number":29,"context_line":"will provide external references to expand on some of the topics hoping to help"},{"line_number":30,"context_line":"better understand them."},{"line_number":31,"context_line":""}],"source_content_type":"text/x-rst","patch_set":3,"id":"5f7c97a3_beb71d22","line":28,"range":{"start_line":28,"start_character":52,"end_line":28,"end_character":56},"updated":"2018-06-27 16:59:19.000000000","message":"short","commit_id":"1c014dd15eec18056250ecc90d5da313c1ed5d3e"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"635da7bba2ee1a3bcc1ea6789a0150d88cd5decb","unresolved":false,"context_lines":[{"line_number":48,"context_line":"running, but on their configurations."},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"A non clustered Volume service is one that will be deployed as Active-Passive"},{"line_number":51,"context_line":"and has not being included in a Cinder cluster."},{"line_number":52,"context_line":""},{"line_number":53,"context_line":"On the other hand, a clustered Volume service is one that can be deployed as"},{"line_number":54,"context_line":"Active-Active because it is part of a Cinder cluster.  We consider a Volume"}],"source_content_type":"text/x-rst","patch_set":3,"id":"5f7c97a3_7d1a3d6b","line":51,"range":{"start_line":51,"start_character":12,"end_line":51,"end_character":17},"updated":"2018-07-18 15:08:23.000000000","message":"been","commit_id":"1c014dd15eec18056250ecc90d5da313c1ed5d3e"},{"author":{"_account_id":19844,"name":"Kien Ha","email":"kienha9922@gmail.com","username":"kien.ha"},"change_message_id":"abd9e129408065f9db0e982dd9bde110de0d27ad","unresolved":false,"context_lines":[{"line_number":67,"context_line":"calls."},{"line_number":68,"context_line":""},{"line_number":69,"context_line":"Based on the maximum number of nodes that will connect, we can differentiate"},{"line_number":70,"context_line":"two types of message queues: single listeners and multiple listeners."},{"line_number":71,"context_line":""},{"line_number":72,"context_line":"We use single listener queues to send RPC calls to a specific service in a"},{"line_number":73,"context_line":"node. For example, when the API calls a non clustered Volume service to create"}],"source_content_type":"text/x-rst","patch_set":3,"id":"5f7c97a3_3e28ed31","line":70,"range":{"start_line":70,"start_character":36,"end_line":70,"end_character":45},"updated":"2018-06-27 16:59:19.000000000","message":"singular form","commit_id":"1c014dd15eec18056250ecc90d5da313c1ed5d3e"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"635da7bba2ee1a3bcc1ea6789a0150d88cd5decb","unresolved":false,"context_lines":[{"line_number":67,"context_line":"calls."},{"line_number":68,"context_line":""},{"line_number":69,"context_line":"Based on the maximum number of nodes that will connect, we can differentiate"},{"line_number":70,"context_line":"two types of message queues: single listeners and multiple listeners."},{"line_number":71,"context_line":""},{"line_number":72,"context_line":"We use single listener queues to send RPC calls to a specific service in a"},{"line_number":73,"context_line":"node. For example, when the API calls a non clustered Volume service to create"}],"source_content_type":"text/x-rst","patch_set":3,"id":"5f7c97a3_5da8a1d7","line":70,"range":{"start_line":70,"start_character":36,"end_line":70,"end_character":45},"in_reply_to":"5f7c97a3_3e28ed31","updated":"2018-07-18 15:08:23.000000000","message":"I think this is actually correct as is.","commit_id":"1c014dd15eec18056250ecc90d5da313c1ed5d3e"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"7b3001eac55ce512b3f229574ece8cb015f4fc54","unresolved":false,"context_lines":[{"line_number":67,"context_line":"calls."},{"line_number":68,"context_line":""},{"line_number":69,"context_line":"Based on the maximum number of nodes that will connect, we can differentiate"},{"line_number":70,"context_line":"two types of message queues: single listeners and multiple listeners."},{"line_number":71,"context_line":""},{"line_number":72,"context_line":"We use single listener queues to send RPC calls to a specific service in a"},{"line_number":73,"context_line":"node. For example, when the API calls a non clustered Volume service to create"}],"source_content_type":"text/x-rst","patch_set":3,"id":"5f7c97a3_6f982875","line":70,"range":{"start_line":70,"start_character":36,"end_line":70,"end_character":45},"in_reply_to":"5f7c97a3_5da8a1d7","updated":"2018-07-19 11:34:20.000000000","message":"I expanded the sentence, and I think there\u0027s no confusion on how ti should be now.  :-)","commit_id":"1c014dd15eec18056250ecc90d5da313c1ed5d3e"},{"author":{"_account_id":19844,"name":"Kien Ha","email":"kienha9922@gmail.com","username":"kien.ha"},"change_message_id":"abd9e129408065f9db0e982dd9bde110de0d27ad","unresolved":false,"context_lines":[{"line_number":85,"context_line":"unicast calls.  The caller will place the request in a queue in the message"},{"line_number":86,"context_line":"broker and a single node will retrieve it and execute the call."},{"line_number":87,"context_line":""},{"line_number":88,"context_line":"There are other kind of RPC calls, those where we broadcast a single RPC call"},{"line_number":89,"context_line":"to multiple nodes.  The best example of this type of call is the Volume service"},{"line_number":90,"context_line":"capabilities report sent to all the Schedulers."},{"line_number":91,"context_line":""}],"source_content_type":"text/x-rst","patch_set":3,"id":"5f7c97a3_9ec4a162","line":88,"range":{"start_line":88,"start_character":16,"end_line":88,"end_character":20},"updated":"2018-06-27 16:59:19.000000000","message":"plural","commit_id":"1c014dd15eec18056250ecc90d5da313c1ed5d3e"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"635da7bba2ee1a3bcc1ea6789a0150d88cd5decb","unresolved":false,"context_lines":[{"line_number":112,"context_line":"For RPC calls the different `rcpapi.py` files ultimately use the `_get_cctxt`"},{"line_number":113,"context_line":"method from the `cinder.rpc.RPCAPI` class."},{"line_number":114,"context_line":""},{"line_number":115,"context_line":"For a detailed description on the issue, ramifications, and solution, please"},{"line_number":116,"context_line":"refer to the `Cinder Volume Job Distribution`_."},{"line_number":117,"context_line":""},{"line_number":118,"context_line":"The `RabbitMQ tutorials`_ are a good way to understand message brokers general"}],"source_content_type":"text/x-rst","patch_set":3,"id":"5f7c97a3_5dbf41fb","line":115,"range":{"start_line":115,"start_character":60,"end_line":115,"end_character":68},"updated":"2018-07-18 15:08:23.000000000","message":"solutions","commit_id":"1c014dd15eec18056250ecc90d5da313c1ed5d3e"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"635da7bba2ee1a3bcc1ea6789a0150d88cd5decb","unresolved":false,"context_lines":[{"line_number":142,"context_line":""},{"line_number":143,"context_line":"All services report and expect the `updated_at` field to be UTC."},{"line_number":144,"context_line":""},{"line_number":145,"context_line":"To determine if a service is up we check the time of the last heartbeat to"},{"line_number":146,"context_line":"confirm that it\u0027s not older than `service_down_time` seconds.  Default value"},{"line_number":147,"context_line":"for `service_down_time` configuration option is 60 seconds."},{"line_number":148,"context_line":""}],"source_content_type":"text/x-rst","patch_set":3,"id":"5f7c97a3_dd6111aa","line":145,"range":{"start_line":145,"start_character":29,"end_line":145,"end_character":32},"updated":"2018-07-18 15:08:23.000000000","message":"up,","commit_id":"1c014dd15eec18056250ecc90d5da313c1ed5d3e"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"635da7bba2ee1a3bcc1ea6789a0150d88cd5decb","unresolved":false,"context_lines":[{"line_number":150,"context_line":"to ensure consistency in the calculations across the whole code base."},{"line_number":151,"context_line":""},{"line_number":152,"context_line":"Heartbeat frequency in Cinder services is determined by the `report_interval`"},{"line_number":153,"context_line":"configuration option.  Defaults to 10 seconds, allowing network and database"},{"line_number":154,"context_line":"interruptions."},{"line_number":155,"context_line":""},{"line_number":156,"context_line":"Cinder protects itself against some incorrect configurations.  If"}],"source_content_type":"text/x-rst","patch_set":3,"id":"5f7c97a3_dd06f1cd","line":153,"range":{"start_line":153,"start_character":23,"end_line":153,"end_character":34},"updated":"2018-07-18 15:08:23.000000000","message":"The default is","commit_id":"1c014dd15eec18056250ecc90d5da313c1ed5d3e"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"635da7bba2ee1a3bcc1ea6789a0150d88cd5decb","unresolved":false,"context_lines":[{"line_number":158,"context_line":"a warning and use a service down time of two and a half times the configured"},{"line_number":159,"context_line":"`report_interval`."},{"line_number":160,"context_line":""},{"line_number":161,"context_line":"It is of utter importance having the same `service_down_time` and"},{"line_number":162,"context_line":"`report_interval` configuration options in all your nodes."},{"line_number":163,"context_line":""},{"line_number":164,"context_line":"In each service\u0027s section we\u0027ll expand this topic with specific information"},{"line_number":165,"context_line":"only relevant to that service."}],"source_content_type":"text/x-rst","patch_set":3,"id":"5f7c97a3_1df8e9be","line":162,"range":{"start_line":161,"start_character":0,"end_line":162,"end_character":58},"updated":"2018-07-18 15:08:23.000000000","message":"Might be good to do this as a .. note:: to make it stand out.","commit_id":"1c014dd15eec18056250ecc90d5da313c1ed5d3e"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"7b3001eac55ce512b3f229574ece8cb015f4fc54","unresolved":false,"context_lines":[{"line_number":158,"context_line":"a warning and use a service down time of two and a half times the configured"},{"line_number":159,"context_line":"`report_interval`."},{"line_number":160,"context_line":""},{"line_number":161,"context_line":"It is of utter importance having the same `service_down_time` and"},{"line_number":162,"context_line":"`report_interval` configuration options in all your nodes."},{"line_number":163,"context_line":""},{"line_number":164,"context_line":"In each service\u0027s section we\u0027ll expand this topic with specific information"},{"line_number":165,"context_line":"only relevant to that service."}],"source_content_type":"text/x-rst","patch_set":3,"id":"5f7c97a3_8f6ca46b","line":162,"range":{"start_line":161,"start_character":0,"end_line":162,"end_character":58},"in_reply_to":"5f7c97a3_1df8e9be","updated":"2018-07-19 11:34:20.000000000","message":"Done","commit_id":"1c014dd15eec18056250ecc90d5da313c1ed5d3e"},{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"aa6abcdc1bbe1962a6daf9fc9069b34295d6474b","unresolved":false,"context_lines":[{"line_number":180,"context_line":"transitioning them to a rest status (`available`, `error`, `deleted`) is no"},{"line_number":181,"context_line":"longer running."},{"line_number":182,"context_line":""},{"line_number":183,"context_line":"Existing reset-state operations allow operators to forcefully change the state"},{"line_number":184,"context_line":"of a resource.  But these state resets are not recommended except in very"},{"line_number":185,"context_line":"specific cases."},{"line_number":186,"context_line":""}],"source_content_type":"text/x-rst","patch_set":3,"id":"5f7c97a3_1ae37436","line":183,"updated":"2018-06-30 20:08:33.000000000","message":"We need to mention backups here because they are different and BackupDriverWithVerify interface should be implemented","commit_id":"1c014dd15eec18056250ecc90d5da313c1ed5d3e"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"7b3001eac55ce512b3f229574ece8cb015f4fc54","unresolved":false,"context_lines":[{"line_number":180,"context_line":"transitioning them to a rest status (`available`, `error`, `deleted`) is no"},{"line_number":181,"context_line":"longer running."},{"line_number":182,"context_line":""},{"line_number":183,"context_line":"Existing reset-state operations allow operators to forcefully change the state"},{"line_number":184,"context_line":"of a resource.  But these state resets are not recommended except in very"},{"line_number":185,"context_line":"specific cases."},{"line_number":186,"context_line":""}],"source_content_type":"text/x-rst","patch_set":3,"id":"5f7c97a3_6fdee8db","line":183,"in_reply_to":"5f7c97a3_1ae37436","updated":"2018-07-19 11:34:20.000000000","message":"This is referring to backups as well, but only in what\u0027s relevant to the topic of this document.\n\nThe mechanism of the reset state can have their own section, but going into detail here is unnecessary, as we only care of what can happen if you change the state.","commit_id":"1c014dd15eec18056250ecc90d5da313c1ed5d3e"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"635da7bba2ee1a3bcc1ea6789a0150d88cd5decb","unresolved":false,"context_lines":[{"line_number":182,"context_line":""},{"line_number":183,"context_line":"Existing reset-state operations allow operators to forcefully change the state"},{"line_number":184,"context_line":"of a resource.  But these state resets are not recommended except in very"},{"line_number":185,"context_line":"specific cases."},{"line_number":186,"context_line":""},{"line_number":187,"context_line":"Cleanup mechanisms are tasked with service\u0027s recovery after an abrupt stop of"},{"line_number":188,"context_line":"the service.  They are the recommended way to resolve stuck transitioning"}],"source_content_type":"text/x-rst","patch_set":3,"id":"5f7c97a3_fde88de0","line":185,"range":{"start_line":185,"start_character":0,"end_line":185,"end_character":15},"updated":"2018-07-18 15:08:23.000000000","message":"I am working on documenting how to use the command.  When I have that done it would be good to have a link to that documentation here.  At a minimum we should mention that this is the \u0027reset-state\u0027 command since you then reference it down below.","commit_id":"1c014dd15eec18056250ecc90d5da313c1ed5d3e"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"7b3001eac55ce512b3f229574ece8cb015f4fc54","unresolved":false,"context_lines":[{"line_number":182,"context_line":""},{"line_number":183,"context_line":"Existing reset-state operations allow operators to forcefully change the state"},{"line_number":184,"context_line":"of a resource.  But these state resets are not recommended except in very"},{"line_number":185,"context_line":"specific cases."},{"line_number":186,"context_line":""},{"line_number":187,"context_line":"Cleanup mechanisms are tasked with service\u0027s recovery after an abrupt stop of"},{"line_number":188,"context_line":"the service.  They are the recommended way to resolve stuck transitioning"}],"source_content_type":"text/x-rst","patch_set":3,"id":"5f7c97a3_afce4058","line":185,"range":{"start_line":185,"start_character":0,"end_line":185,"end_character":15},"in_reply_to":"5f7c97a3_fde88de0","updated":"2018-07-19 11:34:20.000000000","message":"I didn\u0027t want to go into that since we have reset state for volumes, for groups, group snapshots, and for backups, and these can be requested via cinderclient, openstack client, or REST API calls, etc.\n\nI think going into the details of how to do that are irrelevant to the fact that it should not be done in general without real knowledge of what you are doing.\n\nBut it is a great idea to make these state reset mentions link to the document you are working on.","commit_id":"1c014dd15eec18056250ecc90d5da313c1ed5d3e"},{"author":{"_account_id":19844,"name":"Kien Ha","email":"kienha9922@gmail.com","username":"kien.ha"},"change_message_id":"abd9e129408065f9db0e982dd9bde110de0d27ad","unresolved":false,"context_lines":[{"line_number":228,"context_line":"Workers table"},{"line_number":229,"context_line":"~~~~~~~~~~~~~"},{"line_number":230,"context_line":""},{"line_number":231,"context_line":"For Cinder Volume managed resources -Volumes and Snapshots- we used to stablish"},{"line_number":232,"context_line":"a one-to-one relationship between a resource and the volume service managing"},{"line_number":233,"context_line":"it.  A resource would belong to a node if the resource\u0027s `host` field matched"},{"line_number":234,"context_line":"that of the running Cinder Volume service."}],"source_content_type":"text/x-rst","patch_set":3,"id":"5f7c97a3_c914a144","line":231,"range":{"start_line":231,"start_character":71,"end_line":231,"end_character":79},"updated":"2018-06-27 16:59:19.000000000","message":"establish","commit_id":"1c014dd15eec18056250ecc90d5da313c1ed5d3e"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"635da7bba2ee1a3bcc1ea6789a0150d88cd5decb","unresolved":false,"context_lines":[{"line_number":244,"context_line":""},{"line_number":245,"context_line":"When a clustered service abruptly stops running, any of the nodes from the same"},{"line_number":246,"context_line":"cluster can cleanup the resources it was working on.  There is no longer a need"},{"line_number":247,"context_line":"to restart the service to get the resources clean by the node startup cleanup"},{"line_number":248,"context_line":"process."},{"line_number":249,"context_line":""},{"line_number":250,"context_line":"We keep track of the resources our Cinder services are working on in the"}],"source_content_type":"text/x-rst","patch_set":3,"id":"5f7c97a3_fd196dd1","line":247,"range":{"start_line":247,"start_character":44,"end_line":247,"end_character":49},"updated":"2018-07-18 15:08:23.000000000","message":"cleaned","commit_id":"1c014dd15eec18056250ecc90d5da313c1ed5d3e"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"635da7bba2ee1a3bcc1ea6789a0150d88cd5decb","unresolved":false,"context_lines":[{"line_number":259,"context_line":""},{"line_number":260,"context_line":"Following subsections will cover implementation details required to develop new"},{"line_number":261,"context_line":"cleanup resources and states. For a detailed description on the issue,"},{"line_number":262,"context_line":"ramifications, and overall solution, please refer to the `Cleanup spec`_."},{"line_number":263,"context_line":""},{"line_number":264,"context_line":"Tracking resources"},{"line_number":265,"context_line":"~~~~~~~~~~~~~~~~~~"}],"source_content_type":"text/x-rst","patch_set":3,"id":"5f7c97a3_7d7b1df2","line":262,"range":{"start_line":262,"start_character":28,"end_line":262,"end_character":36},"updated":"2018-07-18 15:08:23.000000000","message":"solutions","commit_id":"1c014dd15eec18056250ecc90d5da313c1ed5d3e"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"7b3001eac55ce512b3f229574ece8cb015f4fc54","unresolved":false,"context_lines":[{"line_number":259,"context_line":""},{"line_number":260,"context_line":"Following subsections will cover implementation details required to develop new"},{"line_number":261,"context_line":"cleanup resources and states. For a detailed description on the issue,"},{"line_number":262,"context_line":"ramifications, and overall solution, please refer to the `Cleanup spec`_."},{"line_number":263,"context_line":""},{"line_number":264,"context_line":"Tracking resources"},{"line_number":265,"context_line":"~~~~~~~~~~~~~~~~~~"}],"source_content_type":"text/x-rst","patch_set":3,"id":"5f7c97a3_ef98b81a","line":262,"range":{"start_line":262,"start_character":28,"end_line":262,"end_character":36},"in_reply_to":"5f7c97a3_7d7b1df2","updated":"2018-07-19 11:34:20.000000000","message":"This should be singular, as we are only referring to the proposed solution here, not the alternatives.","commit_id":"1c014dd15eec18056250ecc90d5da313c1ed5d3e"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"635da7bba2ee1a3bcc1ea6789a0150d88cd5decb","unresolved":false,"context_lines":[{"line_number":464,"context_line":"the time."},{"line_number":465,"context_line":""},{"line_number":466,"context_line":"For the Volume service we\u0027ll be sending it to the cluster message queue if it\u0027s"},{"line_number":467,"context_line":"a clustered service, or to a single node it it\u0027s non clustered.  But unlike"},{"line_number":468,"context_line":"with the Scheduler, we can\u0027t be sure that there is a service to do the cleanup,"},{"line_number":469,"context_line":"so we check if the service or cluster is up before sending the request."},{"line_number":470,"context_line":""}],"source_content_type":"text/x-rst","patch_set":3,"id":"5f7c97a3_3d0a8526","line":467,"range":{"start_line":467,"start_character":41,"end_line":467,"end_character":43},"updated":"2018-07-18 15:08:23.000000000","message":"if","commit_id":"1c014dd15eec18056250ecc90d5da313c1ed5d3e"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"635da7bba2ee1a3bcc1ea6789a0150d88cd5decb","unresolved":false,"context_lines":[{"line_number":494,"context_line":"- Global locks."},{"line_number":495,"context_line":""},{"line_number":496,"context_line":"For performance reasons we must always try to avoid using any mutual exclusion"},{"line_number":497,"context_line":"mechanism.  If avoiding them is not possible, we should try to use the narrower"},{"line_number":498,"context_line":"scope possible and reduce the critical section as much as possible.  Locks by"},{"line_number":499,"context_line":"decreasing order of preference are: process locks, node locks, global locks,"},{"line_number":500,"context_line":"database locks."}],"source_content_type":"text/x-rst","patch_set":3,"id":"5f7c97a3_804fae67","line":497,"range":{"start_line":497,"start_character":71,"end_line":497,"end_character":79},"updated":"2018-07-18 15:08:23.000000000","message":"narrowest","commit_id":"1c014dd15eec18056250ecc90d5da313c1ed5d3e"},{"author":{"_account_id":19844,"name":"Kien Ha","email":"kienha9922@gmail.com","username":"kien.ha"},"change_message_id":"abd9e129408065f9db0e982dd9bde110de0d27ad","unresolved":false,"context_lines":[{"line_number":514,"context_line":"ignores the status of a resource."},{"line_number":515,"context_line":""},{"line_number":516,"context_line":"We should also be aware that administrators can forcefully change the status of"},{"line_number":517,"context_line":"a resource and then call the API, bypassing the checking that prevents multiple"},{"line_number":518,"context_line":"operations from being requested to the drivers."},{"line_number":519,"context_line":""},{"line_number":520,"context_line":"Resource locking using states is expanded on the `Race prevention`_ subsection"}],"source_content_type":"text/x-rst","patch_set":3,"id":"5f7c97a3_c9e821e1","line":517,"range":{"start_line":517,"start_character":48,"end_line":517,"end_character":56},"updated":"2018-06-27 16:59:19.000000000","message":"check","commit_id":"1c014dd15eec18056250ecc90d5da313c1ed5d3e"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"635da7bba2ee1a3bcc1ea6789a0150d88cd5decb","unresolved":false,"context_lines":[{"line_number":517,"context_line":"a resource and then call the API, bypassing the checking that prevents multiple"},{"line_number":518,"context_line":"operations from being requested to the drivers."},{"line_number":519,"context_line":""},{"line_number":520,"context_line":"Resource locking using states is expanded on the `Race prevention`_ subsection"},{"line_number":521,"context_line":"in the `Cinder-API`_ section."},{"line_number":522,"context_line":""},{"line_number":523,"context_line":"Process locks"}],"source_content_type":"text/x-rst","patch_set":3,"id":"5f7c97a3_c097e69b","line":520,"range":{"start_line":520,"start_character":42,"end_line":520,"end_character":45},"updated":"2018-07-18 15:08:23.000000000","message":"upon in","commit_id":"1c014dd15eec18056250ecc90d5da313c1ed5d3e"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"635da7bba2ee1a3bcc1ea6789a0150d88cd5decb","unresolved":false,"context_lines":[{"line_number":524,"context_line":"~~~~~~~~~~~~~"},{"line_number":525,"context_line":""},{"line_number":526,"context_line":"Cinder services are multi-threaded -not really since we use greenthreads-, so"},{"line_number":527,"context_line":"the narrower possible scope of locking is among the threads of a single"},{"line_number":528,"context_line":"process."},{"line_number":529,"context_line":""},{"line_number":530,"context_line":"Some cases where we may want to use this type of locking are when we share"}],"source_content_type":"text/x-rst","patch_set":3,"id":"5f7c97a3_00b15e45","line":527,"range":{"start_line":527,"start_character":4,"end_line":527,"end_character":12},"updated":"2018-07-18 15:08:23.000000000","message":"narrowest","commit_id":"1c014dd15eec18056250ecc90d5da313c1ed5d3e"},{"author":{"_account_id":19844,"name":"Kien Ha","email":"kienha9922@gmail.com","username":"kien.ha"},"change_message_id":"abd9e129408065f9db0e982dd9bde110de0d27ad","unresolved":false,"context_lines":[{"line_number":555,"context_line":"Node locks"},{"line_number":556,"context_line":"~~~~~~~~~~"},{"line_number":557,"context_line":""},{"line_number":558,"context_line":"Sometimes we want to define the scope of the lock is the whole node.  Our"},{"line_number":559,"context_line":"critical section requires that only one thread in the whole node is using the"},{"line_number":560,"context_line":"resource.  This inter process locks ensures that no matter how many processes"},{"line_number":561,"context_line":"and backends want to access the same resource, only one will access it at a"}],"source_content_type":"text/x-rst","patch_set":3,"id":"5f7c97a3_a9c0452d","line":558,"range":{"start_line":558,"start_character":50,"end_line":558,"end_character":52},"updated":"2018-06-27 16:59:19.000000000","message":"\"as\" I think","commit_id":"1c014dd15eec18056250ecc90d5da313c1ed5d3e"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"7b3001eac55ce512b3f229574ece8cb015f4fc54","unresolved":false,"context_lines":[{"line_number":555,"context_line":"Node locks"},{"line_number":556,"context_line":"~~~~~~~~~~"},{"line_number":557,"context_line":""},{"line_number":558,"context_line":"Sometimes we want to define the scope of the lock is the whole node.  Our"},{"line_number":559,"context_line":"critical section requires that only one thread in the whole node is using the"},{"line_number":560,"context_line":"resource.  This inter process locks ensures that no matter how many processes"},{"line_number":561,"context_line":"and backends want to access the same resource, only one will access it at a"}],"source_content_type":"text/x-rst","patch_set":3,"id":"5f7c97a3_2f4a3082","line":558,"range":{"start_line":558,"start_character":50,"end_line":558,"end_character":52},"in_reply_to":"5f7c97a3_a9c0452d","updated":"2018-07-19 11:34:20.000000000","message":"I rephrased this","commit_id":"1c014dd15eec18056250ecc90d5da313c1ed5d3e"},{"author":{"_account_id":19844,"name":"Kien Ha","email":"kienha9922@gmail.com","username":"kien.ha"},"change_message_id":"abd9e129408065f9db0e982dd9bde110de0d27ad","unresolved":false,"context_lines":[{"line_number":557,"context_line":""},{"line_number":558,"context_line":"Sometimes we want to define the scope of the lock is the whole node.  Our"},{"line_number":559,"context_line":"critical section requires that only one thread in the whole node is using the"},{"line_number":560,"context_line":"resource.  This inter process locks ensures that no matter how many processes"},{"line_number":561,"context_line":"and backends want to access the same resource, only one will access it at a"},{"line_number":562,"context_line":"time.  All others will have to wait."},{"line_number":563,"context_line":""}],"source_content_type":"text/x-rst","patch_set":3,"id":"5f7c97a3_29fbd57b","line":560,"range":{"start_line":560,"start_character":30,"end_line":560,"end_character":35},"updated":"2018-06-27 16:59:19.000000000","message":"\"lock\" I think","commit_id":"1c014dd15eec18056250ecc90d5da313c1ed5d3e"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"7b3001eac55ce512b3f229574ece8cb015f4fc54","unresolved":false,"context_lines":[{"line_number":557,"context_line":""},{"line_number":558,"context_line":"Sometimes we want to define the scope of the lock is the whole node.  Our"},{"line_number":559,"context_line":"critical section requires that only one thread in the whole node is using the"},{"line_number":560,"context_line":"resource.  This inter process locks ensures that no matter how many processes"},{"line_number":561,"context_line":"and backends want to access the same resource, only one will access it at a"},{"line_number":562,"context_line":"time.  All others will have to wait."},{"line_number":563,"context_line":""}],"source_content_type":"text/x-rst","patch_set":3,"id":"5f7c97a3_8f7584cb","line":560,"range":{"start_line":560,"start_character":30,"end_line":560,"end_character":35},"in_reply_to":"5f7c97a3_29fbd57b","updated":"2018-07-19 11:34:20.000000000","message":"Yup","commit_id":"1c014dd15eec18056250ecc90d5da313c1ed5d3e"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"635da7bba2ee1a3bcc1ea6789a0150d88cd5decb","unresolved":false,"context_lines":[{"line_number":577,"context_line":"  should only be performed by one driver at a time.  For example creating"},{"line_number":578,"context_line":"  target groups for a node."},{"line_number":579,"context_line":""},{"line_number":580,"context_line":"This type of locks use the same method as the `Process locks`_, `synchronized`"},{"line_number":581,"context_line":"method from `cinder.utils`. Here we need to pass two parameters, the name of"},{"line_number":582,"context_line":"the lock, and `external\u003dTrue` to make sure that file locks are being used."},{"line_number":583,"context_line":""}],"source_content_type":"text/x-rst","patch_set":3,"id":"5f7c97a3_20dc9a6f","line":580,"range":{"start_line":580,"start_character":13,"end_line":580,"end_character":18},"updated":"2018-07-18 15:08:23.000000000","message":"lock","commit_id":"1c014dd15eec18056250ecc90d5da313c1ed5d3e"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"635da7bba2ee1a3bcc1ea6789a0150d88cd5decb","unresolved":false,"context_lines":[{"line_number":792,"context_line":""},{"line_number":793,"context_line":"The API service is the public face of Cinder.  Its REST API makes it possible"},{"line_number":794,"context_line":"for anyone to manage and consume block storage resources.  So requests from"},{"line_number":795,"context_line":"clients can, and usually do, come from multiple source."},{"line_number":796,"context_line":""},{"line_number":797,"context_line":"Each Cinder API service by default will run multiple workers.  Each worker is"},{"line_number":798,"context_line":"run in a separate subprocess and will run a predefined maximum number of green"}],"source_content_type":"text/x-rst","patch_set":3,"id":"5f7c97a3_80aece9e","line":795,"range":{"start_line":795,"start_character":48,"end_line":795,"end_character":54},"updated":"2018-07-18 15:08:23.000000000","message":"sources","commit_id":"1c014dd15eec18056250ecc90d5da313c1ed5d3e"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"635da7bba2ee1a3bcc1ea6789a0150d88cd5decb","unresolved":false,"context_lines":[{"line_number":804,"context_line":"Number of green threads per worker is defined by the `wsgi_default_pool_size`"},{"line_number":805,"context_line":"configuration option.  Defaults to 100 green threads."},{"line_number":806,"context_line":""},{"line_number":807,"context_line":"The services takes care of validating request parameters.  Any detected error"},{"line_number":808,"context_line":"is reported immediately to the user."},{"line_number":809,"context_line":""},{"line_number":810,"context_line":"Once the request has been validated, the database is changed to reflect the"}],"source_content_type":"text/x-rst","patch_set":3,"id":"5f7c97a3_00c2be54","line":807,"range":{"start_line":807,"start_character":13,"end_line":807,"end_character":18},"updated":"2018-07-18 15:08:23.000000000","message":"take","commit_id":"1c014dd15eec18056250ecc90d5da313c1ed5d3e"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"7b3001eac55ce512b3f229574ece8cb015f4fc54","unresolved":false,"context_lines":[{"line_number":804,"context_line":"Number of green threads per worker is defined by the `wsgi_default_pool_size`"},{"line_number":805,"context_line":"configuration option.  Defaults to 100 green threads."},{"line_number":806,"context_line":""},{"line_number":807,"context_line":"The services takes care of validating request parameters.  Any detected error"},{"line_number":808,"context_line":"is reported immediately to the user."},{"line_number":809,"context_line":""},{"line_number":810,"context_line":"Once the request has been validated, the database is changed to reflect the"}],"source_content_type":"text/x-rst","patch_set":3,"id":"5f7c97a3_cf585c58","line":807,"range":{"start_line":807,"start_character":13,"end_line":807,"end_character":18},"in_reply_to":"5f7c97a3_00c2be54","updated":"2018-07-19 11:34:20.000000000","message":"Decided to change services to singular","commit_id":"1c014dd15eec18056250ecc90d5da313c1ed5d3e"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"635da7bba2ee1a3bcc1ea6789a0150d88cd5decb","unresolved":false,"context_lines":[{"line_number":813,"context_line":""},{"line_number":814,"context_line":"For create volume and create snapshot operations the API service will create a"},{"line_number":815,"context_line":"new database entry for the new resource. And the new information for the"},{"line_number":816,"context_line":"resource will be returned to the called right after the service passes the"},{"line_number":817,"context_line":"request to the next Cinder service via RPC."},{"line_number":818,"context_line":""},{"line_number":819,"context_line":"Operations like retype and delete will change the database entry referenced by"}],"source_content_type":"text/x-rst","patch_set":3,"id":"5f7c97a3_a0a8aa8a","line":816,"range":{"start_line":816,"start_character":33,"end_line":816,"end_character":39},"updated":"2018-07-18 15:08:23.000000000","message":"caller","commit_id":"1c014dd15eec18056250ecc90d5da313c1ed5d3e"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"635da7bba2ee1a3bcc1ea6789a0150d88cd5decb","unresolved":false,"context_lines":[{"line_number":857,"context_line":"nodes, having the `backend_host` set on the backend sections, and using a"},{"line_number":858,"context_line":"high-availability cluster resource manager like Pacemaker."},{"line_number":859,"context_line":""},{"line_number":860,"context_line":".. attention::  It is highly discourage having the same `host` value configured"},{"line_number":861,"context_line":"   on more than one Cinder node.  Using `backend_host` in the backend section"},{"line_number":862,"context_line":"   is the recommended way to set Active-Passive configurations.  Setting the"},{"line_number":863,"context_line":"   same `host` field will make Scheduler and Backup services report using the"},{"line_number":864,"context_line":"   same database entry in the `services` table.  This may create a good number"}],"source_content_type":"text/x-rst","patch_set":3,"id":"5f7c97a3_c08b6614","line":861,"range":{"start_line":860,"start_character":16,"end_line":861,"end_character":33},"updated":"2018-07-18 15:08:23.000000000","message":"This is awkward.  Recommend:  \"Have the same `host` value configured on more than on Cinder node is highly discouraged.\"","commit_id":"1c014dd15eec18056250ecc90d5da313c1ed5d3e"},{"author":{"_account_id":19844,"name":"Kien Ha","email":"kienha9922@gmail.com","username":"kien.ha"},"change_message_id":"abd9e129408065f9db0e982dd9bde110de0d27ad","unresolved":false,"context_lines":[{"line_number":896,"context_line":""},{"line_number":897,"context_line":"In the code, to detect if a cluster is up, the `is_up` property from the"},{"line_number":898,"context_line":"`Cluster` Versioned Object uses the `last_heartbeat` field from the same"},{"line_number":899,"context_line":"object.  The `last_heartbeat` is a *column proptery* from the SQLAlchemy ORM"},{"line_number":900,"context_line":"model resulting from getting the latest `updated_at` field from all the"},{"line_number":901,"context_line":"services in the same cluster."},{"line_number":902,"context_line":""}],"source_content_type":"text/x-rst","patch_set":3,"id":"5f7c97a3_8931c90d","line":899,"range":{"start_line":899,"start_character":43,"end_line":899,"end_character":51},"updated":"2018-06-27 16:59:19.000000000","message":"property","commit_id":"1c014dd15eec18056250ecc90d5da313c1ed5d3e"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"635da7bba2ee1a3bcc1ea6789a0150d88cd5decb","unresolved":false,"context_lines":[{"line_number":1026,"context_line":"  existing `devstack@c-vol` except replace the `ExecStart` that should have the"},{"line_number":1027,"context_line":"  postfix `--config-file /etc/cinder/cinder2.conf`."},{"line_number":1028,"context_line":""},{"line_number":1029,"context_line":"Once we have tested it in DevStack way we should deploy Cinder in a new Node,"},{"line_number":1030,"context_line":"and continue with the testings."},{"line_number":1031,"context_line":""},{"line_number":1032,"context_line":"It is not necessary to do the DevStack step first, we can jump to having Cinder"}],"source_content_type":"text/x-rst","patch_set":3,"id":"5f7c97a3_e07a22ee","line":1029,"range":{"start_line":1029,"start_character":23,"end_line":1029,"end_character":26},"updated":"2018-07-18 15:08:23.000000000","message":"in the","commit_id":"1c014dd15eec18056250ecc90d5da313c1ed5d3e"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"7b3001eac55ce512b3f229574ece8cb015f4fc54","unresolved":false,"context_lines":[{"line_number":1026,"context_line":"  existing `devstack@c-vol` except replace the `ExecStart` that should have the"},{"line_number":1027,"context_line":"  postfix `--config-file /etc/cinder/cinder2.conf`."},{"line_number":1028,"context_line":""},{"line_number":1029,"context_line":"Once we have tested it in DevStack way we should deploy Cinder in a new Node,"},{"line_number":1030,"context_line":"and continue with the testings."},{"line_number":1031,"context_line":""},{"line_number":1032,"context_line":"It is not necessary to do the DevStack step first, we can jump to having Cinder"}],"source_content_type":"text/x-rst","patch_set":3,"id":"5f7c97a3_0a1c0264","line":1029,"range":{"start_line":1029,"start_character":23,"end_line":1029,"end_character":26},"in_reply_to":"5f7c97a3_e07a22ee","updated":"2018-07-19 11:34:20.000000000","message":"I\u0027ll keep it as it is, the change sounds too weird to me. Ror example I would never say \"we have tested this in the OpenStack\".","commit_id":"1c014dd15eec18056250ecc90d5da313c1ed5d3e"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"635da7bba2ee1a3bcc1ea6789a0150d88cd5decb","unresolved":false,"context_lines":[{"line_number":1027,"context_line":"  postfix `--config-file /etc/cinder/cinder2.conf`."},{"line_number":1028,"context_line":""},{"line_number":1029,"context_line":"Once we have tested it in DevStack way we should deploy Cinder in a new Node,"},{"line_number":1030,"context_line":"and continue with the testings."},{"line_number":1031,"context_line":""},{"line_number":1032,"context_line":"It is not necessary to do the DevStack step first, we can jump to having Cinder"},{"line_number":1033,"context_line":"in multiple nodes right from the start."}],"source_content_type":"text/x-rst","patch_set":3,"id":"5f7c97a3_60661258","line":1030,"range":{"start_line":1030,"start_character":21,"end_line":1030,"end_character":30},"updated":"2018-07-18 15:08:23.000000000","message":"testing","commit_id":"1c014dd15eec18056250ecc90d5da313c1ed5d3e"},{"author":{"_account_id":19844,"name":"Kien Ha","email":"kienha9922@gmail.com","username":"kien.ha"},"change_message_id":"abd9e129408065f9db0e982dd9bde110de0d27ad","unresolved":false,"context_lines":[{"line_number":1032,"context_line":"It is not necessary to do the DevStack step first, we can jump to having Cinder"},{"line_number":1033,"context_line":"in multiple nodes right from the start."},{"line_number":1034,"context_line":""},{"line_number":1035,"context_line":"However we decide to test this we have to change `cinder.conf` and add the"},{"line_number":1036,"context_line":"`cluster` configuration option and restart the Cinder service.  We also need to"},{"line_number":1037,"context_line":"modify the driver under test to include the `SUPPORTS_ACTIVE_ACTIVE \u003d True`"},{"line_number":1038,"context_line":"class attribute."}],"source_content_type":"text/x-rst","patch_set":3,"id":"5f7c97a3_447078a5","line":1035,"range":{"start_line":1035,"start_character":0,"end_line":1035,"end_character":31},"updated":"2018-06-27 16:59:19.000000000","message":"\"However if* we decide to test this\" I think is meant to be said.","commit_id":"1c014dd15eec18056250ecc90d5da313c1ed5d3e"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"7b3001eac55ce512b3f229574ece8cb015f4fc54","unresolved":false,"context_lines":[{"line_number":1032,"context_line":"It is not necessary to do the DevStack step first, we can jump to having Cinder"},{"line_number":1033,"context_line":"in multiple nodes right from the start."},{"line_number":1034,"context_line":""},{"line_number":1035,"context_line":"However we decide to test this we have to change `cinder.conf` and add the"},{"line_number":1036,"context_line":"`cluster` configuration option and restart the Cinder service.  We also need to"},{"line_number":1037,"context_line":"modify the driver under test to include the `SUPPORTS_ACTIVE_ACTIVE \u003d True`"},{"line_number":1038,"context_line":"class attribute."}],"source_content_type":"text/x-rst","patch_set":3,"id":"5f7c97a3_ea62e6d8","line":1035,"range":{"start_line":1035,"start_character":0,"end_line":1035,"end_character":31},"in_reply_to":"5f7c97a3_447078a5","updated":"2018-07-19 11:34:20.000000000","message":"I wasn\u0027t trying to say that, I was trying to express: \"Whatever way you decide to test this\"","commit_id":"1c014dd15eec18056250ecc90d5da313c1ed5d3e"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"635da7bba2ee1a3bcc1ea6789a0150d88cd5decb","unresolved":false,"context_lines":[{"line_number":1053,"context_line":""},{"line_number":1054,"context_line":"Volume nodes periodically send a broadcast with the backend stats to all the"},{"line_number":1055,"context_line":"schedulers.  The stats include total storage space, free space, configured"},{"line_number":1056,"context_line":"maximum over provisioning, etc.  All the backends information is stored in"},{"line_number":1057,"context_line":"memory at the Schedulers, and used to decide where to create new volumes,"},{"line_number":1058,"context_line":"migrate them on a retype, and so on."},{"line_number":1059,"context_line":""}],"source_content_type":"text/x-rst","patch_set":3,"id":"5f7c97a3_60d4d2bb","line":1056,"range":{"start_line":1056,"start_character":41,"end_line":1056,"end_character":49},"updated":"2018-07-18 15:08:23.000000000","message":"backends\u0027","commit_id":"1c014dd15eec18056250ecc90d5da313c1ed5d3e"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"635da7bba2ee1a3bcc1ea6789a0150d88cd5decb","unresolved":false,"context_lines":[{"line_number":1109,"context_line":"Cinder-Backups"},{"line_number":1110,"context_line":"--------------"},{"line_number":1111,"context_line":""},{"line_number":1112,"context_line":"Originally Backup service was not only limited to Active-Passive deployments,"},{"line_number":1113,"context_line":"but it was also tightly coupled to the Volume service.  This coupling meant"},{"line_number":1114,"context_line":"that the Backup service could only backup volumes created by the Volume service"},{"line_number":1115,"context_line":"running on the same node."}],"source_content_type":"text/x-rst","patch_set":3,"id":"5f7c97a3_a09c2a0d","line":1112,"range":{"start_line":1112,"start_character":0,"end_line":1112,"end_character":17},"updated":"2018-07-18 15:08:23.000000000","message":"Originally the Backup","commit_id":"1c014dd15eec18056250ecc90d5da313c1ed5d3e"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"635da7bba2ee1a3bcc1ea6789a0150d88cd5decb","unresolved":false,"context_lines":[{"line_number":1119,"context_line":""},{"line_number":1120,"context_line":"The Active-Active implementation for the backup service is different than the"},{"line_number":1121,"context_line":"one we explained for the Volume Service.  The reason lays not only on the"},{"line_number":1122,"context_line":"Backup service support it first, but also Backup not supporting multiple"},{"line_number":1123,"context_line":"backends and not using the Scheduler for any operations."},{"line_number":1124,"context_line":""},{"line_number":1125,"context_line":"Scheduling"}],"source_content_type":"text/x-rst","patch_set":3,"id":"5f7c97a3_40ae762f","line":1122,"range":{"start_line":1122,"start_character":0,"end_line":1122,"end_character":22},"updated":"2018-07-18 15:08:23.000000000","message":"fact that the Backup service supported","commit_id":"1c014dd15eec18056250ecc90d5da313c1ed5d3e"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"635da7bba2ee1a3bcc1ea6789a0150d88cd5decb","unresolved":false,"context_lines":[{"line_number":1129,"context_line":"using methods `_get_available_backup_service_host`,"},{"line_number":1130,"context_line":"`_is_backup_service_enabled`, and `_get_any_available_backup_service`."},{"line_number":1131,"context_line":""},{"line_number":1132,"context_line":"These methods use the Backup services heartbeats to determine which hosts are"},{"line_number":1133,"context_line":"up to handle requests."},{"line_number":1134,"context_line":""},{"line_number":1135,"context_line":"Cleaning"}],"source_content_type":"text/x-rst","patch_set":3,"id":"5f7c97a3_c05fe64a","line":1132,"range":{"start_line":1132,"start_character":29,"end_line":1132,"end_character":37},"updated":"2018-07-18 15:08:23.000000000","message":"services\u0027","commit_id":"1c014dd15eec18056250ecc90d5da313c1ed5d3e"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"dd8cc50292c6ebc9857beba82022eba9769fe919","unresolved":false,"context_lines":[{"line_number":518,"context_line":"a resource and then call the API, bypassing the check that prevents multiple"},{"line_number":519,"context_line":"operations from being requested to the drivers."},{"line_number":520,"context_line":""},{"line_number":521,"context_line":"Resource locking using states is expanded upon n the `Race prevention`_"},{"line_number":522,"context_line":"subsection in the `Cinder-API`_ section."},{"line_number":523,"context_line":""},{"line_number":524,"context_line":"Process locks"}],"source_content_type":"text/x-rst","patch_set":5,"id":"5f7c97a3_e94734a3","line":521,"range":{"start_line":521,"start_character":42,"end_line":521,"end_character":48},"updated":"2018-08-01 19:46:19.000000000","message":"typo here.","commit_id":"93cabce2ec5922139712ed9530e8043839e5ef7b"},{"author":{"_account_id":23083,"name":"TommyLike","email":"tommylikehu@gmail.com","username":"TommyLike"},"change_message_id":"1eebfd781658b6caa04db0c888e104cb6a55b0e5","unresolved":false,"context_lines":[{"line_number":799,"context_line":"run in a separate subprocess and will run a predefined maximum number of green"},{"line_number":800,"context_line":"threads."},{"line_number":801,"context_line":""},{"line_number":802,"context_line":"The number of API workers is defined by the `osapi_volume_workers`"},{"line_number":803,"context_line":"configuration option.  Defaults to the number of CPUs available."},{"line_number":804,"context_line":""},{"line_number":805,"context_line":"Number of green threads per worker is defined by the `wsgi_default_pool_size`"},{"line_number":806,"context_line":"configuration option.  Defaults to 100 green threads."}],"source_content_type":"text/x-rst","patch_set":6,"id":"5f7c97a3_b4898c70","line":803,"range":{"start_line":802,"start_character":1,"end_line":803,"end_character":64},"updated":"2018-08-02 07:07:20.000000000","message":"It\u0027s depend on the deployment as well, this works in our elder wsgi deployment.","commit_id":"b4d1ab9d19add6a050047452a1e51c01eef68fae"}]}
