3
0
mirror of https://github.com/jlu5/PyLink.git synced 2024-11-24 03:29:28 +01:00

relay: hack in utils.schedulers so that exportDB only gets queued once globally

Previously, exportDB would be queued once by every IRC object, which was the wrong behavior!
This commit is contained in:
James Lu 2015-07-12 13:09:35 -07:00
parent e073f21417
commit 450584b963
2 changed files with 17 additions and 10 deletions

View File

@ -22,9 +22,9 @@ def loadDB():
", creating a new one in memory...", dbname)
db = {}
def exportDB():
scheduler.enter(10, 1, exportDB)
log.debug("Relay: exporting links database to "+dbname)
def exportDB(scheduler):
scheduler.enter(60, 1, exportDB, argument=(scheduler,))
log.debug("Relay: exporting links database to %s", dbname)
with open(dbname, 'wb') as f:
pickle.dump(db, f, protocol=4)
@ -37,7 +37,7 @@ def create(irc, source, args):
channel = args[0].lower()
except IndexError:
utils.msg(irc, source, "Error: not enough arguments. Needs 1: channel.")
return
return
if not utils.isChannel(channel):
utils.msg(irc, source, 'Error: invalid channel %r.' % channel)
return
@ -60,7 +60,7 @@ def destroy(irc, source, args):
channel = args[0].lower()
except IndexError:
utils.msg(irc, source, "Error: not enough arguments. Needs 1: channel.")
return
return
if not utils.isChannel(channel):
utils.msg(irc, source, 'Error: invalid channel %r.' % channel)
return
@ -77,12 +77,18 @@ def destroy(irc, source, args):
utils.msg(irc, source, 'Error: no such relay %r exists.' % channel)
def main(irc):
global scheduler
scheduler = sched.scheduler()
loadDB()
scheduler.enter(60, 1, exportDB)
thread = threading.Thread(target=scheduler.run)
thread.start()
# HACK: we only want to schedule this once globally, because
# exportDB will otherwise be called by every network that loads this
# plugin.
if 'relaydb' not in utils.schedulers:
utils.schedulers['relaydb'] = scheduler = sched.scheduler()
scheduler.enter(30, 1, exportDB, argument=(scheduler,))
# Thread this because exportDB() queues itself as part of its
# execution, in order to get a repeating loop.
thread = threading.Thread(target=scheduler.run)
thread.start()
for chanpair in db:
network, channel = chanpair
ircobj = utils.networkobjects[network]

View File

@ -9,6 +9,7 @@ global bot_commands, command_hooks
bot_commands = {}
command_hooks = defaultdict(list)
networkobjects = {}
schedulers = {}
class TS6UIDGenerator():
"""TS6 UID Generator module, adapted from InspIRCd source