More efficiently filter to unexpired files when migrating

mia/0x0#72 (comment)
This commit is contained in:
Emi Simpson 2022-11-28 16:24:26 -05:00
parent 74b6f986ee
commit 19d989b696
No known key found for this signature in database
GPG Key ID: 45E9C6E81BD86E7C
1 changed files with 12 additions and 12 deletions

View File

@ -62,7 +62,7 @@ def upgrade():
# List of file hashes which have not expired yet # List of file hashes which have not expired yet
# This could get really big for some servers # This could get really big for some servers
try: try:
unexpired_files = set(os.listdir(storage)) unexpired_files = os.listdir(storage)
except FileNotFoundError: except FileNotFoundError:
return # There are no currently unexpired files return # There are no currently unexpired files
@ -70,20 +70,20 @@ def upgrade():
files = session.scalars( files = session.scalars(
sa.select(File) sa.select(File)
.where( .where(
sa.not_(File.removed) sa.not_(File.removed),
File.sha256.in_(unexpired_files)
) )
) )
for file in files: for file in files:
if file.sha256 in unexpired_files: file_path = storage / file.sha256
file_path = storage / file.sha256 stat = os.stat(file_path)
stat = os.stat(file_path) max_age = get_max_lifespan(stat.st_size) # How long the file is allowed to live, in ms
max_age = get_max_lifespan(stat.st_size) # How long the file is allowed to live, in ms file_birth = stat.st_mtime * 1000 # When the file was created, in ms
file_birth = stat.st_mtime * 1000 # When the file was created, in ms op.execute(
op.execute( sa.update(UpdatedFile)
sa.update(UpdatedFile) .where(UpdatedFile.c.id == file.id)
.where(UpdatedFile.c.id == file.id) .values({'expiration': int(file_birth + max_age)})
.values({'expiration': int(file_birth + max_age)}) )
)
def downgrade(): def downgrade():
op.drop_column('file', 'expiration') op.drop_column('file', 'expiration')