From fd39fa52eff1e11d2edeacd3788aae2cbcd4a3c9 Mon Sep 17 00:00:00 2001 From: Samuel Just Date: Tue, 25 Oct 2016 09:55:46 -0700 Subject: [PATCH] rados,thrash-erasure-code: add overwrites workloads Signed-off-by: Samuel Just --- .../ec-pool-snaps-few-objects-overwrites.yaml | 21 +++++++++++++++ ...ec-small-objects-fast-read-overwrites.yaml | 27 +++++++++++++++++++ .../ec-small-objects-overwrites.yaml | 26 ++++++++++++++++++ .../ec-snaps-few-objects-overwrites.yaml | 20 ++++++++++++++ tasks/ceph_manager.py | 16 ++++++++--- tasks/rados.py | 15 +++++++++-- 6 files changed, 120 insertions(+), 5 deletions(-) create mode 100644 suites/rados/thrash-erasure-code/workloads/ec-pool-snaps-few-objects-overwrites.yaml create mode 100644 suites/rados/thrash-erasure-code/workloads/ec-small-objects-fast-read-overwrites.yaml create mode 100644 suites/rados/thrash-erasure-code/workloads/ec-small-objects-overwrites.yaml create mode 100644 suites/rados/thrash-erasure-code/workloads/ec-snaps-few-objects-overwrites.yaml diff --git a/suites/rados/thrash-erasure-code/workloads/ec-pool-snaps-few-objects-overwrites.yaml b/suites/rados/thrash-erasure-code/workloads/ec-pool-snaps-few-objects-overwrites.yaml new file mode 100644 index 00000000000..2266dccb63f --- /dev/null +++ b/suites/rados/thrash-erasure-code/workloads/ec-pool-snaps-few-objects-overwrites.yaml @@ -0,0 +1,21 @@ +overrides: + ceph: + conf: + global: + enable experimental unrecoverable data corrupting features: '*' +tasks: +- rados: + clients: [client.0] + ops: 4000 + objects: 50 + pool_snaps: true + ec_pool: true + erasure_code_use_hacky_overwrites: true + op_weights: + read: 100 + write: 100 + delete: 50 + snap_create: 50 + snap_remove: 50 + rollback: 50 + copy_from: 50 diff --git a/suites/rados/thrash-erasure-code/workloads/ec-small-objects-fast-read-overwrites.yaml b/suites/rados/thrash-erasure-code/workloads/ec-small-objects-fast-read-overwrites.yaml new file mode 100644 index 00000000000..a089a8e980e --- /dev/null +++ b/suites/rados/thrash-erasure-code/workloads/ec-small-objects-fast-read-overwrites.yaml @@ -0,0 +1,27 @@ +overrides: + ceph: + conf: + global: + enable experimental unrecoverable data corrupting features: '*' +tasks: +- rados: + clients: [client.0] + ops: 400000 + max_seconds: 600 + max_in_flight: 64 + objects: 1024 + size: 16384 + ec_pool: true + erasure_code_use_hacky_overwrites: true + fast_read: true + op_weights: + read: 100 + write: 100 + append: 100 + delete: 50 + snap_create: 50 + snap_remove: 50 + rollback: 50 + copy_from: 50 + setattr: 25 + rmattr: 25 diff --git a/suites/rados/thrash-erasure-code/workloads/ec-small-objects-overwrites.yaml b/suites/rados/thrash-erasure-code/workloads/ec-small-objects-overwrites.yaml new file mode 100644 index 00000000000..69bc689797d --- /dev/null +++ b/suites/rados/thrash-erasure-code/workloads/ec-small-objects-overwrites.yaml @@ -0,0 +1,26 @@ +overrides: + ceph: + conf: + global: + enable experimental unrecoverable data corrupting features: '*' +tasks: +- rados: + clients: [client.0] + ops: 400000 + max_seconds: 600 + max_in_flight: 64 + objects: 1024 + size: 16384 + ec_pool: true + erasure_code_use_hacky_overwrites: true + op_weights: + read: 100 + write: 100 + append: 100 + delete: 50 + snap_create: 50 + snap_remove: 50 + rollback: 50 + copy_from: 50 + setattr: 25 + rmattr: 25 diff --git a/suites/rados/thrash-erasure-code/workloads/ec-snaps-few-objects-overwrites.yaml b/suites/rados/thrash-erasure-code/workloads/ec-snaps-few-objects-overwrites.yaml new file mode 100644 index 00000000000..c3ed8c9e9fc --- /dev/null +++ b/suites/rados/thrash-erasure-code/workloads/ec-snaps-few-objects-overwrites.yaml @@ -0,0 +1,20 @@ +overrides: + ceph: + conf: + global: + enable experimental unrecoverable data corrupting features: '*' +tasks: +- rados: + clients: [client.0] + ops: 4000 + objects: 50 + ec_pool: true + erasure_code_use_hacky_overwrites: true + op_weights: + read: 100 + write: 100 + delete: 50 + snap_create: 50 + snap_remove: 50 + rollback: 50 + copy_from: 50 diff --git a/tasks/ceph_manager.py b/tasks/ceph_manager.py index da1f5f46083..dcfe79387e6 100644 --- a/tasks/ceph_manager.py +++ b/tasks/ceph_manager.py @@ -1307,7 +1307,8 @@ class CephManager: def create_pool_with_unique_name(self, pg_num=16, erasure_code_profile_name=None, - min_size=None): + min_size=None, + erasure_code_use_hacky_overwrites=False): """ Create a pool named unique_pool_X where X is unique. """ @@ -1319,7 +1320,8 @@ class CephManager: name, pg_num, erasure_code_profile_name=erasure_code_profile_name, - min_size=min_size) + min_size=min_size, + erasure_code_use_hacky_overwrites=erasure_code_use_hacky_overwrites) return name @contextlib.contextmanager @@ -1330,13 +1332,16 @@ class CephManager: def create_pool(self, pool_name, pg_num=16, erasure_code_profile_name=None, - min_size=None): + min_size=None, + erasure_code_use_hacky_overwrites=False): """ Create a pool named from the pool_name parameter. :param pool_name: name of the pool being created. :param pg_num: initial number of pgs. :param erasure_code_profile_name: if set and !None create an erasure coded pool using the profile + :param erasure_code_use_hacky_overwrites: if true, use the hacky + overwrites mode """ with self.lock: assert isinstance(pool_name, basestring) @@ -1355,6 +1360,11 @@ class CephManager: 'osd', 'pool', 'set', pool_name, 'min_size', str(min_size)) + if erasure_code_use_hacky_overwrites: + self.raw_cluster_cmd( + 'osd', 'pool', 'set', pool_name, + 'debug_white_box_testing_ec_overwrites', + 'true') self.pools[pool_name] = pg_num time.sleep(1) diff --git a/tasks/rados.py b/tasks/rados.py index 43f560cb850..ad100667aea 100644 --- a/tasks/rados.py +++ b/tasks/rados.py @@ -55,6 +55,9 @@ def task(ctx, config): rollback: 2 snap_remove: 0 ec_pool: create an ec pool, defaults to False + erasure_code_use_hacky_overwrites: use the whitebox + testing experimental + overwrites mode erasure_code_profile: name: teuthologyprofile k: 2 @@ -135,7 +138,11 @@ def task(ctx, config): '{tdir}/archive/coverage'.format(tdir=testdir), 'ceph_test_rados'] if config.get('ec_pool', False): - args.extend(['--ec-pool']) + args.extend(['--no-omap']) + if config.get('erasure_code_use_hacky_overwrites', False): + args.extend(['--no-sparse']) + else: + args.extend(['--ec-pool']) if config.get('write_fadvise_dontneed', False): args.extend(['--write-fadvise-dontneed']) if config.get('pool_snaps', False): @@ -221,7 +228,11 @@ def task(ctx, config): if not pool and existing_pools: pool = existing_pools.pop() else: - pool = manager.create_pool_with_unique_name(erasure_code_profile_name=profile_name) + pool = manager.create_pool_with_unique_name( + erasure_code_profile_name=profile_name, + erasure_code_use_hacky_overwrites= + config.get('erasure_code_use_hacky_overwrites', False) + ) created_pools.append(pool) if config.get('fast_read', False): manager.raw_cluster_cmd( -- 2.39.5