moved compaction settings to it's own test module
This commit is contained in:
@@ -1,6 +1,7 @@
|
|||||||
import json
|
import json
|
||||||
import warnings
|
import warnings
|
||||||
from cqlengine import SizeTieredCompactionStrategy, LeveledCompactionStrategy
|
from cqlengine import SizeTieredCompactionStrategy, LeveledCompactionStrategy
|
||||||
|
from cqlengine.named import NamedTable
|
||||||
|
|
||||||
from cqlengine.connection import connection_manager, execute
|
from cqlengine.connection import connection_manager, execute
|
||||||
from cqlengine.exceptions import CQLEngineException
|
from cqlengine.exceptions import CQLEngineException
|
||||||
@@ -12,6 +13,10 @@ Field = namedtuple('Field', ['name', 'type'])
|
|||||||
logger = logging.getLogger(__name__)
|
logger = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
|
||||||
|
# system keyspaces
|
||||||
|
schema_columnfamilies = NamedTable('system', 'schema_columnfamilies')
|
||||||
|
|
||||||
|
|
||||||
def create_keyspace(name, strategy_class='SimpleStrategy', replication_factor=3, durable_writes=True, **replication_values):
|
def create_keyspace(name, strategy_class='SimpleStrategy', replication_factor=3, durable_writes=True, **replication_values):
|
||||||
"""
|
"""
|
||||||
creates a keyspace
|
creates a keyspace
|
||||||
@@ -98,6 +103,10 @@ def sync_table(model, create_missing_keyspace=True):
|
|||||||
logger.debug(query)
|
logger.debug(query)
|
||||||
execute(query)
|
execute(query)
|
||||||
|
|
||||||
|
update_compaction(model)
|
||||||
|
# update compaction
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#get existing index names, skip ones that already exist
|
#get existing index names, skip ones that already exist
|
||||||
with connection_manager() as con:
|
with connection_manager() as con:
|
||||||
@@ -217,18 +226,16 @@ def get_fields(model):
|
|||||||
return [Field(x[0], x[1]) for x in tmp.results]
|
return [Field(x[0], x[1]) for x in tmp.results]
|
||||||
# convert to Field named tuples
|
# convert to Field named tuples
|
||||||
|
|
||||||
def get_compaction_settings(model):
|
|
||||||
# returns a dictionary of compaction settings in an existing table
|
def update_compaction(model):
|
||||||
ks_name = model._get_keyspace()
|
ks_name = model._get_keyspace()
|
||||||
col_family = model.column_family_name(include_keyspace=False)
|
col_family = model.column_family_name(include_keyspace=False)
|
||||||
with connection_manager() as con:
|
|
||||||
query = "SELECT , validator FROM system.schema_columns \
|
|
||||||
WHERE keyspace_name = :ks_name AND columnfamily_name = :col_family"
|
|
||||||
|
|
||||||
logger.debug("get_fields %s %s", ks_name, col_family)
|
row = schema_columnfamilies.get(keyspace_name=ks_name,
|
||||||
|
columnfamily_name=col_family)
|
||||||
|
# check compaction_strategy_class
|
||||||
|
# check compaction_strategy_options
|
||||||
|
|
||||||
tmp = con.execute(query, {'ks_name':ks_name, 'col_family':col_family})
|
|
||||||
import ipdb; ipdb.set_trace()
|
|
||||||
|
|
||||||
|
|
||||||
def delete_table(model):
|
def delete_table(model):
|
||||||
|
|||||||
104
cqlengine/tests/management/test_compaction_settings.py
Normal file
104
cqlengine/tests/management/test_compaction_settings.py
Normal file
@@ -0,0 +1,104 @@
|
|||||||
|
import copy
|
||||||
|
from mock import patch
|
||||||
|
from cqlengine import Model, columns, SizeTieredCompactionStrategy, LeveledCompactionStrategy
|
||||||
|
from cqlengine.exceptions import CQLEngineException
|
||||||
|
from cqlengine.management import get_compaction_options, drop_table, sync_table
|
||||||
|
from cqlengine.tests.base import BaseCassEngTestCase
|
||||||
|
|
||||||
|
|
||||||
|
class CompactionModel(Model):
|
||||||
|
__compaction__ = None
|
||||||
|
cid = columns.UUID(primary_key=True)
|
||||||
|
name = columns.Text()
|
||||||
|
|
||||||
|
|
||||||
|
class BaseCompactionTest(BaseCassEngTestCase):
|
||||||
|
def assert_option_fails(self, key):
|
||||||
|
# key is a normal_key, converted to
|
||||||
|
# __compaction_key__
|
||||||
|
|
||||||
|
key = "__compaction_{}__".format(key)
|
||||||
|
|
||||||
|
with patch.object(self.model, key, 10), \
|
||||||
|
self.assertRaises(CQLEngineException):
|
||||||
|
get_compaction_options(self.model)
|
||||||
|
|
||||||
|
|
||||||
|
class SizeTieredCompactionTest(BaseCompactionTest):
|
||||||
|
|
||||||
|
def setUp(self):
|
||||||
|
self.model = copy.deepcopy(CompactionModel)
|
||||||
|
self.model.__compaction__ = SizeTieredCompactionStrategy
|
||||||
|
|
||||||
|
def test_size_tiered(self):
|
||||||
|
result = get_compaction_options(self.model)
|
||||||
|
assert result['class'] == SizeTieredCompactionStrategy
|
||||||
|
|
||||||
|
def test_min_threshold(self):
|
||||||
|
self.model.__compaction_min_threshold__ = 2
|
||||||
|
result = get_compaction_options(self.model)
|
||||||
|
assert result['min_threshold'] == 2
|
||||||
|
|
||||||
|
|
||||||
|
class LeveledCompactionTest(BaseCompactionTest):
|
||||||
|
def setUp(self):
|
||||||
|
self.model = copy.deepcopy(CompactionLeveledStrategyModel)
|
||||||
|
|
||||||
|
def test_simple_leveled(self):
|
||||||
|
result = get_compaction_options(self.model)
|
||||||
|
assert result['class'] == LeveledCompactionStrategy
|
||||||
|
|
||||||
|
def test_bucket_high_fails(self):
|
||||||
|
self.assert_option_fails('bucket_high')
|
||||||
|
|
||||||
|
def test_bucket_low_fails(self):
|
||||||
|
self.assert_option_fails('bucket_low')
|
||||||
|
|
||||||
|
def test_max_threshold_fails(self):
|
||||||
|
self.assert_option_fails('max_threshold')
|
||||||
|
|
||||||
|
def test_min_threshold_fails(self):
|
||||||
|
self.assert_option_fails('min_threshold')
|
||||||
|
|
||||||
|
def test_min_sstable_size_fails(self):
|
||||||
|
self.assert_option_fails('min_sstable_size')
|
||||||
|
|
||||||
|
def test_sstable_size_in_mb(self):
|
||||||
|
with patch.object(self.model, '__compaction_sstable_size_in_mb__', 32):
|
||||||
|
result = get_compaction_options(self.model)
|
||||||
|
|
||||||
|
assert result['sstable_size_in_mb'] == 32
|
||||||
|
|
||||||
|
def test_create_table(self):
|
||||||
|
class LeveledcompactionTestTable(Model):
|
||||||
|
__compaction__ = LeveledCompactionStrategy
|
||||||
|
__compaction_sstable_size_in_mb__ = 64
|
||||||
|
user_id = columns.UUID(primary_key=True)
|
||||||
|
name = columns.Text()
|
||||||
|
|
||||||
|
drop_table(LeveledcompactionTestTable)
|
||||||
|
sync_table(LeveledcompactionTestTable)
|
||||||
|
|
||||||
|
LeveledcompactionTestTable.__compaction__ = SizeTieredCompactionStrategy
|
||||||
|
LeveledcompactionTestTable.__compaction_sstable_size_in_mb__ = None
|
||||||
|
|
||||||
|
sync_table(LeveledcompactionTestTable)
|
||||||
|
|
||||||
|
|
||||||
|
class EmptyCompactionTest(BaseCassEngTestCase):
|
||||||
|
def test_empty_compaction(self):
|
||||||
|
self.model = copy.deepcopy(CompactionModel)
|
||||||
|
result = get_compaction_options(self.model)
|
||||||
|
self.assertIsNone(result)
|
||||||
|
|
||||||
|
|
||||||
|
class CompactionLeveledStrategyModel(Model):
|
||||||
|
__compaction__ = LeveledCompactionStrategy
|
||||||
|
cid = columns.UUID(primary_key=True)
|
||||||
|
name = columns.Text()
|
||||||
|
|
||||||
|
|
||||||
|
class CompactionSizeTieredModel(Model):
|
||||||
|
__compaction__ = SizeTieredCompactionStrategy
|
||||||
|
cid = columns.UUID(primary_key=True)
|
||||||
|
name = columns.Text()
|
||||||
@@ -1,11 +1,10 @@
|
|||||||
from cqlengine.exceptions import CQLEngineException
|
|
||||||
from cqlengine.management import create_table, delete_table, get_fields, get_compaction_options, get_create_table, sync_table, drop_table
|
|
||||||
from cqlengine.tests.base import BaseCassEngTestCase
|
|
||||||
|
|
||||||
from cqlengine.connection import ConnectionPool, Host
|
|
||||||
|
|
||||||
from mock import MagicMock, patch
|
from mock import MagicMock, patch
|
||||||
from cqlengine import management, SizeTieredCompactionStrategy, LeveledCompactionStrategy
|
|
||||||
|
from cqlengine.exceptions import CQLEngineException
|
||||||
|
from cqlengine.management import create_table, delete_table, get_fields
|
||||||
|
from cqlengine.tests.base import BaseCassEngTestCase
|
||||||
|
from cqlengine.connection import ConnectionPool, Host
|
||||||
|
from cqlengine import management
|
||||||
from cqlengine.tests.query.test_queryset import TestModel
|
from cqlengine.tests.query.test_queryset import TestModel
|
||||||
from cqlengine.models import Model
|
from cqlengine.models import Model
|
||||||
from cqlengine import columns
|
from cqlengine import columns
|
||||||
@@ -141,97 +140,4 @@ class AddColumnTest(BaseCassEngTestCase):
|
|||||||
fields = get_fields(FirstModel)
|
fields = get_fields(FirstModel)
|
||||||
self.assertEqual(len(fields), 4)
|
self.assertEqual(len(fields), 4)
|
||||||
|
|
||||||
class CompactionModel(Model):
|
|
||||||
__compaction__ = None
|
|
||||||
cid = columns.UUID(primary_key=True)
|
|
||||||
name = columns.Text()
|
|
||||||
|
|
||||||
class CompactionSizeTieredModel(Model):
|
|
||||||
__compaction__ = SizeTieredCompactionStrategy
|
|
||||||
cid = columns.UUID(primary_key=True)
|
|
||||||
name = columns.Text()
|
|
||||||
|
|
||||||
class CompactionLeveledStrategyModel(Model):
|
|
||||||
__compaction__ = LeveledCompactionStrategy
|
|
||||||
cid = columns.UUID(primary_key=True)
|
|
||||||
name = columns.Text()
|
|
||||||
|
|
||||||
import copy
|
|
||||||
|
|
||||||
class EmptyCompactionTest(BaseCassEngTestCase):
|
|
||||||
def test_empty_compaction(self):
|
|
||||||
self.model = copy.deepcopy(CompactionModel)
|
|
||||||
result = get_compaction_options(self.model)
|
|
||||||
self.assertIsNone(result)
|
|
||||||
|
|
||||||
class BaseCompactionTest(BaseCassEngTestCase):
|
|
||||||
def assert_option_fails(self, key):
|
|
||||||
# key is a normal_key, converted to
|
|
||||||
# __compaction_key__
|
|
||||||
|
|
||||||
key = "__compaction_{}__".format(key)
|
|
||||||
|
|
||||||
with patch.object(self.model, key, 10), \
|
|
||||||
self.assertRaises(CQLEngineException):
|
|
||||||
get_compaction_options(self.model)
|
|
||||||
|
|
||||||
class SizeTieredCompactionTest(BaseCompactionTest):
|
|
||||||
|
|
||||||
def setUp(self):
|
|
||||||
self.model = copy.deepcopy(CompactionModel)
|
|
||||||
self.model.__compaction__ = SizeTieredCompactionStrategy
|
|
||||||
|
|
||||||
def test_size_tiered(self):
|
|
||||||
result = get_compaction_options(self.model)
|
|
||||||
assert result['class'] == SizeTieredCompactionStrategy
|
|
||||||
|
|
||||||
def test_min_threshold(self):
|
|
||||||
self.model.__compaction_min_threshold__ = 2
|
|
||||||
result = get_compaction_options(self.model)
|
|
||||||
assert result['min_threshold'] == 2
|
|
||||||
|
|
||||||
class LeveledCompactionTest(BaseCompactionTest):
|
|
||||||
def setUp(self):
|
|
||||||
self.model = copy.deepcopy(CompactionLeveledStrategyModel)
|
|
||||||
|
|
||||||
def test_simple_leveled(self):
|
|
||||||
result = get_compaction_options(self.model)
|
|
||||||
assert result['class'] == LeveledCompactionStrategy
|
|
||||||
|
|
||||||
def test_bucket_high_fails(self):
|
|
||||||
self.assert_option_fails('bucket_high')
|
|
||||||
|
|
||||||
def test_bucket_low_fails(self):
|
|
||||||
self.assert_option_fails('bucket_low')
|
|
||||||
|
|
||||||
def test_max_threshold_fails(self):
|
|
||||||
self.assert_option_fails('max_threshold')
|
|
||||||
|
|
||||||
def test_min_threshold_fails(self):
|
|
||||||
self.assert_option_fails('min_threshold')
|
|
||||||
|
|
||||||
def test_min_sstable_size_fails(self):
|
|
||||||
self.assert_option_fails('min_sstable_size')
|
|
||||||
|
|
||||||
def test_sstable_size_in_mb(self):
|
|
||||||
with patch.object(self.model, '__compaction_sstable_size_in_mb__', 32):
|
|
||||||
result = get_compaction_options(self.model)
|
|
||||||
|
|
||||||
assert result['sstable_size_in_mb'] == 32
|
|
||||||
|
|
||||||
def test_create_table(self):
|
|
||||||
class LeveledcompactionTestTable(Model):
|
|
||||||
__compaction__ = LeveledCompactionStrategy
|
|
||||||
__compaction_sstable_size_in_mb__ = 64
|
|
||||||
user_id = columns.UUID(primary_key=True)
|
|
||||||
name = columns.Text()
|
|
||||||
|
|
||||||
drop_table(LeveledcompactionTestTable)
|
|
||||||
sync_table(LeveledcompactionTestTable)
|
|
||||||
|
|
||||||
LeveledcompactionTestTable.__compaction__ = SizeTieredCompactionStrategy
|
|
||||||
LeveledcompactionTestTable.__compaction_sstable_size_in_mb__ = None
|
|
||||||
|
|
||||||
sync_table(LeveledcompactionTestTable)
|
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user