def test_alter_options(self): class AlterTable(Model): __options__ = { 'compaction': { 'class': ('org.apache.cassandra.db.compaction.' 'LeveledCompactionStrategy'), 'sstable_size_in_mb': '64', }, } user_id = columns.UUID(primary_key=True) name = columns.Text() drop_table(self.conn, AlterTable) sync_table(self.conn, AlterTable) table_meta = _get_table_metadata(self.conn, AlterTable) self.assertRegexpMatches( table_meta.export_as_string(), ".*'sstable_size_in_mb': '64'.*", ) AlterTable.__options__['compaction']['sstable_size_in_mb'] = '128' sync_table(self.conn, AlterTable) table_meta = _get_table_metadata(self.conn, AlterTable) self.assertRegexpMatches( table_meta.export_as_string(), ".*'sstable_size_in_mb': '128'.*", )
def test_add_column(self): sync_table(self.conn, FirstModel) meta_columns = _get_table_metadata(self.conn, FirstModel).columns self.assertEqual(set(meta_columns), set(FirstModel._columns)) sync_table(self.conn, SecondModel) meta_columns = _get_table_metadata(self.conn, FirstModel).columns self.assertEqual(set(meta_columns), set(SecondModel._columns)) sync_table(self.conn, ThirdModel) meta_columns = _get_table_metadata(self.conn, FirstModel).columns self.assertEqual(len(meta_columns), 5) self.assertEqual(len(ThirdModel._columns), 4) self.assertIn('fourth_key', meta_columns) self.assertNotIn('fourth_key', ThirdModel._columns) self.assertIn('blah', ThirdModel._columns) self.assertIn('blah', meta_columns) sync_table(self.conn, FourthModel) meta_columns = _get_table_metadata(self.conn, FirstModel).columns self.assertEqual(len(meta_columns), 5) self.assertEqual(len(ThirdModel._columns), 4) self.assertIn('fourth_key', meta_columns) self.assertNotIn('fourth_key', FourthModel._columns) self.assertIn('renamed', FourthModel._columns) self.assertNotIn('renamed', meta_columns) self.assertIn('blah', meta_columns)
def test_sync_index_case_sensitive(self): """ Tests the default table creation, and ensures the table_name is created correctly and surfaced correctly in table metadata @since 3.1 @jira_ticket PYTHON-337 @expected_result table_name is lower case @test_category object_mapper """ sync_table(self.conn, IndexCaseSensitiveModel) table_meta = management._get_table_metadata( self.conn, IndexCaseSensitiveModel, ) self.assertIsNotNone( management._get_index_name_by_column(table_meta, 'second_key') ) # index already exists sync_table(self.conn, IndexCaseSensitiveModel) table_meta = management._get_table_metadata( self.conn, IndexCaseSensitiveModel, ) self.assertIsNotNone( management._get_index_name_by_column(table_meta, 'second_key') )
def test_sync_table_works_with_primary_keys_only_tables(self): sync_table(self.conn, PrimaryKeysOnlyModel) # blows up with DoesNotExist if table does not exist table_meta = management._get_table_metadata( self.conn, PrimaryKeysOnlyModel, ) self.assertIn('LeveledCompactionStrategy', table_meta.as_cql_query()) PrimaryKeysOnlyModel.__options__['compaction']['class'] = ( 'SizeTieredCompactionStrategy' ) sync_table(self.conn, PrimaryKeysOnlyModel) table_meta = management._get_table_metadata( self.conn, PrimaryKeysOnlyModel, ) self.assertIn( 'SizeTieredCompactionStrategy', table_meta.as_cql_query(), )
def test_all_size_tiered_options(self): class AllSizeTieredOptionsModel(Model): __options__ = { "compaction": { "class": ("org.apache.cassandra.db.compaction." "SizeTieredCompactionStrategy"), "bucket_low": ".3", "bucket_high": "2", "min_threshold": "2", "max_threshold": "64", "tombstone_compaction_interval": "86400", } } cid = columns.UUID(primary_key=True) name = columns.Text() drop_table(self.conn, AllSizeTieredOptionsModel) sync_table(self.conn, AllSizeTieredOptionsModel) table_meta = _get_table_metadata(self.conn, AllSizeTieredOptionsModel) self._verify_options(table_meta, AllSizeTieredOptionsModel.__options__)
def test_sync_indexed_set(self): """ Tests that models that have container types with indices can be synced. @since 3.2 @jira_ticket PYTHON-533 @expected_result table_sync should complete without a server error. @test_category object_mapper """ sync_table(self.conn, TestIndexSetModel) table_meta = management._get_table_metadata( self.conn, TestIndexSetModel, ) self.assertIsNotNone( management._get_index_name_by_column(table_meta, 'int_set') ) self.assertIsNotNone( management._get_index_name_by_column(table_meta, 'int_list') ) self.assertIsNotNone( management._get_index_name_by_column(table_meta, 'text_map') ) self.assertIsNotNone( management._get_index_name_by_column(table_meta, 'mixed_tuple') )
def test_all_size_tiered_options(self): class AllSizeTieredOptionsModel(Model): __options__ = { 'compaction': { 'class': ('org.apache.cassandra.db.compaction.' 'SizeTieredCompactionStrategy'), 'bucket_low': '.3', 'bucket_high': '2', 'min_threshold': '2', 'max_threshold': '64', 'tombstone_compaction_interval': '86400', }, } cid = columns.UUID(primary_key=True) name = columns.Text() drop_table(self.conn, AllSizeTieredOptionsModel) sync_table(self.conn, AllSizeTieredOptionsModel) table_meta = _get_table_metadata(self.conn, AllSizeTieredOptionsModel) self._verify_options( table_meta, AllSizeTieredOptionsModel.__options__, )
def test_alter_options(self): class AlterTable(Model): __options__ = { "compaction": { "class": ("org.apache.cassandra.db.compaction." "LeveledCompactionStrategy"), "sstable_size_in_mb": "64", } } user_id = columns.UUID(primary_key=True) name = columns.Text() drop_table(self.conn, AlterTable) sync_table(self.conn, AlterTable) table_meta = _get_table_metadata(self.conn, AlterTable) self.assertRegexpMatches(table_meta.export_as_string(), ".*'sstable_size_in_mb': '64'.*") AlterTable.__options__["compaction"]["sstable_size_in_mb"] = "128" sync_table(self.conn, AlterTable) table_meta = _get_table_metadata(self.conn, AlterTable) self.assertRegexpMatches(table_meta.export_as_string(), ".*'sstable_size_in_mb': '128'.*")
def test_table_property_update(self): ModelWithTableProperties.__options__["bloom_filter_fp_chance"] = 0.66778 ModelWithTableProperties.__options__[ "comment" ] = "xirAkRWZVVvsmzRvXamiEcQkshkUIDINVJZgLYSdnGHweiBrAiJdLJkVohdRy" ModelWithTableProperties.__options__["gc_grace_seconds"] = 96362 ModelWithTableProperties.__options__["read_repair_chance"] = 0.2989 ModelWithTableProperties.__options__["dclocal_read_repair_chance"] = 0.12732 sync_table(self.conn, ModelWithTableProperties) table_options = management._get_table_metadata(self.conn, ModelWithTableProperties).options self.assertDictContainsSubset(ModelWithTableProperties.__options__, table_options)
def test_alter_actually_alters(self): tmp = copy.deepcopy(LeveledCompactionTestTable) drop_table(self.conn, tmp) sync_table(self.conn, tmp) tmp.__options__ = { "compaction": { "class": ("org.apache.cassandra.db.compaction." "SizeTieredCompactionStrategy") } } sync_table(self.conn, tmp) table_meta = _get_table_metadata(self.conn, tmp) self.assertRegexpMatches(table_meta.export_as_string(), ".*SizeTieredCompactionStrategy.*")
def test_alter_actually_alters(self): tmp = copy.deepcopy(LeveledCompactionTestTable) drop_table(self.conn, tmp) sync_table(self.conn, tmp) tmp.__options__ = { 'compaction': { 'class': ('org.apache.cassandra.db.compaction.' 'SizeTieredCompactionStrategy'), }, } sync_table(self.conn, tmp) table_meta = _get_table_metadata(self.conn, tmp) self.assertRegexpMatches(table_meta.export_as_string(), '.*SizeTieredCompactionStrategy.*')
def test_set_table_properties(self): sync_table(self.conn, ModelWithTableProperties) expected = { "bloom_filter_fp_chance": 0.76328, "comment": "TxfguvBdzwROQALmQBOziRMbkqVGFjqcJfVhwGR", "gc_grace_seconds": 2063, "read_repair_chance": 0.17985, # For some reason 'dclocal_read_repair_chance' in CQL is called # just 'local_read_repair_chance' in the schema table. # Source: https://issues.apache.org/jira/browse/CASSANDRA-6717 # TODO: due to a bug in the native driver i'm not seeing the # local read repair chance show up # 'local_read_repair_chance': 0.50811, } options = management._get_table_metadata(self.conn, ModelWithTableProperties).options self.assertEqual(dict([(k, options.get(k)) for k in expected.keys()]), expected)
def test_all_leveled_options(self): class AllLeveledOptionsModel(Model): __options__ = { "compaction": { "class": ("org.apache.cassandra.db.compaction." "LeveledCompactionStrategy"), "sstable_size_in_mb": "64", } } cid = columns.UUID(primary_key=True) name = columns.Text() drop_table(self.conn, AllLeveledOptionsModel) sync_table(self.conn, AllLeveledOptionsModel) table_meta = _get_table_metadata(self.conn, AllLeveledOptionsModel) self._verify_options(table_meta, AllLeveledOptionsModel.__options__)
def test_all_leveled_options(self): class AllLeveledOptionsModel(Model): __options__ = { 'compaction': { 'class': ('org.apache.cassandra.db.compaction.' 'LeveledCompactionStrategy'), 'sstable_size_in_mb': '64' }, } cid = columns.UUID(primary_key=True) name = columns.Text() drop_table(self.conn, AllLeveledOptionsModel) sync_table(self.conn, AllLeveledOptionsModel) table_meta = _get_table_metadata(self.conn, AllLeveledOptionsModel) self._verify_options( table_meta, AllLeveledOptionsModel.__options__, )