)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":16708,"name":"Kendall Nelson","display_name":"Kendall (diablo_rojo)","email":"kennelson11@gmail.com","username":"kjnelson"},"change_message_id":"a965a9685b19ab5f32ec55377098e1da2be6a22c","unresolved":false,"context_lines":[{"line_number":5,"context_line":"CommitDate: 2016-08-17 09:48:47 -0400"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Add replication failback in Kaminario K2 drivers"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Change-Id: I664516ab31f9d33e4d14cd8615a1e0da4dba15b6"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"3ac371cc_15c99759","line":8,"updated":"2016-08-17 15:17:23.000000000","message":"This should probably have a docImpact Tag and you should have something in the body of this commit talking about the change.","commit_id":"6bc72d730b2406092e4c171809333dd9c2d52334"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"52e4abbfed9044bb630d4c38fc6ca83058df6f51","unresolved":false,"context_lines":[{"line_number":22,"context_line":"5)Change state of \"failed-over\" sessions to \"in-sync\"."},{"line_number":23,"context_line":"  This will reverse the replication direction from primary to"},{"line_number":24,"context_line":"  secondary."},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"DocImpact"},{"line_number":27,"context_line":"Co-Authored-By: Nikesh Mahalka\u003cNikesh.Mahalka.ctr@kaminario.com\u003e"},{"line_number":28,"context_line":"Co-Authored-By: Sreedhar Varma\u003cSreedhar.Varma.ctr@kaminario.com\u003e"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"1ac06dbe_737ce772","line":25,"updated":"2016-08-20 00:17:38.000000000","message":"Can you open a bug and add it here to track this?","commit_id":"6747fb8aa3e51855240f1ab33092fb18dfc7707a"},{"author":{"_account_id":16258,"name":"nikesh","email":"nike.niec@gmail.com","username":"nikem"},"change_message_id":"8149440d122c2e9cb92ec29aa79876c675b845ee","unresolved":false,"context_lines":[{"line_number":22,"context_line":"5)Change state of \"failed-over\" sessions to \"in-sync\"."},{"line_number":23,"context_line":"  This will reverse the replication direction from primary to"},{"line_number":24,"context_line":"  secondary."},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"DocImpact"},{"line_number":27,"context_line":"Co-Authored-By: Nikesh Mahalka\u003cNikesh.Mahalka.ctr@kaminario.com\u003e"},{"line_number":28,"context_line":"Co-Authored-By: Sreedhar Varma\u003cSreedhar.Varma.ctr@kaminario.com\u003e"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"1ac06dbe_4dc93f78","line":25,"in_reply_to":"1ac06dbe_737ce772","updated":"2016-08-20 04:42:23.000000000","message":"Done","commit_id":"6747fb8aa3e51855240f1ab33092fb18dfc7707a"}],"cinder/tests/unit/volume/drivers/test_kaminario.py":[{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"75c80d1da24cdecef44ab67db79df9d07567d0f9","unresolved":false,"context_lines":[{"line_number":394,"context_line":"        # different backend ip"},{"line_number":395,"context_line":"        self.driver.configuration.san_ip \u003d \u002710.0.0.2\u0027"},{"line_number":396,"context_line":"        self.driver.client.search().hits[0].state \u003d \u0027in_sync\u0027"},{"line_number":397,"context_line":"        self.driver._check_for_status \u003d mock.Mock()"},{"line_number":398,"context_line":"        backend_ip, res_volumes \u003d self.driver.failover_host(None, volumes)"},{"line_number":399,"context_line":"        self.assertEqual(\u002710.0.0.2\u0027, backend_ip)"},{"line_number":400,"context_line":"        status \u003d res_volumes[0][\u0027updates\u0027][\u0027replication_status\u0027]"}],"source_content_type":"text/x-python","patch_set":9,"id":"1ac06dbe_74a63b11","line":397,"updated":"2016-08-22 17:10:52.000000000","message":"Use @mock.patch.object to mock the method.","commit_id":"10ade708c58348269dce859efafb0229f975c42b"},{"author":{"_account_id":14732,"name":"lakshman","email":"Lakshmi.Narayana.ctr@kaminario.com","username":"lakshman"},"change_message_id":"29ca1587d1db2ee05e767f89b908ffeaf4a00503","unresolved":false,"context_lines":[{"line_number":394,"context_line":"        # different backend ip"},{"line_number":395,"context_line":"        self.driver.configuration.san_ip \u003d \u002710.0.0.2\u0027"},{"line_number":396,"context_line":"        self.driver.client.search().hits[0].state \u003d \u0027in_sync\u0027"},{"line_number":397,"context_line":"        self.driver._check_for_status \u003d mock.Mock()"},{"line_number":398,"context_line":"        backend_ip, res_volumes \u003d self.driver.failover_host(None, volumes)"},{"line_number":399,"context_line":"        self.assertEqual(\u002710.0.0.2\u0027, backend_ip)"},{"line_number":400,"context_line":"        status \u003d res_volumes[0][\u0027updates\u0027][\u0027replication_status\u0027]"}],"source_content_type":"text/x-python","patch_set":9,"id":"1ac06dbe_04afbde2","line":397,"in_reply_to":"1ac06dbe_74a63b11","updated":"2016-08-23 04:53:38.000000000","message":"Done","commit_id":"10ade708c58348269dce859efafb0229f975c42b"}],"cinder/volume/drivers/kaminario/kaminario_common.py":[{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"52e4abbfed9044bb630d4c38fc6ca83058df6f51","unresolved":false,"context_lines":[{"line_number":391,"context_line":"            for v in volumes:"},{"line_number":392,"context_line":"                vol_name \u003d self.get_volume_name(v[\u0027id\u0027])"},{"line_number":393,"context_line":"                vol \u003d self.client.search(\"volumes\", name\u003dvol_name)"},{"line_number":394,"context_line":"                if v.replication_status !\u003d \u0027failed-over\u0027 and vol.total:"},{"line_number":395,"context_line":"                    status \u003d \u0027available\u0027"},{"line_number":396,"context_line":"                    if v.volume_attachment:"},{"line_number":397,"context_line":"                        map_rs \u003d self.client.search(\"mappings\","}],"source_content_type":"text/x-python","patch_set":3,"id":"1ac06dbe_d90cd596","line":394,"updated":"2016-08-20 00:17:38.000000000","message":"ReplicationStatus","commit_id":"6747fb8aa3e51855240f1ab33092fb18dfc7707a"},{"author":{"_account_id":16258,"name":"nikesh","email":"nike.niec@gmail.com","username":"nikem"},"change_message_id":"8149440d122c2e9cb92ec29aa79876c675b845ee","unresolved":false,"context_lines":[{"line_number":391,"context_line":"            for v in volumes:"},{"line_number":392,"context_line":"                vol_name \u003d self.get_volume_name(v[\u0027id\u0027])"},{"line_number":393,"context_line":"                vol \u003d self.client.search(\"volumes\", name\u003dvol_name)"},{"line_number":394,"context_line":"                if v.replication_status !\u003d \u0027failed-over\u0027 and vol.total:"},{"line_number":395,"context_line":"                    status \u003d \u0027available\u0027"},{"line_number":396,"context_line":"                    if v.volume_attachment:"},{"line_number":397,"context_line":"                        map_rs \u003d self.client.search(\"mappings\","}],"source_content_type":"text/x-python","patch_set":3,"id":"1ac06dbe_6dbfdbd0","line":394,"in_reply_to":"1ac06dbe_d90cd596","updated":"2016-08-20 04:42:23.000000000","message":"Done","commit_id":"6747fb8aa3e51855240f1ab33092fb18dfc7707a"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"52e4abbfed9044bb630d4c38fc6ca83058df6f51","unresolved":false,"context_lines":[{"line_number":1121,"context_line":"    def _add_replication(self, volume):"},{"line_number":1122,"context_line":"        vg_name \u003d self.get_volume_group_name(volume.id)"},{"line_number":1123,"context_line":"        vol_name \u003d self.get_volume_name(volume.id)"},{"line_number":1124,"context_line":"        if volume.replication_status \u003d\u003d \u0027failed-over\u0027:"},{"line_number":1125,"context_line":"            self._create_failover_volume_replica(volume, vg_name, vol_name)"},{"line_number":1126,"context_line":"        else:"},{"line_number":1127,"context_line":"            LOG.debug(\"Searching volume group with name: %(name)s\","}],"source_content_type":"text/x-python","patch_set":3,"id":"1ac06dbe_391ec9ba","line":1124,"updated":"2016-08-20 00:17:38.000000000","message":"Same","commit_id":"6747fb8aa3e51855240f1ab33092fb18dfc7707a"},{"author":{"_account_id":16258,"name":"nikesh","email":"nike.niec@gmail.com","username":"nikem"},"change_message_id":"8149440d122c2e9cb92ec29aa79876c675b845ee","unresolved":false,"context_lines":[{"line_number":1121,"context_line":"    def _add_replication(self, volume):"},{"line_number":1122,"context_line":"        vg_name \u003d self.get_volume_group_name(volume.id)"},{"line_number":1123,"context_line":"        vol_name \u003d self.get_volume_name(volume.id)"},{"line_number":1124,"context_line":"        if volume.replication_status \u003d\u003d \u0027failed-over\u0027:"},{"line_number":1125,"context_line":"            self._create_failover_volume_replica(volume, vg_name, vol_name)"},{"line_number":1126,"context_line":"        else:"},{"line_number":1127,"context_line":"            LOG.debug(\"Searching volume group with name: %(name)s\","}],"source_content_type":"text/x-python","patch_set":3,"id":"1ac06dbe_0dcf4780","line":1124,"in_reply_to":"1ac06dbe_391ec9ba","updated":"2016-08-20 04:42:23.000000000","message":"Done","commit_id":"6747fb8aa3e51855240f1ab33092fb18dfc7707a"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"52e4abbfed9044bb630d4c38fc6ca83058df6f51","unresolved":false,"context_lines":[{"line_number":1135,"context_line":"    def _delete_replication(self, volume):"},{"line_number":1136,"context_line":"        vg_name \u003d self.get_volume_group_name(volume.id)"},{"line_number":1137,"context_line":"        vol_name \u003d self.get_volume_name(volume.id)"},{"line_number":1138,"context_line":"        if volume.replication_status \u003d\u003d \u0027failed-over\u0027:"},{"line_number":1139,"context_line":"            self._delete_failover_volume_replica(volume, vg_name, vol_name)"},{"line_number":1140,"context_line":"        else:"},{"line_number":1141,"context_line":"            self._delete_volume_replica(volume, vg_name, vol_name)"}],"source_content_type":"text/x-python","patch_set":3,"id":"1ac06dbe_9979bdff","line":1138,"updated":"2016-08-20 00:17:38.000000000","message":"Same","commit_id":"6747fb8aa3e51855240f1ab33092fb18dfc7707a"},{"author":{"_account_id":16258,"name":"nikesh","email":"nike.niec@gmail.com","username":"nikem"},"change_message_id":"8149440d122c2e9cb92ec29aa79876c675b845ee","unresolved":false,"context_lines":[{"line_number":1135,"context_line":"    def _delete_replication(self, volume):"},{"line_number":1136,"context_line":"        vg_name \u003d self.get_volume_group_name(volume.id)"},{"line_number":1137,"context_line":"        vol_name \u003d self.get_volume_name(volume.id)"},{"line_number":1138,"context_line":"        if volume.replication_status \u003d\u003d \u0027failed-over\u0027:"},{"line_number":1139,"context_line":"            self._delete_failover_volume_replica(volume, vg_name, vol_name)"},{"line_number":1140,"context_line":"        else:"},{"line_number":1141,"context_line":"            self._delete_volume_replica(volume, vg_name, vol_name)"}],"source_content_type":"text/x-python","patch_set":3,"id":"1ac06dbe_edcbcb70","line":1138,"in_reply_to":"1ac06dbe_9979bdff","updated":"2016-08-20 04:42:23.000000000","message":"Done","commit_id":"6747fb8aa3e51855240f1ab33092fb18dfc7707a"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"75c80d1da24cdecef44ab67db79df9d07567d0f9","unresolved":false,"context_lines":[{"line_number":1107,"context_line":"                return True"},{"line_number":1108,"context_line":"        elif not new_rep_type and not old_rep_type:"},{"line_number":1109,"context_line":"            msg \u003d \"Use \u0027--migration-policy on-demand\u0027 to change \u0027dedup \"\\"},{"line_number":1110,"context_line":"                  \"without replication\u0027\u003c-\u003e\u0027nodedup without replication\u0027.\""},{"line_number":1111,"context_line":"            if vol_rs.total and vmap:"},{"line_number":1112,"context_line":"                msg \u003d \"Unattach volume and {0}\".format(msg)"},{"line_number":1113,"context_line":"            LOG.debug(msg)"}],"source_content_type":"text/x-python","patch_set":9,"id":"1ac06dbe_943657e5","line":1110,"updated":"2016-08-22 17:10:52.000000000","message":"Use () instead \\","commit_id":"10ade708c58348269dce859efafb0229f975c42b"},{"author":{"_account_id":14732,"name":"lakshman","email":"Lakshmi.Narayana.ctr@kaminario.com","username":"lakshman"},"change_message_id":"29ca1587d1db2ee05e767f89b908ffeaf4a00503","unresolved":false,"context_lines":[{"line_number":1107,"context_line":"                return True"},{"line_number":1108,"context_line":"        elif not new_rep_type and not old_rep_type:"},{"line_number":1109,"context_line":"            msg \u003d \"Use \u0027--migration-policy on-demand\u0027 to change \u0027dedup \"\\"},{"line_number":1110,"context_line":"                  \"without replication\u0027\u003c-\u003e\u0027nodedup without replication\u0027.\""},{"line_number":1111,"context_line":"            if vol_rs.total and vmap:"},{"line_number":1112,"context_line":"                msg \u003d \"Unattach volume and {0}\".format(msg)"},{"line_number":1113,"context_line":"            LOG.debug(msg)"}],"source_content_type":"text/x-python","patch_set":9,"id":"1ac06dbe_64b8312b","line":1110,"in_reply_to":"1ac06dbe_943657e5","updated":"2016-08-23 04:53:38.000000000","message":"Done","commit_id":"10ade708c58348269dce859efafb0229f975c42b"}],"cinder/volume/drivers/kaminario/kaminario_fc.py":[{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"52e4abbfed9044bb630d4c38fc6ca83058df6f51","unresolved":false,"context_lines":[{"line_number":62,"context_line":"            raise exception.KaminarioCinderDriverException(reason\u003dmsg)"},{"line_number":63,"context_line":"        # To support replication failback"},{"line_number":64,"context_line":"        temp_client \u003d None"},{"line_number":65,"context_line":"        if volume.replication_status \u003d\u003d \u0027failed-over\u0027:"},{"line_number":66,"context_line":"            temp_client \u003d self.client"},{"line_number":67,"context_line":"            self.client \u003d self.target"},{"line_number":68,"context_line":"        # Get target wwpns."}],"source_content_type":"text/x-python","patch_set":3,"id":"1ac06dbe_b93ab934","line":65,"updated":"2016-08-20 00:17:38.000000000","message":"Use ReplicationStatus in fields.py.","commit_id":"6747fb8aa3e51855240f1ab33092fb18dfc7707a"},{"author":{"_account_id":16258,"name":"nikesh","email":"nike.niec@gmail.com","username":"nikem"},"change_message_id":"8149440d122c2e9cb92ec29aa79876c675b845ee","unresolved":false,"context_lines":[{"line_number":62,"context_line":"            raise exception.KaminarioCinderDriverException(reason\u003dmsg)"},{"line_number":63,"context_line":"        # To support replication failback"},{"line_number":64,"context_line":"        temp_client \u003d None"},{"line_number":65,"context_line":"        if volume.replication_status \u003d\u003d \u0027failed-over\u0027:"},{"line_number":66,"context_line":"            temp_client \u003d self.client"},{"line_number":67,"context_line":"            self.client \u003d self.target"},{"line_number":68,"context_line":"        # Get target wwpns."}],"source_content_type":"text/x-python","patch_set":3,"id":"1ac06dbe_cd26cf67","line":65,"in_reply_to":"1ac06dbe_b93ab934","updated":"2016-08-20 04:42:23.000000000","message":"Done","commit_id":"6747fb8aa3e51855240f1ab33092fb18dfc7707a"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"52e4abbfed9044bb630d4c38fc6ca83058df6f51","unresolved":false,"context_lines":[{"line_number":88,"context_line":"    def terminate_connection(self, volume, connector, **kwargs):"},{"line_number":89,"context_line":"        # To support replication failback"},{"line_number":90,"context_line":"        temp_client \u003d None"},{"line_number":91,"context_line":"        if volume.replication_status \u003d\u003d \u0027failed-over\u0027:"},{"line_number":92,"context_line":"            temp_client \u003d self.client"},{"line_number":93,"context_line":"            self.client \u003d self.target"},{"line_number":94,"context_line":"        super(KaminarioFCDriver, self).terminate_connection(volume, connector)"}],"source_content_type":"text/x-python","patch_set":3,"id":"1ac06dbe_f93c3131","line":91,"updated":"2016-08-20 00:17:38.000000000","message":"Same","commit_id":"6747fb8aa3e51855240f1ab33092fb18dfc7707a"},{"author":{"_account_id":16258,"name":"nikesh","email":"nike.niec@gmail.com","username":"nikem"},"change_message_id":"8149440d122c2e9cb92ec29aa79876c675b845ee","unresolved":false,"context_lines":[{"line_number":88,"context_line":"    def terminate_connection(self, volume, connector, **kwargs):"},{"line_number":89,"context_line":"        # To support replication failback"},{"line_number":90,"context_line":"        temp_client \u003d None"},{"line_number":91,"context_line":"        if volume.replication_status \u003d\u003d \u0027failed-over\u0027:"},{"line_number":92,"context_line":"            temp_client \u003d self.client"},{"line_number":93,"context_line":"            self.client \u003d self.target"},{"line_number":94,"context_line":"        super(KaminarioFCDriver, self).terminate_connection(volume, connector)"}],"source_content_type":"text/x-python","patch_set":3,"id":"1ac06dbe_8dd33738","line":91,"in_reply_to":"1ac06dbe_f93c3131","updated":"2016-08-20 04:42:23.000000000","message":"Done","commit_id":"6747fb8aa3e51855240f1ab33092fb18dfc7707a"}],"cinder/volume/drivers/kaminario/kaminario_iscsi.py":[{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"52e4abbfed9044bb630d4c38fc6ca83058df6f51","unresolved":false,"context_lines":[{"line_number":57,"context_line":"        \"\"\"Attach K2 volume to host.\"\"\""},{"line_number":58,"context_line":"        # To support replication failback"},{"line_number":59,"context_line":"        temp_client \u003d None"},{"line_number":60,"context_line":"        if volume.replication_status \u003d\u003d \u0027failed-over\u0027:"},{"line_number":61,"context_line":"            temp_client \u003d self.client"},{"line_number":62,"context_line":"            self.client \u003d self.target"},{"line_number":63,"context_line":"        # Get target_portal and target iqn."}],"source_content_type":"text/x-python","patch_set":3,"id":"1ac06dbe_b9ec79c8","line":60,"updated":"2016-08-20 00:17:38.000000000","message":"Use ReplicationStatus in objects/fields.py","commit_id":"6747fb8aa3e51855240f1ab33092fb18dfc7707a"},{"author":{"_account_id":16258,"name":"nikesh","email":"nike.niec@gmail.com","username":"nikem"},"change_message_id":"8149440d122c2e9cb92ec29aa79876c675b845ee","unresolved":false,"context_lines":[{"line_number":57,"context_line":"        \"\"\"Attach K2 volume to host.\"\"\""},{"line_number":58,"context_line":"        # To support replication failback"},{"line_number":59,"context_line":"        temp_client \u003d None"},{"line_number":60,"context_line":"        if volume.replication_status \u003d\u003d \u0027failed-over\u0027:"},{"line_number":61,"context_line":"            temp_client \u003d self.client"},{"line_number":62,"context_line":"            self.client \u003d self.target"},{"line_number":63,"context_line":"        # Get target_portal and target iqn."}],"source_content_type":"text/x-python","patch_set":3,"id":"1ac06dbe_0de8e7e1","line":60,"in_reply_to":"1ac06dbe_b9ec79c8","updated":"2016-08-20 04:42:23.000000000","message":"Done","commit_id":"6747fb8aa3e51855240f1ab33092fb18dfc7707a"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"52e4abbfed9044bb630d4c38fc6ca83058df6f51","unresolved":false,"context_lines":[{"line_number":79,"context_line":"    def terminate_connection(self, volume, connector, **kwargs):"},{"line_number":80,"context_line":"        # To support replication failback"},{"line_number":81,"context_line":"        temp_client \u003d None"},{"line_number":82,"context_line":"        if volume.replication_status \u003d\u003d \u0027failed-over\u0027:"},{"line_number":83,"context_line":"            temp_client \u003d self.client"},{"line_number":84,"context_line":"            self.client \u003d self.target"},{"line_number":85,"context_line":"        super(KaminarioISCSIDriver, self).terminate_connection(volume,"}],"source_content_type":"text/x-python","patch_set":3,"id":"1ac06dbe_59dc6512","line":82,"updated":"2016-08-20 00:17:38.000000000","message":"Same","commit_id":"6747fb8aa3e51855240f1ab33092fb18dfc7707a"},{"author":{"_account_id":16258,"name":"nikesh","email":"nike.niec@gmail.com","username":"nikem"},"change_message_id":"8149440d122c2e9cb92ec29aa79876c675b845ee","unresolved":false,"context_lines":[{"line_number":79,"context_line":"    def terminate_connection(self, volume, connector, **kwargs):"},{"line_number":80,"context_line":"        # To support replication failback"},{"line_number":81,"context_line":"        temp_client \u003d None"},{"line_number":82,"context_line":"        if volume.replication_status \u003d\u003d \u0027failed-over\u0027:"},{"line_number":83,"context_line":"            temp_client \u003d self.client"},{"line_number":84,"context_line":"            self.client \u003d self.target"},{"line_number":85,"context_line":"        super(KaminarioISCSIDriver, self).terminate_connection(volume,"}],"source_content_type":"text/x-python","patch_set":3,"id":"1ac06dbe_ede46b0e","line":82,"in_reply_to":"1ac06dbe_59dc6512","updated":"2016-08-20 04:42:23.000000000","message":"Done","commit_id":"6747fb8aa3e51855240f1ab33092fb18dfc7707a"}]}
