core (memory/sqla_mapping): add a version_id column to detect race conditions.

This commit is contained in:
Goffi 2023-11-22 14:52:00 +01:00
commit 5bb47c69e4
2 changed files with 31 additions and 0 deletions

View file

@ -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')

View file

@ -35,6 +35,7 @@ from sqlalchemy import (
Integer,
JSON,
MetaData,
text,
Text,
UniqueConstraint,
event,
@ -267,6 +268,9 @@ class History(Base):
)
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 @@ class History(Base):
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)