Introduce a classification of datastores and strategies

This change introduces a classification of datastores and strategies
based on our understanding of the readiness of that particular item of
code. It reflects the conversation at the mid-cycle in Seattle (Kilo).

A specification for this change was submitted for review in
https://review.openstack.org/#/c/154119/

Implements: blueprint experimental-datastores
DocImpact
Change-Id: Id710bdd21070c3af160f1594d29c5ac41d5c3548
This commit is contained in:
Amrith Kumar 2015-02-25 14:02:04 -05:00
parent 294df90a6d
commit dcc20879cd
No known key found for this signature in database
GPG Key ID: D3F7A2F20E1E536F
58 changed files with 127 additions and 86 deletions

View File

@ -623,12 +623,14 @@ couchbase_opts = [
'the root user is immediately returned in the response of '
"instance-create as the 'password' field."),
cfg.StrOpt('backup_namespace',
default='trove.guestagent.strategies.backup.couchbase_impl',
default='trove.guestagent.strategies.backup.experimental.'
'couchbase_impl',
help='Namespace to load backup strategies from.',
deprecated_name='backup_namespace',
deprecated_group='DEFAULT'),
cfg.StrOpt('restore_namespace',
default='trove.guestagent.strategies.restore.couchbase_impl',
default='trove.guestagent.strategies.restore.experimental.'
'couchbase_impl',
help='Namespace to load restore strategies from.',
deprecated_name='restore_namespace',
deprecated_group='DEFAULT'),
@ -678,17 +680,17 @@ mongodb_opts = [
cfg.BoolOpt('cluster_support', default=True,
help='Enable clusters to be created and managed.'),
cfg.StrOpt('api_strategy',
default='trove.common.strategies.cluster.mongodb.api.'
'MongoDbAPIStrategy',
default='trove.common.strategies.cluster.experimental.'
'mongodb.api.MongoDbAPIStrategy',
help='Class that implements datastore-specific API logic.'),
cfg.StrOpt('taskmanager_strategy',
default='trove.common.strategies.cluster.mongodb.taskmanager.'
'MongoDbTaskManagerStrategy',
default='trove.common.strategies.cluster.experimental.mongodb.'
'taskmanager.MongoDbTaskManagerStrategy',
help='Class that implements datastore-specific task manager '
'logic.'),
cfg.StrOpt('guestagent_strategy',
default='trove.common.strategies.cluster.mongodb.guestagent.'
'MongoDbGuestAgentStrategy',
default='trove.common.strategies.cluster.experimental.'
'mongodb.guestagent.MongoDbGuestAgentStrategy',
help='Class that implements datastore-specific Guest Agent API '
'logic.'),
cfg.StrOpt('backup_namespace', default=None,
@ -729,10 +731,12 @@ postgresql_opts = [
'the root user is immediately returned in the response of '
"instance-create as the 'password' field."),
cfg.StrOpt('backup_namespace',
default='trove.guestagent.strategies.backup.postgresql_impl',
default='trove.guestagent.strategies.backup.experimental.'
'postgresql_impl',
help='Namespace to load backup strategies from.'),
cfg.StrOpt('restore_namespace',
default='trove.guestagent.strategies.restore.postgresql_impl',
default='trove.guestagent.strategies.restore.experimental.'
'postgresql_impl',
help='Namespace to load restore strategies from.'),
cfg.BoolOpt('volume_support', default=True,
help='Whether to provision a Cinder volume for datadir.'),

View File

@ -18,7 +18,7 @@ import os
from trove.common import cfg
from trove.common import exception
from trove.guestagent import volume
from trove.guestagent.datastore.cassandra import service
from trove.guestagent.datastore.experimental.cassandra import service
from trove.openstack.common import periodic_task
from trove.openstack.common import log as logging
from trove.common.i18n import _

View File

@ -21,7 +21,7 @@ from trove.common import utils
from trove.common import exception
from trove.common import instance as rd_instance
from trove.guestagent.common import operating_system
from trove.guestagent.datastore.cassandra import system
from trove.guestagent.datastore.experimental.cassandra import system
from trove.guestagent.datastore import service
from trove.guestagent import pkg
from trove.openstack.common import log as logging

View File

@ -21,8 +21,8 @@ from trove.common import instance as rd_instance
from trove.guestagent import backup
from trove.guestagent import dbaas
from trove.guestagent import volume
from trove.guestagent.datastore.couchbase import service
from trove.guestagent.datastore.couchbase import system
from trove.guestagent.datastore.experimental.couchbase import service
from trove.guestagent.datastore.experimental.couchbase import system
from trove.openstack.common import log as logging
from trove.openstack.common import periodic_task
from trove.common.i18n import _

View File

@ -27,7 +27,7 @@ from trove.common import utils as utils
from trove.guestagent import pkg
from trove.guestagent.common import operating_system
from trove.guestagent.datastore import service
from trove.guestagent.datastore.couchbase import system
from trove.guestagent.datastore.experimental.couchbase import system
from trove.guestagent.db import models
from trove.openstack.common import log as logging
from trove.common.i18n import _

View File

@ -21,8 +21,9 @@ from trove.common import instance as ds_instance
from trove.guestagent import dbaas
from trove.guestagent import volume
from trove.guestagent.common import operating_system
from trove.guestagent.datastore.mongodb import service as mongo_service
from trove.guestagent.datastore.mongodb import system
from trove.guestagent.datastore.experimental.mongodb import (
service as mongo_service)
from trove.guestagent.datastore.experimental.mongodb import system
from trove.openstack.common import log as logging
from trove.common.i18n import _
from trove.openstack.common import periodic_task

View File

@ -23,7 +23,7 @@ from trove.common import exception
from trove.common import instance as ds_instance
from trove.common.exception import ProcessExecutionError
from trove.guestagent.datastore import service
from trove.guestagent.datastore.mongodb import system
from trove.guestagent.datastore.experimental.mongodb import system
from trove.openstack.common import log as logging
from trove.guestagent.common import operating_system
from trove.common.i18n import _

View File

@ -14,7 +14,7 @@
# under the License.
from trove.common import cfg
from trove.guestagent.datastore.postgresql import pgutil
from trove.guestagent.datastore.experimental.postgresql import pgutil
from trove.openstack.common import log as logging
from trove.common.i18n import _

View File

@ -16,9 +16,11 @@
import re
from trove.common import cfg
from trove.common import utils
from trove.guestagent.datastore.postgresql import pgutil
from trove.guestagent.datastore.postgresql.service.process import PgSqlProcess
from trove.guestagent.datastore.postgresql.service.status import PgSqlAppStatus
from trove.guestagent.datastore.experimental.postgresql import pgutil
from trove.guestagent.datastore.experimental.postgresql.service.process import(
PgSqlProcess)
from trove.guestagent.datastore.experimental.postgresql.service.status import(
PgSqlAppStatus)
from trove.openstack.common import log as logging
from trove.common.i18n import _

View File

@ -15,7 +15,7 @@
import itertools
from trove.common import cfg
from trove.guestagent.datastore.postgresql import pgutil
from trove.guestagent.datastore.experimental.postgresql import pgutil
from trove.openstack.common import log as logging
from trove.common.i18n import _

View File

@ -16,8 +16,10 @@
from trove.common import cfg
from trove.common import instance
from trove.guestagent import pkg
from trove.guestagent.datastore.postgresql.service.process import PgSqlProcess
from trove.guestagent.datastore.postgresql.service.status import PgSqlAppStatus
from trove.guestagent.datastore.experimental.postgresql.service.process import(
PgSqlProcess)
from trove.guestagent.datastore.experimental.postgresql.service.status import(
PgSqlAppStatus)
from trove.openstack.common import log as logging
from trove.common.i18n import _

View File

@ -16,7 +16,8 @@
from trove.common import cfg
from trove.common import utils
from trove.guestagent.common import operating_system
from trove.guestagent.datastore.postgresql.service.status import PgSqlAppStatus
from trove.guestagent.datastore.experimental.postgresql.service.status import (
PgSqlAppStatus)
from trove.openstack.common import log as logging
LOG = logging.getLogger(__name__)

View File

@ -15,7 +15,7 @@
import uuid
from trove.common import cfg
from trove.guestagent.datastore.postgresql import pgutil
from trove.guestagent.datastore.experimental.postgresql import pgutil
from trove.openstack.common import log as logging
LOG = logging.getLogger(__name__)

View File

@ -18,7 +18,7 @@ from trove.common import utils
from trove.common import exception
from trove.common import instance
from trove.guestagent.datastore import service
from trove.guestagent.datastore.postgresql import pgutil
from trove.guestagent.datastore.experimental.postgresql import pgutil
from trove.openstack.common import log as logging
LOG = logging.getLogger(__name__)

View File

@ -15,8 +15,9 @@
import itertools
from trove.common import cfg
from trove.guestagent.datastore.postgresql import pgutil
from trove.guestagent.datastore.postgresql.service.access import PgSqlAccess
from trove.guestagent.datastore.experimental.postgresql import pgutil
from trove.guestagent.datastore.experimental.postgresql.service.access import (
PgSqlAccess)
from trove.openstack.common import log as logging
from trove.common.i18n import _

View File

@ -19,8 +19,10 @@ from trove.guestagent import dbaas
from trove.guestagent import volume
from trove.common import instance as rd_instance
from trove.guestagent.common import operating_system
from trove.guestagent.datastore.redis.service import RedisAppStatus
from trove.guestagent.datastore.redis.service import RedisApp
from trove.guestagent.datastore.experimental.redis.service import (
RedisAppStatus)
from trove.guestagent.datastore.experimental.redis.service import (
RedisApp)
from trove.openstack.common import log as logging
from trove.common.i18n import _
from trove.openstack.common import periodic_task

View File

@ -22,7 +22,7 @@ from trove.common import instance as rd_instance
from trove.guestagent import pkg
from trove.guestagent.common import operating_system
from trove.guestagent.datastore import service
from trove.guestagent.datastore.redis import system
from trove.guestagent.datastore.experimental.redis import system
from trove.openstack.common import log as logging
from trove.common.i18n import _

View File

@ -33,13 +33,20 @@ from trove.common.i18n import _
LOG = log.getLogger(__name__)
defaults = {
'mysql': 'trove.guestagent.datastore.mysql.manager.Manager',
'percona': 'trove.guestagent.datastore.mysql.manager.Manager',
'redis': 'trove.guestagent.datastore.redis.manager.Manager',
'cassandra': 'trove.guestagent.datastore.cassandra.manager.Manager',
'couchbase': 'trove.guestagent.datastore.couchbase.manager.Manager',
'mongodb': 'trove.guestagent.datastore.mongodb.manager.Manager',
'postgresql': 'trove.guestagent.datastore.postgresql.manager.Manager',
'mysql':
'trove.guestagent.datastore.mysql.manager.Manager',
'percona':
'trove.guestagent.datastore.mysql.manager.Manager',
'redis':
'trove.guestagent.datastore.experimental.redis.manager.Manager',
'cassandra':
'trove.guestagent.datastore.experimental.cassandra.manager.Manager',
'couchbase':
'trove.guestagent.datastore.experimental.couchbase.manager.Manager',
'mongodb':
'trove.guestagent.datastore.experimental.mongodb.manager.Manager',
'postgresql':
'trove.guestagent.datastore.experimental.postgresql.manager.Manager',
}
CONF = cfg.CONF

View File

@ -18,8 +18,8 @@ import json
from trove.common import exception
from trove.common import utils
from trove.guestagent.datastore.couchbase import service
from trove.guestagent.datastore.couchbase import system
from trove.guestagent.datastore.experimental.couchbase import service
from trove.guestagent.datastore.experimental.couchbase import system
from trove.guestagent.strategies.backup import base
from trove.common.i18n import _
from trove.openstack.common import log as logging

View File

@ -21,8 +21,8 @@ import time
from trove.common import exception
from trove.common import utils
from trove.guestagent import dbaas
from trove.guestagent.datastore.couchbase import service
from trove.guestagent.datastore.couchbase import system
from trove.guestagent.datastore.experimental.couchbase import service
from trove.guestagent.datastore.experimental.couchbase import system
from trove.guestagent.strategies.restore import base
from trove.openstack.common import log as logging

View File

@ -24,7 +24,7 @@ from trove.common.context import TroveContext
from trove.conductor import api as conductor_api
from trove.guestagent.common import operating_system
from trove.guestagent.strategies.backup import mysql_impl
from trove.guestagent.strategies.backup import couchbase_impl
from trove.guestagent.strategies.backup.experimental import couchbase_impl
from trove.guestagent.strategies.restore.base import RestoreRunner
from trove.backup.state import BackupState
from trove.guestagent.backup import backupagent

View File

@ -24,7 +24,8 @@ from trove.cluster.models import DBCluster
from trove.common import cfg
from trove.common import exception
from trove.common import remote
from trove.common.strategies.cluster.mongodb import api as mongodb_api
from trove.common.strategies.cluster.experimental.mongodb import (
api as mongodb_api)
from trove.datastore import models as datastore_models
from trove.instance import models as inst_models
from trove.instance.models import DBInstance

View File

@ -17,7 +17,8 @@ from mock import Mock, patch
from testtools import TestCase
from trove.cluster import models
from trove.common.strategies.cluster.mongodb.api import MongoDbCluster
from trove.common.strategies.cluster.experimental.mongodb.api import (
MongoDbCluster)
from trove.datastore import models as datastore_models

View File

@ -21,7 +21,8 @@ from trove.cluster.views import ClusterInstanceDetailView
from trove.cluster.views import ClusterView
from trove.cluster.views import load_view
from trove.common import cfg
from trove.common.strategies.cluster.mongodb.api import MongoDbClusterView
from trove.common.strategies.cluster.experimental.mongodb.api import (
MongoDbClusterView)
CONF = cfg.CONF

View File

@ -37,9 +37,9 @@ BACKUP_SQLDUMP_CLS = ("trove.guestagent.strategies.backup."
RESTORE_SQLDUMP_CLS = ("trove.guestagent.strategies.restore."
"mysql_impl.MySQLDump")
BACKUP_CBBACKUP_CLS = ("trove.guestagent.strategies.backup."
"couchbase_impl.CbBackup")
"experimental.couchbase_impl.CbBackup")
RESTORE_CBBACKUP_CLS = ("trove.guestagent.strategies.restore."
"couchbase_impl.CbBackup")
"experimental.couchbase_impl.CbBackup")
PIPE = " | "
ZIP = "gzip"
UNZIP = "gzip -d -c"

View File

@ -20,8 +20,10 @@ from trove.common.context import TroveContext
from trove.common.instance import ServiceStatuses
from trove.guestagent import volume
from trove.guestagent.common import operating_system
from trove.guestagent.datastore.cassandra import service as cass_service
from trove.guestagent.datastore.cassandra import manager as cass_manager
from trove.guestagent.datastore.experimental.cassandra import (
service as cass_service)
from trove.guestagent.datastore.experimental.cassandra import (
manager as cass_manager)
from trove.guestagent import pkg as pkg

View File

@ -24,8 +24,10 @@ from trove.common.context import TroveContext
from trove.guestagent import volume
from trove.guestagent import backup
from trove.guestagent.common import operating_system
from trove.guestagent.datastore.couchbase import service as couch_service
from trove.guestagent.datastore.couchbase import manager as couch_manager
from trove.guestagent.datastore.experimental.couchbase import (
service as couch_service)
from trove.guestagent.datastore.experimental.couchbase import (
manager as couch_manager)
class GuestAgentCouchbaseManagerTest(testtools.TestCase):

View File

@ -36,19 +36,24 @@ from trove.guestagent.common import operating_system
from trove.guestagent.dbaas import to_gb
from trove.guestagent.dbaas import get_filesystem_volume_stats
from trove.guestagent.datastore.service import BaseDbStatus
from trove.guestagent.datastore.redis import service as rservice
from trove.guestagent.datastore.redis.service import RedisApp
from trove.guestagent.datastore.redis import system as RedisSystem
from trove.guestagent.datastore.cassandra import service as cass_service
from trove.guestagent.datastore.cassandra import system as cass_system
from trove.guestagent.datastore.experimental.redis import service as rservice
from trove.guestagent.datastore.experimental.redis.service import RedisApp
from trove.guestagent.datastore.experimental.redis import system as RedisSystem
from trove.guestagent.datastore.experimental.cassandra import (
service as cass_service)
from trove.guestagent.datastore.experimental.cassandra import (
system as cass_system)
from trove.guestagent.datastore.mysql.service import MySqlAdmin
from trove.guestagent.datastore.mysql.service import MySqlRootAccess
from trove.guestagent.datastore.mysql.service import MySqlApp
from trove.guestagent.datastore.mysql.service import MySqlAppStatus
from trove.guestagent.datastore.mysql.service import KeepAliveConnection
from trove.guestagent.datastore.couchbase import service as couchservice
from trove.guestagent.datastore.mongodb import service as mongo_service
from trove.guestagent.datastore.mongodb import system as mongo_system
from trove.guestagent.datastore.experimental.couchbase import (
service as couchservice)
from trove.guestagent.datastore.experimental.mongodb import (
service as mongo_service)
from trove.guestagent.datastore.experimental.mongodb import (
system as mongo_system)
from trove.guestagent.db import models
from trove.instance.models import InstanceServiceStatus
from trove.tests.unittests.util import util
@ -977,15 +982,15 @@ class ServiceRegistryTest(testtools.TestCase):
'trove.guestagent.datastore.mysql.'
'manager.Manager')
self.assertEqual(test_dict.get('redis'),
'trove.guestagent.datastore.redis.'
'trove.guestagent.datastore.experimental.redis.'
'manager.Manager')
self.assertEqual(test_dict.get('cassandra'),
'trove.guestagent.datastore.cassandra.'
'trove.guestagent.datastore.experimental.cassandra.'
'manager.Manager')
self.assertEqual(test_dict.get('couchbase'),
'trove.guestagent.datastore.couchbase.manager'
'.Manager')
self.assertEqual('trove.guestagent.datastore.mongodb.'
'trove.guestagent.datastore.experimental.'
'couchbase.manager.Manager')
self.assertEqual('trove.guestagent.datastore.experimental.mongodb.'
'manager.Manager',
test_dict.get('mongodb'))
@ -1004,14 +1009,16 @@ class ServiceRegistryTest(testtools.TestCase):
'trove.guestagent.datastore.mysql.'
'manager.Manager')
self.assertEqual(test_dict.get('redis'),
'trove.guestagent.datastore.redis.manager.Manager')
'trove.guestagent.datastore.experimental.redis.'
'manager.Manager')
self.assertEqual(test_dict.get('cassandra'),
'trove.guestagent.datastore.cassandra.'
'trove.guestagent.datastore.experimental.cassandra.'
'manager.Manager')
self.assertEqual(test_dict.get('couchbase'),
'trove.guestagent.datastore.couchbase.manager'
'.Manager')
self.assertEqual('trove.guestagent.datastore.mongodb.manager.Manager',
'trove.guestagent.datastore.experimental.couchbase.'
'manager.Manager')
self.assertEqual('trove.guestagent.datastore.experimental.mongodb.'
'manager.Manager',
test_dict.get('mongodb'))
def test_datastore_registry_with_blank_dict(self):
@ -1026,14 +1033,16 @@ class ServiceRegistryTest(testtools.TestCase):
'trove.guestagent.datastore.mysql.'
'manager.Manager')
self.assertEqual(test_dict.get('redis'),
'trove.guestagent.datastore.redis.manager.Manager')
'trove.guestagent.datastore.experimental.redis.'
'manager.Manager')
self.assertEqual(test_dict.get('cassandra'),
'trove.guestagent.datastore.cassandra.'
'trove.guestagent.datastore.experimental.cassandra.'
'manager.Manager')
self.assertEqual(test_dict.get('couchbase'),
'trove.guestagent.datastore.couchbase.manager'
'.Manager')
self.assertEqual('trove.guestagent.datastore.mongodb.manager.Manager',
'trove.guestagent.datastore.experimental.couchbase.'
'manager.Manager')
self.assertEqual('trove.guestagent.datastore.experimental.mongodb.'
'manager.Manager',
test_dict.get('mongodb'))

View File

@ -21,9 +21,10 @@ from trove.common import utils
from trove.common.context import TroveContext
from trove.guestagent import volume
from trove.guestagent.common import operating_system
from trove.guestagent.datastore.mongodb import service as mongo_service
from trove.guestagent.datastore.mongodb.manager import Manager
from trove.guestagent.datastore.mongodb.service import MongoDBApp
from trove.guestagent.datastore.experimental.mongodb import (
service as mongo_service)
from trove.guestagent.datastore.experimental.mongodb.manager import Manager
from trove.guestagent.datastore.experimental.mongodb.service import MongoDBApp
class GuestAgentMongoDBClusterManagerTest(testtools.TestCase):

View File

@ -20,8 +20,10 @@ from mock import patch
from trove.common import utils
from trove.common.context import TroveContext
from trove.guestagent import volume
from trove.guestagent.datastore.mongodb import service as mongo_service
from trove.guestagent.datastore.mongodb import manager as mongo_manager
from trove.guestagent.datastore.experimental.mongodb import (
service as mongo_service)
from trove.guestagent.datastore.experimental.mongodb import (
manager as mongo_manager)
from trove.guestagent.volume import VolumeDevice

View File

@ -15,8 +15,10 @@
import testtools
from mock import MagicMock
from trove.common.context import TroveContext
from trove.guestagent.datastore.redis.manager import Manager as RedisManager
import trove.guestagent.datastore.redis.service as redis_service
from trove.guestagent.datastore.experimental.redis.manager import (
Manager as RedisManager)
from trove.guestagent.datastore.experimental.redis import (
service as redis_service)
from trove.guestagent import backup
from trove.guestagent.common import operating_system
from trove.guestagent.volume import VolumeDevice

View File

@ -16,7 +16,7 @@
from mock import Mock
from testtools import TestCase
from trove.common.strategies.cluster.mongodb.taskmanager import (
from trove.common.strategies.cluster.experimental.mongodb.taskmanager import (
MongoDbTaskManagerAPI)
from trove.taskmanager import api as task_api

View File

@ -21,7 +21,7 @@ from mock import patch
from trove.cluster.models import ClusterTasks as ClusterTaskStatus
from trove.cluster.models import DBCluster
from trove.common.strategies.cluster.mongodb.taskmanager import (
from trove.common.strategies.cluster.experimental.mongodb.taskmanager import (
MongoDbClusterTasks as ClusterTasks)
from trove.datastore import models as datastore_models
from trove.instance.models import BaseInstance