Ejemplo n.º 1
0
 def build_checker(self, parsed_args):
     """Build an instance of Checker."""
     checker = Checker(self.app.options.ns,
                       concurrency=parsed_args.concurrency,
                       error_file=parsed_args.output,
                       rebuild_file=parsed_args.output_for_blob_rebuilder,
                       request_attempts=parsed_args.attempts,
                       integrity=parsed_args.checksum)
     return checker
Ejemplo n.º 2
0
    def _convert_and_check(self,
                           chunk_volume,
                           chunk_path,
                           chunk_id_info,
                           expected_raw_meta=None,
                           expected_errors=0):
        conf = self.conf
        conf['volume'] = self.rawx_volumes[chunk_volume]
        converter = BlobConverter(conf, logger=self.logger)
        converter.safe_convert_chunk(chunk_path)
        self.assertEqual(1, converter.total_chunks_processed)
        self.assertEqual(1, converter.passes)
        self.assertEqual(expected_errors, converter.errors)

        checker = Checker(self.ns)
        for chunk_id, info in chunk_id_info.items():
            account, container, path, version, content_id = info
            fullpath = encode_fullpath(account, container, path, version,
                                       content_id)
            cid = cid_from_name(account, container)
            meta, raw_meta = read_chunk_metadata(chunk_path, chunk_id)

            self.assertEqual(meta.get('chunk_id'), chunk_id)
            self.assertEqual(meta.get('container_id'), cid)
            self.assertEqual(meta.get('content_path'), path)
            self.assertEqual(meta.get('content_version'), version)
            self.assertEqual(meta.get('content_id'), content_id)
            self.assertEqual(meta.get('full_path'), fullpath)

            checker.check(
                Target(account,
                       container=container,
                       obj=path,
                       chunk='http://' + converter.volume_id + '/' + chunk_id))
            for _ in checker.run():
                pass
            self.assertTrue(checker.report())

            if expected_raw_meta:
                self.assertDictEqual(expected_raw_meta, raw_meta)
                continue

            self.assertNotIn(CHUNK_XATTR_KEYS['chunk_id'], raw_meta)
            self.assertNotIn(CHUNK_XATTR_KEYS['container_id'], raw_meta)
            self.assertNotIn(CHUNK_XATTR_KEYS['content_path'], raw_meta)
            self.assertNotIn(CHUNK_XATTR_KEYS['content_version'], raw_meta)
            self.assertNotIn(CHUNK_XATTR_KEYS['content_id'], raw_meta)
            self.assertIn(CHUNK_XATTR_CONTENT_FULLPATH_PREFIX + chunk_id,
                          raw_meta)
            for k in raw_meta.keys():
                if k.startswith('oio:'):
                    self.fail('old fullpath always existing')
            self.assertEqual(raw_meta[CHUNK_XATTR_KEYS['oio_version']],
                             OIO_VERSION)
Ejemplo n.º 3
0
    def take_action(self, parsed_args):
        self.logger.debug('take_action(%s)', parsed_args)

        self.checker = Checker(
            self.app.options.ns,
            concurrency=parsed_args.concurrency,
            error_file=parsed_args.output,
            rebuild_file=parsed_args.output_for_chunk_rebuild,
            request_attempts=parsed_args.attempts,
            check_hash=parsed_args.checksum,
            logger=self.logger)

        return self.columns, self._take_action(parsed_args)
Ejemplo n.º 4
0
 def setUp(self):
     super(TestIntegrityCrawler, self).setUp()
     self.container = 'ct-' + random_str(8)
     self.obj = 'obj-' + random_str(8)
     self.account = 'test-integrity-' + random_str(8)
     self.storage.object_create(self.account,
                                self.container,
                                obj_name=self.obj,
                                data="chunk")
     _, self.rebuild_file = tempfile.mkstemp()
     self.checker = Checker(self.ns, rebuild_file=self.rebuild_file)
     self.meta, chunks = self.storage.object_locate(self.account,
                                                    self.container,
                                                    self.obj)
     self.chunk = chunks[0]
     self.irreparable = len(chunks) == 1
     self.storage.blob_client.chunk_delete(self.chunk['real_url'])