summaryrefslogtreecommitdiffstats
path: root/gluster/swift/common/fs_utils.py
diff options
context:
space:
mode:
authorPeter Portante <peter.portante@redhat.com>2013-09-20 11:25:04 -0400
committerLuis Pabon <lpabon@redhat.com>2013-10-29 07:25:59 -0700
commit100d6b01bd40d8b01335e5ecd4a592df79e75b63 (patch)
treefb6875e07b37808b56aa2f0078040c9ef480a58e /gluster/swift/common/fs_utils.py
parent70a4cef96c42fe30e62d23ae816a330d3d35df63 (diff)
Rebase to lastest OpenStack Swift DiskFile API
As of October 28th, 2013, we rebase to OpenStack Swift master (commit 4bfe674) to pick up the lastest officially supported DiskFile API changes. We use a snapshot of OpenStack Swift stored in the gluster-swift launchpad downloads area so that we can deliberately rebase at our own pace. With this refactoring, all the code for handling I/O is wholly contained in the swift tree for object operations. This will allow us to use a different fs_utils implementation in the future (for example, one based on a yet-to-be-implemented python bindings over libgfapi). This also means the "Fake_file" class has been removed entirely. Change-Id: I767983f88c59786e30b6c64da16d1cb6ab3c3e7f Signed-off-by: Peter Portante <peter.portante@redhat.com> Reviewed-on: http://review.gluster.org/5993 Reviewed-by: Luis Pabon <lpabon@redhat.com> Tested-by: Luis Pabon <lpabon@redhat.com>
Diffstat (limited to 'gluster/swift/common/fs_utils.py')
-rw-r--r--gluster/swift/common/fs_utils.py99
1 files changed, 51 insertions, 48 deletions
diff --git a/gluster/swift/common/fs_utils.py b/gluster/swift/common/fs_utils.py
index 8b26fd0..199984a 100644
--- a/gluster/swift/common/fs_utils.py
+++ b/gluster/swift/common/fs_utils.py
@@ -18,42 +18,39 @@ import os
import errno
import stat
import random
-import os.path as os_path # noqa
+import ctypes
+import os.path as _os_path
from eventlet import sleep
+from swift.common.utils import load_libc_function
from gluster.swift.common.exceptions import FileOrDirNotFoundError, \
- NotDirectoryError, GlusterFileSystemOSError, GlusterFileSystemIOError
+ NotDirectoryError, GlusterFileSystemOSError
-class Fake_file(object):
- def __init__(self, path):
- self.path = path
-
- def tell(self):
- return 0
-
- def read(self, count):
- return None
-
- def fileno(self):
- return -1
-
- def close(self):
- pass
+os_path = _os_path
def do_walk(*args, **kwargs):
return os.walk(*args, **kwargs)
-def do_write(fd, msg):
+def do_write(fd, buf):
try:
- cnt = os.write(fd, msg)
+ cnt = os.write(fd, buf)
except OSError as err:
raise GlusterFileSystemOSError(
err.errno, '%s, os.write("%s", ...)' % (err.strerror, fd))
return cnt
+def do_read(fd, n):
+ try:
+ buf = os.read(fd, n)
+ except OSError as err:
+ raise GlusterFileSystemOSError(
+ err.errno, '%s, os.write("%s", ...)' % (err.strerror, fd))
+ return buf
+
+
def do_ismount(path):
"""
Test whether a path is a mount point.
@@ -203,37 +200,21 @@ def do_fstat(fd):
def do_open(path, flags, **kwargs):
- if isinstance(flags, int):
- try:
- fd = os.open(path, flags, **kwargs)
- except OSError as err:
- raise GlusterFileSystemOSError(
- err.errno, '%s, os.open("%s", %x, %r)' % (
- err.strerror, path, flags, kwargs))
- return fd
- else:
- try:
- fp = open(path, flags, **kwargs)
- except IOError as err:
- raise GlusterFileSystemIOError(
- err.errno, '%s, open("%s", %s, %r)' % (
- err.strerror, path, flags, kwargs))
- return fp
+ try:
+ fd = os.open(path, flags, **kwargs)
+ except OSError as err:
+ raise GlusterFileSystemOSError(
+ err.errno, '%s, os.open("%s", %x, %r)' % (
+ err.strerror, path, flags, kwargs))
+ return fd
def do_close(fd):
- if isinstance(fd, file) or isinstance(fd, Fake_file):
- try:
- fd.close()
- except IOError as err:
- raise GlusterFileSystemIOError(
- err.errno, '%s, os.close(%s)' % (err.strerror, fd))
- else:
- try:
- os.close(fd)
- except OSError as err:
- raise GlusterFileSystemOSError(
- err.errno, '%s, os.close(%s)' % (err.strerror, fd))
+ try:
+ os.close(fd)
+ except OSError as err:
+ raise GlusterFileSystemOSError(
+ err.errno, '%s, os.close(%s)' % (err.strerror, fd))
def do_unlink(path, log=True):
@@ -268,9 +249,31 @@ def do_fsync(fd):
def do_fdatasync(fd):
try:
os.fdatasync(fd)
+ except AttributeError:
+ do_fsync(fd)
except OSError as err:
raise GlusterFileSystemOSError(
- err.errno, '%s, os.fdatasync("%s")' % (err.strerror, fd))
+ err.errno, '%s, os.fsync("%s")' % (err.strerror, fd))
+
+
+_posix_fadvise = None
+
+
+def do_fadvise64(fd, offset, length):
+ global _posix_fadvise
+ if _posix_fadvise is None:
+ _posix_fadvise = load_libc_function('posix_fadvise64')
+ # 4 means "POSIX_FADV_DONTNEED"
+ _posix_fadvise(fd, ctypes.c_uint64(offset),
+ ctypes.c_uint64(length), 4)
+
+
+def do_lseek(fd, pos, how):
+ try:
+ os.lseek(fd, pos, how)
+ except OSError as err:
+ raise GlusterFileSystemOSError(
+ err.errno, '%s, os.fsync("%s")' % (err.strerror, fd))
def mkdirs(path):