)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":10628,"name":"Peter Wang","email":"peter.wang13@emc.com","username":"peter_wang"},"change_message_id":"1aec2d3f0fb9f9e7dc34816d9388905a16c3ffbf","unresolved":false,"context_lines":[{"line_number":14,"context_line":"SolidFire.  The primary purpose is to provide an experimental"},{"line_number":15,"context_line":"implementation that can be tested and used as a reference."},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"To enable this feature:"},{"line_number":18,"context_line":"The SolidFire driver currently only supports replicating to"},{"line_number":19,"context_line":"managed backends.  In other words, another SolidFire cluster"},{"line_number":20,"context_line":"that\u0027s configured in your OpenStack deployment (this can be"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"da20952f_a85315e1","line":17,"updated":"2015-09-07 01:17:39.000000000","message":"If only supports managed devices; according review :https://review.openstack.org/#/c/200269/20/doc/source/devref/replication.rst,cm\n\nthe config should be like this:\n\n[sf1]\n...\nmanaged_replication_target\u003dTrue\nreplication_devices\u003dvolume_backend_name-1,volume_backend_name-2..","commit_id":"29de41e023fe623a202dd6668443ccd8f8b5d887"},{"author":{"_account_id":10628,"name":"Peter Wang","email":"peter.wang13@emc.com","username":"peter_wang"},"change_message_id":"1aec2d3f0fb9f9e7dc34816d9388905a16c3ffbf","unresolved":false,"context_lines":[{"line_number":30,"context_line":"san_ip \u003d 11.0.0.2"},{"line_number":31,"context_line":"volume_driver \u003d cinder.volume.drivers.solidfire.SolidFireDriver"},{"line_number":32,"context_line":"volume_backend_name \u003d sf1"},{"line_number":33,"context_line":"secondary_backend \u003d devbox@sf2#sf2"},{"line_number":34,"context_line":"replication_devices \u003d {\u0027mvip\u0027\u003d\u002711.0.0.9\u0027 \u0027login\u0027\u003d\u0027admin\u0027\\"},{"line_number":35,"context_line":"                       \u0027passwd\u0027\u003d\u0027admin\u0027}"},{"line_number":36,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"da20952f_68609da5","line":33,"updated":"2015-09-07 01:17:39.000000000","message":"Format of this section is for unmanaged devices?\n\nTo tell the truth, i am a little confused, about this review and https://review.openstack.org/#/c/200269/20/doc/source/devref/replication.rst,cm\n\n\nThanks\nPeter","commit_id":"29de41e023fe623a202dd6668443ccd8f8b5d887"}],"cinder/tests/unit/test_solidfire.py":[{"author":{"_account_id":2243,"name":"John Griffith","email":"john.griffith8@gmail.com","username":"john-griffith"},"change_message_id":"a8a5e51f9abff5848e0821e6f81d2d900aa560fb","unresolved":false,"context_lines":[{"line_number":767,"context_line":"        model_update \u003d sfv.manage_existing(testvol, external_ref)"},{"line_number":768,"context_line":"        self.assertIsNotNone(model_update)"},{"line_number":769,"context_line":"        self.assertIsNone(model_update.get(\u0027provider_geometry\u0027, None))"},{"line_number":770,"context_line":""},{"line_number":771,"context_line":"    @mock.patch.object(solidfire.SolidFireDriver, \u0027_issue_api_request\u0027)"},{"line_number":772,"context_line":"    @mock.patch.object(solidfire.SolidFireDriver, \u0027_create_template_account\u0027)"},{"line_number":773,"context_line":"    def test_create_volume_for_migration(self,"}],"source_content_type":"text/x-python","patch_set":1,"id":"da20952f_97f0f668","side":"PARENT","line":770,"updated":"2015-08-29 00:11:46.000000000","message":"Note: I discovered that the test was completely bogus because of the way I implemented the mock side-effect.  My change to the _do_create_volume in solidfire exposed this, but the bigger issue is this test wasn\u0027t actually testing the intended methods correctly.\n\nI\u0027m working on a bug and fix for this to replace it, but given it\u0027s bogus as it is currently best to remove it and rewrite it with a proper test.","commit_id":"25d90467b176463b609834ceb5851920896c6975"}],"cinder/volume/drivers/solidfire.py":[{"author":{"_account_id":17718,"name":"Lallana","email":"gaozhiqiang2@huawei.com","username":"Lallana"},"change_message_id":"6491f81de4f07581391794b8b53ae1746a84d370","unresolved":false,"context_lines":[{"line_number":77,"context_line":""},{"line_number":78,"context_line":"    cfg.BoolOpt(\u0027sf_enable_volume_mapping\u0027,"},{"line_number":79,"context_line":"                default\u003dTrue,"},{"line_number":80,"context_line":"                help\u003d\u0027Create an internal mapping of volume IDs and account.  \u0027"},{"line_number":81,"context_line":"                     \u0027Optimizes lookups and performance at the expense of \u0027"},{"line_number":82,"context_line":"                     \u0027memory, very large deployments may want to consider \u0027"},{"line_number":83,"context_line":"                     \u0027setting to False.\u0027),"}],"source_content_type":"text/x-python","patch_set":1,"id":"da20952f_5e830e03","line":80,"updated":"2015-09-07 07:42:56.000000000","message":"Should have only 1 space between sentences.","commit_id":"29de41e023fe623a202dd6668443ccd8f8b5d887"},{"author":{"_account_id":10628,"name":"Peter Wang","email":"peter.wang13@emc.com","username":"peter_wang"},"change_message_id":"1aec2d3f0fb9f9e7dc34816d9388905a16c3ffbf","unresolved":false,"context_lines":[{"line_number":87,"context_line":"               min\u003d1, max\u003d65535,"},{"line_number":88,"context_line":"               help\u003d\u0027SolidFire API port. Useful if the device api is behind \u0027"},{"line_number":89,"context_line":"                    \u0027a proxy on a different port.\u0027),"},{"line_number":90,"context_line":"    cfg.StrOpt(\u0027secondary_backend\u0027,"},{"line_number":91,"context_line":"               default\u003dNone,"},{"line_number":92,"context_line":"               help\u003d\u0027Secondary backend to use for replication.  Note that \u0027"},{"line_number":93,"context_line":"                    \u0027this must be a configured cinder-volume backend and \u0027"}],"source_content_type":"text/x-python","patch_set":1,"id":"da20952f_c8b7691f","line":90,"updated":"2015-09-07 01:17:39.000000000","message":"I think this is a little inconsistent with https://review.openstack.org/#/c/200269/20/cinder/volume/driver.py,cm\n\nwhy not use \u0027replication_devices\u0027? do I miss something?\n\nThanks\nPeter","commit_id":"29de41e023fe623a202dd6668443ccd8f8b5d887"},{"author":{"_account_id":16917,"name":"Alex O\u0027Rourke","email":"alex.orourke@hpe.com","username":"aorourke"},"change_message_id":"b0d6e6795c488fd895b19bf6e8175cf737a034ba","unresolved":false,"context_lines":[{"line_number":87,"context_line":"               min\u003d1, max\u003d65535,"},{"line_number":88,"context_line":"               help\u003d\u0027SolidFire API port. Useful if the device api is behind \u0027"},{"line_number":89,"context_line":"                    \u0027a proxy on a different port.\u0027),"},{"line_number":90,"context_line":"    cfg.StrOpt(\u0027secondary_backend\u0027,"},{"line_number":91,"context_line":"               default\u003dNone,"},{"line_number":92,"context_line":"               help\u003d\u0027Secondary backend to use for replication.  Note that \u0027"},{"line_number":93,"context_line":"                    \u0027this must be a configured cinder-volume backend and \u0027"}],"source_content_type":"text/x-python","patch_set":1,"id":"da20952f_be0aef1e","line":90,"in_reply_to":"da20952f_c8b7691f","updated":"2015-09-09 22:44:43.000000000","message":"replication_devices as k,v pairs are only intended for unmanaged targets. With managed targets, replication_devices is intended to be the volume_backend_name(s) of the target(s).","commit_id":"29de41e023fe623a202dd6668443ccd8f8b5d887"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"5eea51896a5343e4af98fe7aa37f70249dfc3c72","unresolved":false,"context_lines":[{"line_number":92,"context_line":"               help\u003d\u0027Secondary backend to use for replication.  Note that \u0027"},{"line_number":93,"context_line":"                    \u0027this must be a configured cinder-volume backend and \u0027"},{"line_number":94,"context_line":"                    \u0027takes the complete host form: \u0027"},{"line_number":95,"context_line":"                    \u0027\u003chostname\u003e@\u003cbackend-name\u003e#\u003cpool-name\u003e\u0027), ]"},{"line_number":96,"context_line":""},{"line_number":97,"context_line":""},{"line_number":98,"context_line":"CONF \u003d cfg.CONF"}],"source_content_type":"text/x-python","patch_set":1,"id":"da20952f_5d6b5df1","line":95,"updated":"2015-08-29 02:28:54.000000000","message":"Should this be added in driver.py so others can use it as well?  Seems like a general option.","commit_id":"29de41e023fe623a202dd6668443ccd8f8b5d887"},{"author":{"_account_id":16917,"name":"Alex O\u0027Rourke","email":"alex.orourke@hpe.com","username":"aorourke"},"change_message_id":"e3c37a15436622cc106987cb113153bc0b38a447","unresolved":false,"context_lines":[{"line_number":229,"context_line":""},{"line_number":230,"context_line":"            self.secondary_backend \u003d self.configuration.secondary_backend"},{"line_number":231,"context_line":"            self.cluster_pairs \u003d []"},{"line_number":232,"context_line":"            config_pairs \u003d self._parse_config_settings()"},{"line_number":233,"context_line":"            active_pairs \u003d self._get_cluster_pairs()"},{"line_number":234,"context_line":"            for c in config_pairs:"},{"line_number":235,"context_line":"                sf_pair \u003d next((p for p in active_pairs if p.get(\u0027mvip\u0027, None)"}],"source_content_type":"text/x-python","patch_set":1,"id":"da20952f_78711877","line":232,"updated":"2015-09-01 16:33:19.000000000","message":"I thought you would only have replication devices formatted like \"{\u0027key1\u0027\u003d\u0027val1\u0027 \u0027key2\u0027\u003d\u0027val2\u0027 ...}\" if it was unmanaed? Otherwise, if it was managed, it would look like \"volume_backend_name-1,volume_backend_name-2...\" ?","commit_id":"29de41e023fe623a202dd6668443ccd8f8b5d887"},{"author":{"_account_id":2243,"name":"John Griffith","email":"john.griffith8@gmail.com","username":"john-griffith"},"change_message_id":"b8641c23f6c77191a189d9de82eb2cd3e76287fb","unresolved":false,"context_lines":[{"line_number":229,"context_line":""},{"line_number":230,"context_line":"            self.secondary_backend \u003d self.configuration.secondary_backend"},{"line_number":231,"context_line":"            self.cluster_pairs \u003d []"},{"line_number":232,"context_line":"            config_pairs \u003d self._parse_config_settings()"},{"line_number":233,"context_line":"            active_pairs \u003d self._get_cluster_pairs()"},{"line_number":234,"context_line":"            for c in config_pairs:"},{"line_number":235,"context_line":"                sf_pair \u003d next((p for p in active_pairs if p.get(\u0027mvip\u0027, None)"}],"source_content_type":"text/x-python","patch_set":1,"id":"7a740942_f7d2205b","line":232,"in_reply_to":"da20952f_78711877","updated":"2015-12-09 07:10:04.000000000","message":"vendor unique keys are always allowed if needed.  The only rule here was that there are two standardized keys:\n1. target_device_id\n2. managed_backend_name\n\nrefer to the devref here: https://github.com/openstack/cinder/blob/master/doc/source/devref/replication.rst","commit_id":"29de41e023fe623a202dd6668443ccd8f8b5d887"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"5eea51896a5343e4af98fe7aa37f70249dfc3c72","unresolved":false,"context_lines":[{"line_number":239,"context_line":"                    remote_cluster[\u0027mvip\u0027] \u003d c.get(\u0027mvip\u0027, None)"},{"line_number":240,"context_line":"                    remote_cluster[\u0027login\u0027] \u003d c.get(\u0027login\u0027, None)"},{"line_number":241,"context_line":"                    remote_cluster[\u0027passwd\u0027] \u003d c.get(\u0027password\u0027, None)"},{"line_number":242,"context_line":"                    # pairing_id \u003d self._create_cluster_pairing(remote_cluster)"},{"line_number":243,"context_line":"                    pairing_id \u003d self._create_cluster_pairing("},{"line_number":244,"context_line":"                        self._build_endpoint_info(**remote_cluster))"},{"line_number":245,"context_line":"                    # NOTE(jdg): annoying to iterate through again like this"}],"source_content_type":"text/x-python","patch_set":1,"id":"da20952f_dd568d29","line":242,"updated":"2015-08-29 02:28:54.000000000","message":"Please remove commented out code.","commit_id":"29de41e023fe623a202dd6668443ccd8f8b5d887"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"5eea51896a5343e4af98fe7aa37f70249dfc3c72","unresolved":false,"context_lines":[{"line_number":678,"context_line":"            # should have this by stats update, but just incase we"},{"line_number":679,"context_line":"            # want to catch it here"},{"line_number":680,"context_line":"            if len(self.cluster_pairs) \u003c 1:"},{"line_number":681,"context_line":"                \"error\""},{"line_number":682,"context_line":"            else:"},{"line_number":683,"context_line":"                rep_opts[\u0027targets\u0027] \u003d specs.get("},{"line_number":684,"context_line":"                    \u0027solidfire:replication_targets\u0027, self.cluster_pairs[0])"}],"source_content_type":"text/x-python","patch_set":1,"id":"da20952f_7d150147","line":681,"updated":"2015-08-29 02:28:54.000000000","message":"Did you forget to log an error message?","commit_id":"29de41e023fe623a202dd6668443ccd8f8b5d887"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"5eea51896a5343e4af98fe7aa37f70249dfc3c72","unresolved":false,"context_lines":[{"line_number":1134,"context_line":"                          \"delete_volume operation!\"), volume[\u0027id\u0027])"},{"line_number":1135,"context_line":""},{"line_number":1136,"context_line":"    def delete_volume(self, volume):"},{"line_number":1137,"context_line":"        \"\"\"Delete SolidFire Volume from device.\"\"\""},{"line_number":1138,"context_line":"        if volume[\u0027provider_id\u0027]:"},{"line_number":1139,"context_line":"            sf_volid, sf_acctid \u003d ("},{"line_number":1140,"context_line":"                self._parse_provider_id(volume[\u0027provider_id\u0027]))"}],"source_content_type":"text/x-python","patch_set":1,"id":"da20952f_8023caa6","line":1137,"updated":"2015-08-29 02:28:54.000000000","message":"Is this change needed for replication?","commit_id":"29de41e023fe623a202dd6668443ccd8f8b5d887"}],"cinder/volume/manager.py":[{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"5eea51896a5343e4af98fe7aa37f70249dfc3c72","unresolved":false,"context_lines":[{"line_number":1558,"context_line":"                    # that we have in the targets update call"},{"line_number":1559,"context_line":""},{"line_number":1560,"context_line":"                    replication_updates \u003d ("},{"line_number":1561,"context_line":"                        self.driver.get_replication_updates(context))"},{"line_number":1562,"context_line":"                    for update in replication_updates:"},{"line_number":1563,"context_line":"                        pass"},{"line_number":1564,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"da20952f_dde3eda2","line":1561,"updated":"2015-08-29 02:28:54.000000000","message":"Looks like this patch should be dependent on https://review.openstack.org/#/c/218348/ , but that one will be merged soon.  So probably just wait and rebase.","commit_id":"29de41e023fe623a202dd6668443ccd8f8b5d887"}]}
