Beispiel #1
0
    def reenable(self, context, vol):
        if vol['replication_status'] == 'disabled':
            msg = _("Replication is not enabled")
            raise exception.ReplicationError(reason=msg, volume_id=vol['id'])
        if vol['replication_status'] not in REENABLE_PROCEED_STATUS:
            msg = _("Replication status for volume must be inactive,"
                    " active-stopped, or error, but current status "
                    "is: %s") % vol['replication_status']
            raise exception.ReplicationError(reason=msg, volume_id=vol['id'])

        volume_utils.notify_about_replication_usage(context, vol, 'sync')
        self.volume_rpcapi.reenable_replication(context, vol)
Beispiel #2
0
    def promote(self, context, vol):
        if vol['replication_status'] == 'disabled':
            msg = _("Replication is not enabled for volume")
            raise exception.ReplicationError(reason=msg, volume_id=vol['id'])
        if vol['replication_status'] not in PROMOTE_PROCEED_STATUS:
            msg = _("Replication status for volume must be active or "
                    "active-stopped, but current status "
                    "is: %s") % vol['replication_status']
            raise exception.ReplicationError(reason=msg, volume_id=vol['id'])

        if vol['status'] != 'available':
            msg = _("Volume status for volume must be available, but current "
                    "status is: %s") % vol['status']
            raise exception.ReplicationError(reason=msg, volume_id=vol['id'])
        volume_utils.notify_about_replication_usage(context, vol, 'promote')
        self.volume_rpcapi.promote_replica(context, vol)
Beispiel #3
0
    def reenable(self, context, vol):
        if vol['replication_status'] == 'disabled':
            msg = _("Replication is not enabled")
            raise exception.ReplicationError(
                reason=msg,
                volume_id=vol['id'])
        if vol['replication_status'] not in REENABLE_PROCEED_STATUS:
            msg = _("Replication status for volume must be inactive,"
                    " active-stopped, or error, but current status "
                    "is: %s") % vol['replication_status']
            raise exception.ReplicationError(
                reason=msg,
                volume_id=vol['id'])

        volume_utils.notify_about_replication_usage(context,
                                                    vol,
                                                    'sync')
        self.volume_rpcapi.reenable_replication(context, vol)
Beispiel #4
0
 def test_notify_about_replication_usage(self, mock_rpc, mock_conf, mock_usage):
     mock_conf.host = "host1"
     output = volume_utils.notify_about_replication_usage(mock.sentinel.context, mock.sentinel.volume, "test_suffix")
     self.assertIsNone(output)
     mock_usage.assert_called_once_with(mock.sentinel.context, mock.sentinel.volume)
     mock_rpc.get_notifier.assert_called_once_with("replication", "host1")
     mock_rpc.get_notifier.return_value.info.assert_called_once_with(
         mock.sentinel.context, "replication.test_suffix", mock_usage.return_value
     )
 def test_notify_about_replication_usage(self, mock_rpc, mock_conf,
                                         mock_usage):
     mock_conf.host = 'host1'
     output = volume_utils.notify_about_replication_usage(
         mock.sentinel.context, mock.sentinel.volume, 'test_suffix')
     self.assertIsNone(output)
     mock_usage.assert_called_once_with(mock.sentinel.context,
                                        mock.sentinel.volume)
     mock_rpc.get_notifier.assert_called_once_with('replication', 'host1')
     mock_rpc.get_notifier.return_value.info.assert_called_once_with(
         mock.sentinel.context, 'replication.test_suffix',
         mock_usage.return_value)
 def test_notify_about_replication_usage(self, mock_rpc,
                                         mock_conf, mock_usage):
     mock_conf.host = 'host1'
     output = volume_utils.notify_about_replication_usage(
         mock.sentinel.context,
         mock.sentinel.volume,
         'test_suffix')
     self.assertIsNone(output)
     mock_usage.assert_called_once_with(mock.sentinel.volume)
     mock_rpc.get_notifier.assert_called_once_with('replication', 'host1')
     mock_rpc.get_notifier.return_value.info.assert_called_once_with(
         mock.sentinel.context,
         'replication.test_suffix',
         mock_usage.return_value)
Beispiel #7
0
    def promote(self, context, vol):
        if vol['replication_status'] == 'disabled':
            msg = _("Replication is not enabled for volume")
            raise exception.ReplicationError(
                reason=msg,
                volume_id=vol['id'])
        if vol['replication_status'] not in PROMOTE_PROCEED_STATUS:
            msg = _("Replication status for volume must be active or "
                    "active-stopped, but current status "
                    "is: %s") % vol['replication_status']
            raise exception.ReplicationError(
                reason=msg,
                volume_id=vol['id'])

        if vol['status'] != 'available':
            msg = _("Volume status for volume must be available, but current "
                    "status is: %s") % vol['status']
            raise exception.ReplicationError(
                reason=msg,
                volume_id=vol['id'])
        volume_utils.notify_about_replication_usage(context,
                                                    vol,
                                                    'promote')
        self.volume_rpcapi.promote_replica(context, vol)
Beispiel #8
0
 def test_notify_about_replication_usage_with_kwargs(self, mock_rpc, mock_conf, mock_usage):
     mock_conf.host = "host1"
     output = volume_utils.notify_about_replication_usage(
         mock.sentinel.context,
         mock.sentinel.volume,
         "test_suffix",
         extra_usage_info={"a": "b", "c": "d"},
         host="host2",
     )
     self.assertIsNone(output)
     mock_usage.assert_called_once_with(mock.sentinel.context, mock.sentinel.volume, a="b", c="d")
     mock_rpc.get_notifier.assert_called_once_with("replication", "host2")
     mock_rpc.get_notifier.return_value.info.assert_called_once_with(
         mock.sentinel.context, "replication.test_suffix", mock_usage.return_value
     )
 def test_notify_about_replication_usage_with_kwargs(self, mock_rpc,
                                                     mock_conf, mock_usage):
     mock_conf.host = 'host1'
     output = volume_utils.notify_about_replication_usage(
         mock.sentinel.context,
         mock.sentinel.volume,
         'test_suffix',
         extra_usage_info={'a': 'b', 'c': 'd'},
         host='host2')
     self.assertIsNone(output)
     mock_usage.assert_called_once_with(mock.sentinel.volume,
                                        a='b', c='d')
     mock_rpc.get_notifier.assert_called_once_with('replication', 'host2')
     mock_rpc.get_notifier.return_value.info.assert_called_once_with(
         mock.sentinel.context,
         'replication.test_suffix',
         mock_usage.return_value)
Beispiel #10
0
 def test_notify_about_replication_usage_with_kwargs(self, mock_rpc,
                                                     mock_conf, mock_usage):
     mock_conf.host = 'host1'
     output = volume_utils.notify_about_replication_usage(
         mock.sentinel.context,
         mock.sentinel.volume,
         'test_suffix',
         extra_usage_info={'a': 'b', 'c': 'd'},
         host='host2')
     self.assertIsNone(output)
     mock_usage.assert_called_once_with(mock.sentinel.context,
                                        mock.sentinel.volume,
                                        a='b', c='d')
     mock_rpc.get_notifier.assert_called_once_with('replication', 'host2')
     mock_rpc.get_notifier.return_value.info.assert_called_once_with(
         mock.sentinel.context,
         'replication.test_suffix',
         mock_usage.return_value)