diff options
author | Siddharth Ravikumar <sravik@bgsu.edu> | 2015-04-01 09:45:45 -0400 |
---|---|---|
committer | Siddharth Ravikumar <sravik@bgsu.edu> | 2015-04-01 09:45:45 -0400 |
commit | 277408c058283bf73fbe6355fc7db0f6dbcbc24b (patch) | |
tree | 8389d8fcf96f718639e384284cf43fd6d6da89cf /combox | |
parent | d3976cc51ad53a369f698d1141cf966ca414a904 (diff) |
refactored the way locks work in combox.siloComboxSilo.
modified: combox/cbox.py
modified: combox/events.py
modified: combox/silo.py
modified: tests/events_test.py
modified: tests/silo_test.py
Diffstat (limited to 'combox')
-rw-r--r-- | combox/cbox.py | 4 | ||||
-rw-r--r-- | combox/events.py | 13 | ||||
-rw-r--r-- | combox/silo.py | 14 |
3 files changed, 20 insertions, 11 deletions
diff --git a/combox/cbox.py b/combox/cbox.py index 4424274..add5883 100644 --- a/combox/cbox.py +++ b/combox/cbox.py @@ -25,6 +25,7 @@ import yaml from argparse import ArgumentParser from os import path from sys import exit +from threading import Lock from watchdog.observers import Observer from combox.config import config_cb @@ -39,7 +40,8 @@ def run_cb(config): Runs combox. """ c_path = path.abspath(config['combox_dir']) - event_handler = ComboxDirMonitor(config) + db_lock = Lock() + event_handler = ComboxDirMonitor(config, db_lock) observer = Observer() observer.schedule(event_handler, c_path, recursive=True) diff --git a/combox/events.py b/combox/events.py index fa47ceb..3ef4386 100644 --- a/combox/events.py +++ b/combox/events.py @@ -20,6 +20,7 @@ import os import logging from os import path +from threading import Lock from watchdog.events import LoggingEventHandler @@ -37,7 +38,7 @@ class ComboxDirMonitor(LoggingEventHandler): """ - def __init__(self, config): + def __init__(self, config, dblock): """ config: a dictinary which contains combox configuration. """ @@ -48,7 +49,7 @@ class ComboxDirMonitor(LoggingEventHandler): datefmt='%Y-%m-%d %H:%M:%S') self.config = config - self.silo = ComboxSilo(self.config) + self.silo = ComboxSilo(self.config, dblock) self.housekeep() @@ -57,7 +58,7 @@ class ComboxDirMonitor(LoggingEventHandler): """ Re-reads the silo from disk. """ - self.silo = ComboxSilo(self.config) + self.silo.reload() def housekeep(self): @@ -186,7 +187,7 @@ class NodeDirMonitor(LoggingEventHandler): """ - def __init__(self, config): + def __init__(self, config, dblock): """ config: a dictinary which contains combox configuration. """ @@ -197,14 +198,14 @@ class NodeDirMonitor(LoggingEventHandler): datefmt='%Y-%m-%d %H:%M:%S') self.config = config - self.silo = ComboxSilo(self.config) + self.silo = ComboxSilo(self.config, dblock) def silo_update(self): """ Re-reads the silo from disk. """ - self.silo = ComboxSilo(self.config) + self.silo.reload() def shardp(self, path): diff --git a/combox/silo.py b/combox/silo.py index 55345c9..f391d2e 100644 --- a/combox/silo.py +++ b/combox/silo.py @@ -30,14 +30,14 @@ class ComboxSilo(object): """ - def __init__(self, config): + def __init__(self, config, lock): """config: a dictinary which contains combox configuration. """ self.config = config - silo = path.join(config['silo_dir'], 'silo.db') - self.db = pickledb.load(silo, True) + self.silo_path = path.join(config['silo_dir'], 'silo.db') + self.db = pickledb.load(self.silo_path, True) ## things we need for housekeep the node directory. self.node_dicts = ['shard_created', 'shard_modified', 'shard_moved', @@ -48,7 +48,13 @@ class ComboxSilo(object): if not self.db.get(ndict): self.db.dcreate(ndict) - self.lock = Lock() + self.lock = lock + + + def reload(self): + """Re-loads the DB from disk.""" + with self.lock: + self.db = pickledb.load(self.silo_path, True) def update(self, filep): |