From a0cae4c180c129e52a4486ee9d1ea327565acb84 Mon Sep 17 00:00:00 2001 From: Vitaliy Filippov Date: Fri, 3 Jun 2022 15:36:58 +0300 Subject: [PATCH] Rename "jerasure" to "ec" in pool configuration, function names, fix documentation and Debian build scripts Old pool configurations with "jerasure" also remain supported as an alias for "ec" --- debian/changelog | 14 ++++++++++++++ debian/control | 2 +- debian/vitastor.Dockerfile | 2 +- docs/config/pool.en.md | 7 ++++--- docs/config/pool.ru.md | 7 ++++--- docs/installation/source.en.md | 3 ++- docs/installation/source.ru.md | 3 ++- docs/intro/features.en.md | 2 +- docs/intro/features.ru.md | 2 +- docs/intro/quickstart.en.md | 4 ++-- docs/intro/quickstart.ru.md | 2 +- mon/mon.js | 16 +++++++++------- src/cli_df.cpp | 2 +- src/etcd_state_client.cpp | 12 ++++++------ src/osd_cluster.cpp | 8 ++++---- src/osd_id.h | 2 +- src/osd_primary.cpp | 4 ++-- src/osd_primary_chain.cpp | 8 ++++---- src/osd_primary_write.cpp | 4 ++-- src/osd_rmw.cpp | 20 ++++++++++---------- src/osd_rmw.h | 6 +++--- src/osd_rmw_test.cpp | 22 +++++++++++----------- tests/run_3osds.sh | 2 +- 23 files changed, 87 insertions(+), 67 deletions(-) diff --git a/debian/changelog b/debian/changelog index 9509d50b..9eafbf57 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,5 +1,19 @@ +vitastor (0.7.1-1) unstable; urgency=medium + + * Bugfixes + + -- Vitaliy Filippov Fri, 03 Jun 2022 02:09:44 +0300 + vitastor (0.7.0-1) unstable; urgency=medium + * Implement NFS proxy + * Add documentation + * Bugfixes + + -- Vitaliy Filippov Sun, 29 May 2022 23:39:13 +0300 + +vitastor (0.6.3-1) unstable; urgency=medium + * RDMA support * Bugfixes diff --git a/debian/control b/debian/control index 7f43a336..45c775f0 100644 --- a/debian/control +++ b/debian/control @@ -2,7 +2,7 @@ Source: vitastor Section: admin Priority: optional Maintainer: Vitaliy Filippov -Build-Depends: debhelper, liburing-dev (>= 0.6), g++ (>= 8), libstdc++6 (>= 8), linux-libc-dev, libgoogle-perftools-dev, libjerasure-dev, libgf-complete-dev, libibverbs-dev +Build-Depends: debhelper, liburing-dev (>= 0.6), g++ (>= 8), libstdc++6 (>= 8), linux-libc-dev, libgoogle-perftools-dev, libjerasure-dev, libgf-complete-dev, libibverbs-dev, libisal-dev, pkgconf Standards-Version: 4.5.0 Homepage: https://vitastor.io/ Rules-Requires-Root: no diff --git a/debian/vitastor.Dockerfile b/debian/vitastor.Dockerfile index b919b17b..d1b1214e 100644 --- a/debian/vitastor.Dockerfile +++ b/debian/vitastor.Dockerfile @@ -22,7 +22,7 @@ RUN apt-get update RUN apt-get -y install fio liburing1 liburing-dev libgoogle-perftools-dev devscripts RUN apt-get -y build-dep fio RUN apt-get --download-only source fio -RUN apt-get update && apt-get -y install libjerasure-dev cmake libibverbs-dev +RUN apt-get update && apt-get -y install libjerasure-dev cmake libibverbs-dev libisal-dev ADD . /root/vitastor RUN set -e -x; \ diff --git a/docs/config/pool.en.md b/docs/config/pool.en.md index 0a09b6f6..cd216020 100644 --- a/docs/config/pool.en.md +++ b/docs/config/pool.en.md @@ -106,9 +106,10 @@ Pool name. - Type: string - Required -- One of: "replicated", "xor" or "jerasure" +- One of: "replicated", "xor", "ec" or "jerasure" -Redundancy scheme used for data in this pool. +Redundancy scheme used for data in this pool. "jerasure" is an alias for "ec", +both use Reed-Solomon-Vandermonde codes. ## pg_size @@ -243,7 +244,7 @@ of the OSDs containing a data chunk for a PG. { "2": { "name":"ecpool", - "scheme":"jerasure", + "scheme":"ec", "pg_size":3, "parity_chunks":1, "pg_minsize":2, diff --git a/docs/config/pool.ru.md b/docs/config/pool.ru.md index b160da3c..2ea3fb59 100644 --- a/docs/config/pool.ru.md +++ b/docs/config/pool.ru.md @@ -106,9 +106,10 @@ - Тип: строка - Обязательный -- Возможные значения: "replicated", "xor" или "jerasure" +- Возможные значения: "replicated", "xor", "ec" или "jerasure" -Схема избыточности, используемая в данном пуле. +Схема избыточности, используемая в данном пуле. "jerasure" - синоним для "ec", +в обеих схемах используются коды Рида-Соломона-Вандермонда. ## pg_size @@ -242,7 +243,7 @@ PG в Vitastor эферемерны, то есть вы можете менят { "2": { "name":"ecpool", - "scheme":"jerasure", + "scheme":"ec", "pg_size":3, "parity_chunks":1, "pg_minsize":2, diff --git a/docs/installation/source.en.md b/docs/installation/source.en.md index f6445beb..5603df88 100644 --- a/docs/installation/source.en.md +++ b/docs/installation/source.en.md @@ -15,7 +15,8 @@ - gcc and g++ 8 or newer, clang 10 or newer, or other compiler with C++11 plus designated initializers support from C++20 - CMake -- liburing, jerasure headers +- liburing, jerasure headers and libraries +- ISA-L, libibverbs headers and libraries (optional) - tcmalloc (google-perftools-dev) ## Basic instructions diff --git a/docs/installation/source.ru.md b/docs/installation/source.ru.md index 4ebc4316..ebcf5fa6 100644 --- a/docs/installation/source.ru.md +++ b/docs/installation/source.ru.md @@ -15,7 +15,8 @@ - gcc и g++ >= 8, либо clang >= 10, либо другой компилятор с поддержкой C++11 плюс назначенных инициализаторов (designated initializers) из C++20 - CMake -- Заголовки liburing, jerasure +- Заголовки и библиотеки liburing, jerasure +- Опционально - заголовки и библиотеки ISA-L, libibverbs - tcmalloc (google-perftools-dev) ## Базовая инструкция diff --git a/docs/intro/features.en.md b/docs/intro/features.en.md index 82ae4f1d..0e879241 100644 --- a/docs/intro/features.en.md +++ b/docs/intro/features.en.md @@ -15,7 +15,7 @@ - Basic part: highly-available block storage with symmetric clustering and no SPOF - [Performance](../performance/comparison1.en.md) ;-D - [Multiple redundancy schemes](../config/pool.en.md#scheme): Replication, XOR n+1, Reed-Solomon erasure codes - based on jerasure library with any number of data and parity drives in a group + based on jerasure and ISA-L libraries with any number of data and parity drives in a group - Configuration via simple JSON data structures in etcd (parameters, pools and images) - Automatic data distribution over OSDs, with support for: - Mathematical optimization for better uniformity and less data movement diff --git a/docs/intro/features.ru.md b/docs/intro/features.ru.md index 6806a13f..4f2a013d 100644 --- a/docs/intro/features.ru.md +++ b/docs/intro/features.ru.md @@ -15,7 +15,7 @@ - Базовая часть - надёжное кластерное блочное хранилище без единой точки отказа - [Производительность](../comparison1.ru.md) ;-D - [Несколько схем отказоустойчивости](../config/pool.ru.md#scheme): репликация, XOR n+1 (1 диск чётности), коды коррекции ошибок - Рида-Соломона на основе библиотеки jerasure с любым числом дисков данных и чётности в группе + Рида-Соломона на основе библиотек jerasure и ISA-L с любым числом дисков данных и чётности в группе - Конфигурация через простые человекочитаемые JSON-структуры в etcd - Автоматическое распределение данных по OSD, с поддержкой: - Математической оптимизации для лучшей равномерности распределения и минимизации перемещений данных diff --git a/docs/intro/quickstart.en.md b/docs/intro/quickstart.en.md index 052ac1f0..84751b6f 100644 --- a/docs/intro/quickstart.en.md +++ b/docs/intro/quickstart.en.md @@ -63,11 +63,11 @@ etcdctl --endpoints=... put /vitastor/config/pools '{"1":{"name":"testpool", "scheme":"replicated","pg_size":2,"pg_minsize":1,"pg_count":256,"failure_domain":"host"}}' ``` -For jerasure pools the configuration should look like the following: +For EC pools the configuration should look like the following: ``` etcdctl --endpoints=... put /vitastor/config/pools '{"2":{"name":"ecpool", - "scheme":"jerasure","pg_size":4,"parity_chunks":2,"pg_minsize":2,"pg_count":256,"failure_domain":"host"}` + "scheme":"ec","pg_size":4,"parity_chunks":2,"pg_minsize":2,"pg_count":256,"failure_domain":"host"}` ``` After you do this, one of the monitors will configure PGs and OSDs will start them. diff --git a/docs/intro/quickstart.ru.md b/docs/intro/quickstart.ru.md index be63e9fd..6759410c 100644 --- a/docs/intro/quickstart.ru.md +++ b/docs/intro/quickstart.ru.md @@ -75,7 +75,7 @@ etcdctl --endpoints=... put /vitastor/config/pools '{"1":{"name":"testpool", ``` etcdctl --endpoints=... put /vitastor/config/pools '{"2":{"name":"ecpool", - "scheme":"jerasure","pg_size":4,"parity_chunks":2,"pg_minsize":2,"pg_count":256,"failure_domain":"host"}` + "scheme":"ec","pg_size":4,"parity_chunks":2,"pg_minsize":2,"pg_count":256,"failure_domain":"host"}` ``` После этого один из мониторов должен сконфигурировать PG, а OSD должны запустить их. diff --git a/mon/mon.js b/mon/mon.js index a37d46e2..41b79984 100644 --- a/mon/mon.js +++ b/mon/mon.js @@ -147,11 +147,11 @@ const etcd_tree = { /* pools: { : { name: 'testpool', - // jerasure uses Reed-Solomon-Vandermonde codes - scheme: 'replicated' | 'xor' | 'jerasure', + // 'ec' uses Reed-Solomon-Vandermonde codes, 'jerasure' is an alias for 'ec' + scheme: 'replicated' | 'xor' | 'ec' | 'jerasure', pg_size: 3, pg_minsize: 2, - // number of parity chunks, required for jerasure + // number of parity chunks, required for EC parity_chunks?: 1, pg_count: 100, failure_domain: 'host', @@ -1013,14 +1013,15 @@ class Mon console.log('Pool ID '+pool_id+' is invalid'); return false; } - if (pool_cfg.scheme !== 'xor' && pool_cfg.scheme !== 'replicated' && pool_cfg.scheme !== 'jerasure') + if (pool_cfg.scheme !== 'xor' && pool_cfg.scheme !== 'replicated' && + pool_cfg.scheme !== 'ec' && pool_cfg.scheme !== 'jerasure') { if (warn) - console.log('Pool '+pool_id+' has invalid coding scheme (one of "xor", "replicated" and "jerasure" required)'); + console.log('Pool '+pool_id+' has invalid coding scheme (one of "xor", "replicated", "ec" and "jerasure" required)'); return false; } if (!pool_cfg.pg_size || pool_cfg.pg_size < 1 || pool_cfg.pg_size > 256 || - (pool_cfg.scheme === 'xor' || pool_cfg.scheme == 'jerasure') && pool_cfg.pg_size < 3) + pool_cfg.scheme !== 'replicated' && pool_cfg.pg_size < 3) { if (warn) console.log('Pool '+pool_id+' has invalid pg_size'); @@ -1039,7 +1040,8 @@ class Mon console.log('Pool '+pool_id+' has invalid parity_chunks (must be 1)'); return false; } - if (pool_cfg.scheme === 'jerasure' && (pool_cfg.parity_chunks < 1 || pool_cfg.parity_chunks > pool_cfg.pg_size-2)) + if ((pool_cfg.scheme === 'ec' || pool_cfg.scheme === 'jerasure') && + (pool_cfg.parity_chunks < 1 || pool_cfg.parity_chunks > pool_cfg.pg_size-2)) { if (warn) console.log('Pool '+pool_id+' has invalid parity_chunks (must be between 1 and pg_size-2)'); diff --git a/src/cli_df.cpp b/src/cli_df.cpp index e6e7422d..daf21e90 100644 --- a/src/cli_df.cpp +++ b/src/cli_df.cpp @@ -127,7 +127,7 @@ resume_1: pool_stats[pool_cfg.id] = json11::Json::object { { "name", pool_cfg.name }, { "pg_count", pool_cfg.pg_count }, - { "scheme", pool_cfg.scheme == POOL_SCHEME_REPLICATED ? "replicated" : "jerasure" }, + { "scheme", pool_cfg.scheme == POOL_SCHEME_REPLICATED ? "replicated" : "ec" }, { "scheme_name", pool_cfg.scheme == POOL_SCHEME_REPLICATED ? std::to_string(pool_cfg.pg_size)+"/"+std::to_string(pool_cfg.pg_minsize) : "EC "+std::to_string(pool_cfg.pg_size-pool_cfg.parity_chunks)+"+"+std::to_string(pool_cfg.parity_chunks) }, diff --git a/src/etcd_state_client.cpp b/src/etcd_state_client.cpp index d3c2d7d1..f8d3a4e4 100644 --- a/src/etcd_state_client.cpp +++ b/src/etcd_state_client.cpp @@ -673,18 +673,18 @@ void etcd_state_client_t::parse_state(const etcd_kv_t & kv) pc.scheme = POOL_SCHEME_REPLICATED; else if (pool_item.second["scheme"] == "xor") pc.scheme = POOL_SCHEME_XOR; - else if (pool_item.second["scheme"] == "jerasure") - pc.scheme = POOL_SCHEME_JERASURE; + else if (pool_item.second["scheme"] == "ec" || pool_item.second["scheme"] == "jerasure") + pc.scheme = POOL_SCHEME_EC; else { - fprintf(stderr, "Pool %u has invalid coding scheme (one of \"xor\", \"replicated\" or \"jerasure\" required), skipping pool\n", pool_id); + fprintf(stderr, "Pool %u has invalid coding scheme (one of \"xor\", \"replicated\", \"ec\" or \"jerasure\" required), skipping pool\n", pool_id); continue; } // PG Size pc.pg_size = pool_item.second["pg_size"].uint64_value(); if (pc.pg_size < 1 || pool_item.second["pg_size"].uint64_value() < 3 && - (pc.scheme == POOL_SCHEME_XOR || pc.scheme == POOL_SCHEME_JERASURE) || + (pc.scheme == POOL_SCHEME_XOR || pc.scheme == POOL_SCHEME_EC) || pool_item.second["pg_size"].uint64_value() > 256) { fprintf(stderr, "Pool %u has invalid pg_size, skipping pool\n", pool_id); @@ -701,7 +701,7 @@ void etcd_state_client_t::parse_state(const etcd_kv_t & kv) } pc.parity_chunks = 1; } - if (pc.scheme == POOL_SCHEME_JERASURE && + if (pc.scheme == POOL_SCHEME_EC && (pc.parity_chunks < 1 || pc.parity_chunks > pc.pg_size-2)) { fprintf(stderr, "Pool %u has invalid parity_chunks (must be between 1 and pg_size-2), skipping pool\n", pool_id); @@ -710,7 +710,7 @@ void etcd_state_client_t::parse_state(const etcd_kv_t & kv) // PG MinSize pc.pg_minsize = pool_item.second["pg_minsize"].uint64_value(); if (pc.pg_minsize < 1 || pc.pg_minsize > pc.pg_size || - (pc.scheme == POOL_SCHEME_XOR || pc.scheme == POOL_SCHEME_JERASURE) && + (pc.scheme == POOL_SCHEME_XOR || pc.scheme == POOL_SCHEME_EC) && pc.pg_minsize < (pc.pg_size-pc.parity_chunks)) { fprintf(stderr, "Pool %u has invalid pg_minsize, skipping pool\n", pool_id); diff --git a/src/osd_cluster.cpp b/src/osd_cluster.cpp index 562b872f..eb3294b9 100644 --- a/src/osd_cluster.cpp +++ b/src/osd_cluster.cpp @@ -676,9 +676,9 @@ void osd_t::apply_pg_config() .all_peers = std::vector(all_peers.begin(), all_peers.end()), .target_set = pg_cfg.target_set, }; - if (pg.scheme == POOL_SCHEME_JERASURE) + if (pg.scheme == POOL_SCHEME_EC) { - use_jerasure(pg.pg_size, pg.pg_data_size, true); + use_ec(pg.pg_size, pg.pg_data_size, true); } this->pg_state_dirty.insert({ .pool_id = pool_id, .pg_num = pg_num }); pg.print_state(); @@ -890,9 +890,9 @@ void osd_t::report_pg_states() { // Forget offline PGs after reporting their state // (if the state wasn't changed again) - if (pg_it->second.scheme == POOL_SCHEME_JERASURE) + if (pg_it->second.scheme == POOL_SCHEME_EC) { - use_jerasure(pg_it->second.pg_size, pg_it->second.pg_data_size, false); + use_ec(pg_it->second.pg_size, pg_it->second.pg_data_size, false); } this->pgs.erase(pg_it); } diff --git a/src/osd_id.h b/src/osd_id.h index d23356f2..78b8c7c2 100644 --- a/src/osd_id.h +++ b/src/osd_id.h @@ -5,7 +5,7 @@ #define POOL_SCHEME_REPLICATED 1 #define POOL_SCHEME_XOR 2 -#define POOL_SCHEME_JERASURE 3 +#define POOL_SCHEME_EC 3 #define POOL_ID_MAX 0x10000 #define POOL_ID_BITS 16 #define INODE_POOL(inode) (pool_id_t)((inode) >> (64 - POOL_ID_BITS)) diff --git a/src/osd_primary.cpp b/src/osd_primary.cpp index 8377c6d9..71132c18 100644 --- a/src/osd_primary.cpp +++ b/src/osd_primary.cpp @@ -241,9 +241,9 @@ resume_2: { reconstruct_stripes_xor(stripes, op_data->pg_size, clean_entry_bitmap_size); } - else if (op_data->scheme == POOL_SCHEME_JERASURE) + else if (op_data->scheme == POOL_SCHEME_EC) { - reconstruct_stripes_jerasure(stripes, op_data->pg_size, op_data->pg_data_size, clean_entry_bitmap_size); + reconstruct_stripes_ec(stripes, op_data->pg_size, op_data->pg_data_size, clean_entry_bitmap_size); } cur_op->iov.push_back(op_data->stripes[0].bmp_buf, cur_op->reply.rw.bitmap_len); for (int role = 0; role < op_data->pg_size; role++) diff --git a/src/osd_primary_chain.cpp b/src/osd_primary_chain.cpp index 0001d733..74fb94d7 100644 --- a/src/osd_primary_chain.cpp +++ b/src/osd_primary_chain.cpp @@ -110,9 +110,9 @@ resume_1: { reconstruct_stripes_xor(local_stripes, pg.pg_size, clean_entry_bitmap_size); } - else if (pg.scheme == POOL_SCHEME_JERASURE) + else if (pg.scheme == POOL_SCHEME_EC) { - reconstruct_stripes_jerasure(local_stripes, pg.pg_size, pg.pg_data_size, clean_entry_bitmap_size); + reconstruct_stripes_ec(local_stripes, pg.pg_size, pg.pg_data_size, clean_entry_bitmap_size); } break; } @@ -506,9 +506,9 @@ void osd_t::send_chained_read_results(pg_t & pg, osd_op_t *cur_op) { reconstruct_stripes_xor(stripes, pg.pg_size, clean_entry_bitmap_size); } - else if (op_data->scheme == POOL_SCHEME_JERASURE) + else if (op_data->scheme == POOL_SCHEME_EC) { - reconstruct_stripes_jerasure(stripes, pg.pg_size, pg.pg_data_size, clean_entry_bitmap_size); + reconstruct_stripes_ec(stripes, pg.pg_size, pg.pg_data_size, clean_entry_bitmap_size); } } } diff --git a/src/osd_primary_write.cpp b/src/osd_primary_write.cpp index f9ea52cb..eb6a12ef 100644 --- a/src/osd_primary_write.cpp +++ b/src/osd_primary_write.cpp @@ -132,9 +132,9 @@ resume_3: { calc_rmw_parity_xor(op_data->stripes, pg.pg_size, op_data->prev_set, pg.cur_set.data(), bs_block_size, clean_entry_bitmap_size); } - else if (pg.scheme == POOL_SCHEME_JERASURE) + else if (pg.scheme == POOL_SCHEME_EC) { - calc_rmw_parity_jerasure(op_data->stripes, pg.pg_size, op_data->pg_data_size, op_data->prev_set, pg.cur_set.data(), bs_block_size, clean_entry_bitmap_size); + calc_rmw_parity_ec(op_data->stripes, pg.pg_size, op_data->pg_data_size, op_data->prev_set, pg.cur_set.data(), bs_block_size, clean_entry_bitmap_size); } } // Send writes diff --git a/src/osd_rmw.cpp b/src/osd_rmw.cpp index 127fcd02..e50d48cb 100644 --- a/src/osd_rmw.cpp +++ b/src/osd_rmw.cpp @@ -4,7 +4,7 @@ #include #include #include -#include +#include #include #ifdef WITH_ISAL #include @@ -155,9 +155,9 @@ struct reed_sol_matrix_t std::map decodings; }; -std::map matrices; +static std::map matrices; -void use_jerasure(int pg_size, int pg_minsize, bool use) +void use_ec(int pg_size, int pg_minsize, bool use) { uint64_t key = (uint64_t)pg_size | ((uint64_t)pg_minsize) << 32; auto rs_it = matrices.find(key); @@ -202,7 +202,7 @@ void use_jerasure(int pg_size, int pg_minsize, bool use) } } -reed_sol_matrix_t* get_jerasure_matrix(int pg_size, int pg_minsize) +static reed_sol_matrix_t* get_ec_matrix(int pg_size, int pg_minsize) { uint64_t key = (uint64_t)pg_size | ((uint64_t)pg_minsize) << 32; auto rs_it = matrices.find(key); @@ -228,7 +228,7 @@ static void* get_jerasure_decoding_matrix(osd_rmw_stripe_t *stripes, int pg_size edd++; if (edd == 0) return NULL; - reed_sol_matrix_t *matrix = get_jerasure_matrix(pg_size, pg_minsize); + reed_sol_matrix_t *matrix = get_ec_matrix(pg_size, pg_minsize); auto dec_it = matrix->decodings.find((reed_sol_erased_t){ .data = erased, .size = pg_size }); if (dec_it == matrix->decodings.end()) { @@ -293,7 +293,7 @@ static void* get_jerasure_decoding_matrix(osd_rmw_stripe_t *stripes, int pg_size } #ifdef WITH_ISAL -void reconstruct_stripes_jerasure(osd_rmw_stripe_t *stripes, int pg_size, int pg_minsize, uint32_t bitmap_size) +void reconstruct_stripes_ec(osd_rmw_stripe_t *stripes, int pg_size, int pg_minsize, uint32_t bitmap_size) { uint8_t *dectable = (uint8_t*)get_jerasure_decoding_matrix(stripes, pg_size, pg_minsize); if (!dectable) @@ -342,7 +342,7 @@ void reconstruct_stripes_jerasure(osd_rmw_stripe_t *stripes, int pg_size, int pg } } #else -void reconstruct_stripes_jerasure(osd_rmw_stripe_t *stripes, int pg_size, int pg_minsize, uint32_t bitmap_size) +void reconstruct_stripes_ec(osd_rmw_stripe_t *stripes, int pg_size, int pg_minsize, uint32_t bitmap_size) { int *dm_ids = (int*)get_jerasure_decoding_matrix(stripes, pg_size, pg_minsize); if (!dm_ids) @@ -792,12 +792,12 @@ void calc_rmw_parity_xor(osd_rmw_stripe_t *stripes, int pg_size, uint64_t *read_ calc_rmw_parity_copy_parity(stripes, pg_size, pg_minsize, read_osd_set, write_osd_set, chunk_size, start, end); } -void calc_rmw_parity_jerasure(osd_rmw_stripe_t *stripes, int pg_size, int pg_minsize, +void calc_rmw_parity_ec(osd_rmw_stripe_t *stripes, int pg_size, int pg_minsize, uint64_t *read_osd_set, uint64_t *write_osd_set, uint32_t chunk_size, uint32_t bitmap_size) { uint32_t bitmap_granularity = bitmap_size > 0 ? chunk_size / bitmap_size / 8 : 0; - reed_sol_matrix_t *matrix = get_jerasure_matrix(pg_size, pg_minsize); - reconstruct_stripes_jerasure(stripes, pg_size, pg_minsize, bitmap_size); + reed_sol_matrix_t *matrix = get_ec_matrix(pg_size, pg_minsize); + reconstruct_stripes_ec(stripes, pg_size, pg_minsize, bitmap_size); uint32_t start = 0, end = 0; calc_rmw_parity_copy_mod(stripes, pg_size, pg_minsize, read_osd_set, write_osd_set, chunk_size, bitmap_granularity, start, end); if (end != 0) diff --git a/src/osd_rmw.h b/src/osd_rmw.h index ecfa4770..82347bcf 100644 --- a/src/osd_rmw.h +++ b/src/osd_rmw.h @@ -44,9 +44,9 @@ void* calc_rmw(void *request_buf, osd_rmw_stripe_t *stripes, uint64_t *read_osd_ void calc_rmw_parity_xor(osd_rmw_stripe_t *stripes, int pg_size, uint64_t *read_osd_set, uint64_t *write_osd_set, uint32_t chunk_size, uint32_t bitmap_size); -void use_jerasure(int pg_size, int pg_minsize, bool use); +void use_ec(int pg_size, int pg_minsize, bool use); -void reconstruct_stripes_jerasure(osd_rmw_stripe_t *stripes, int pg_size, int pg_minsize, uint32_t bitmap_size); +void reconstruct_stripes_ec(osd_rmw_stripe_t *stripes, int pg_size, int pg_minsize, uint32_t bitmap_size); -void calc_rmw_parity_jerasure(osd_rmw_stripe_t *stripes, int pg_size, int pg_minsize, +void calc_rmw_parity_ec(osd_rmw_stripe_t *stripes, int pg_size, int pg_minsize, uint64_t *read_osd_set, uint64_t *write_osd_set, uint32_t chunk_size, uint32_t bitmap_size); diff --git a/src/osd_rmw_test.cpp b/src/osd_rmw_test.cpp index 004f73e1..b0e416b8 100644 --- a/src/osd_rmw_test.cpp +++ b/src/osd_rmw_test.cpp @@ -587,14 +587,14 @@ void test12() input buffer: [ write0, write1 ], rmw buffer: [ write2, write3, read0, read1 ], } - then, after calc_rmw_parity_jerasure(): all the same + then, after calc_rmw_parity_ec(): all the same then simulate read with read_osd_set=[0,0,3,4] and check read0,read1 buffers ***/ void test13() { - use_jerasure(4, 2, true); + use_ec(4, 2, true); osd_num_t osd_set[4] = { 1, 2, 0, 0 }; osd_num_t write_osd_set[4] = { 1, 2, 3, 4 }; osd_rmw_stripe_t stripes[4] = {}; @@ -628,7 +628,7 @@ void test13() set_pattern(write_buf, 8192, PATTERN3); set_pattern(stripes[0].read_buf, 128*1024-4096, PATTERN1); set_pattern(stripes[1].read_buf, 128*1024-4096, PATTERN2); - calc_rmw_parity_jerasure(stripes, 4, 2, osd_set, write_osd_set, 128*1024, 0); + calc_rmw_parity_ec(stripes, 4, 2, osd_set, write_osd_set, 128*1024, 0); assert(stripes[0].write_start == 128*1024-4096 && stripes[0].write_end == 128*1024); assert(stripes[1].write_start == 0 && stripes[1].write_end == 4096); assert(stripes[2].write_start == 0 && stripes[2].write_end == 128*1024); @@ -663,7 +663,7 @@ void test13() assert(stripes[3].read_buf == (uint8_t*)read_buf+3*128*1024); memcpy((uint8_t*)read_buf+2*128*1024, rmw_buf, 128*1024); memcpy((uint8_t*)read_buf+3*128*1024, (uint8_t*)rmw_buf+128*1024, 128*1024); - reconstruct_stripes_jerasure(stripes, 4, 2, 0); + reconstruct_stripes_ec(stripes, 4, 2, 0); check_pattern(stripes[0].read_buf, 128*1024-4096, PATTERN1); check_pattern(stripes[0].read_buf+128*1024-4096, 4096, PATTERN3); check_pattern(stripes[1].read_buf, 4096, PATTERN3); @@ -694,14 +694,14 @@ void test13() assert(stripes[3].read_buf == (uint8_t*)read_buf+2*128*1024); memcpy((uint8_t*)read_buf+128*1024, rmw_buf, 128*1024); memcpy((uint8_t*)read_buf+2*128*1024, (uint8_t*)rmw_buf+128*1024, 128*1024); - reconstruct_stripes_jerasure(stripes, 4, 2, 0); + reconstruct_stripes_ec(stripes, 4, 2, 0); check_pattern(stripes[0].read_buf, 128*1024-4096, PATTERN1); check_pattern(stripes[0].read_buf+128*1024-4096, 4096, PATTERN3); free(read_buf); // Huh done free(rmw_buf); free(write_buf); - use_jerasure(4, 2, false); + use_ec(4, 2, false); } /*** @@ -714,7 +714,7 @@ void test13() input buffer: [ write0, write1 ], rmw buffer: [ write2, read0, read1 ], } - then, after calc_rmw_parity_jerasure(): all the same + then, after calc_rmw_parity_ec(): all the same then simulate read with read_osd_set=[0,2,3] and check read0 buffer ***/ @@ -722,7 +722,7 @@ void test13() void test14() { const int bmp = 4; - use_jerasure(3, 2, true); + use_ec(3, 2, true); osd_num_t osd_set[3] = { 1, 2, 0 }; osd_num_t write_osd_set[3] = { 1, 2, 3 }; osd_rmw_stripe_t stripes[3] = {}; @@ -757,7 +757,7 @@ void test14() memset(stripes[0].bmp_buf, 0, bmp); memset(stripes[1].bmp_buf, 0, bmp); memset(stripes[2].bmp_buf, 0, bmp); - calc_rmw_parity_jerasure(stripes, 3, 2, osd_set, write_osd_set, 128*1024, bmp); + calc_rmw_parity_ec(stripes, 3, 2, osd_set, write_osd_set, 128*1024, bmp); assert(*(uint32_t*)stripes[0].bmp_buf == 0x80000000); assert(*(uint32_t*)stripes[1].bmp_buf == 0x00000001); assert(*(uint32_t*)stripes[2].bmp_buf == 0x80000001); // jerasure 2+1 is still just XOR @@ -793,12 +793,12 @@ void test14() set_pattern(stripes[1].read_buf, 4096, PATTERN3); set_pattern(stripes[1].read_buf+4096, 128*1024-4096, PATTERN2); memcpy(stripes[2].read_buf, rmw_buf, 128*1024); - reconstruct_stripes_jerasure(stripes, 3, 2, bmp); + reconstruct_stripes_ec(stripes, 3, 2, bmp); check_pattern(stripes[0].read_buf, 128*1024-4096, PATTERN1); check_pattern(stripes[0].read_buf+128*1024-4096, 4096, PATTERN3); free(read_buf); // Huh done free(rmw_buf); free(write_buf); - use_jerasure(3, 2, false); + use_ec(3, 2, false); } diff --git a/tests/run_3osds.sh b/tests/run_3osds.sh index 898a9f5e..c5d3336a 100644 --- a/tests/run_3osds.sh +++ b/tests/run_3osds.sh @@ -46,7 +46,7 @@ if [ "$SCHEME" = "ec" ]; then PG_SIZE=${PG_SIZE:-5} PG_MINSIZE=${PG_MINSIZE:-3} PG_DATA_SIZE=$PG_MINSIZE - POOLCFG='"scheme":"jerasure","parity_chunks":'$((PG_SIZE-PG_MINSIZE)) + POOLCFG='"scheme":"ec","parity_chunks":'$((PG_SIZE-PG_MINSIZE)) elif [ "$SCHEME" = "xor" ]; then PG_SIZE=${PG_SIZE:-3} PG_MINSIZE=${PG_MINSIZE:-2}