summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJenkins <jenkins@review.openstack.org>2015-04-01 13:47:15 +0000
committerGerrit Code Review <review@openstack.org>2015-04-01 13:47:15 +0000
commit82d605c3431f91c1368c6736bdc2f8599a6eaf23 (patch)
tree4199a64989f12e213906428ece38679be06cce54
parentf8cdd162b1dc31ae3efbaaea26775733e4507170 (diff)
parent50ffa178375bae2ab96e29579c541a13793e4fc8 (diff)
downloadtrove-82d605c3431f91c1368c6736bdc2f8599a6eaf23.tar.gz
Merge "Rewrites the ClusterView.build_instances"
-rw-r--r--trove/cluster/views.py35
-rw-r--r--trove/common/strategies/cluster/experimental/mongodb/api.py64
-rw-r--r--trove/common/strategies/cluster/experimental/vertica/api.py55
-rw-r--r--trove/tests/unittests/cluster/test_cluster_views.py36
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):