Mercurial > libervia-backend
changeset 4152:23d21daed216
core (memory/sqla_mapping): add a `version_id` column to detect race conditions.
author | Goffi <goffi@goffi.org> |
---|---|
date | Wed, 22 Nov 2023 14:52:00 +0100 |
parents | 18026ce0819c |
children | 9162d3480b9e |
files | libervia/backend/memory/migration/versions/610345f77e75_add_version_id_to_history.py libervia/backend/memory/sqla_mapping.py |
diffstat | 2 files changed, 31 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/libervia/backend/memory/migration/versions/610345f77e75_add_version_id_to_history.py Wed Nov 22 14:52:00 2023 +0100 @@ -0,0 +1,26 @@ +"""add "version_id" to History + +Revision ID: 610345f77e75 +Revises: 2ab01aa1f686 +Create Date: 2023-11-20 17:33:53.544032 + +""" +from alembic import op +import sqlalchemy as sa + + +# revision identifiers, used by Alembic. +revision = '610345f77e75' +down_revision = '2ab01aa1f686' +branch_labels = None +depends_on = None + + +def upgrade(): + with op.batch_alter_table('history', schema=None) as batch_op: + batch_op.add_column(sa.Column('version_id', sa.Integer(), server_default=sa.text('1'), nullable=False)) + + +def downgrade(): + with op.batch_alter_table('history', schema=None) as batch_op: + batch_op.drop_column('version_id')
--- a/libervia/backend/memory/sqla_mapping.py Wed Nov 22 14:50:35 2023 +0100 +++ b/libervia/backend/memory/sqla_mapping.py Wed Nov 22 14:52:00 2023 +0100 @@ -35,6 +35,7 @@ Integer, JSON, MetaData, + text, Text, UniqueConstraint, event, @@ -267,6 +268,9 @@ ) uid = Column(Text, primary_key=True) + # FIXME: version_id is only needed for changes in `extra` column. It would maybe be + # better to use separate table for `extra` data instead. + version_id = Column(Integer, nullable=False, server_default=text("1")) origin_id = Column(Text) stanza_id = Column(Text) update_uid = Column(Text) @@ -300,6 +304,7 @@ thread = relationship( "Thread", uselist=False, back_populates="history", passive_deletes=True ) + __mapper_args__ = {"version_id_col": version_id} def __init__(self, *args, **kwargs): source_jid = kwargs.pop("source_jid", None)