diff options
author | venkata edara <redara@redhat.com> | 2017-05-10 13:27:38 +0530 |
---|---|---|
committer | Prashanth Pai <ppai@redhat.com> | 2017-05-11 05:48:27 +0000 |
commit | 513988915aa1af13a989d062b021fe1562cbf18d (patch) | |
tree | 1c281911e3a9bfa97f8a7285f20691cb77c45c1d /gluster/swift/obj/diskfile.py | |
parent | e9c2c5eb55e1012ccce0ce51ac48bed0c0f1d4b7 (diff) |
Rebase to Swift 2.10.1 (newton)
Change-Id: I53a962c9a301089c8aed0b43c50f944c30225944
Signed-off-by: venkata edara <redara@redhat.com>
Reviewed-on: https://review.gluster.org/16653
Reviewed-by: Prashanth Pai <ppai@redhat.com>
Tested-by: Prashanth Pai <ppai@redhat.com>
Diffstat (limited to 'gluster/swift/obj/diskfile.py')
-rw-r--r-- | gluster/swift/obj/diskfile.py | 65 |
1 files changed, 62 insertions, 3 deletions
diff --git a/gluster/swift/obj/diskfile.py b/gluster/swift/obj/diskfile.py index b94cf3d..be0669f 100644 --- a/gluster/swift/obj/diskfile.py +++ b/gluster/swift/obj/diskfile.py @@ -16,6 +16,7 @@ import os import stat import errno +from collections import defaultdict try: from random import SystemRandom random = SystemRandom() @@ -25,10 +26,11 @@ import logging import time from uuid import uuid4 from eventlet import sleep +from swift.common.utils import Timestamp from contextlib import contextmanager from gluster.swift.common.exceptions import AlreadyExistsAsFile, \ AlreadyExistsAsDir, DiskFileContainerDoesNotExist -from swift.common.utils import ThreadPool +from gluster.swift.common.utils import ThreadPool from swift.common.exceptions import DiskFileNotExist, DiskFileError, \ DiskFileNoSpace, DiskFileDeviceUnavailable, DiskFileNotOpen, \ DiskFileExpired @@ -212,9 +214,16 @@ class DiskFileManager(SwiftDiskFileManager): :param conf: caller provided configuration object :param logger: caller provided logger """ + def __init__(self, conf, logger): + super(DiskFileManager, self).__init__(conf, logger) + threads_per_disk = int(conf.get('threads_per_disk', '0')) + self.threadpools = defaultdict( + lambda: ThreadPool(nthreads=threads_per_disk)) + def get_diskfile(self, device, partition, account, container, obj, policy=None, **kwargs): dev_path = self.get_dev_path(device, self.mount_check) + if not dev_path: raise DiskFileDeviceUnavailable() return DiskFile(self, dev_path, self.threadpools[device], @@ -553,7 +562,7 @@ class DiskFile(object): """ def __init__(self, mgr, dev_path, threadpool, partition, account=None, container=None, obj=None, - policy=None, uid=DEFAULT_UID, gid=DEFAULT_GID): + policy=None, uid=DEFAULT_UID, gid=DEFAULT_GID, **kwargs): # Variables partition and policy is currently unused. self._mgr = mgr self._device_path = dev_path @@ -588,6 +597,48 @@ class DiskFile(object): self._data_file = os.path.join(self._put_datadir, self._obj) self._disk_file_open = False + @property + def timestamp(self): + if self._metadata is None: + raise DiskFileNotOpen() + return Timestamp(self._metadata.get(X_TIMESTAMP)) + + @property + def data_timestamp(self): + return self.timestamp + + @property + def durable_timestamp(self): + """ + Provides the timestamp of the newest data file found in the object + directory. + + :return: A Timestamp instance, or None if no data file was found. + :raises DiskFileNotOpen: if the open() method has not been previously + called on this instance. + """ + if self._metadata: + return Timestamp(self._metadata.get(X_TIMESTAMP)) + return None + + @property + def fragments(self): + return None + + @property + def content_type(self): + if self._metadata is None: + raise DiskFileNotOpen() + return self._metadata.get(X_CONTENT_TYPE) + + @property + def content_type_timestamp(self): + if self._metadata is None: + raise DiskFileNotOpen() + t = self._metadata.get('Content-Type-Timestamp') or \ + self._metadata.get(X_TIMESTAMP) + return Timestamp(t) + def open(self): """ Open the object. @@ -710,6 +761,15 @@ class DiskFile(object): self._disk_file_open = False self._close_fd() + def get_datafile_metadata(self): + '''gluster swift dont have seperate data,meta files ''' + if self._metadata is None: + raise DiskFileNotOpen() + return self._metadata + + def get_metafile_metadata(self): + return None + def get_metadata(self): """ Provide the metadata for a previously opened object as a dictionary. @@ -879,7 +939,6 @@ class DiskFile(object): :raises AlreadyExistsAsFile: if path or part of a path is not a \ directory """ - data_file = os.path.join(self._put_datadir, self._obj) # Assume the full directory path exists to the file already, and |