diff --git a/swift/common/utils.py b/swift/common/utils.py index 5c50e198f1..4ed6e64967 100644 --- a/swift/common/utils.py +++ b/swift/common/utils.py @@ -3583,6 +3583,12 @@ def ismount_raw(path): # path/.. is the same i-node as path return True + # Device and inode checks are not properly working inside containerized + # environments, therefore using a workaround to check if there is a + # stubfile placed by an operator + if os.path.isfile(os.path.join(path, ".ismount")): + return True + return False diff --git a/test/unit/common/test_utils.py b/test/unit/common/test_utils.py index 25926f2ed1..aaf2e1f83a 100644 --- a/test/unit/common/test_utils.py +++ b/test/unit/common/test_utils.py @@ -3300,6 +3300,16 @@ cluster_dfw1 = http://dfw1.host/v1/ finally: shutil.rmtree(tmpdir) + def test_ismount_successes_stubfile(self): + tmpdir = mkdtemp() + fname = os.path.join(tmpdir, ".ismount") + try: + with open(fname, "w") as stubfile: + stubfile.write("") + self.assertTrue(utils.ismount(tmpdir)) + finally: + shutil.rmtree(tmpdir) + def test_parse_content_type(self): self.assertEqual(utils.parse_content_type('text/plain'), ('text/plain', []))