)]}'
{"cinderlib/cinderlib.py":[{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"9cd037ab1b93e3f9dc49e2fee19159e75084c259","unresolved":false,"context_lines":[{"line_number":14,"context_line":"#    under the License."},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"from __future__ import absolute_import"},{"line_number":17,"context_line":"import ConfigParser"},{"line_number":18,"context_line":"import json as json_lib"},{"line_number":19,"context_line":"import logging"},{"line_number":20,"context_line":"import os"}],"source_content_type":"text/x-python","patch_set":5,"id":"1f769fc5_9770e874","line":17,"range":{"start_line":17,"start_character":7,"end_line":17,"end_character":19},"updated":"2018-12-27 05:10:34.000000000","message":"configparser ?\nhttps://docs.python.org/3/library/configparser.html","commit_id":"baa1ff717b5b0d89c80755b47879f7b27780fc32"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"2f625d006fc24b5d1ddd9d0b7a508d651f0d55ab","unresolved":false,"context_lines":[{"line_number":14,"context_line":"#    under the License."},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"from __future__ import absolute_import"},{"line_number":17,"context_line":"import ConfigParser"},{"line_number":18,"context_line":"import json as json_lib"},{"line_number":19,"context_line":"import logging"},{"line_number":20,"context_line":"import os"}],"source_content_type":"text/x-python","patch_set":5,"id":"1f769fc5_80e66016","line":17,"range":{"start_line":17,"start_character":7,"end_line":17,"end_character":19},"in_reply_to":"1f769fc5_9770e874","updated":"2018-12-27 13:13:58.000000000","message":"Done","commit_id":"baa1ff717b5b0d89c80755b47879f7b27780fc32"},{"author":{"_account_id":20722,"name":"Yikun Jiang","email":"yikunkero@gmail.com","username":"yikunkero"},"change_message_id":"5c6e3855e4310bda26f1ea3abe9671ced19be6c5","unresolved":false,"context_lines":[{"line_number":19,"context_line":"import os"},{"line_number":20,"context_line":"import six"},{"line_number":21,"context_line":"from six.moves import configparser"},{"line_number":22,"context_line":"import StringIO"},{"line_number":23,"context_line":"import types"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"from cinder import coordination"}],"source_content_type":"text/x-python","patch_set":6,"id":"1f769fc5_033335ad","line":22,"updated":"2018-12-28 03:54:10.000000000","message":"Python3:\nfrom io import StringIO\n\nAnd it seems we need six.StringIO in here?","commit_id":"e7f344105b1bbaecb3da5d78214847ca43039459"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"9af04b61504b48029cb215369d02fb88ef5e8ac9","unresolved":false,"context_lines":[{"line_number":19,"context_line":"import os"},{"line_number":20,"context_line":"import six"},{"line_number":21,"context_line":"from six.moves import configparser"},{"line_number":22,"context_line":"import StringIO"},{"line_number":23,"context_line":"import types"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"from cinder import coordination"}],"source_content_type":"text/x-python","patch_set":6,"id":"1f769fc5_b9e14e01","line":22,"in_reply_to":"1f769fc5_033335ad","updated":"2018-12-28 11:51:14.000000000","message":"Sorry about that, I hadn\u0027t actually tested cinderlib with Python3.\n\nNow I have tested it and next patch will have it fixed.","commit_id":"e7f344105b1bbaecb3da5d78214847ca43039459"},{"author":{"_account_id":20722,"name":"Yikun Jiang","email":"yikunkero@gmail.com","username":"yikunkero"},"change_message_id":"1085fd45e2ace2af263082e014fad39430009f8a","unresolved":false,"context_lines":[{"line_number":79,"context_line":"            configuration\u003dconf,"},{"line_number":80,"context_line":"            db\u003dself.persistence.db,"},{"line_number":81,"context_line":"            host\u003d\u0027%s@%s\u0027 % (cfg.CONF.host, volume_backend_name),"},{"line_number":82,"context_line":"            cluster_name\u003dNone,  # We don\u0027t user cfg.CONF.cluster for now"},{"line_number":83,"context_line":"            active_backend_id\u003dNone)  # No failover for now"},{"line_number":84,"context_line":"        self.driver.do_setup(objects.CONTEXT)"},{"line_number":85,"context_line":"        self.driver.check_for_setup_error()"}],"source_content_type":"text/x-python","patch_set":14,"id":"9fdfeff1_9695e142","line":82,"range":{"start_line":82,"start_character":43,"end_line":82,"end_character":47},"updated":"2019-01-25 08:20:20.000000000","message":"nit: use?","commit_id":"16a24aa22875eae2d161c02accc1fe7966023736"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"85b145a55c73870f55608aca04b592fb2fffcba4","unresolved":false,"context_lines":[{"line_number":79,"context_line":"            configuration\u003dconf,"},{"line_number":80,"context_line":"            db\u003dself.persistence.db,"},{"line_number":81,"context_line":"            host\u003d\u0027%s@%s\u0027 % (cfg.CONF.host, volume_backend_name),"},{"line_number":82,"context_line":"            cluster_name\u003dNone,  # We don\u0027t user cfg.CONF.cluster for now"},{"line_number":83,"context_line":"            active_backend_id\u003dNone)  # No failover for now"},{"line_number":84,"context_line":"        self.driver.do_setup(objects.CONTEXT)"},{"line_number":85,"context_line":"        self.driver.check_for_setup_error()"}],"source_content_type":"text/x-python","patch_set":14,"id":"9fdfeff1_6102dd0d","line":82,"range":{"start_line":82,"start_character":43,"end_line":82,"end_character":47},"in_reply_to":"9fdfeff1_9695e142","updated":"2019-01-28 09:26:46.000000000","message":"Done","commit_id":"16a24aa22875eae2d161c02accc1fe7966023736"}],"cinderlib/nos_brick.py":[{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"88036ec727cfa1d2af4b4d0daea3fdb0ef906718","unresolved":false,"context_lines":[{"line_number":40,"context_line":"import six"},{"line_number":41,"context_line":""},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"class RBDConnector(connectors.rbd.RBDConnector):"},{"line_number":44,"context_line":"    \"\"\"\"Connector class to attach/detach RBD volumes locally."},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"    OS-Brick\u0027s implementation covers only 2 cases:"}],"source_content_type":"text/x-python","patch_set":10,"id":"9fdfeff1_eff5e184","line":43,"updated":"2019-01-18 17:47:10.000000000","message":"Why isn\u0027t this included in os-brick instead of cinderlib?","commit_id":"cc65b4004711792a6ec91ee6edc3d4fd0dbd354e"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"565aadd810b6919cd7258a11e8aeee7f1eb19498","unresolved":false,"context_lines":[{"line_number":40,"context_line":"import six"},{"line_number":41,"context_line":""},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"class RBDConnector(connectors.rbd.RBDConnector):"},{"line_number":44,"context_line":"    \"\"\"\"Connector class to attach/detach RBD volumes locally."},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"    OS-Brick\u0027s implementation covers only 2 cases:"}],"source_content_type":"text/x-python","patch_set":10,"id":"9fdfeff1_f579302f","line":43,"in_reply_to":"9fdfeff1_eff5e184","updated":"2019-01-18 19:39:24.000000000","message":"It will be, but that will require more time, since we have to agree how to do it nicely there.\n\nOn OS-Brick we\u0027ll want to have 3 connection mechanisms (one more than we do now):\n\n- Remote attachment for Nova: creates temporary file with credentials\n- Local attachment for Cinder: returns a fd we use to write data from Python\n- Local attachment: For cinderlib and the cinderclient extension.","commit_id":"cc65b4004711792a6ec91ee6edc3d4fd0dbd354e"},{"author":{"_account_id":20722,"name":"Yikun Jiang","email":"yikunkero@gmail.com","username":"yikunkero"},"change_message_id":"1085fd45e2ace2af263082e014fad39430009f8a","unresolved":false,"context_lines":[{"line_number":199,"context_line":"    existing_bgcp \u003d connector.get_connector_properties"},{"line_number":200,"context_line":"    existing_bcp \u003d connector.InitiatorConnector.factory"},{"line_number":201,"context_line":""},{"line_number":202,"context_line":"    def my_bgcp(*args, **kwargs):"},{"line_number":203,"context_line":"        if len(args):"},{"line_number":204,"context_line":"            args \u003d list(args)"},{"line_number":205,"context_line":"            args[0] \u003d ROOT_HELPER"}],"source_content_type":"text/x-python","patch_set":14,"id":"9fdfeff1_16649121","line":202,"updated":"2019-01-25 08:20:20.000000000","message":"What is bgcp and bgc?","commit_id":"16a24aa22875eae2d161c02accc1fe7966023736"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"85b145a55c73870f55608aca04b592fb2fffcba4","unresolved":false,"context_lines":[{"line_number":199,"context_line":"    existing_bgcp \u003d connector.get_connector_properties"},{"line_number":200,"context_line":"    existing_bcp \u003d connector.InitiatorConnector.factory"},{"line_number":201,"context_line":""},{"line_number":202,"context_line":"    def my_bgcp(*args, **kwargs):"},{"line_number":203,"context_line":"        if len(args):"},{"line_number":204,"context_line":"            args \u003d list(args)"},{"line_number":205,"context_line":"            args[0] \u003d ROOT_HELPER"}],"source_content_type":"text/x-python","patch_set":14,"id":"9fdfeff1_3c2f188f","line":202,"in_reply_to":"9fdfeff1_16649121","updated":"2019-01-28 09:26:46.000000000","message":"Brick Get Connector Properties and Brick Get Connector.  I\u0027ll  renamed the methods to make these names clear.","commit_id":"16a24aa22875eae2d161c02accc1fe7966023736"}],"cinderlib/persistence/dbms.py":[{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"adf1734c3380668efb0957bf73d3ae95ad44da05","unresolved":false,"context_lines":[{"line_number":39,"context_line":"    value \u003d models.Column(models.Text)"},{"line_number":40,"context_line":""},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"class DBPersistence(persistence_base.PersistenceDriverBase):"},{"line_number":43,"context_line":"    GET_METHODS_PER_DB_MODEL \u003d {"},{"line_number":44,"context_line":"        cinder_objs.VolumeType.model: \u0027volume_type_get\u0027,"},{"line_number":45,"context_line":"        cinder_objs.QualityOfServiceSpecs.model: \u0027qos_specs_get\u0027,"}],"source_content_type":"text/x-python","patch_set":10,"id":"9fdfeff1_2f39a940","line":42,"updated":"2019-01-18 17:48:56.000000000","message":"why do we need a local database to store information about volumes created by cinder?   Cinder has an API for doing this already?","commit_id":"cc65b4004711792a6ec91ee6edc3d4fd0dbd354e"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"565aadd810b6919cd7258a11e8aeee7f1eb19498","unresolved":false,"context_lines":[{"line_number":39,"context_line":"    value \u003d models.Column(models.Text)"},{"line_number":40,"context_line":""},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"class DBPersistence(persistence_base.PersistenceDriverBase):"},{"line_number":43,"context_line":"    GET_METHODS_PER_DB_MODEL \u003d {"},{"line_number":44,"context_line":"        cinder_objs.VolumeType.model: \u0027volume_type_get\u0027,"},{"line_number":45,"context_line":"        cinder_objs.QualityOfServiceSpecs.model: \u0027qos_specs_get\u0027,"}],"source_content_type":"text/x-python","patch_set":10,"id":"9fdfeff1_f59e1053","line":42,"in_reply_to":"9fdfeff1_2f39a940","updated":"2019-01-18 19:39:24.000000000","message":"This is mostly just an interface between our existing sqlaclhemy APIs and the \"storage persistence plugin\" system from cinderlib.\n\nIt mostly uses the sqlalchemy API calls we already have, but it also does real deletes instead of soft-deletes.\n\nThe other included mechanism is just storing things in memory [1].\n\nAnd the Ember-CSI project has a CRD plugin [2][3] allowing it to store volumes, snapshots, and connection information directly on Kubernetes\u0027 etcd, thus avoiding the need to deploy yet another etcd cluster or database.\n\nThere is some old information on metadata plugins on the cinderlib docs [4].\n\n[1]: https://review.openstack.org/#/c/620669/10/cinderlib/persistence/memory.py\n[2]: https://github.com/embercsi/ember-csi/blob/master/ember_csi/cl_crd.py\n[3]: https://github.com/embercsi/ember-csi/blob/master/setup.py#L62-L63\n[4]: https://cinderlib.readthedocs.io/en/v0.2.1/topics/metadata.html","commit_id":"cc65b4004711792a6ec91ee6edc3d4fd0dbd354e"}],"cinderlib/test.txt":[{"author":{"_account_id":20722,"name":"Yikun Jiang","email":"yikunkero@gmail.com","username":"yikunkero"},"change_message_id":"1085fd45e2ace2af263082e014fad39430009f8a","unresolved":false,"context_lines":[{"line_number":1,"context_line":"/home/geguileo/code/stack/cinder/.tox/py27/lib/python2.7/site-packages/psycopg2/__init__.py:144: UserWarning: The psycopg2 wheel package will be renamed from release 2.8; in order to keep installing from binary please use \"pip install psycopg2-binary\" instead. For details see: \u003chttp://initd.org/psycopg/docs/install.html#binary-install-from-pypi\u003e."},{"line_number":2,"context_line":"  \"\"\")"},{"line_number":3,"context_line":"test_attach_detach_volume_on_lvm (test_basic.BackendFunctBasic) ... ERROR"},{"line_number":4,"context_line":"test_attach_detach_volume_via_attachment_on_lvm (test_basic.BackendFunctBasic) ... ERROR"}],"source_content_type":"text/plain","patch_set":14,"id":"9fdfeff1_a579d12f","line":1,"updated":"2019-01-25 08:20:20.000000000","message":"This file should be removed, right?\n\nI guess it\u0027s a temporary file, and you forgot to remove.","commit_id":"16a24aa22875eae2d161c02accc1fe7966023736"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"85b145a55c73870f55608aca04b592fb2fffcba4","unresolved":false,"context_lines":[{"line_number":1,"context_line":"/home/geguileo/code/stack/cinder/.tox/py27/lib/python2.7/site-packages/psycopg2/__init__.py:144: UserWarning: The psycopg2 wheel package will be renamed from release 2.8; in order to keep installing from binary please use \"pip install psycopg2-binary\" instead. For details see: \u003chttp://initd.org/psycopg/docs/install.html#binary-install-from-pypi\u003e."},{"line_number":2,"context_line":"  \"\"\")"},{"line_number":3,"context_line":"test_attach_detach_volume_on_lvm (test_basic.BackendFunctBasic) ... ERROR"},{"line_number":4,"context_line":"test_attach_detach_volume_via_attachment_on_lvm (test_basic.BackendFunctBasic) ... ERROR"}],"source_content_type":"text/plain","patch_set":14,"id":"9fdfeff1_5c33fcf6","line":1,"in_reply_to":"9fdfeff1_a579d12f","updated":"2019-01-28 09:26:46.000000000","message":"You are right, that\u0027s for catching this leftover file.  XD","commit_id":"16a24aa22875eae2d161c02accc1fe7966023736"}],"releasenotes/notes/cinderlib-2e24068d75749314.yaml":[{"author":{"_account_id":20722,"name":"Yikun Jiang","email":"yikunkero@gmail.com","username":"yikunkero"},"change_message_id":"1085fd45e2ace2af263082e014fad39430009f8a","unresolved":false,"context_lines":[{"line_number":4,"context_line":"    Cinder now includes the Cinder Library, under the cinderlib namespace, as"},{"line_number":5,"context_line":"    Tech Preview.  Cinderlib is a Python library providing an object oriented"},{"line_number":6,"context_line":"    abstraction around Cinder\u0027s storage drivers directly without running any of"},{"line_number":7,"context_line":"    the Cinder services or surrounding services, such as KeyStone, MySQL or"},{"line_number":8,"context_line":"    RabbitMQ."}],"source_content_type":"text/x-yaml","patch_set":14,"id":"9fdfeff1_b1c10f83","line":7,"range":{"start_line":7,"start_character":57,"end_line":7,"end_character":65},"updated":"2019-01-25 08:20:20.000000000","message":"nit: Keystone","commit_id":"16a24aa22875eae2d161c02accc1fe7966023736"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"85b145a55c73870f55608aca04b592fb2fffcba4","unresolved":false,"context_lines":[{"line_number":4,"context_line":"    Cinder now includes the Cinder Library, under the cinderlib namespace, as"},{"line_number":5,"context_line":"    Tech Preview.  Cinderlib is a Python library providing an object oriented"},{"line_number":6,"context_line":"    abstraction around Cinder\u0027s storage drivers directly without running any of"},{"line_number":7,"context_line":"    the Cinder services or surrounding services, such as KeyStone, MySQL or"},{"line_number":8,"context_line":"    RabbitMQ."}],"source_content_type":"text/x-yaml","patch_set":14,"id":"9fdfeff1_3c7dd87e","line":7,"range":{"start_line":7,"start_character":57,"end_line":7,"end_character":65},"in_reply_to":"9fdfeff1_b1c10f83","updated":"2019-01-28 09:26:46.000000000","message":"Done","commit_id":"16a24aa22875eae2d161c02accc1fe7966023736"}],"setup.cfg":[{"author":{"_account_id":20722,"name":"Yikun Jiang","email":"yikunkero@gmail.com","username":"yikunkero"},"change_message_id":"1085fd45e2ace2af263082e014fad39430009f8a","unresolved":false,"context_lines":[{"line_number":31,"context_line":"    etc/cinder/rootwrap.d \u003d etc/cinder/rootwrap.d/*"},{"line_number":32,"context_line":"packages \u003d"},{"line_number":33,"context_line":"    cinder"},{"line_number":34,"context_line":"    cinderlib"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"[entry_points]"},{"line_number":37,"context_line":"cinder.scheduler.filters \u003d"}],"source_content_type":"text/x-ttcn-cfg","patch_set":14,"id":"9fdfeff1_76ef1db0","line":34,"updated":"2019-01-25 08:20:20.000000000","message":"Note for myself: that means it will generate a separate cinderlib folder, but the cinderlib is still included and released by cinder package.","commit_id":"16a24aa22875eae2d161c02accc1fe7966023736"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"85b145a55c73870f55608aca04b592fb2fffcba4","unresolved":false,"context_lines":[{"line_number":31,"context_line":"    etc/cinder/rootwrap.d \u003d etc/cinder/rootwrap.d/*"},{"line_number":32,"context_line":"packages \u003d"},{"line_number":33,"context_line":"    cinder"},{"line_number":34,"context_line":"    cinderlib"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"[entry_points]"},{"line_number":37,"context_line":"cinder.scheduler.filters \u003d"}],"source_content_type":"text/x-ttcn-cfg","patch_set":14,"id":"9fdfeff1_5c48dc5a","line":34,"in_reply_to":"9fdfeff1_76ef1db0","updated":"2019-01-28 09:26:46.000000000","message":"This is convenient for distro packages, as there could be a cinder RPM that doesn\u0027t include the cinderlib code, and a cinderlib package that only has the cinderlib code and depends on the cinder RPM.\n\nThat way the Cinder project is clearly differentiated from the cinderlib Tech Preview and there is less confusion.","commit_id":"16a24aa22875eae2d161c02accc1fe7966023736"}],"tox.ini":[{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"f935955c4d62f23a02d4fc7cebd91cb1b1a29b4e","unresolved":false,"context_lines":[{"line_number":22,"context_line":"# the concurrency\u003d\u003cn\u003e option."},{"line_number":23,"context_line":"# call ie: \u0027tox -epy27 -- --concurrency\u003d4\u0027"},{"line_number":24,"context_line":"# Run cinderlib tests first so people looking at the end of the result don\u0027t"},{"line_number":25,"context_line":"# mistake cinderlib summary and slowest tests with cinder\u0027s."},{"line_number":26,"context_line":"commands \u003d"},{"line_number":27,"context_line":"  find . -ignore_readdir_race -type f -name \"*.pyc\" -delete"},{"line_number":28,"context_line":"  stestr --test-path\u003d./cinderlib/tests/unit run {posargs}"}],"source_content_type":"text/x-properties","patch_set":19,"id":"9fdfeff1_1f32afa8","line":25,"updated":"2019-02-05 23:27:54.000000000","message":"I think you need to add\n\n    ignore_errors \u003d True\n\nhere because the default behavior of tox is to stop processing commands when it encounters an error; otherwise if the cinderlib tests fail, the cinder tests won\u0027t be run at all","commit_id":"e753a95875ea3398701b90adc7ec28c23c08dc5a"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"30bebee3efa138bf4864a6748ee48d9f77e1947a","unresolved":false,"context_lines":[{"line_number":22,"context_line":"# the concurrency\u003d\u003cn\u003e option."},{"line_number":23,"context_line":"# call ie: \u0027tox -epy27 -- --concurrency\u003d4\u0027"},{"line_number":24,"context_line":"# Run cinderlib tests first so people looking at the end of the result don\u0027t"},{"line_number":25,"context_line":"# mistake cinderlib summary and slowest tests with cinder\u0027s."},{"line_number":26,"context_line":"commands \u003d"},{"line_number":27,"context_line":"  find . -ignore_readdir_race -type f -name \"*.pyc\" -delete"},{"line_number":28,"context_line":"  stestr --test-path\u003d./cinderlib/tests/unit run {posargs}"}],"source_content_type":"text/x-properties","patch_set":19,"id":"9fdfeff1_163c35df","line":25,"in_reply_to":"9fdfeff1_1f32afa8","updated":"2019-02-14 18:26:46.000000000","message":"But do we want to run the cinder unit tests, that take a long time, if we already know we are going to fail because there are cinderlib unit tests that are failing?\n\nIn a way makes sense... It\u0027s like running tempest even if unit tests fail, or not stopping at the first error... So I\u0027ll change it.","commit_id":"e753a95875ea3398701b90adc7ec28c23c08dc5a"}]}
