lock repos while adding
This commit is contained in:
parent
edd0a4a550
commit
65ae1783c1
|
@ -4,6 +4,8 @@ import persistent
|
||||||
import BTrees.OOBTree
|
import BTrees.OOBTree
|
||||||
from repobot.provider import providers
|
from repobot.provider import providers
|
||||||
import os
|
import os
|
||||||
|
from threading import Lock
|
||||||
|
from collections import defaultdict
|
||||||
from repobot.common import plist, pmap
|
from repobot.common import plist, pmap
|
||||||
|
|
||||||
|
|
||||||
|
@ -37,6 +39,7 @@ class RepoDb(object):
|
||||||
self.storage = ZODB.FileStorage.FileStorage(db_path)
|
self.storage = ZODB.FileStorage.FileStorage(db_path)
|
||||||
self.db = ZODB.DB(self.storage)
|
self.db = ZODB.DB(self.storage)
|
||||||
self.data_root = data_root
|
self.data_root = data_root
|
||||||
|
self.repolocks = defaultdict(lambda: Lock())
|
||||||
|
|
||||||
with self.db.transaction() as c:
|
with self.db.transaction() as c:
|
||||||
if "repos" not in c.root():
|
if "repos" not in c.root():
|
||||||
|
@ -45,6 +48,7 @@ class RepoDb(object):
|
||||||
c.root.sendqueue = plist()
|
c.root.sendqueue = plist()
|
||||||
|
|
||||||
def add_package(self, provider, reponame, pkgname, pkgversion, fname, fobj, params):
|
def add_package(self, provider, reponame, pkgname, pkgversion, fname, fobj, params):
|
||||||
|
with self.repolocks[(provider, reponame)]:
|
||||||
with self.db.transaction() as c:
|
with self.db.transaction() as c:
|
||||||
repo = self._get_repo(c, provider, reponame)
|
repo = self._get_repo(c, provider, reponame)
|
||||||
datadir = os.path.join(self.data_root, provider, reponame)
|
datadir = os.path.join(self.data_root, provider, reponame)
|
||||||
|
|
Loading…
Reference in New Issue