Ejemplo n.º 1
0
 def test_haveReadLocks(self):
     """check if there is a ReadLock """
     timeout = 2.0
     write_lock = WriteLock(self.lock_dir, timeout)
     read_lock = ReadLock(self.lock_dir)
     # acquired ReadLock
     assert read_lock.acquire(0.1)
     result_before = write_lock._haveReadLocks()
     assert result_before
     # try to acquire WriteLock
     assert write_lock.acquire()
     result_after = write_lock._haveReadLocks()
     assert not result_after
Ejemplo n.º 2
0
def inc_get_metas(request, args, handle=None):
    pages, keys, _ = metatable_parseargs(request, args, get_all_keys=True)

    current = dict()
    for page in pages:
        request.page = Page(request, page)
        # metatable_parseargs checks read permissions, no need to do it again
        metas = get_metas(request, page, keys, checkAccess=False)

        current[page] = dict()
        for key in keys:
            values = set(metas[key])
            current[page][key] = values

    cachedir = os.path.join(request.cfg.cache_dir, "getmetas")
    if not os.path.exists(cachedir):
        os.makedirs(cachedir)

    lock = WriteLock(cachedir, timeout=60.0)
    success = lock.acquire()

    path = os.path.join(cachedir, request.cfg.siteid + ".shelve")
    db = shelve.open(path)

    incremental = True
    try:
        if not handle or handle not in db:
            incremental = False
            handle = create_new_handle(db)
        previous = db.get(handle, dict())
        db[handle] = current
    finally:
        db.close()

    if lock.isLocked():
        lock.release()

    return [incremental, handle, diff(previous, current)]
Ejemplo n.º 3
0
 def test_writelock_acquire(self):
     """ util.lock: WriteLock: acquire """
     lock = WriteLock(self.lock_dir)
     assert lock.acquire(0.1)
     with pytest.raises(RuntimeError):
         assert lock.acquire(0.1)