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'.*",
        )
Beispiel #2
0
    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(),
        )
Beispiel #5
0
    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__)
Beispiel #6
0
    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__,
        )
Beispiel #8
0
    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'.*")
Beispiel #9
0
    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)
Beispiel #10
0
    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.*')
Beispiel #12
0
    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)
Beispiel #13
0
    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__,
        )