示例#1
0
 def __init__(self, conf, logger, rcache, devices, zero_byte_only_at_fps=0):
     self.conf = conf
     self.logger = logger
     self.devices = devices
     self.diskfile_mgr = diskfile.DiskFileManager(conf, self.logger)
     self.max_files_per_second = float(conf.get('files_per_second', 20))
     self.max_bytes_per_second = float(
         conf.get('bytes_per_second', 10000000))
     self.auditor_type = 'ALL'
     self.zero_byte_only_at_fps = zero_byte_only_at_fps
     if self.zero_byte_only_at_fps:
         self.max_files_per_second = float(self.zero_byte_only_at_fps)
         self.auditor_type = 'ZBF'
     self.log_time = int(conf.get('log_time', 3600))
     self.last_logged = 0
     self.files_running_time = 0
     self.bytes_running_time = 0
     self.bytes_processed = 0
     self.total_bytes_processed = 0
     self.total_files_processed = 0
     self.passes = 0
     self.quarantines = 0
     self.errors = 0
     self.rcache = rcache
     self.stats_sizes = sorted(
         [int(s) for s in list_from_csv(conf.get('object_size_stats'))])
     self.stats_buckets = dict([(s, 0)
                                for s in self.stats_sizes + ['OVER']])
示例#2
0
 def setUp(self):
     utils.HASH_PATH_SUFFIX = 'endcap'
     utils.HASH_PATH_PREFIX = ''
     # Setup a test ring (stolen from common/test_ring.py)
     self.testdir = tempfile.mkdtemp()
     self.devices = os.path.join(self.testdir, 'node')
     rmtree(self.testdir, ignore_errors=1)
     os.mkdir(self.testdir)
     os.mkdir(self.devices)
     os.mkdir(os.path.join(self.devices, 'sda'))
     self.objects = os.path.join(self.devices, 'sda', 'objects')
     os.mkdir(self.objects)
     self.parts = {}
     for part in ['0', '1', '2', '3']:
         self.parts[part] = os.path.join(self.objects, part)
         os.mkdir(os.path.join(self.objects, part))
     self.ring = _create_test_ring(self.testdir)
     self.conf = dict(swift_dir=self.testdir,
                      devices=self.devices,
                      mount_check='false',
                      timeout='300',
                      stats_interval='1')
     self.replicator = object_replicator.ObjectReplicator(self.conf)
     self.replicator.logger = FakeLogger()
     self.df_mgr = diskfile.DiskFileManager(self.conf,
                                            self.replicator.logger)
示例#3
0
 def setUp(self):
     """Set up for testing swift.obj.diskfile"""
     self.testdir = os.path.join(mkdtemp(), 'tmp_test_obj_server_DiskFile')
     mkdirs(os.path.join(self.testdir, 'sda1', 'tmp'))
     self._orig_tpool_exc = tpool.execute
     tpool.execute = lambda f, *args, **kwargs: f(*args, **kwargs)
     self.conf = dict(devices=self.testdir,
                      mount_check='false',
                      keep_cache_size=2 * 1024)
     self.df_mgr = diskfile.DiskFileManager(self.conf, FakeLogger())
示例#4
0
 def __init__(self, testdir):
     self.logger = mock.MagicMock()
     self.conn_timeout = 1
     self.node_timeout = 2
     self.http_timeout = 3
     self.network_chunk_size = 65536
     self.disk_chunk_size = 4096
     conf = {
         'devices': testdir,
         'mount_check': 'false',
     }
     self._diskfile_mgr = diskfile.DiskFileManager(conf, DebugLogger())
示例#5
0
    def _get_open_disk_file(self,
                            invalid_type=None,
                            obj_name='o',
                            fsize=1024,
                            csize=8,
                            mark_deleted=False,
                            ts=None,
                            mount_check=False,
                            extra_metadata=None):
        '''returns a DiskFile'''
        df = self.df_mgr.get_diskfile('sda1', '0', 'a', 'c', obj_name)
        data = '0' * fsize
        etag = md5()
        if ts:
            timestamp = ts
        else:
            timestamp = normalize_timestamp(time())
        with df.create() as writer:
            upload_size = writer.write(data)
            etag.update(data)
            etag = etag.hexdigest()
            metadata = {
                'ETag': etag,
                'X-Timestamp': timestamp,
                'Content-Length': str(upload_size),
            }
            metadata.update(extra_metadata or {})
            writer.put(metadata)
            if invalid_type == 'ETag':
                etag = md5()
                etag.update('1' + '0' * (fsize - 1))
                etag = etag.hexdigest()
                metadata['ETag'] = etag
                diskfile.write_metadata(writer._fd, metadata)
            elif invalid_type == 'Content-Length':
                metadata['Content-Length'] = fsize - 1
                diskfile.write_metadata(writer._fd, metadata)
            elif invalid_type == 'Bad-Content-Length':
                metadata['Content-Length'] = 'zero'
                diskfile.write_metadata(writer._fd, metadata)
            elif invalid_type == 'Missing-Content-Length':
                del metadata['Content-Length']
                diskfile.write_metadata(writer._fd, metadata)

        if mark_deleted:
            df.delete(timestamp)

        data_files = [
            os.path.join(df._datadir, fname)
            for fname in sorted(os.listdir(df._datadir), reverse=True)
            if fname.endswith('.data')
        ]
        if invalid_type == 'Corrupt-Xattrs':
            # We have to go below read_metadata/write_metadata to get proper
            # corruption.
            meta_xattr = xattr.getxattr(data_files[0], "user.swift.metadata")
            wrong_byte = 'X' if meta_xattr[0] != 'X' else 'Y'
            xattr.setxattr(data_files[0], "user.swift.metadata",
                           wrong_byte + meta_xattr[1:])
        elif invalid_type == 'Truncated-Xattrs':
            meta_xattr = xattr.getxattr(data_files[0], "user.swift.metadata")
            xattr.setxattr(data_files[0], "user.swift.metadata",
                           meta_xattr[:-1])

        self.conf['disk_chunk_size'] = csize
        self.conf['mount_check'] = mount_check
        self.df_mgr = diskfile.DiskFileManager(self.conf, FakeLogger())
        df = self.df_mgr.get_diskfile('sda1', '0', 'a', 'c', obj_name)
        df.open()
        if invalid_type == 'Zero-Byte':
            fp = open(df._data_file, 'w')
            fp.close()
        df.unit_test_len = fsize
        return df