Yuvipanda has uploaded a new change for review.
https://gerrit.wikimedia.org/r/153797
Change subject: Remove QueryRunRepository
......................................................................
Remove QueryRunRepository
Change-Id: Ib264b11a0ade6137e1d08105a55f627a0049c1a4
---
M quarry/web/app.py
M quarry/web/models/queryrun.py
M quarry/web/worker.py
3 files changed, 23 insertions(+), 55 deletions(-)
git pull ssh://gerrit.wikimedia.org:29418/analytics/quarry/web
refs/changes/97/153797/1
diff --git a/quarry/web/app.py b/quarry/web/app.py
index cd61505..5dc19a8 100644
--- a/quarry/web/app.py
+++ b/quarry/web/app.py
@@ -2,7 +2,7 @@
from models.user import UserRepository, User
from models.query import Query
from models.queryrevision import QueryRevision
-from models.queryrun import QueryRunRepository, QueryRun
+from models.queryrun import QueryRun
import json
import yaml
import time
@@ -44,7 +44,6 @@
Session = sessionmaker(bind=g.conn.db_engine)
session = Session()
g.user_repository = UserRepository(session)
- g.query_run_repository = QueryRunRepository(session)
g.session = session
g.user = get_user(g.user_repository)
@@ -169,15 +168,13 @@
text = request.form['text']
query = g.session.query(Query).filter(Query.id ==
request.form['query_id']).one()
- last_query_rev = query.latest_rev
- if last_query_rev:
- last_query_run =
g.query_run_repository.get_latest_by_rev(last_query_rev)
- if last_query_run:
- result = worker.run_query.AsyncResult(last_query_run.task_id)
- if not result.ready():
- result.revoke(terminate=True)
- last_query_run.status = QueryRun.STATUS_SUPERSEDED
- g.query_run_repository.save(last_query_run)
+ if query.latest_rev and query.latest_rev.latest_run:
+ result =
worker.run_query.AsyncResult(query.latest_rev.latest_run.task_id)
+ if not result.ready():
+ result.revoke(terminate=True)
+ query.latest_rev.latest_run.status = QueryRun.STATUS_SUPERSEDED
+ g.session.add(query.latest_rev.latest_run)
+ g.session.commit()
query_rev = QueryRevision(query_id=query.id, text=text)
query.latest_rev = query_rev
diff --git a/quarry/web/models/queryrun.py b/quarry/web/models/queryrun.py
index d722574..c73e643 100644
--- a/quarry/web/models/queryrun.py
+++ b/quarry/web/models/queryrun.py
@@ -1,5 +1,5 @@
-from sqlalchemy import Column, Integer, ForeignKey, DateTime, String, desc
-from sqlalchemy.orm import joinedload, relationship
+from sqlalchemy import Column, Integer, ForeignKey, DateTime, String
+from sqlalchemy.orm import relationship
from base import Base
from queryrevision import QueryRevision # noqa
@@ -44,35 +44,3 @@
self.id,
self.rev.text
)
-
-
-class QueryRunRepository:
- def __init__(self, session):
- self.session = session
-
- def get_latest_by_rev(self, rev):
- if rev is None:
- return None
-
- return
self.session.query(QueryRun).filter_by(query_rev_id=rev.id).first()
-
- def save(self, query_run):
- self.session.add(query_run)
-
- # Persist the query run immediately.
- self.session.commit()
-
- def get_latest(self, limit):
- # Eagerly load the associated query revision, query, and user.
- return self.session.query(QueryRun) \
- .options(
- joinedload('rev')
- .joinedload('query')
- .joinedload('user')
- ) \
- .filter(QueryRun.status != QueryRun.STATUS_SUPERSEDED) \
- .order_by(desc(QueryRun.timestamp)) \
- .limit(limit)
-
- def get_by_id(self, id):
- return self.session.query(QueryRun).filter_by(id=id).first()
diff --git a/quarry/web/worker.py b/quarry/web/worker.py
index 1f6c112..e916000 100644
--- a/quarry/web/worker.py
+++ b/quarry/web/worker.py
@@ -1,7 +1,7 @@
import pymysql
from celery.exceptions import SoftTimeLimitExceeded
from celery.utils.log import get_task_logger
-from models.queryrun import QueryRunRepository, QueryRun
+from models.queryrun import QueryRun
from models.queryresult import QuerySuccessResult, QueryErrorResult,
QueryKilledResult
from celery import Celery
from celery.signals import worker_process_init, worker_process_shutdown
@@ -20,7 +20,7 @@
celery.conf.update(yaml.load(open(os.path.join(__dir__,
"../default_config.yaml"))))
celery.conf.update(yaml.load(open(os.path.join(__dir__, "../config.yaml"))))
-conn = query_run_repository = None
+conn = session = None
def make_result(cur):
@@ -34,14 +34,13 @@
@worker_process_init.connect
def init(sender, signal):
- global conn, query_run_repository
+ global conn, session
conn = Connections(celery.conf)
celery_log.info("Initialized lazy loaded connections")
Session = sessionmaker(bind=conn.db_engine)
session = Session()
- query_run_repository = QueryRunRepository(session)
celery_log.info('Initialized query run repository')
@@ -71,15 +70,16 @@
@celery.task(name='worker.run_query')
def run_query(query_run_id):
- global query_run_repository, conn
+ global conn
cur = False
start_time = time.clock()
try:
celery_log.info("Starting run for qrun:%s", query_run_id)
- qrun = query_run_repository.get_by_id(query_run_id)
+ qrun = session.query(QueryRun).filter(QueryRun.id ==
query_run_id).one()
qrun.status = QueryRun.STATUS_RUNNING
- query_run_repository.save(qrun)
+ session.add(qrun)
+ session.commit()
check_result = qrun.rev.is_allowed()
if check_result is not True:
celery_log.info("Check result for qrun:%s failed, with message:
%s", qrun.id, check_result[0])
@@ -95,13 +95,15 @@
qrun.status = QueryRun.STATUS_COMPLETE
celery_log.info("Completed run for qrun:%s successfully", qrun.id)
qresult.output()
- query_run_repository.save(qrun)
+ session.add(qrun)
+ session.commit()
except pymysql.DatabaseError as e:
total_time = time.clock() - start_time
qresult = QueryErrorResult(qrun, total_time,
celery.conf.OUTPUT_PATH_TEMPLATE, e.args[1])
qrun.status = QueryRun.STATUS_FAILED
qresult.output()
- query_run_repository.save(qrun)
+ session.add(qrun)
+ session.commit()
celery_log.info("Completed run for qrun:%s with failure: %s", qrun.id,
e.args[1])
except SoftTimeLimitExceeded:
celery_log.info(
@@ -111,7 +113,8 @@
total_time = time.clock() - start_time
kill_query.delay(conn.replica.thread_id())
qrun.state = QueryRun.STATUS_KILLED
- query_run_repository.save(qrun)
+ session.add(qrun)
+ session.commit()
qresult = QueryKilledResult(qrun, total_time,
celery.conf.OUTPUT_PATH_TEMPLATE)
qresult.output()
finally:
--
To view, visit https://gerrit.wikimedia.org/r/153797
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings
Gerrit-MessageType: newchange
Gerrit-Change-Id: Ib264b11a0ade6137e1d08105a55f627a0049c1a4
Gerrit-PatchSet: 1
Gerrit-Project: analytics/quarry/web
Gerrit-Branch: master
Gerrit-Owner: Yuvipanda <[email protected]>
_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits