summaryrefslogtreecommitdiffstats
path: root/combox
diff options
context:
space:
mode:
authorSiddharth Ravikumar <sravik@bgsu.edu>2015-04-01 09:45:45 -0400
committerSiddharth Ravikumar <sravik@bgsu.edu>2015-04-01 09:45:45 -0400
commit277408c058283bf73fbe6355fc7db0f6dbcbc24b (patch)
tree8389d8fcf96f718639e384284cf43fd6d6da89cf /combox
parentd3976cc51ad53a369f698d1141cf966ca414a904 (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.py4
-rw-r--r--combox/events.py13
-rw-r--r--combox/silo.py14
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):