fix koji-sweep-db
This commit is contained in:
parent
1cfe6538db
commit
92a773a19d
2 changed files with 40 additions and 54 deletions
|
|
@ -5,68 +5,64 @@ import xmlrpc.client
|
|||
from optparse import OptionParser
|
||||
from koji.context import context
|
||||
|
||||
import koji
|
||||
import koji.db
|
||||
from koji.db import QueryProcessor, InsertProcessor, BulkInsertProcessor
|
||||
|
||||
|
||||
def clean_sessions(cursor, vacuum, test, age):
|
||||
table = 'sessions'
|
||||
clauses = [f"update_time < NOW() - '{int(age)} days'::interval"]
|
||||
clauses = [f"update_time < NOW() - '{age} days'::interval"]
|
||||
if options.verbose:
|
||||
query = koji.db.QueryProcessor(clauses=clauses, opts={'countOnly': True},
|
||||
tables=[table], values=locals())
|
||||
rows = query.iterate()
|
||||
query = QueryProcessor(tables=['sessions'], clauses=clauses, opts={'countOnly': True})
|
||||
rows = query.execute()
|
||||
print(f"Deleting {rows} sessions")
|
||||
|
||||
if not test:
|
||||
cursor.execute(
|
||||
f"DELETE FROM sessions WHERE update_time < NOW() - '{int(age)} days'::interval")
|
||||
f"DELETE FROM sessions WHERE update_time < NOW() - '{age} days'::interval")
|
||||
if vacuum:
|
||||
cursor.execute("VACUUM ANALYZE sessions")
|
||||
|
||||
|
||||
def clean_reservations(cursor, vacuum, test, age):
|
||||
table = 'build_reservations'
|
||||
clauses = [f"created < NOW() - '{int(age)} days'::interval"]
|
||||
if options.verbose:
|
||||
query = koji.db.QueryProcessor(clauses=clauses, opts={'countOnly': True},
|
||||
tables=[table], values=locals())
|
||||
rows = query.iterate()
|
||||
query = QueryProcessor(
|
||||
tables=['build_reservations'],
|
||||
clauses=[f"created < NOW() - '{age} days'::interval"],
|
||||
opts={'countOnly': True})
|
||||
rows = query.execute()
|
||||
print(f"Deleting {rows} build reservations")
|
||||
|
||||
if not test:
|
||||
cursor.execute(
|
||||
f"DELETE FROM build_reservations WHERE created < NOW() - '{int(age)} days'::interval")
|
||||
f"DELETE FROM build_reservations WHERE created < NOW() - '{age} days'::interval")
|
||||
if vacuum:
|
||||
cursor.execute("VACUUM ANALYZE build_reservations")
|
||||
|
||||
|
||||
def clean_notification_tasks(cursor, vacuum, test, age):
|
||||
table = 'task'
|
||||
clauses = ["method = 'tagNotification'",
|
||||
f"completion_time < NOW() - '{int(age)} days'::interval"]
|
||||
f"completion_time < NOW() - '{age} days'::interval"]
|
||||
if options.verbose:
|
||||
query = koji.db.QueryProcessor(clauses=clauses, opts={'countOnly': True},
|
||||
tables=[table], values=locals())
|
||||
rows = query.iterate()
|
||||
query = QueryProcessor(tables=['task'], clauses=clauses, opts={'countOnly': True})
|
||||
rows = query.execute()
|
||||
print(f"Deleting {rows} tagNotification tasks")
|
||||
|
||||
if not test:
|
||||
# cascade
|
||||
cursor.execute(f"DELETE FROM task WHERE method = 'tagNotification' AND "
|
||||
f"completion_time < NOW() - '{int(age)} days'::interval")
|
||||
cursor.execute("DELETE FROM task WHERE method = 'tagNotification' AND "
|
||||
f"completion_time < NOW() - '{age} days'::interval")
|
||||
if vacuum:
|
||||
cursor.execute("VACUUM ANALYZE task")
|
||||
|
||||
|
||||
def clean_scratch_tasks(cursor, vacuum, test, age):
|
||||
table = 'task'
|
||||
clauses = ["method = 'build'",
|
||||
f"completion_time < NOW() - '{int(age)} days'::interval",
|
||||
"request LIKE '%%%%<name>scratch</name>%%%%'"]
|
||||
f"completion_time < NOW() - '{age} days'::interval",
|
||||
"request LIKE '%%<name>scratch</name>%%'"]
|
||||
if options.verbose:
|
||||
query = koji.db.QueryProcessor(clauses=clauses, opts={'countOnly': True},
|
||||
tables=[table], values=locals())
|
||||
rows = query.iterate()
|
||||
query = QueryProcessor(tables=['task'], clauses=clauses, opts={'countOnly': True})
|
||||
rows = query.execute()
|
||||
print(f"Deleting {rows} scratch build tasks")
|
||||
|
||||
if test:
|
||||
|
|
@ -76,42 +72,37 @@ def clean_scratch_tasks(cursor, vacuum, test, age):
|
|||
ids = []
|
||||
# will be dropped automatically in the end of script/connection
|
||||
cursor.execute("CREATE TEMPORARY TABLE temp_scratch_tasks (task_id INTEGER NOT NULL)")
|
||||
query = koji.db.QueryProcessor(columns=['id', 'request'], clauses=clauses,
|
||||
tables=[table], values=locals())
|
||||
rows = query.execute()
|
||||
for row in rows:
|
||||
query = QueryProcessor(tables=['task'], columns=['id', 'request'], clauses=clauses)
|
||||
for row in query.execute():
|
||||
task_id, request = row
|
||||
try:
|
||||
params, method = xmlrpc.client.loads(request)
|
||||
params, _ = xmlrpc.client.loads(request)
|
||||
opts = params[2]
|
||||
if opts['scratch']:
|
||||
insert = koji.db.InsertProcessor('temp_scratch_tasks')
|
||||
insert.set((task_id,))
|
||||
insert.make_create()
|
||||
insert.execute()
|
||||
ids.append(task_id)
|
||||
except Exception:
|
||||
continue
|
||||
insert = BulkInsertProcessor('temp_scratch_tasks')
|
||||
for task_id in ids:
|
||||
insert.add_record(task_id=task_id)
|
||||
insert.execute()
|
||||
|
||||
parents = ids
|
||||
while True:
|
||||
if not parents:
|
||||
break
|
||||
children = []
|
||||
string_parents = ', '.join(parents)
|
||||
query = koji.db.QueryProcessor(columns=['id'],
|
||||
clauses=[f"parent IN ({int(age)})"],
|
||||
tables=['task'],
|
||||
values=locals())
|
||||
rows = query.execute()
|
||||
for row in rows:
|
||||
query = QueryProcessor(tables=['task'],
|
||||
columns=['id'],
|
||||
clauses=["parent IN %(parents)s"],
|
||||
values={'parents': parents})
|
||||
for row in query.execute():
|
||||
children.append(row[0])
|
||||
parents = children
|
||||
if children:
|
||||
values = ', '.join(["(%d)" % task_id for task_id in children])
|
||||
insert = koji.db.InsertProcessor('temp_scratch_tasks')
|
||||
insert.set(values)
|
||||
insert.make_create()
|
||||
insert = BulkInsertProcessor(table='temp_scratch_tasks')
|
||||
for task_id in children:
|
||||
insert.add_record(task_id=task_id)
|
||||
insert.execute()
|
||||
|
||||
if not ids:
|
||||
|
|
@ -131,15 +122,13 @@ def clean_scratch_tasks(cursor, vacuum, test, age):
|
|||
|
||||
def clean_buildroots(cursor, vacuum, test):
|
||||
if options.verbose:
|
||||
clauses = ["cg_id IS NULL",
|
||||
"id NOT IN (SELECT buildroot_id FROM standard_buildroot)"]
|
||||
query = koji.db.QueryProcessor(clauses=clauses, opts={'countOnly': True},
|
||||
tables=['buildroot'], values=locals())
|
||||
rows = query.iterate()
|
||||
clauses = ["cg_id IS NULL", "id NOT IN (SELECT buildroot_id FROM standard_buildroot)"]
|
||||
query = QueryProcessor(tables=['buildroot'], clauses=clauses, opts={'countOnly': True})
|
||||
rows = query.execute()
|
||||
print(f"Deleting {rows} buildroots")
|
||||
|
||||
if not test:
|
||||
q = " FROM buildroot WHERE cg_id IS NULL AND id NOT IN " \
|
||||
q = "FROM buildroot WHERE cg_id IS NULL AND id NOT IN " \
|
||||
"(SELECT buildroot_id FROM standard_buildroot)"
|
||||
cursor.execute(f"DELETE FROM buildroot_listing WHERE buildroot_id IN (SELECT id {q})")
|
||||
cursor.execute(f"DELETE {q}")
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue