f858e537dd
This patch provides the scheduler support to filter share backends matching replication capabilities reported by the hosts and the replication_type extra_spec provided via the share_type during share creation. It also adds wsgi routes, API endpoints and driver entry routines to support the actions: list, show, create, delete and promote share replicas. It augments the ShareInstance DB model with a 'replica_state' attribute and the Share DB Model with 'replication_type' attribute to support these workflows. Replica states are periodically updated from the respective backends that the replicas are created on. APIImpact Impact on existing APIs: In Microversion 2.11, the /shares APIs return 2 additional fields during index and show calls for each share: 'has_replicas' and 'replication_type'. Similarly, the field 'replica_state' is added to the API response for /share-instances. Also, deletion of a share that has replicas is forbidden, returning error code 403. DocImpact Co-Authored-By: Alex Meade <mr.alex.meade@gmail.com> Implements: blueprint manila-share-replication Change-Id: I10515d55b1291c34777a31d8c6a3a1954f551235
51 lines
1.5 KiB
Python
51 lines
1.5 KiB
Python
# Copyright (c) 2011 X.commerce, a business unit of eBay Inc.
|
|
# Copyright 2010 OpenStack, LLC
|
|
# All Rights Reserved.
|
|
#
|
|
# Licensed under the Apache License, Version 2.0 (the "License"); you may
|
|
# not use this file except in compliance with the License. You may obtain
|
|
# a copy of the License at
|
|
#
|
|
# http://www.apache.org/licenses/LICENSE-2.0
|
|
#
|
|
# Unless required by applicable law or agreed to in writing, software
|
|
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
|
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
|
# License for the specific language governing permissions and limitations
|
|
# under the License.
|
|
|
|
"""Stubouts, mocks and fixtures for the test suite."""
|
|
|
|
from manila import db
|
|
|
|
|
|
class FakeModel(object):
|
|
"""Stubs out for model."""
|
|
def __init__(self, values):
|
|
self.values = values
|
|
|
|
def __getattr__(self, name):
|
|
return self.values.get(name)
|
|
|
|
def __getitem__(self, key):
|
|
if key in self.values:
|
|
return self.values[key]
|
|
else:
|
|
raise NotImplementedError()
|
|
|
|
def __repr__(self):
|
|
return '<FakeModel: %s>' % self.values
|
|
|
|
def get(self, key, default=None):
|
|
return self.__getattr__(key) or default
|
|
|
|
def __contains__(self, key):
|
|
return self._getattr__(key)
|
|
|
|
|
|
def stub_out(stubs, funcs):
|
|
"""Set the stubs in mapping in the db api."""
|
|
for func in funcs:
|
|
func_name = '_'.join(func.__name__.split('_')[1:])
|
|
stubs.Set(db, func_name, func)
|