예제 #1
0
 def test_non_blocking_read_during_write(self):
     with locks.locked_open(self.file_path, locks.M_WRITE):
         with self.assertRaises(IOError):
             with locks.locked_open(self.file_path,
                                    locks.M_READ,
                                    blocking=False):
                 pass
예제 #2
0
 def test_read_write(self):
     _write(self.file_path, self.test_data)
     with locks.locked_open(self.file_path, locks.M_READWRITE) as f:
         data = f.read().swapcase()
         f.seek(0)
         f.write(data)
     self.assertEqual(self.test_data.swapcase(), _read(self.file_path))
예제 #3
0
 def test_read_write(self):
     _write(self.file_path, self.test_data)
     with locks.locked_open(self.file_path, locks.M_READWRITE) as f:
         data = f.read().swapcase()
         f.seek(0)
         f.write(data)
     self.assertEqual(self.test_data.swapcase(), _read(self.file_path))
예제 #4
0
def get_namespace_version(namespace):
    """Get version of a namespace.

    Args:
        namespace (str): Namespace itself.

    Returns:
        Namespace version as an integer if it exists, otherwise None.
    """
    validate_namespace(namespace)
    path = _get_ns_version_file_path(namespace)
    if not os.path.isfile(path):
        return None
    with locks.locked_open(path) as f:
        try:
            cont = f.read()
            return int(cont.decode(ENCODING_ASCII))
        except ValueError as e:
            raise RuntimeError("Failed to get version of namespace. Error: %s" % e)
예제 #5
0
def invalidate_namespace(namespace):
    """Invalidates specified namespace.

    Invalidation is done by incrementing version of the namespace

    Args:
        namespace: Namespace that needs to be invalidated.

    Returns:
        New version number.
    """
    validate_namespace(namespace)
    current_version = get_namespace_version(namespace)
    if current_version is None:  # namespace isn't initialized
        new_version = 1
    else:
        new_version = current_version + 1
    with locks.locked_open(_get_ns_version_file_path(namespace), mode=locks.M_WRITE) as f:
        f.write(str(new_version).encode(ENCODING_ASCII))
    return new_version
예제 #6
0
def get_namespace_version(namespace):
    """Get version of a namespace.

    Args:
        namespace (str): Namespace itself.

    Returns:
        Namespace version as an integer if it exists, otherwise None.
    """
    validate_namespace(namespace)
    path = _get_ns_version_file_path(namespace)
    if not os.path.isfile(path):
        return None
    with locks.locked_open(path) as f:
        try:
            cont = f.read()
            return int(cont.decode(ENCODING_ASCII))
        except ValueError as e:
            raise RuntimeError(
                "Failed to get version of namespace. Error: %s" % e)
예제 #7
0
def invalidate_namespace(namespace):
    """Invalidates specified namespace.

    Invalidation is done by incrementing version of the namespace

    Args:
        namespace: Namespace that needs to be invalidated.

    Returns:
        New version number.
    """
    validate_namespace(namespace)
    current_version = get_namespace_version(namespace)
    if current_version is None:  # namespace isn't initialized
        new_version = 1
    else:
        new_version = current_version + 1
    with locks.locked_open(_get_ns_version_file_path(namespace),
                           mode=locks.M_WRITE) as f:
        f.write(str(new_version).encode(ENCODING_ASCII))
    return new_version
예제 #8
0
 def func_other(self):
     with self.assertRaises(IOError):
         with locks.locked_open(self.file_path,
                                locks.M_WRITE,
                                blocking=False):
             pass
예제 #9
0
 def func_blocker(self):
     with locks.locked_open(self.file_path, locks.M_READ):
         while True:
             pass
예제 #10
0
 def test_concurrent_read(self):
     _write(self.file_path, self.test_data)
     with locks.locked_open(self.file_path, locks.M_READ) as f1:
         with locks.locked_open(self.file_path, locks.M_READ) as f2:
             self.assertEqual(self.test_data, f1.read())
             self.assertEqual(self.test_data, f2.read())
예제 #11
0
 def test_read(self):
     _write(self.file_path, self.test_data)
     with locks.locked_open(self.file_path, locks.M_READWRITE) as f:
         self.assertEqual(self.test_data, f.read())
예제 #12
0
 def test_read(self):
     _write(self.file_path, self.test_data)
     with locks.locked_open(self.file_path, locks.M_READWRITE) as f:
         self.assertEqual(self.test_data, f.read())
예제 #13
0
 def func_other(self):
     with self.assertRaises(IOError):
         with locks.locked_open(self.file_path, locks.M_WRITE, blocking=False):
             pass
예제 #14
0
 def func_blocker(self):
     with locks.locked_open(self.file_path, locks.M_READ):
         while True:
             pass
예제 #15
0
 def test_non_blocking_write_during_read(self):
     _write(self.file_path, self.test_data)
     with locks.locked_open(self.file_path, locks.M_READ):
         with self.assertRaises(IOError):
             with locks.locked_open(self.file_path, locks.M_WRITE, blocking=False):
                 pass
예제 #16
0
 def test_concurrent_read(self):
     _write(self.file_path, self.test_data)
     with locks.locked_open(self.file_path, locks.M_READ) as f1:
         with locks.locked_open(self.file_path, locks.M_READ) as f2:
             self.assertEqual(self.test_data, f1.read())
             self.assertEqual(self.test_data, f2.read())
예제 #17
0
 def test_write(self):
     with locks.locked_open(self.file_path, locks.M_WRITE) as f:
         f.write(self.test_data)
     self.assertEqual(self.test_data, _read(self.file_path))
예제 #18
0
 def test_write(self):
     with locks.locked_open(self.file_path, locks.M_WRITE) as f:
         f.write(self.test_data)
     self.assertEqual(self.test_data, _read(self.file_path))