summaryrefslogtreecommitdiffstats
path: root/combox
diff options
context:
space:
mode:
authorSiddharth Ravikumar <sravik@bgsu.edu>2015-04-30 15:02:36 -0400
committerSiddharth Ravikumar <sravik@bgsu.edu>2015-04-30 15:02:36 -0400
commit2925bf8cacfd7716639e0177f444140928ed0c9a (patch)
tree7bf4db3bef5208746a9f95ff26bc8a22fb5da04a /combox
parentbcf127e0472aec90a1569c4bfd9f1c86db88283e (diff)
Updated combox.events.NodeDirMonitor.housekeep's delete functionality.
- Now the housekeep method deletes the file in the combox directory only if all of its shards are missing in the respective node directories -- meaning it was deleted on another computer (running combox). - If it finds only some of all the shards of a file missing, it stores this information in the `file_deleted' dict inside the silo. - tests.events_tests.TestEvents.test_NDM_housekeep_delete tests the delete functionality of combox.events.NodeDirMonitor.housekeep method. modified: combox/events.py modified: tests/events_test.py
Diffstat (limited to 'combox')
-rw-r--r--combox/events.py26
1 files changed, 16 insertions, 10 deletions
diff --git a/combox/events.py b/combox/events.py
index 7026756..e15ea70 100644
--- a/combox/events.py
+++ b/combox/events.py
@@ -232,16 +232,22 @@ class NodeDirMonitor(LoggingEventHandler):
fpaths = filter(fpath_filter, self.silo.keys())
for fpath in fpaths:
- fshards = node_paths(fpath, self.config, True)
-
- for fshard in fshards:
- if not path.exists(fshard):
- # remove the file from combox directory.
- rm_path(fpath)
- print fpath, "was deleted on another computer. Removing it."
- # update silo.
- self.silo.remove(fpath)
- break
+ del_num = 0
+ fshards = node_paths(fpath, self.config, True)
+
+ for fshard in fshards:
+ if not path.exists(fshard):
+ del_num += 1
+
+ if del_num == self.num_nodes:
+ # remove the file from combox directory.
+ rm_path(fpath)
+ print fpath, "was deleted on another computer. Removing it."
+ # update silo.
+ self.silo.remove(fpath)
+ self.silo.node_rem('file_deleted', fpath)
+ elif del_num > 0:
+ self.silo.node_set('file_deleted', fpath, del_num)
for root, dirs, files in os.walk(get_nodedirs(self.config)[0]):
for f in files: