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

Reply via email to