mirror of
https://github.com/carrotquest/django-clickhouse.git
synced 2024-11-28 20:13:45 +03:00
Changed migrations routing, dividing it into replicated and not replicated operations
This commit is contained in:
parent
2126bc25da
commit
2d4c8554cd
|
@ -47,7 +47,8 @@ class ClickHouseModel(with_metaclass(ClickHouseModelMeta, InfiModel)):
|
||||||
|
|
||||||
read_db_aliases = (config.DEFAULT_DB_ALIAS,)
|
read_db_aliases = (config.DEFAULT_DB_ALIAS,)
|
||||||
write_db_aliases = (config.DEFAULT_DB_ALIAS,)
|
write_db_aliases = (config.DEFAULT_DB_ALIAS,)
|
||||||
migrate_db_aliases = write_db_aliases
|
migrate_replicated_db_aliases = (config.DEFAULT_DB_ALIAS,)
|
||||||
|
migrate_non_replicated_db_aliases = (config.DEFAULT_DB_ALIAS,)
|
||||||
|
|
||||||
sync_enabled = False
|
sync_enabled = False
|
||||||
sync_batch_size = None
|
sync_batch_size = None
|
||||||
|
|
|
@ -34,7 +34,7 @@ class Migration:
|
||||||
model_class = getattr(op, 'model_class', None)
|
model_class = getattr(op, 'model_class', None)
|
||||||
hints = getattr(op, 'hints', {})
|
hints = getattr(op, 'hints', {})
|
||||||
|
|
||||||
if db_router.allow_migrate(db_alias, self.__module__, model=model_class, **hints):
|
if db_router.allow_migrate(db_alias, self.__module__, op, model=model_class, **hints):
|
||||||
database = database or connections[db_alias]
|
database = database or connections[db_alias]
|
||||||
op.apply(database)
|
op.apply(database)
|
||||||
|
|
||||||
|
|
|
@ -5,6 +5,7 @@ from typing import Optional
|
||||||
|
|
||||||
import random
|
import random
|
||||||
import six
|
import six
|
||||||
|
from infi.clickhouse_orm.migrations import Operation, DropTable, CreateTable
|
||||||
|
|
||||||
from .clickhouse_models import ClickHouseModel
|
from .clickhouse_models import ClickHouseModel
|
||||||
from .configuration import config
|
from .configuration import config
|
||||||
|
@ -32,12 +33,13 @@ class DefaultRouter:
|
||||||
"""
|
"""
|
||||||
return random.choice(model.write_db_aliases)
|
return random.choice(model.write_db_aliases)
|
||||||
|
|
||||||
def allow_migrate(self, db_alias, app_label, model=None, **hints):
|
def allow_migrate(self, db_alias, app_label, operation, model=None, **hints):
|
||||||
# type: (str, str, Optional[ClickHouseModel], **dict) -> bool
|
# type: (str, str, Operation, Optional[ClickHouseModel], **dict) -> bool
|
||||||
"""
|
"""
|
||||||
Checks if migration can be applied to given database
|
Checks if migration can be applied to given database
|
||||||
:param db_alias: Database alias to check
|
:param db_alias: Database alias to check
|
||||||
:param app_label: App from which migration is got
|
:param app_label: App from which migration is got
|
||||||
|
:param operation: Operation object to perform
|
||||||
:param model: Model migration is applied to
|
:param model: Model migration is applied to
|
||||||
:param hints: Hints to make correct decision
|
:param hints: Hints to make correct decision
|
||||||
:return: boolean
|
:return: boolean
|
||||||
|
@ -50,4 +52,8 @@ class DefaultRouter:
|
||||||
if isinstance(hints['model'], six.string_types) else hints['model']
|
if isinstance(hints['model'], six.string_types) else hints['model']
|
||||||
|
|
||||||
model = lazy_class_import(model)
|
model = lazy_class_import(model)
|
||||||
return db_alias in model.migrate_db_aliases
|
|
||||||
|
if operation.__class__ not in {CreateTable, DropTable}:
|
||||||
|
return db_alias in model.migrate_replicated_db_aliases
|
||||||
|
else:
|
||||||
|
return db_alias in model.migrate_non_replicated_db_aliases
|
||||||
|
|
|
@ -15,7 +15,8 @@ class ClickHouseTestModel(ClickHouseModel):
|
||||||
value = fields.Int32Field()
|
value = fields.Int32Field()
|
||||||
|
|
||||||
engine = ReplacingMergeTree('created_date', ('id',))
|
engine = ReplacingMergeTree('created_date', ('id',))
|
||||||
migrate_db_aliases = ('default', 'secondary')
|
migrate_replicated_db_aliases = ('default', 'secondary')
|
||||||
|
migrate_non_replicated_db_aliases = ('default', 'secondary')
|
||||||
|
|
||||||
|
|
||||||
class ClickHouseCollapseTestModel(ClickHouseModel):
|
class ClickHouseCollapseTestModel(ClickHouseModel):
|
||||||
|
|
|
@ -8,7 +8,7 @@ from tests.clickhouse_models import ClickHouseTestModel
|
||||||
|
|
||||||
|
|
||||||
class NoMigrateRouter(DefaultRouter):
|
class NoMigrateRouter(DefaultRouter):
|
||||||
def allow_migrate(self, db_alias, app_label, model=None, **hints):
|
def allow_migrate(self, db_alias, app_label, operation, model=None, **hints):
|
||||||
return False
|
return False
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user