mirror of
https://gitlab.archlinux.org/archlinux/aurweb.git
synced 2025-02-03 10:43:03 +01:00
fix: resolve null VoteTS columns via migration
Somehow, many aur.al records of PackageVotes do not have a valid VoteTS value. This migration fixes that issue by setting all null VoteTS columns to the epoch timestamp. Signed-off-by: Kevin Morris <kevr@0cost.org>
This commit is contained in:
parent
1d86b3e210
commit
8387f325f6
3 changed files with 53 additions and 13 deletions
|
@ -269,7 +269,7 @@ PackageVotes = Table(
|
||||||
'PackageVotes', metadata,
|
'PackageVotes', metadata,
|
||||||
Column('UsersID', ForeignKey('Users.ID', ondelete='CASCADE'), nullable=False),
|
Column('UsersID', ForeignKey('Users.ID', ondelete='CASCADE'), nullable=False),
|
||||||
Column('PackageBaseID', ForeignKey('PackageBases.ID', ondelete='CASCADE'), nullable=False),
|
Column('PackageBaseID', ForeignKey('PackageBases.ID', ondelete='CASCADE'), nullable=False),
|
||||||
Column('VoteTS', BIGINT(unsigned=True)),
|
Column('VoteTS', BIGINT(unsigned=True), nullable=False),
|
||||||
Index('VoteUsersIDPackageID', 'UsersID', 'PackageBaseID', unique=True),
|
Index('VoteUsersIDPackageID', 'UsersID', 'PackageBaseID', unique=True),
|
||||||
Index('VotesPackageBaseID', 'PackageBaseID'),
|
Index('VotesPackageBaseID', 'PackageBaseID'),
|
||||||
Index('VotesUsersID', 'UsersID'),
|
Index('VotesUsersID', 'UsersID'),
|
||||||
|
|
37
migrations/versions/d64e5571bc8d_fix_pkgvote_votets.py
Normal file
37
migrations/versions/d64e5571bc8d_fix_pkgvote_votets.py
Normal file
|
@ -0,0 +1,37 @@
|
||||||
|
"""fix pkgvote votets
|
||||||
|
|
||||||
|
Revision ID: d64e5571bc8d
|
||||||
|
Revises: be7adae47ac3
|
||||||
|
Create Date: 2022-02-18 12:47:05.322766
|
||||||
|
|
||||||
|
"""
|
||||||
|
from datetime import datetime
|
||||||
|
|
||||||
|
import sqlalchemy as sa
|
||||||
|
|
||||||
|
from alembic import op
|
||||||
|
|
||||||
|
from aurweb import db
|
||||||
|
from aurweb.models import PackageVote
|
||||||
|
|
||||||
|
# revision identifiers, used by Alembic.
|
||||||
|
revision = 'd64e5571bc8d'
|
||||||
|
down_revision = 'be7adae47ac3'
|
||||||
|
branch_labels = None
|
||||||
|
depends_on = None
|
||||||
|
|
||||||
|
table = PackageVote.__tablename__
|
||||||
|
column = 'VoteTS'
|
||||||
|
epoch = datetime(1970, 1, 1)
|
||||||
|
|
||||||
|
|
||||||
|
def upgrade():
|
||||||
|
with db.begin():
|
||||||
|
records = db.query(PackageVote).filter(PackageVote.VoteTS.is_(None))
|
||||||
|
for record in records:
|
||||||
|
record.VoteTS = epoch.timestamp()
|
||||||
|
op.alter_column(table, column, existing_type=sa.BIGINT(), nullable=False)
|
||||||
|
|
||||||
|
|
||||||
|
def downgrade():
|
||||||
|
op.alter_column(table, column, existing_type=sa.BIGINT(), nullable=True)
|
|
@ -16,6 +16,8 @@ import random
|
||||||
import sys
|
import sys
|
||||||
import time
|
import time
|
||||||
|
|
||||||
|
from datetime import datetime
|
||||||
|
|
||||||
import bcrypt
|
import bcrypt
|
||||||
|
|
||||||
LOG_LEVEL = logging.DEBUG # logging level. set to logging.INFO to reduce output
|
LOG_LEVEL = logging.DEBUG # logging level. set to logging.INFO to reduce output
|
||||||
|
@ -251,7 +253,8 @@ for p in list(seen_pkgs.keys()):
|
||||||
out.write(s)
|
out.write(s)
|
||||||
|
|
||||||
# Cast votes
|
# Cast votes
|
||||||
#
|
utcnow = int(datetime.utcnow().timestamp())
|
||||||
|
|
||||||
track_votes = {}
|
track_votes = {}
|
||||||
log.debug("Casting votes for packages.")
|
log.debug("Casting votes for packages.")
|
||||||
for u in user_keys:
|
for u in user_keys:
|
||||||
|
@ -261,9 +264,9 @@ for u in user_keys:
|
||||||
for v in range(num_votes):
|
for v in range(num_votes):
|
||||||
pkg = random.randrange(1, len(seen_pkgs) + 1)
|
pkg = random.randrange(1, len(seen_pkgs) + 1)
|
||||||
if pkg not in pkgvote:
|
if pkg not in pkgvote:
|
||||||
s = ("INSERT INTO PackageVotes (UsersID, PackageBaseID)"
|
s = ("INSERT INTO PackageVotes (UsersID, PackageBaseID, VoteTS)"
|
||||||
" VALUES (%d, %d);\n")
|
" VALUES (%d, %d, %d);\n")
|
||||||
s = s % (seen_users[u], pkg)
|
s = s % (seen_users[u], pkg, utcnow)
|
||||||
pkgvote[pkg] = 1
|
pkgvote[pkg] = 1
|
||||||
if pkg not in track_votes:
|
if pkg not in track_votes:
|
||||||
track_votes[pkg] = 0
|
track_votes[pkg] = 0
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue