diff options
author | Jenkins <jenkins@review.openstack.org> | 2015-04-01 13:47:15 +0000 |
---|---|---|
committer | Gerrit Code Review <review@openstack.org> | 2015-04-01 13:47:15 +0000 |
commit | 82d605c3431f91c1368c6736bdc2f8599a6eaf23 (patch) | |
tree | 4199a64989f12e213906428ece38679be06cce54 | |
parent | f8cdd162b1dc31ae3efbaaea26775733e4507170 (diff) | |
parent | 50ffa178375bae2ab96e29579c541a13793e4fc8 (diff) | |
download | trove-82d605c3431f91c1368c6736bdc2f8599a6eaf23.tar.gz |
Merge "Rewrites the ClusterView.build_instances"
-rw-r--r-- | trove/cluster/views.py | 35 | ||||
-rw-r--r-- | trove/common/strategies/cluster/experimental/mongodb/api.py | 64 | ||||
-rw-r--r-- | trove/common/strategies/cluster/experimental/vertica/api.py | 55 | ||||
-rw-r--r-- | trove/tests/unittests/cluster/test_cluster_views.py | 36 |
4 files changed, 77 insertions, 113 deletions
diff --git a/trove/cluster/views.py b/trove/cluster/views.py index 43cf48c6..92230570 100644 --- a/trove/cluster/views.py +++ b/trove/cluster/views.py @@ -13,12 +13,14 @@ # License for the specific language governing permissions and limitations # under the License. +from trove.common import cfg from trove.common.strategies.cluster import strategy from trove.common.views import create_links from trove.instance.views import InstanceDetailView from trove.openstack.common import log as logging LOG = logging.getLogger(__name__) +CONF = cfg.CONF class ClusterView(object): @@ -51,6 +53,39 @@ class ClusterView(object): def _build_links(self): return create_links("clusters", self.req, self.cluster.id) + def _build_instances(self, ip_to_be_published_for=[], + instance_dict_to_be_published_for=[]): + instances = [] + ip_list = [] + if self.load_servers: + cluster_instances = self.cluster.instances + else: + cluster_instances = self.cluster.instances_without_server + for instance in cluster_instances: + instance_dict = { + "id": instance.id, + "name": instance.name, + "type": instance.type, + "links": create_links("instances", self.req, instance.id) + } + if instance.shard_id: + instance_dict["shard_id"] = instance.shard_id + if self.load_servers: + instance_dict["status"] = instance.status + if CONF.get(instance.datastore_version.manager).volume_support: + instance_dict["volume"] = {"size": instance.volume_size} + instance_dict["flavor"] = self._build_flavor_info( + instance.flavor_id) + instance_ips = instance.get_visible_ip_addresses() + if self.load_servers and instance_ips: + instance_dict["ip"] = instance_ips + if instance.type in ip_to_be_published_for: + ip_list.append(instance_ips[0]) + if instance.type in instance_dict_to_be_published_for: + instances.append(instance_dict) + ip_list.sort() + return instances, ip_list + def build_instances(self): raise NotImplementedError() diff --git a/trove/common/strategies/cluster/experimental/mongodb/api.py b/trove/common/strategies/cluster/experimental/mongodb/api.py index 40695604..fa34c95d 100644 --- a/trove/common/strategies/cluster/experimental/mongodb/api.py +++ b/trove/common/strategies/cluster/experimental/mongodb/api.py @@ -23,7 +23,6 @@ from trove.common import exception from trove.common import remote from trove.common.strategies.cluster import base from trove.common import utils -from trove.common.views import create_links from trove.common import wsgi from trove.datastore import models as datastore_models from trove.extensions.mgmt.clusters.views import MgmtClusterView @@ -226,66 +225,13 @@ class MongoDbCluster(models.Cluster): class MongoDbClusterView(ClusterView): def build_instances(self): - instances = [] - ip_list = [] - if self.load_servers: - cluster_instances = self.cluster.instances - else: - cluster_instances = self.cluster.instances_without_server - for instance in cluster_instances: - if self.load_servers and instance.type == 'query_router': - ip = instance.get_visible_ip_addresses() - if ip: - ip_list.append(ip[0]) - if instance.type != 'member': - continue - instance_dict = { - "id": instance.id, - "name": instance.name, - "links": create_links("instances", self.req, instance.id) - } - if instance.shard_id: - instance_dict["shard_id"] = instance.shard_id - if self.load_servers: - instance_dict["status"] = instance.status - if CONF.get(instance.datastore_version.manager).volume_support: - instance_dict["volume"] = {"size": instance.volume_size} - instance_dict["flavor"] = self._build_flavor_info( - instance.flavor_id) - instances.append(instance_dict) - ip_list.sort() - return instances, ip_list + return self._build_instances(['query_router'], ['member']) class MongoDbMgmtClusterView(MgmtClusterView): def build_instances(self): - instances = [] - ip_list = [] - if self.load_servers: - cluster_instances = self.cluster.instances - else: - cluster_instances = self.cluster.instances_without_server - for instance in cluster_instances: - instance_dict = { - "id": instance.id, - "name": instance.name, - "type": instance.type, - "links": create_links("instances", self.req, instance.id) - } - instance_ips = instance.get_visible_ip_addresses() - if self.load_servers and instance_ips: - instance_dict["ip"] = instance_ips - if instance.type == 'query_router': - ip_list.append(instance_ips[0]) - if instance.shard_id: - instance_dict["shard_id"] = instance.shard_id - if self.load_servers: - instance_dict["status"] = instance.status - if CONF.get(instance.datastore_version.manager).volume_support: - instance_dict["volume"] = {"size": instance.volume_size} - instance_dict["flavor"] = self._build_flavor_info( - instance.flavor_id) - instances.append(instance_dict) - ip_list.sort() - return instances, ip_list + return self._build_instances(['query_router'], + ['config_server', + 'member', + 'query_router']) diff --git a/trove/common/strategies/cluster/experimental/vertica/api.py b/trove/common/strategies/cluster/experimental/vertica/api.py index 4cbe471f..bd859599 100644 --- a/trove/common/strategies/cluster/experimental/vertica/api.py +++ b/trove/common/strategies/cluster/experimental/vertica/api.py @@ -20,7 +20,6 @@ from trove.common import cfg from trove.common import exception from trove.common import remote from trove.common.strategies.cluster import base -from trove.common.views import create_links from trove.extensions.mgmt.clusters.views import MgmtClusterView from trove.instance import models as inst_models from trove.openstack.common import log as logging @@ -130,60 +129,10 @@ class VerticaCluster(models.Cluster): class VerticaClusterView(ClusterView): def build_instances(self): - instances = [] - ip_list = [] - if self.load_servers: - cluster_instances = self.cluster.instances - else: - cluster_instances = self.cluster.instances_without_server - for instance in cluster_instances: - if instance.type != 'member': - continue - instance_dict = { - "id": instance.id, - "name": instance.name, - "links": create_links("instances", self.req, instance.id) - } - if self.load_servers: - instance_dict["status"] = instance.status - if CONF.get(instance.datastore_version.manager).volume_support: - instance_dict["volume"] = {"size": instance.volume_size} - instance_dict["flavor"] = self._build_flavor_info( - instance.flavor_id) - instance_ips = instance.get_visible_ip_addresses() - if instance_ips: - instance_dict["ip"] = instance_ips - ip_list.append(instance_ips[0]) - instances.append(instance_dict) - ip_list.sort() - return instances, ip_list + return self._build_instances(['member'], ['member']) class VerticaMgmtClusterView(MgmtClusterView): def build_instances(self): - instances = [] - ip_list = [] - if self.load_servers: - cluster_instances = self.cluster.instances - else: - cluster_instances = self.cluster.instances_without_server - for instance in cluster_instances: - instance_dict = { - "id": instance.id, - "name": instance.name, - "type": instance.type, - "links": create_links("instances", self.req, instance.id) - } - instance_ips = instance.get_visible_ip_addresses() - if self.load_servers and instance_ips: - instance_dict["ip"] = instance_ips - if self.load_servers: - instance_dict["status"] = instance.status - if CONF.get(instance.datastore_version.manager).volume_support: - instance_dict["volume"] = {"size": instance.volume_size} - instance_dict["flavor"] = self._build_flavor_info( - instance.flavor_id) - instances.append(instance_dict) - ip_list.sort() - return instances, ip_list + return self._build_instances(['member'], ['member']) diff --git a/trove/tests/unittests/cluster/test_cluster_views.py b/trove/tests/unittests/cluster/test_cluster_views.py index d4eb45a6..60e7a38e 100644 --- a/trove/tests/unittests/cluster/test_cluster_views.py +++ b/trove/tests/unittests/cluster/test_cluster_views.py @@ -15,6 +15,7 @@ # from mock import Mock +from mock import MagicMock from mock import patch from testtools import TestCase from trove.cluster.views import ClusterInstanceDetailView @@ -23,7 +24,6 @@ from trove.cluster.views import load_view from trove.common import cfg from trove.common.strategies.cluster.experimental.mongodb.api import ( MongoDbClusterView) - CONF = cfg.CONF @@ -73,6 +73,40 @@ class ClusterViewTest(TestCase): view = load_view(cluster, Mock()) self.assertTrue(isinstance(view, MongoDbClusterView)) + def test__build_instances(self, *args): + cluster = Mock() + cluster.instances = [] + cluster.instances.append(Mock()) + cluster.instances.append(Mock()) + cluster.instances.append(Mock()) + cluster.instances[0].type = 'configsvr' + cluster.instances[0].get_visible_ip_addresses = lambda: ['1.2.3.4'] + cluster.instances[0].datastore_version.manager = 'mongodb' + cluster.instances[1].type = 'query_router' + cluster.instances[1].get_visible_ip_addresses = lambda: ['1.2.3.4'] + cluster.instances[1].datastore_version.manager = 'mongodb' + cluster.instances[2].type = 'member' + cluster.instances[2].get_visible_ip_addresses = lambda: ['1.2.3.4'] + cluster.instances[2].datastore_version.manager = 'mongodb' + + def test_case(ip_to_be_published_for, + instance_dict_to_be_published_for, + number_of_ip_published, + number_of_instance_dict_published): + view = ClusterView(cluster, MagicMock()) + instances, ip_list = view._build_instances( + ip_to_be_published_for, instance_dict_to_be_published_for) + + self.assertEqual(len(ip_list), number_of_ip_published) + self.assertEqual(len(instances), number_of_instance_dict_published) + + test_case([], [], 0, 0) + test_case(['abc'], ['def'], 0, 0) + test_case(['query_router'], ['member'], 1, 1) + test_case(['query_router'], ['query_router', 'configsvr', 'member'], + 1, 3) + test_case(['query_router', 'member'], ['member'], 2, 1) + class ClusterInstanceDetailViewTest(TestCase): |