Skip to content

Commit

Permalink
Merge pull request #5 from PostHog/fix-migrations-by-not-replicating
Browse files Browse the repository at this point in the history
Separate way to migrate without replication
  • Loading branch information
macobo authored Jul 16, 2021
2 parents 4688676 + 369320b commit d531afe
Show file tree
Hide file tree
Showing 3 changed files with 16 additions and 11 deletions.
2 changes: 1 addition & 1 deletion setup.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@

SETUP_INFO = dict(
name = 'infi.clickhouse_orm',
version = '2.1.0.post11',
version = '2.1.0.post15',
author = 'James Greenhill',
author_email = '[email protected]',

Expand Down
14 changes: 8 additions & 6 deletions src/infi/clickhouse_orm/database.py
Original file line number Diff line number Diff line change
Expand Up @@ -330,7 +330,7 @@ def paginate(self, model_class, order_by, page_num=1, page_size=100, conditions=
page_size=page_size
)

def migrate(self, migrations_package_name, up_to=9999):
def migrate(self, migrations_package_name, up_to=9999, replicated=False):
'''
Executes schema migrations.
Expand All @@ -340,7 +340,7 @@ def migrate(self, migrations_package_name, up_to=9999):
'''
from .migrations import MigrationHistory
logger = logging.getLogger('migrations')
applied_migrations = self._get_applied_migrations(migrations_package_name)
applied_migrations = self._get_applied_migrations(migrations_package_name, replicated=replicated)
modules = import_submodules(migrations_package_name)
unapplied_migrations = set(modules.keys()) - applied_migrations
for name in sorted(unapplied_migrations):
Expand All @@ -351,11 +351,13 @@ def migrate(self, migrations_package_name, up_to=9999):
if int(name[:4]) >= up_to:
break

def _get_applied_migrations(self, migrations_package_name):
from .migrations import MigrationHistory
self.create_table(MigrationHistory)
def _get_applied_migrations(self, migrations_package_name, replicated):
from .migrations import MigrationHistory, MigrationHistoryReplicated

Model = MigrationHistoryReplicated if replicated else MigrationHistory
self.create_table(Model)
query = "SELECT module_name from $table WHERE package_name = '%s'" % migrations_package_name
query = self._substitute(query, MigrationHistory)
query = self._substitute(query, Model)
return set(obj.module_name for obj in self.select(query))

def _send(self, data, settings=None, stream=False):
Expand Down
11 changes: 7 additions & 4 deletions src/infi/clickhouse_orm/migrations.py
Original file line number Diff line number Diff line change
Expand Up @@ -280,17 +280,20 @@ class MigrationHistory(Model):
module_name = StringField()
applied = DateField()

engine = MergeTree('applied', ('package_name', 'module_name'))

@classmethod
def table_name(cls):
return "infi_clickhouse_orm_migrations"

class MigrationHistoryReplicated(Model):
engine = MergeTree(
"applied",
("package_name", "module_name"),
replica_table_path="/clickhouse/prod/tables/noshard/posthog.infi_clickhouse_orm_migrations",
replica_name="{replica}-{shard}",
)

@classmethod
def table_name(cls):
return "infi_clickhouse_orm_migrations"


# Expose only relevant classes in import *
__all__ = get_subclass_names(locals(), Operation)

0 comments on commit d531afe

Please sign in to comment.