)]}'
{"doc/source/cinderlib/cinderlib.rst":[{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"7907a52f4330b1227c89380169e8dbc8a2f5797c","unresolved":false,"context_lines":[{"line_number":16,"context_line":""},{"line_number":17,"context_line":"The library was originally created as an external project, so it didn\u0027t have"},{"line_number":18,"context_line":"the broad range of backend testing Cinder does.  At the time of merging the"},{"line_number":19,"context_line":"code into Cinder the following backends had been validated:"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"- LVM with LIO"},{"line_number":22,"context_line":"- Dell EMC XtremIO"}],"source_content_type":"text/x-rst","patch_set":14,"id":"9fdfeff1_61354246","line":19,"range":{"start_line":19,"start_character":5,"end_line":19,"end_character":16},"updated":"2019-01-23 15:55:47.000000000","message":"suggestion: s/into Cinder/into Cinder during the Stein development cycle/","commit_id":"0f3ea6e641afd37995fe717129d535c4fed2f594"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"af6b9e44cb3811ed209f96dda1352cff94488ed8","unresolved":false,"context_lines":[{"line_number":16,"context_line":""},{"line_number":17,"context_line":"The library was originally created as an external project, so it didn\u0027t have"},{"line_number":18,"context_line":"the broad range of backend testing Cinder does.  At the time of merging the"},{"line_number":19,"context_line":"code into Cinder the following backends had been validated:"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"- LVM with LIO"},{"line_number":22,"context_line":"- Dell EMC XtremIO"}],"source_content_type":"text/x-rst","patch_set":15,"id":"9fdfeff1_26d3b462","line":19,"range":{"start_line":19,"start_character":21,"end_line":19,"end_character":59},"updated":"2019-01-24 17:25:44.000000000","message":"Should there be a statement here that other backends should work or do you want that just implied?","commit_id":"775817d6764d5661b7c3870d97d704a347cbf286"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"5d7fa17a9b76f2b4da432ccd4101c8db1b038fc2","unresolved":false,"context_lines":[{"line_number":16,"context_line":""},{"line_number":17,"context_line":"The library was originally created as an external project, so it didn\u0027t have"},{"line_number":18,"context_line":"the broad range of backend testing Cinder does.  At the time of merging the"},{"line_number":19,"context_line":"code into Cinder the following backends had been validated:"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"- LVM with LIO"},{"line_number":22,"context_line":"- Dell EMC XtremIO"}],"source_content_type":"text/x-rst","patch_set":15,"id":"9fdfeff1_2cfa5cbc","line":19,"range":{"start_line":19,"start_character":21,"end_line":19,"end_character":59},"in_reply_to":"9fdfeff1_26d3b462","updated":"2019-01-30 13:19:15.000000000","message":"Considering the number of changes that Cinderlib had since we did all these validations I think it would be best to remove the list and create one after vendors add the functional tests to their gates.","commit_id":"775817d6764d5661b7c3870d97d704a347cbf286"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"af6b9e44cb3811ed209f96dda1352cff94488ed8","unresolved":false,"context_lines":[{"line_number":180,"context_line":"- External dependencies must be handled manually. So users will have to take"},{"line_number":181,"context_line":"  care of any library, package, or CLI tool that is required by the driver."},{"line_number":182,"context_line":""},{"line_number":183,"context_line":"- Relies on command execution via *sudo* for attach/detach operations as well"},{"line_number":184,"context_line":"  as some CLI tools."},{"line_number":185,"context_line":""},{"line_number":186,"context_line":".. _GIGO: https://en.wikipedia.org/wiki/Garbage_in,_garbage_out"}],"source_content_type":"text/x-rst","patch_set":15,"id":"9fdfeff1_06f790f7","line":184,"range":{"start_line":183,"start_character":1,"end_line":184,"end_character":20},"updated":"2019-01-24 17:25:44.000000000","message":"As we are moving commands to use privsep, is this impacted or is it all handled via sudo in your code?","commit_id":"775817d6764d5661b7c3870d97d704a347cbf286"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"5d7fa17a9b76f2b4da432ccd4101c8db1b038fc2","unresolved":false,"context_lines":[{"line_number":180,"context_line":"- External dependencies must be handled manually. So users will have to take"},{"line_number":181,"context_line":"  care of any library, package, or CLI tool that is required by the driver."},{"line_number":182,"context_line":""},{"line_number":183,"context_line":"- Relies on command execution via *sudo* for attach/detach operations as well"},{"line_number":184,"context_line":"  as some CLI tools."},{"line_number":185,"context_line":""},{"line_number":186,"context_line":".. _GIGO: https://en.wikipedia.org/wiki/Garbage_in,_garbage_out"}],"source_content_type":"text/x-rst","patch_set":15,"id":"9fdfeff1_acde4c0e","line":184,"range":{"start_line":183,"start_character":1,"end_line":184,"end_character":20},"in_reply_to":"9fdfeff1_06f790f7","updated":"2019-01-30 13:19:15.000000000","message":"For now the code doesn\u0027t use privsep, as in some cases it didn\u0027t make sense to have an external service to run those commands.\n\nIn the future I plan to support both, sudo and privsep options, and maybe later, if nobody uses the sudo one, just remove it (although I believe it\u0027ll always be used by the Ansible role).","commit_id":"775817d6764d5661b7c3870d97d704a347cbf286"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"9208003cdbf012f244f6bf9107baa22d4ebd0463","unresolved":false,"context_lines":[{"line_number":16,"context_line":""},{"line_number":17,"context_line":"The library was originally created as an external project, so it didn\u0027t have"},{"line_number":18,"context_line":"the broad range of backend testing Cinder does, and only a limited number of"},{"line_number":19,"context_line":"drivers were validate at the time.  Drivers should work out of the box, and"},{"line_number":20,"context_line":"we\u0027ll keep a list of drivers that have added the cinderlib functional tests to"},{"line_number":21,"context_line":"the driver gates confirming they work and ensuring they will keep working."},{"line_number":22,"context_line":""}],"source_content_type":"text/x-rst","patch_set":17,"id":"9fdfeff1_ca8a9068","line":19,"range":{"start_line":19,"start_character":13,"end_line":19,"end_character":21},"updated":"2019-01-30 14:22:33.000000000","message":"validated","commit_id":"c9339adc388005de8312ca38db1024109244d185"}],"doc/source/cinderlib/topics/backends.rst":[{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"7907a52f4330b1227c89380169e8dbc8a2f5797c","unresolved":false,"context_lines":[{"line_number":2,"context_line":"Backends"},{"line_number":3,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":4,"context_line":""},{"line_number":5,"context_line":"The *Backend* class provides the abstraction to access a storage array with an"},{"line_number":6,"context_line":"specific configuration, which usually constraints our ability to operate on the"},{"line_number":7,"context_line":"backend to a single pool."},{"line_number":8,"context_line":""}],"source_content_type":"text/x-rst","patch_set":14,"id":"9fdfeff1_7ceac5ac","line":5,"range":{"start_line":5,"start_character":76,"end_line":5,"end_character":78},"updated":"2019-01-23 15:55:47.000000000","message":"nit: s/an/a/","commit_id":"0f3ea6e641afd37995fe717129d535c4fed2f594"},{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"7907a52f4330b1227c89380169e8dbc8a2f5797c","unresolved":false,"context_lines":[{"line_number":3,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":4,"context_line":""},{"line_number":5,"context_line":"The *Backend* class provides the abstraction to access a storage array with an"},{"line_number":6,"context_line":"specific configuration, which usually constraints our ability to operate on the"},{"line_number":7,"context_line":"backend to a single pool."},{"line_number":8,"context_line":""},{"line_number":9,"context_line":".. note::"}],"source_content_type":"text/x-rst","patch_set":14,"id":"9fdfeff1_bc090d96","line":6,"range":{"start_line":6,"start_character":38,"end_line":6,"end_character":49},"updated":"2019-01-23 15:55:47.000000000","message":"nit: s/constraints/constrains/","commit_id":"0f3ea6e641afd37995fe717129d535c4fed2f594"},{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"7907a52f4330b1227c89380169e8dbc8a2f5797c","unresolved":false,"context_lines":[{"line_number":34,"context_line":"    class Backend(object):"},{"line_number":35,"context_line":"        def __init__(self, volume_backend_name, **driver_cfg):"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"There are two arguments that we\u0027ll always have to pass on the initialization,"},{"line_number":38,"context_line":"one is the `volume_backend_name` that is the unique identifier that *cinderlib*"},{"line_number":39,"context_line":"will use to identify this specific driver initialization, so we\u0027ll need to make"},{"line_number":40,"context_line":"sure not to repeat the name, and the other one is the `volume_driver` which"},{"line_number":41,"context_line":"refers to the Python namespace that points to the *Cinder* driver."},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"All other *Backend* configuration options are free-form keyword arguments."},{"line_number":44,"context_line":"Each driver and storage array requires different information to operate, some"}],"source_content_type":"text/x-rst","patch_set":14,"id":"9fdfeff1_505b2553","line":41,"range":{"start_line":37,"start_character":0,"end_line":41,"end_character":66},"updated":"2019-01-23 15:55:47.000000000","message":"I think it would be good to separate this out a bit so that the points aren\u0027t lost in the paragraph.  Something like:\n\n\nThere are two arguments that we\u0027ll always have to pass on initialization:\n\n``volume_backend_name``\n\n  This is the unique identifier that *cinderlib* will use to identify this\n  specific driver initialization, so we\u0027ll need to make sure not to repeat\n  the name.\n\n``volume_driver``\n\n  This refers to the Python namespace that points to the *Cinder* driver.\n\nSee below for usage examples.","commit_id":"0f3ea6e641afd37995fe717129d535c4fed2f594"},{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"7907a52f4330b1227c89380169e8dbc8a2f5797c","unresolved":false,"context_lines":[{"line_number":189,"context_line":""},{"line_number":190,"context_line":"The *Backend* class keeps track of all the *Backend* instances in the"},{"line_number":191,"context_line":"`backends` class attribute, and each *Backend* instance has a `volumes`"},{"line_number":192,"context_line":"property that will return a `list` all the existing volumes in the specific"},{"line_number":193,"context_line":"backend.  Deleted volumes will no longer be present."},{"line_number":194,"context_line":""},{"line_number":195,"context_line":"So assuming that we have an `lvm` variable holding an initialized *Backend*"}],"source_content_type":"text/x-rst","patch_set":14,"id":"9fdfeff1_530ecf32","line":192,"range":{"start_line":192,"start_character":35,"end_line":192,"end_character":38},"updated":"2019-01-23 15:55:47.000000000","message":"s/all/of all/","commit_id":"0f3ea6e641afd37995fe717129d535c4fed2f594"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"af6b9e44cb3811ed209f96dda1352cff94488ed8","unresolved":false,"context_lines":[{"line_number":3,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":4,"context_line":""},{"line_number":5,"context_line":"The *Backend* class provides the abstraction to access a storage array with an"},{"line_number":6,"context_line":"specific configuration, which usually constraints our ability to operate on the"},{"line_number":7,"context_line":"backend to a single pool."},{"line_number":8,"context_line":""},{"line_number":9,"context_line":".. note::"}],"source_content_type":"text/x-rst","patch_set":15,"id":"9fdfeff1_a64b2429","line":6,"range":{"start_line":6,"start_character":38,"end_line":6,"end_character":49},"updated":"2019-01-24 17:25:44.000000000","message":"constrains","commit_id":"775817d6764d5661b7c3870d97d704a347cbf286"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"5d7fa17a9b76f2b4da432ccd4101c8db1b038fc2","unresolved":false,"context_lines":[{"line_number":3,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":4,"context_line":""},{"line_number":5,"context_line":"The *Backend* class provides the abstraction to access a storage array with an"},{"line_number":6,"context_line":"specific configuration, which usually constraints our ability to operate on the"},{"line_number":7,"context_line":"backend to a single pool."},{"line_number":8,"context_line":""},{"line_number":9,"context_line":".. note::"}],"source_content_type":"text/x-rst","patch_set":15,"id":"9fdfeff1_4ccfa055","line":6,"range":{"start_line":6,"start_character":38,"end_line":6,"end_character":49},"in_reply_to":"9fdfeff1_a64b2429","updated":"2019-01-30 13:19:15.000000000","message":"Done","commit_id":"775817d6764d5661b7c3870d97d704a347cbf286"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"9208003cdbf012f244f6bf9107baa22d4ebd0463","unresolved":false,"context_lines":[{"line_number":3,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":4,"context_line":""},{"line_number":5,"context_line":"The *Backend* class provides the abstraction to access a storage array with an"},{"line_number":6,"context_line":"specific configuration, which usually constraint our ability to operate on the"},{"line_number":7,"context_line":"backend to a single pool."},{"line_number":8,"context_line":""},{"line_number":9,"context_line":".. note::"}],"source_content_type":"text/x-rst","patch_set":17,"id":"9fdfeff1_6a7b647a","line":6,"range":{"start_line":6,"start_character":38,"end_line":6,"end_character":48},"updated":"2019-01-30 14:22:33.000000000","message":"constrains","commit_id":"c9339adc388005de8312ca38db1024109244d185"}],"doc/source/cinderlib/topics/initialization.rst":[{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"7907a52f4330b1227c89380169e8dbc8a2f5797c","unresolved":false,"context_lines":[{"line_number":9,"context_line":""},{"line_number":10,"context_line":"Library initialization should be done before making any other library call,"},{"line_number":11,"context_line":"including *Backend* initialization and loading serialized data, if we try to"},{"line_number":12,"context_line":"do it after other calls the library will raise and `Exception`."},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"Provided *setup* method is `cinderlib.Backend.global_setup`, but for"},{"line_number":15,"context_line":"convenience the library provides a reference to this class method in"}],"source_content_type":"text/x-rst","patch_set":14,"id":"9fdfeff1_61ea2276","line":12,"range":{"start_line":12,"start_character":47,"end_line":12,"end_character":50},"updated":"2019-01-23 15:55:47.000000000","message":"s/and/an/","commit_id":"0f3ea6e641afd37995fe717129d535c4fed2f594"},{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"7907a52f4330b1227c89380169e8dbc8a2f5797c","unresolved":false,"context_lines":[{"line_number":44,"context_line":"Cinderlib doesn\u0027t currently support the third type of locks, but that should"},{"line_number":45,"context_line":"not be an inconvenience for most cinderlib usage."},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"Cinder uses file locks for the between process locking and cinderlib uses that"},{"line_number":48,"context_line":"same kind of locking for the third type of locks, which is also what Cinder"},{"line_number":49,"context_line":"uses when not deployed in an Active-Active fashion."},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"Parameter defaults to `None`, which will use the path indicated by the"}],"source_content_type":"text/x-rst","patch_set":14,"id":"9fdfeff1_41203eb1","line":48,"range":{"start_line":47,"start_character":59,"end_line":48,"end_character":48},"updated":"2019-01-23 15:55:47.000000000","message":"This is a bit confusing because at line 44 it says that cinderlib doesn\u0027t support the third kind of lock.  Is the idea that cinderlib uses file locks and will respect the locking among the processes it starts, but there\u0027s no guarantee that other services will respect the locking unless those services are specifically configured to check the cinderlib file locks?","commit_id":"0f3ea6e641afd37995fe717129d535c4fed2f594"},{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"7907a52f4330b1227c89380169e8dbc8a2f5797c","unresolved":false,"context_lines":[{"line_number":61,"context_line":"Attaching and detaching operations with *cinderlib* will also require `sudo`"},{"line_number":62,"context_line":"privileges."},{"line_number":63,"context_line":""},{"line_number":64,"context_line":"This configuration option allows us to define a custom root helper or disabling"},{"line_number":65,"context_line":"all `sudo` operations passing an empty string when we know we don\u0027t require"},{"line_number":66,"context_line":"them and we are running the process with a non passwordless `sudo` user."},{"line_number":67,"context_line":""},{"line_number":68,"context_line":"Defaults to `sudo`."},{"line_number":69,"context_line":""}],"source_content_type":"text/x-rst","patch_set":14,"id":"9fdfeff1_7cae4599","line":66,"range":{"start_line":64,"start_character":0,"end_line":66,"end_character":72},"updated":"2019-01-23 15:55:47.000000000","message":"I had a hard time parsing this paragraph.  Maybe something like this:\n\nThis configuration allows us to define a custom root helper (for example, for when the process is being run by a non passwordless `sudo` user), or to disable all `sudo` operations by passing an empty string when we know we don\u0027t require them.\n\n(or maybe I\u0027m completely missing the point of this paragraph)","commit_id":"0f3ea6e641afd37995fe717129d535c4fed2f594"},{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"7907a52f4330b1227c89380169e8dbc8a2f5797c","unresolved":false,"context_lines":[{"line_number":111,"context_line":"string, an identifier for our project that will be assigned to the resources we"},{"line_number":112,"context_line":"create."},{"line_number":113,"context_line":""},{"line_number":114,"context_line":"Defaults to `cinderlib`."},{"line_number":115,"context_line":""},{"line_number":116,"context_line":"user_id"},{"line_number":117,"context_line":"-------"}],"source_content_type":"text/x-rst","patch_set":14,"id":"9fdfeff1_bc8d8d32","line":114,"range":{"start_line":114,"start_character":12,"end_line":114,"end_character":23},"updated":"2019-01-23 15:55:47.000000000","message":"nit: these should be \"regular\" single quotes to indicate that this is a string (the backticks make sphinx render this in italics with no quotes when the html is generated).","commit_id":"0f3ea6e641afd37995fe717129d535c4fed2f594"},{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"7907a52f4330b1227c89380169e8dbc8a2f5797c","unresolved":false,"context_lines":[{"line_number":121,"context_line":"in the resource.  Using this this parameter we can define, using a string, an"},{"line_number":122,"context_line":"identifier for the user of cinderlib to be recorded in the resources."},{"line_number":123,"context_line":""},{"line_number":124,"context_line":"Defaults to `cinderlib`."},{"line_number":125,"context_line":""},{"line_number":126,"context_line":"persistence_config"},{"line_number":127,"context_line":"------------------"}],"source_content_type":"text/x-rst","patch_set":14,"id":"9fdfeff1_1c7e1919","line":124,"range":{"start_line":124,"start_character":12,"end_line":124,"end_character":23},"updated":"2019-01-23 15:55:47.000000000","message":"nit: s/`/\u0027/g","commit_id":"0f3ea6e641afd37995fe717129d535c4fed2f594"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"af6b9e44cb3811ed209f96dda1352cff94488ed8","unresolved":false,"context_lines":[{"line_number":9,"context_line":""},{"line_number":10,"context_line":"Library initialization should be done before making any other library call,"},{"line_number":11,"context_line":"including *Backend* initialization and loading serialized data, if we try to"},{"line_number":12,"context_line":"do it after other calls the library will raise and `Exception`."},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"Provided *setup* method is `cinderlib.Backend.global_setup`, but for"},{"line_number":15,"context_line":"convenience the library provides a reference to this class method in"}],"source_content_type":"text/x-rst","patch_set":15,"id":"9fdfeff1_a66d6433","line":12,"range":{"start_line":12,"start_character":46,"end_line":12,"end_character":50},"updated":"2019-01-24 17:25:44.000000000","message":"an","commit_id":"775817d6764d5661b7c3870d97d704a347cbf286"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"5d7fa17a9b76f2b4da432ccd4101c8db1b038fc2","unresolved":false,"context_lines":[{"line_number":9,"context_line":""},{"line_number":10,"context_line":"Library initialization should be done before making any other library call,"},{"line_number":11,"context_line":"including *Backend* initialization and loading serialized data, if we try to"},{"line_number":12,"context_line":"do it after other calls the library will raise and `Exception`."},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"Provided *setup* method is `cinderlib.Backend.global_setup`, but for"},{"line_number":15,"context_line":"convenience the library provides a reference to this class method in"}],"source_content_type":"text/x-rst","patch_set":15,"id":"9fdfeff1_ac072c82","line":12,"range":{"start_line":12,"start_character":46,"end_line":12,"end_character":50},"in_reply_to":"9fdfeff1_a66d6433","updated":"2019-01-30 13:19:15.000000000","message":"Done","commit_id":"775817d6764d5661b7c3870d97d704a347cbf286"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"af6b9e44cb3811ed209f96dda1352cff94488ed8","unresolved":false,"context_lines":[{"line_number":38,"context_line":"on the scope the driver requires:"},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"- Between threads of the same process."},{"line_number":41,"context_line":"- Between different process on the same host."},{"line_number":42,"context_line":"- In all the OpenStack deployment."},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"Cinderlib doesn\u0027t currently support the third type of locks, but that should"}],"source_content_type":"text/x-rst","patch_set":15,"id":"9fdfeff1_2663b444","line":41,"range":{"start_line":41,"start_character":20,"end_line":41,"end_character":28},"updated":"2019-01-24 17:25:44.000000000","message":"processes","commit_id":"775817d6764d5661b7c3870d97d704a347cbf286"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"5d7fa17a9b76f2b4da432ccd4101c8db1b038fc2","unresolved":false,"context_lines":[{"line_number":38,"context_line":"on the scope the driver requires:"},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"- Between threads of the same process."},{"line_number":41,"context_line":"- Between different process on the same host."},{"line_number":42,"context_line":"- In all the OpenStack deployment."},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"Cinderlib doesn\u0027t currently support the third type of locks, but that should"}],"source_content_type":"text/x-rst","patch_set":15,"id":"9fdfeff1_6cfdc46c","line":41,"range":{"start_line":41,"start_character":20,"end_line":41,"end_character":28},"in_reply_to":"9fdfeff1_2663b444","updated":"2019-01-30 13:19:15.000000000","message":"Done","commit_id":"775817d6764d5661b7c3870d97d704a347cbf286"}],"doc/source/cinderlib/topics/metadata.rst":[{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"7907a52f4330b1227c89380169e8dbc8a2f5797c","unresolved":false,"context_lines":[{"line_number":51,"context_line":"Memory plugin"},{"line_number":52,"context_line":"-------------"},{"line_number":53,"context_line":""},{"line_number":54,"context_line":"The memory plugin is the fastest one, but it\u0027s has its drawbacks.  It doesn\u0027t"},{"line_number":55,"context_line":"provide persistence across application restarts and it\u0027s more likely to have"},{"line_number":56,"context_line":"issues than the database plugin."},{"line_number":57,"context_line":""}],"source_content_type":"text/x-rst","patch_set":14,"id":"9fdfeff1_264bcb2b","line":54,"range":{"start_line":54,"start_character":42,"end_line":54,"end_character":46},"updated":"2019-01-23 15:55:47.000000000","message":"s/it\u0027s/it/","commit_id":"0f3ea6e641afd37995fe717129d535c4fed2f594"}],"doc/source/cinderlib/topics/serialization.rst":[{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"af6b9e44cb3811ed209f96dda1352cff94488ed8","unresolved":false,"context_lines":[{"line_number":194,"context_line":"already present in *cinderlib*."},{"line_number":195,"context_line":""},{"line_number":196,"context_line":"This should be OK for most *cinderlib* usages, since it\u0027s common practice to"},{"line_number":197,"context_line":"store you storage backend connection information (credentials, addresses, etc.)"},{"line_number":198,"context_line":"in a different location than your data, but there may be situations (for"},{"line_number":199,"context_line":"example while testing) where we\u0027ll want to store everything in the same file,"},{"line_number":200,"context_line":"not only the *cinderlib* representation of all the storage resources but also"}],"source_content_type":"text/x-rst","patch_set":15,"id":"9fdfeff1_e9701da8","line":197,"range":{"start_line":197,"start_character":6,"end_line":197,"end_character":9},"updated":"2019-01-24 17:25:44.000000000","message":"your","commit_id":"775817d6764d5661b7c3870d97d704a347cbf286"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"5d7fa17a9b76f2b4da432ccd4101c8db1b038fc2","unresolved":false,"context_lines":[{"line_number":194,"context_line":"already present in *cinderlib*."},{"line_number":195,"context_line":""},{"line_number":196,"context_line":"This should be OK for most *cinderlib* usages, since it\u0027s common practice to"},{"line_number":197,"context_line":"store you storage backend connection information (credentials, addresses, etc.)"},{"line_number":198,"context_line":"in a different location than your data, but there may be situations (for"},{"line_number":199,"context_line":"example while testing) where we\u0027ll want to store everything in the same file,"},{"line_number":200,"context_line":"not only the *cinderlib* representation of all the storage resources but also"}],"source_content_type":"text/x-rst","patch_set":15,"id":"9fdfeff1_6c59448c","line":197,"range":{"start_line":197,"start_character":6,"end_line":197,"end_character":9},"in_reply_to":"9fdfeff1_e9701da8","updated":"2019-01-30 13:19:15.000000000","message":"Changed the phrase a little and also the previous paragraph, which looked hard to understand.","commit_id":"775817d6764d5661b7c3870d97d704a347cbf286"}],"doc/source/cinderlib/topics/snapshots.rst":[{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"7907a52f4330b1227c89380169e8dbc8a2f5797c","unresolved":false,"context_lines":[{"line_number":4,"context_line":""},{"line_number":5,"context_line":"The *Snapshot* class provides the abstraction layer required to perform all"},{"line_number":6,"context_line":"operations on an existing snapshot, which means that the snapshot creation"},{"line_number":7,"context_line":"operation must be invoked from other class instance, since the new snapshot we"},{"line_number":8,"context_line":"want to create doesn\u0027t exist yet and we cannot use the *Snapshot* class to"},{"line_number":9,"context_line":"manage it."},{"line_number":10,"context_line":""}],"source_content_type":"text/x-rst","patch_set":14,"id":"9fdfeff1_933e77d8","line":7,"range":{"start_line":7,"start_character":31,"end_line":7,"end_character":36},"updated":"2019-01-23 15:55:47.000000000","message":"another?","commit_id":"0f3ea6e641afd37995fe717129d535c4fed2f594"},{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"7907a52f4330b1227c89380169e8dbc8a2f5797c","unresolved":false,"context_lines":[{"line_number":17,"context_line":".. note::"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"    Some drivers, like the NFS, require assistance from the Compute service for"},{"line_number":20,"context_line":"    attached volumes, so they is currently no way of doing this with"},{"line_number":21,"context_line":"    *cinderlib*"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"Creating a snapshot can only be performed by the `create_snapshot` method from"}],"source_content_type":"text/x-rst","patch_set":14,"id":"9fdfeff1_53200fb1","line":20,"range":{"start_line":20,"start_character":25,"end_line":20,"end_character":29},"updated":"2019-01-23 15:55:47.000000000","message":"s/they/there/","commit_id":"0f3ea6e641afd37995fe717129d535c4fed2f594"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"af6b9e44cb3811ed209f96dda1352cff94488ed8","unresolved":false,"context_lines":[{"line_number":17,"context_line":".. note::"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"    Some drivers, like the NFS, require assistance from the Compute service for"},{"line_number":20,"context_line":"    attached volumes, so they is currently no way of doing this with"},{"line_number":21,"context_line":"    *cinderlib*"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"Creating a snapshot can only be performed by the `create_snapshot` method from"}],"source_content_type":"text/x-rst","patch_set":15,"id":"9fdfeff1_499fe9b3","line":20,"range":{"start_line":20,"start_character":25,"end_line":20,"end_character":28},"updated":"2019-01-24 17:25:44.000000000","message":"there","commit_id":"775817d6764d5661b7c3870d97d704a347cbf286"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"5d7fa17a9b76f2b4da432ccd4101c8db1b038fc2","unresolved":false,"context_lines":[{"line_number":17,"context_line":".. note::"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"    Some drivers, like the NFS, require assistance from the Compute service for"},{"line_number":20,"context_line":"    attached volumes, so they is currently no way of doing this with"},{"line_number":21,"context_line":"    *cinderlib*"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"Creating a snapshot can only be performed by the `create_snapshot` method from"}],"source_content_type":"text/x-rst","patch_set":15,"id":"9fdfeff1_acc88c21","line":20,"range":{"start_line":20,"start_character":25,"end_line":20,"end_character":28},"in_reply_to":"9fdfeff1_499fe9b3","updated":"2019-01-30 13:19:15.000000000","message":"Done","commit_id":"775817d6764d5661b7c3870d97d704a347cbf286"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"af6b9e44cb3811ed209f96dda1352cff94488ed8","unresolved":false,"context_lines":[{"line_number":21,"context_line":"    *cinderlib*"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"Creating a snapshot can only be performed by the `create_snapshot` method from"},{"line_number":24,"context_line":"our *Volume* instance, and once we have have created a snapshot it will be"},{"line_number":25,"context_line":"tracked in the *Volume* instance\u0027s `snapshots` set."},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"Here is a simple code to create a snapshot and use the `snapshots` set to"}],"source_content_type":"text/x-rst","patch_set":15,"id":"9fdfeff1_e9a57d05","line":24,"range":{"start_line":24,"start_character":35,"end_line":24,"end_character":44},"updated":"2019-01-24 17:25:44.000000000","message":"have","commit_id":"775817d6764d5661b7c3870d97d704a347cbf286"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"5d7fa17a9b76f2b4da432ccd4101c8db1b038fc2","unresolved":false,"context_lines":[{"line_number":21,"context_line":"    *cinderlib*"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"Creating a snapshot can only be performed by the `create_snapshot` method from"},{"line_number":24,"context_line":"our *Volume* instance, and once we have have created a snapshot it will be"},{"line_number":25,"context_line":"tracked in the *Volume* instance\u0027s `snapshots` set."},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"Here is a simple code to create a snapshot and use the `snapshots` set to"}],"source_content_type":"text/x-rst","patch_set":15,"id":"9fdfeff1_6cce242e","line":24,"range":{"start_line":24,"start_character":35,"end_line":24,"end_character":44},"in_reply_to":"9fdfeff1_e9a57d05","updated":"2019-01-30 13:19:15.000000000","message":"Done","commit_id":"775817d6764d5661b7c3870d97d704a347cbf286"}],"doc/source/cinderlib/topics/volumes.rst":[{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"7907a52f4330b1227c89380169e8dbc8a2f5797c","unresolved":false,"context_lines":[{"line_number":191,"context_line":""},{"line_number":192,"context_line":"In *Cinder* there are safeguards to prevent a delete operation from completing"},{"line_number":193,"context_line":"if it has snapshots (unless the delete request comes with the `cascade` option"},{"line_number":194,"context_line":"set to true), but here in *cinderlib* we don\u0027t, so it\u0027s the callers"},{"line_number":195,"context_line":"responsibility to delete the snapshots."},{"line_number":196,"context_line":""},{"line_number":197,"context_line":"Deleting a volume with snapshots doesn\u0027t have a defined behavior for *Cinder*"}],"source_content_type":"text/x-rst","patch_set":14,"id":"9fdfeff1_73b8b375","line":194,"range":{"start_line":194,"start_character":60,"end_line":194,"end_character":67},"updated":"2019-01-23 15:55:47.000000000","message":"nit: caller\u0027s","commit_id":"0f3ea6e641afd37995fe717129d535c4fed2f594"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"af6b9e44cb3811ed209f96dda1352cff94488ed8","unresolved":false,"context_lines":[{"line_number":28,"context_line":""},{"line_number":29,"context_line":".. note::"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"    *Cinder* NFS backends will create an image and not a directory where to"},{"line_number":32,"context_line":"    store files, which falls in line with *Cinder* being a Block Storage"},{"line_number":33,"context_line":"    provider and not filesystem provider like *Manila* is."},{"line_number":34,"context_line":""}],"source_content_type":"text/x-rst","patch_set":15,"id":"9fdfeff1_c9c19982","line":31,"range":{"start_line":31,"start_character":67,"end_line":31,"end_character":73},"updated":"2019-01-24 17:25:44.000000000","message":"remove \u0027where\u0027","commit_id":"775817d6764d5661b7c3870d97d704a347cbf286"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"5d7fa17a9b76f2b4da432ccd4101c8db1b038fc2","unresolved":false,"context_lines":[{"line_number":28,"context_line":""},{"line_number":29,"context_line":".. note::"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"    *Cinder* NFS backends will create an image and not a directory where to"},{"line_number":32,"context_line":"    store files, which falls in line with *Cinder* being a Block Storage"},{"line_number":33,"context_line":"    provider and not filesystem provider like *Manila* is."},{"line_number":34,"context_line":""}],"source_content_type":"text/x-rst","patch_set":15,"id":"9fdfeff1_acf16c6d","line":31,"range":{"start_line":31,"start_character":67,"end_line":31,"end_character":73},"in_reply_to":"9fdfeff1_c9c19982","updated":"2019-01-30 13:19:15.000000000","message":"Done","commit_id":"775817d6764d5661b7c3870d97d704a347cbf286"},{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"f279f04e7dab1abb431e82c8a5bdf5b246259473","unresolved":false,"context_lines":[{"line_number":6,"context_line":"operations on an existing volume, which means that there will be volume"},{"line_number":7,"context_line":"creation operations that will be invoked from other class instances, since the"},{"line_number":8,"context_line":"new volume we want to create doesn\u0027t exist yet and we cannot use the *Volume*"},{"line_number":9,"context_line":"class to manage it."},{"line_number":10,"context_line":""},{"line_number":11,"context_line":"Create"},{"line_number":12,"context_line":"------"}],"source_content_type":"text/x-rst","patch_set":16,"id":"9fdfeff1_f0fc3ab6","line":9,"updated":"2019-01-29 13:53:35.000000000","message":"This paragraph is a bit confusing.  Suggestion....\n\n\"The *Volume* class provides the abstraction layer required to perform all operations on an existing volume.  Volume creation operations are carried out elsewhere.\"","commit_id":"bfb37075f728556bbc39cab25aacc07017a9fa7e"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"5d7fa17a9b76f2b4da432ccd4101c8db1b038fc2","unresolved":false,"context_lines":[{"line_number":6,"context_line":"operations on an existing volume, which means that there will be volume"},{"line_number":7,"context_line":"creation operations that will be invoked from other class instances, since the"},{"line_number":8,"context_line":"new volume we want to create doesn\u0027t exist yet and we cannot use the *Volume*"},{"line_number":9,"context_line":"class to manage it."},{"line_number":10,"context_line":""},{"line_number":11,"context_line":"Create"},{"line_number":12,"context_line":"------"}],"source_content_type":"text/x-rst","patch_set":16,"id":"9fdfeff1_8ca10849","line":9,"in_reply_to":"9fdfeff1_f0fc3ab6","updated":"2019-01-30 13:19:15.000000000","message":"I\u0027ve used your text and replaced \"elsewhere\" with \"at the Backend level\"","commit_id":"bfb37075f728556bbc39cab25aacc07017a9fa7e"}],"doc/source/index.rst":[{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"7907a52f4330b1227c89380169e8dbc8a2f5797c","unresolved":false,"context_lines":[{"line_number":83,"context_line":"Cinder provides such as quotas, replication, multi-tenancy, migrations,"},{"line_number":84,"context_line":"retyping, scheduling, backups, authorization, authentication, REST API, etc."},{"line_number":85,"context_line":""},{"line_number":86,"context_line":"Please refer to the `cinderlib documentation \u003ccinderlib/cinderlib\u003e` for a"},{"line_number":87,"context_line":"more in depth explanation and code examples:"},{"line_number":88,"context_line":""},{"line_number":89,"context_line":".. toctree::"}],"source_content_type":"text/x-rst","patch_set":14,"id":"9fdfeff1_81b5c6cf","line":86,"range":{"start_line":86,"start_character":20,"end_line":86,"end_character":67},"updated":"2019-01-23 15:55:47.000000000","message":"This is missing the final \u0027_\u0027 that will turn it into a hyperlink.","commit_id":"0f3ea6e641afd37995fe717129d535c4fed2f594"}]}
