summaryrefslogtreecommitdiffstats
path: root/feed/sse_grab.py
diff options
context:
space:
mode:
authorLennart Poettering <lennart@poettering.net>2005-11-23 18:35:19 +0000
committerLennart Poettering <lennart@poettering.net>2005-11-23 18:35:19 +0000
commit3971bc230008a576b9afa9eda47147d88a584776 (patch)
tree81ee529d872606b7279c9631b66eb133e0134ab5 /feed/sse_grab.py
parent3a24de286d8bb6a6fa5c802ad9587e15550f0801 (diff)
add proper locking for archives
git-svn-id: file:///home/lennart/svn/public/sse/trunk@44 5fbabb74-0606-0410-a5e4-b5cc6a42724e
Diffstat (limited to 'feed/sse_grab.py')
-rw-r--r--feed/sse_grab.py37
1 files changed, 23 insertions, 14 deletions
diff --git a/feed/sse_grab.py b/feed/sse_grab.py
index 302c5a7..b1d11db 100644
--- a/feed/sse_grab.py
+++ b/feed/sse_grab.py
@@ -2,36 +2,42 @@
import sys, urllib2, os, socket
-import sse_tar
+import sse_tar, sse_lock
from sse_defs import *
from sse_config import *
socket.setdefaulttimeout(SSE_SOCKET_TIMEOUT)
def grab_archive(meta, recid, provider_id = SSE_PROVIDER_NONE):
-
+
try:
os.mkdir("%s/download" % HOME)
except:
pass
fn = os.path.join(HOME, "download", recid)
+ lock_fn = fn + ".lock"
- download = False
+ if not sse_lock.try_lock_file(lock_fn):
+ print "Skipping locked archive '%s'." % recid
+ return
try:
- f = open(fn+".release", "r")
- except:
- download = True
- else:
- download = f.read(SSE_BLOCK_SIZE) != meta["version"]
- f.close()
+ download = False
+
+ try:
+ f = open(fn+".release", "r")
+ except IOError:
+ download = True
+ else:
+ download = f.read(SSE_BLOCK_SIZE) != meta["version"]
+ f.close()
- archive_url = meta["archive-url"]
+ archive_url = meta["archive-url"]
- if not download:
- print "File %s up-to-date." % archive_url
- else:
+ if not download:
+ print "File %s up-to-date." % archive_url
+ return
print "Downloading %s..." % archive_url
@@ -73,7 +79,10 @@ def grab_archive(meta, recid, provider_id = SSE_PROVIDER_NONE):
f = open(fn+".release", "w")
except:
os.unlink(fn)
-
+
f.write(meta["version"])
f.close()
+
+ finally:
+ sse_lock.unlock_file(lock_fn)