[Author Prev][Author Next][Thread Prev][Thread Next][Author Index][Thread Index]
[or-cvs] r21780: {torctl} Try to warn on missing descriptors, and also give Tor more t (torctl/branches/stable/python/TorCtl)
Author: mikeperry
Date: 2010-03-02 01:06:53 +0000 (Tue, 02 Mar 2010)
New Revision: 21780
Modified:
torctl/branches/stable/python/TorCtl/SQLSupport.py
Log:
Try to warn on missing descriptors, and also give Tor more
time to fetch them.
Modified: torctl/branches/stable/python/TorCtl/SQLSupport.py
===================================================================
--- torctl/branches/stable/python/TorCtl/SQLSupport.py 2010-03-02 01:05:18 UTC (rev 21779)
+++ torctl/branches/stable/python/TorCtl/SQLSupport.py 2010-03-02 01:06:53 UTC (rev 21780)
@@ -21,6 +21,7 @@
from TorCtl import EVENT_TYPE, EVENT_STATE, TorCtlError
import sqlalchemy
+import sqlalchemy.orm.exc
from sqlalchemy.orm import scoped_session, sessionmaker, eagerload, lazyload, eagerload_all
from sqlalchemy import create_engine, and_, or_, not_, func
from sqlalchemy.sql import func,select
@@ -662,10 +663,10 @@
class ConsensusTrackerListener(TorCtl.DualEventListener):
def __init__(self):
TorCtl.DualEventListener.__init__(self)
- self.last_desc_at = time.time()-10.0
+ self.last_desc_at = time.time()+60 # Give tor some time to start up
self.consensus = None
self.wait_for_signal = False
-
+
CONSENSUS_DONE = 0x7fffffff
# TODO: What about non-running routers and uptime information?
@@ -675,16 +676,20 @@
if idhex not in self.consensus.routers: continue
rc = self.consensus.routers[idhex]
if rc.down: continue
- r = Router.query.options(eagerload('bw_history')).filter_by(
- idhex=idhex).with_labels().one()
- bwh = BwHistory(router=r, rank=rc.list_rank, bw=rc.bw,
- desc_bw=rc.desc_bw, pub_time=r.published)
- r.bw_history.append(bwh)
- #tc_session.add(bwh)
- tc_session.add(r)
+ try:
+ r = Router.query.options(eagerload('bw_history')).filter_by(
+ idhex=idhex).with_labels().one()
+ bwh = BwHistory(router=r, rank=rc.list_rank, bw=rc.bw,
+ desc_bw=rc.desc_bw, pub_time=r.published)
+ r.bw_history.append(bwh)
+ #tc_session.add(bwh)
+ tc_session.add(r)
+ except sqlalchemy.orm.exc.NoResultFound:
+ plog("WARN", "No descriptor found for consenus router "+str(idhex))
+
plog("INFO", "Consensus history updated.")
tc_session.commit()
-
+
def _update_db(self, idlist):
# FIXME: It is tempting to delay this as well, but we need
# this info to be present immediately for circuit construction...
@@ -693,13 +698,10 @@
if idhex in self.consensus.routers:
rc = self.consensus.routers[idhex]
r = Router.query.filter_by(idhex=rc.idhex).first()
-
if r and r.orhash == rc.orhash:
# We already have it stored. (Possible spurious NEWDESC)
continue
-
if not r: r = Router()
-
r.from_router(rc)
tc_session.add(r)
plog("INFO", "Consensus db updated")