From 7af0525a00a1d7baf03cbf863dcd681e253d54d0 Mon Sep 17 00:00:00 2001
From: Thiago da Silva <thiago@redhat.com>
Date: Tue, 25 Mar 2014 14:02:02 -0400
Subject: [PATCH] removing _make_directory_locked function

This function was added as a workaround for race condition
bug found in earlier versions of Glusterfs. The bug has since
been fixed in the latest version of Glusterfs, so there's no
need to support this code any longer.

Change-Id: I50ebb66bdf0553ae8bab98ed8f783e0389e83fa8
Signed-off-by: Thiago da Silva <thiago@redhat.com>
Reviewed-on: http://review.gluster.org/7335
Reviewed-by: Luis Pabon <lpabon@redhat.com>
Tested-by: Luis Pabon <lpabon@redhat.com>
---
 gluster/swift/obj/diskfile.py | 77 ++---------------------------------
 1 file changed, 4 insertions(+), 73 deletions(-)

diff --git a/gluster/swift/obj/diskfile.py b/gluster/swift/obj/diskfile.py
index 1f8aa57..ad12c2d 100644
--- a/gluster/swift/obj/diskfile.py
+++ b/gluster/swift/obj/diskfile.py
@@ -15,7 +15,6 @@
 
 import os
 import stat
-import fcntl
 import errno
 try:
     from random import SystemRandom
@@ -73,71 +72,7 @@ def _random_sleep():
     sleep(random.uniform(0.5, 0.15))
 
 
-def _lock_parent(full_path):
-    parent_path, _ = full_path.rsplit(os.path.sep, 1)
-    try:
-        fd = os.open(parent_path, os.O_RDONLY | O_CLOEXEC)
-    except OSError as err:
-        if err.errno == errno.ENOENT:
-            # Cannot lock the parent because it does not exist, let the caller
-            # handle this situation.
-            return False
-        raise
-    else:
-        while True:
-            # Spin sleeping for 1/10th of a second until we get the lock.
-            # FIXME: Consider adding a final timeout just abort the operation.
-            try:
-                fcntl.flock(fd, fcntl.LOCK_EX | fcntl.LOCK_NB)
-            except IOError as err:
-                if err.errno == errno.EAGAIN:
-                    _random_sleep()
-                else:
-                    # Don't leak an open file on an exception
-                    os.close(fd)
-                    raise
-            except Exception:
-                # Don't leak an open file for any other exception
-                os.close(fd)
-                raise
-            else:
-                break
-        return fd
-
-
-def _make_directory_locked(full_path, uid, gid, metadata=None):
-    fd = _lock_parent(full_path)
-    if fd is False:
-        # Parent does not exist either, pass this situation on to the caller
-        # to handle.
-        return False, metadata
-    try:
-        # Check for directory existence
-        stats = do_stat(full_path)
-        if stats:
-            # It now exists, having acquired the lock of its parent directory,
-            # but verify it is actually a directory
-            is_dir = stat.S_ISDIR(stats.st_mode)
-            if not is_dir:
-                # It is not a directory!
-                raise DiskFileError("_make_directory_locked: non-directory"
-                                    " found at path %s when expecting a"
-                                    " directory", full_path)
-            return True, metadata
-
-        # We know the parent directory exists, and we have it locked, attempt
-        # the creation of the target directory.
-        return _make_directory_unlocked(full_path, uid, gid, metadata=metadata)
-    finally:
-        # We're done here, be sure to remove our lock and close our open FD.
-        try:
-            fcntl.flock(fd, fcntl.LOCK_UN)
-        except:
-            pass
-        os.close(fd)
-
-
-def _make_directory_unlocked(full_path, uid, gid, metadata=None):
+def make_directory(full_path, uid, gid, metadata=None):
     """
     Make a directory and change the owner ship as specified, and potentially
     creating the object metadata if requested.
@@ -246,22 +181,18 @@ if _fs_conf.read(os.path.join('/etc/swift', 'fs.conf')):
     try:
         _mkdir_locking = _fs_conf.get('DEFAULT', 'mkdir_locking', "no") \
             in TRUE_VALUES
+        logging.warn("The option mkdir_locking has been deprecated and is"
+                     " no longer supported")
     except (NoSectionError, NoOptionError):
-        _mkdir_locking = False
+        pass
     try:
         _use_put_mount = _fs_conf.get('DEFAULT', 'use_put_mount', "no") \
             in TRUE_VALUES
     except (NoSectionError, NoOptionError):
         _use_put_mount = False
 else:
-    _mkdir_locking = False
     _use_put_mount = False
 
-if _mkdir_locking:
-    make_directory = _make_directory_locked
-else:
-    make_directory = _make_directory_unlocked
-
 
 def _adjust_metadata(metadata):
     # Fix up the metadata to ensure it has a proper value for the