コード例 #1
0
    def create(self, local_share_info, remote_device_wwn, remote_fs_id,
               local_replication):
        local_share_name = local_share_info.get('name')

        try:
            local_fs_info = self.helper.get_fs_info_by_name(local_share_name)
            if not local_fs_info:
                msg = _("Local fs was not found by name %s." %
                        local_share_name)
                LOG.error(msg)
                raise exception.ReplicationException(reason=msg)
            local_fs_id = local_fs_info['ID']
            pair_params = {
                "LOCALRESID": local_fs_id,
                "LOCALRESTYPE": constants.FILE_SYSTEM_TYPE,
                "REMOTERESID": remote_fs_id,
                "REPLICATIONMODEL": constants.REPLICA_ASYNC_MODEL,
                "RECOVERYPOLICY": '2',
                "SYNCHRONIZETYPE": '1',
                "SPEED": constants.REPLICA_SPEED_HIGHEST,
            }

            if local_replication:
                pair_params["PAIRTYPE"] = constants.LOCAL_REPLICATION
            else:
                remote_device = self.helper.get_remote_device_by_wwn(
                    remote_device_wwn)
                pair_params["REMOTEDEVICEID"] = remote_device.get('ID')

            support_sync_snapshot = huawei_utils.is_dorado_v6(self.helper)
            if support_sync_snapshot:
                pair_params["syncSnapPolicy"] = "1"

            pair_info = self.helper.create_replication_pair(pair_params)
            local_pair_id = pair_info['ID']

            if local_replication:
                remote_fs = self.helper.get_fs_info_by_id(remote_fs_id)
                if not remote_fs:
                    msg = _('Remote filesystem %s is not exist.' %
                            remote_fs_id)
                    LOG.error(msg)
                    raise exception.StorageResourceNotFound(name=remote_fs_id)
                replication_ids = json.loads(remote_fs['REMOTEREPLICATIONIDS'])
                # Here must have a replication id.
                remote_pair_id = replication_ids[0]
            else:
                remote_pair_id = local_pair_id

        except Exception:
            LOG.exception("Failed to create replication pair for share %s.",
                          local_share_name)
            raise

        self._sync_replication_pair(local_pair_id, need_sync=False)

        return local_pair_id, remote_pair_id
コード例 #2
0
 def test_storage_resource_not_found(self):
     # verify response code for exception.StorageResourceNotFound
     name = "fake_name"
     e = exception.StorageResourceNotFound(name=name)
     self.assertEqual(404, e.code)
     self.assertIn(name, e.msg)