'Yields tuples of (hash_only, timestamps) for object
information stored for the given device, partition, and
(optionally) suffixes. If suffixes is None, all stored
suffixes will be searched for object hashes. Note that if
suffixes is not None but empty, such as [], then nothing will
be yielded.
timestamps is a dict which may contain items mapping:
- ts_data -> timestamp of data or tombstone file,
- ts_meta -> timestamp of meta file, if one exists
- ts_ctype -> timestamp of meta file containing most recent
content-type value, if one exists
where timestamps are instances of
:class:`~swift.common.utils.Timestamp`
:param device: name of target device
:param partition: partition name
:param policy: the StoragePolicy instance
:param suffixes: optional list of suffix directories to be searched'

def yield_hashes(self, device, partition, policy, suffixes=None, **kwargs):

    dev_path = self.get_dev_path(device)
    if (not dev_path):
        raise DiskFileDeviceUnavailable()
    if (suffixes is None):
        suffixes = self.yield_suffixes(device, partition, policy)
    else:
        partition_path = get_part_path(dev_path, policy, partition)
        suffixes = ((os.path.join(partition_path, suffix), suffix) for suffix in suffixes)
    key_preference = (('ts_meta', 'meta_info', 'timestamp'), ('ts_data', 'data_info', 'timestamp'), ('ts_data', 'ts_info', 'timestamp'), ('ts_ctype', 'ctype_info', 'ctype_timestamp'))
    for (suffix_path, suffix) in suffixes:
        for object_hash in self._listdir(suffix_path):
            object_path = os.path.join(suffix_path, object_hash)
            try:
                results = self.cleanup_ondisk_files(object_path, **kwargs)
                timestamps = {}
                for (ts_key, info_key, info_ts_key) in key_preference:
                    if (info_key not in results):
                        continue
                    timestamps[ts_key] = results[info_key][info_ts_key]
                if ('ts_data' not in timestamps):
                    continue
                (yield (object_hash, timestamps))
            except AssertionError as err:
                self.logger.debug(('Invalid    file    set    in    %s    (%s)' % (object_path, err)))
            except DiskFileError as err:
                self.logger.debug(('Invalid    diskfile    filename    in    %r    (%s)' % (object_path, err)))
