Commit 1bb91398 authored by Vladimir Bashkirtsev's avatar Vladimir Bashkirtsev

Fixed run-rbd-unit-tests on ARMv7

parent 5b50e2f3
diff -uNr ceph-15.2.4/src/test/librados_test_stub/TestIoCtxImpl.h ceph-15.2.4-arm32_fix_tests/src/test/librados_test_stub/TestIoCtxImpl.h
--- ceph-15.2.4/src/test/librados_test_stub/TestIoCtxImpl.h 2020-07-01 01:10:51.000000000 +0930
+++ ceph-15.2.4-arm32_fix_tests/src/test/librados_test_stub/TestIoCtxImpl.h 2021-01-04 13:34:04.620220180 +1030
@@ -197,6 +197,9 @@
};
TestRadosClient *m_client;
+#ifdef __arm__
+ int64_t spacer = 0;
+#endif
int64_t m_pool_id = 0;
std::string m_pool_name;
std::string m_namespace_name;
diff -uNr ceph-15.2.4/src/test/librbd/CMakeLists.txt ceph-15.2.4-arm32_fix_tests/src/test/librbd/CMakeLists.txt
--- ceph-15.2.4/src/test/librbd/CMakeLists.txt 2020-07-01 01:10:51.000000000 +0930
+++ ceph-15.2.4-arm32_fix_tests/src/test/librbd/CMakeLists.txt 2021-01-04 13:35:20.848449585 +1030
@@ -15,6 +15,7 @@
test_DeepCopy.cc
test_Groups.cc
test_Migration.cc
+ test_MigrationStress.cc
test_MirroringWatcher.cc
test_ObjectMap.cc
test_Operations.cc
diff -uNr ceph-15.2.4/src/test/librbd/test_DeepCopy.cc ceph-15.2.4-arm32_fix_tests/src/test/librbd/test_DeepCopy.cc
--- ceph-15.2.4/src/test/librbd/test_DeepCopy.cc 2020-07-01 01:10:51.000000000 +0930
+++ ceph-15.2.4-arm32_fix_tests/src/test/librbd/test_DeepCopy.cc 2021-01-04 13:35:20.848449585 +1030
@@ -362,14 +362,14 @@
size = initial_size = m_src_ictx->get_image_size(CEPH_NOSNAP);
}
- int nsnaps = 4;
+ int nsnaps = 2;
const char *c = getenv("TEST_RBD_DEEPCOPY_STRESS_NSNAPS");
if (c != NULL) {
std::stringstream ss(c);
ASSERT_TRUE(ss >> nsnaps);
}
- int nwrites = 4;
+ int nwrites = 2;
c = getenv("TEST_RBD_DEEPCOPY_STRESS_NWRITES");
if (c != NULL) {
std::stringstream ss(c);
diff -uNr ceph-15.2.4/src/test/librbd/test_main.cc ceph-15.2.4-arm32_fix_tests/src/test/librbd/test_main.cc
--- ceph-15.2.4/src/test/librbd/test_main.cc 2020-07-01 01:10:51.000000000 +0930
+++ ceph-15.2.4-arm32_fix_tests/src/test/librbd/test_main.cc 2021-01-04 13:35:20.848449585 +1030
@@ -18,6 +18,7 @@
extern void register_test_journal_entries();
extern void register_test_journal_replay();
extern void register_test_migration();
+extern void register_test_migration_stress();
extern void register_test_mirroring();
extern void register_test_mirroring_watcher();
extern void register_test_object_map();
@@ -38,6 +39,7 @@
register_test_journal_entries();
register_test_journal_replay();
register_test_migration();
+ register_test_migration_stress();
register_test_mirroring();
register_test_mirroring_watcher();
register_test_object_map();
diff -uNr ceph-15.2.4/src/test/librbd/test_Migration.cc ceph-15.2.4-arm32_fix_tests/src/test/librbd/test_Migration.cc
--- ceph-15.2.4/src/test/librbd/test_Migration.cc 2020-07-01 01:10:51.000000000 +0930
+++ ceph-15.2.4-arm32_fix_tests/src/test/librbd/test_Migration.cc 2021-01-04 13:35:20.849449588 +1030
@@ -432,94 +432,6 @@
close_image(child_ictx);
}
- void test_stress(const std::string &snap_name_prefix = "snap",
- char start_char = 'A') {
- uint64_t initial_size = m_ictx->size;
-
- int nsnaps = 4;
- const char *c = getenv("TEST_RBD_MIGRATION_STRESS_NSNAPS");
- if (c != NULL) {
- std::stringstream ss(c);
- ASSERT_TRUE(ss >> nsnaps);
- }
-
- int nwrites = 4;
- c = getenv("TEST_RBD_MIGRATION_STRESS_NWRITES");
- if (c != NULL) {
- std::stringstream ss(c);
- ASSERT_TRUE(ss >> nwrites);
- }
-
- for (int i = 0; i < nsnaps; i++) {
- for (int j = 0; j < nwrites; j++) {
- size_t len = rand() % ((1 << m_ictx->order) * 2);
- ASSERT_GT(m_ictx->size, len);
- uint64_t off = std::min(static_cast<uint64_t>(rand() % m_ictx->size),
- static_cast<uint64_t>(m_ictx->size - len));
- write(off, len, start_char + i);
-
- len = rand() % ((1 << m_ictx->order) * 2);
- ASSERT_GT(m_ictx->size, len);
- off = std::min(static_cast<uint64_t>(rand() % m_ictx->size),
- static_cast<uint64_t>(m_ictx->size - len));
- discard(off, len);
- }
-
- std::string snap_name = snap_name_prefix + stringify(i);
- snap_create(snap_name);
-
- if (m_ictx->test_features(RBD_FEATURE_LAYERING) &&
- !m_ictx->test_features(RBD_FEATURE_MIGRATING) &&
- rand() % 4) {
- clone(snap_name);
- }
-
- if (rand() % 2) {
- librbd::NoOpProgressContext no_op;
- uint64_t new_size = initial_size + rand() % m_ictx->size;
- resize(new_size);
- ASSERT_EQ(new_size, m_ictx->size);
- }
- }
- flush();
- }
-
- void test_stress2(bool concurrent) {
- test_stress();
-
- migration_prepare(m_ioctx, m_image_name);
- migration_status(RBD_IMAGE_MIGRATION_STATE_PREPARED);
-
- thread user([this]() {
- test_stress("user", 'a');
- for (int i = 0; i < 5; i++) {
- uint64_t off = (i + 1) * m_ictx->size / 10;
- uint64_t len = m_ictx->size / 40;
- write(off, len, '1' + i);
-
- off += len / 4;
- len /= 2;
- discard(off, len);
- }
- flush();
- });
-
- if (concurrent) {
- librados::IoCtx io_ctx;
- EXPECT_EQ(0, _rados.ioctx_create2(m_ioctx.get_id(), io_ctx));
- migration_execute(io_ctx, m_image_name);
- io_ctx.close();
- user.join();
- } else {
- user.join();
- compare("before execute");
- migration_execute(m_ioctx, m_image_name);
- }
-
- migration_status(RBD_IMAGE_MIGRATION_STATE_EXECUTED);
- migration_commit(m_ioctx, m_image_name);
- }
-
static std::string _other_pool_name;
static librados::IoCtx _other_pool_ioctx;
@@ -1300,27 +1212,3 @@
migration_abort(m_ioctx, m_image_name);
});
}
-
-TEST_F(TestMigration, StressNoMigrate)
-{
- test_stress();
-
- compare();
-}
-
-TEST_F(TestMigration, Stress)
-{
- test_stress();
-
- migrate(m_ioctx, m_image_name);
-}
-
-TEST_F(TestMigration, Stress2)
-{
- test_stress2(false);
-}
-
-TEST_F(TestMigration, StressLive)
-{
- test_stress2(true);
-}
diff -uNr ceph-15.2.4/src/test/librbd/test_MigrationStress.cc ceph-15.2.4-arm32_fix_tests/src/test/librbd/test_MigrationStress.cc
--- ceph-15.2.4/src/test/librbd/test_MigrationStress.cc 1970-01-01 09:30:00.000000000 +0930
+++ ceph-15.2.4-arm32_fix_tests/src/test/librbd/test_MigrationStress.cc 2021-01-04 13:35:20.849449588 +1030
@@ -0,0 +1,456 @@
+// -*- mode:C++; tab-width:8; c-basic-offset:2; indent-tabs-mode:t -*-
+// vim: ts=8 sw=2 smarttab
+
+#include "test/librados/test.h"
+#include "test/librbd/test_fixture.h"
+#include "test/librbd/test_support.h"
+#include "librbd/ImageState.h"
+#include "librbd/Operations.h"
+#include "librbd/api/Group.h"
+#include "librbd/api/Image.h"
+#include "librbd/api/Migration.h"
+#include "librbd/api/Mirror.h"
+#include "librbd/api/Namespace.h"
+#include "librbd/api/Snapshot.h"
+#include "librbd/image/AttachChildRequest.h"
+#include "librbd/image/AttachParentRequest.h"
+#include "librbd/internal.h"
+#include "librbd/io/ImageRequestWQ.h"
+#include "librbd/io/ReadResult.h"
+#include "common/Cond.h"
+#include <boost/scope_exit.hpp>
+
+void register_test_migration_stress() {
+}
+
+struct TestMigrationStress : public TestFixture {
+ static void SetUpTestCase() {
+ TestFixture::SetUpTestCase();
+
+ _other_pool_name = get_temp_pool_name("test-librbd-");
+ ASSERT_EQ(0, _rados.pool_create(_other_pool_name.c_str()));
+ }
+
+ static void TearDownTestCase() {
+ ASSERT_EQ(0, _rados.pool_delete(_other_pool_name.c_str()));
+
+ TestFixture::TearDownTestCase();
+ }
+
+ void SetUp() override {
+ TestFixture::SetUp();
+
+ ASSERT_EQ(0, _rados.ioctx_create(_other_pool_name.c_str(),
+ _other_pool_ioctx));
+
+ open_image(m_ioctx, m_image_name, &m_ictx);
+ m_image_id = m_ictx->id;
+
+ std::string ref_image_name = get_temp_image_name();
+ ASSERT_EQ(0, create_image_pp(m_rbd, m_ioctx, ref_image_name, m_ictx->size));
+ EXPECT_EQ(0, _rados.ioctx_create2(m_ioctx.get_id(), m_ref_ioctx));
+ open_image(m_ref_ioctx, ref_image_name, &m_ref_ictx);
+
+ resize(20 * (1 << 22));
+ }
+
+ void TearDown() override {
+ if (m_ref_ictx != nullptr) {
+ close_image(m_ref_ictx);
+ }
+ if (m_ictx != nullptr) {
+ close_image(m_ictx);
+ }
+
+ _other_pool_ioctx.close();
+
+ TestFixture::TearDown();
+ }
+
+ void compare(const std::string &description = "") {
+ vector<librbd::snap_info_t> src_snaps, dst_snaps;
+
+ EXPECT_EQ(m_ref_ictx->size, m_ictx->size);
+ EXPECT_EQ(0, librbd::api::Snapshot<>::list(m_ref_ictx, src_snaps));
+ EXPECT_EQ(0, librbd::api::Snapshot<>::list(m_ictx, dst_snaps));
+ EXPECT_EQ(src_snaps.size(), dst_snaps.size());
+ for (size_t i = 0; i <= src_snaps.size(); i++) {
+ const char *src_snap_name = nullptr;
+ const char *dst_snap_name = nullptr;
+ if (i < src_snaps.size()) {
+ EXPECT_EQ(src_snaps[i].name, dst_snaps[i].name);
+ src_snap_name = src_snaps[i].name.c_str();
+ dst_snap_name = dst_snaps[i].name.c_str();
+ }
+ EXPECT_EQ(0, librbd::api::Image<>::snap_set(
+ m_ref_ictx, cls::rbd::UserSnapshotNamespace(),
+ src_snap_name));
+ EXPECT_EQ(0, librbd::api::Image<>::snap_set(
+ m_ictx, cls::rbd::UserSnapshotNamespace(),
+ dst_snap_name));
+ compare_snaps(
+ description + " snap: " + (src_snap_name ? src_snap_name : "null"),
+ m_ref_ictx, m_ictx);
+ }
+ }
+
+ void compare_snaps(const std::string &description, librbd::ImageCtx *src_ictx,
+ librbd::ImageCtx *dst_ictx) {
+ uint64_t src_size, dst_size;
+ {
+ std::shared_lock src_locker{src_ictx->image_lock};
+ std::shared_lock dst_locker{dst_ictx->image_lock};
+ src_size = src_ictx->get_image_size(src_ictx->snap_id);
+ dst_size = dst_ictx->get_image_size(dst_ictx->snap_id);
+ }
+ if (src_size != dst_size) {
+ std::cout << description << ": size differs" << std::endl;
+ EXPECT_EQ(src_size, dst_size);
+ }
+
+ if (dst_ictx->test_features(RBD_FEATURE_LAYERING)) {
+ bool flags_set;
+ std::shared_lock dst_locker{dst_ictx->image_lock};
+ EXPECT_EQ(0, dst_ictx->test_flags(dst_ictx->snap_id,
+ RBD_FLAG_OBJECT_MAP_INVALID,
+ dst_ictx->image_lock, &flags_set));
+ EXPECT_FALSE(flags_set);
+ }
+
+ ssize_t read_size = 1 << src_ictx->order;
+ uint64_t offset = 0;
+ while (offset < src_size) {
+ read_size = std::min(read_size, static_cast<ssize_t>(src_size - offset));
+
+ bufferptr src_ptr(read_size);
+ bufferlist src_bl;
+ src_bl.push_back(src_ptr);
+ librbd::io::ReadResult src_result{&src_bl};
+ EXPECT_EQ(read_size, src_ictx->io_work_queue->read(
+ offset, read_size, librbd::io::ReadResult{src_result}, 0));
+
+ bufferptr dst_ptr(read_size);
+ bufferlist dst_bl;
+ dst_bl.push_back(dst_ptr);
+ librbd::io::ReadResult dst_result{&dst_bl};
+ EXPECT_EQ(read_size, dst_ictx->io_work_queue->read(
+ offset, read_size, librbd::io::ReadResult{dst_result}, 0));
+
+ if (!src_bl.contents_equal(dst_bl)) {
+ std::cout << description
+ << ", block " << offset << "~" << read_size << " differs"
+ << std::endl;
+ char *c = getenv("TEST_RBD_MIGRATION_VERBOSE");
+ if (c != NULL && *c != '\0') {
+ std::cout << "src block: " << src_ictx->id << ": " << std::endl; src_bl.hexdump(std::cout);
+ std::cout << "dst block: " << dst_ictx->id << ": " << std::endl; dst_bl.hexdump(std::cout);
+ }
+ }
+ EXPECT_TRUE(src_bl.contents_equal(dst_bl));
+ offset += read_size;
+ }
+ }
+
+ void open_image(librados::IoCtx& io_ctx, const std::string &name,
+ const std::string &id, bool read_only, int flags,
+ librbd::ImageCtx **ictx) {
+ *ictx = new librbd::ImageCtx(name, id, nullptr, io_ctx, read_only);
+ m_ictxs.insert(*ictx);
+
+ ASSERT_EQ(0, (*ictx)->state->open(flags));
+ (*ictx)->discard_granularity_bytes = 0;
+ }
+
+ void open_image(librados::IoCtx& io_ctx, const std::string &name,
+ librbd::ImageCtx **ictx) {
+ open_image(io_ctx, name, "", false, 0, ictx);
+ }
+
+ void migration_prepare(librados::IoCtx& dst_io_ctx,
+ const std::string &dst_name, int r = 0) {
+ std::cout << __func__ << std::endl;
+
+ close_image(m_ictx);
+ m_ictx = nullptr;
+
+ EXPECT_EQ(r, librbd::api::Migration<>::prepare(m_ioctx, m_image_name,
+ dst_io_ctx, dst_name,
+ m_opts));
+ if (r == 0) {
+ open_image(dst_io_ctx, dst_name, &m_ictx);
+ } else {
+ open_image(m_ioctx, m_image_name, &m_ictx);
+ }
+ compare("after prepare");
+ }
+
+ void migration_execute(librados::IoCtx& io_ctx, const std::string &name,
+ int r = 0) {
+ std::cout << __func__ << std::endl;
+
+ librbd::NoOpProgressContext no_op;
+ EXPECT_EQ(r, librbd::api::Migration<>::execute(io_ctx, name, no_op));
+ }
+
+ void migration_abort(librados::IoCtx& io_ctx, const std::string &name,
+ int r = 0) {
+ std::cout << __func__ << std::endl;
+
+ std::string dst_name = m_ictx->name;
+ close_image(m_ictx);
+ m_ictx = nullptr;
+
+ librbd::NoOpProgressContext no_op;
+ EXPECT_EQ(r, librbd::api::Migration<>::abort(io_ctx, name, no_op));
+
+ if (r == 0) {
+ open_image(m_ioctx, m_image_name, &m_ictx);
+ } else {
+ open_image(m_ioctx, dst_name, &m_ictx);
+ }
+
+ compare("after abort");
+ }
+
+ void migration_commit(librados::IoCtx& io_ctx, const std::string &name) {
+ std::cout << __func__ << std::endl;
+
+ librbd::NoOpProgressContext no_op;
+ EXPECT_EQ(0, librbd::api::Migration<>::commit(io_ctx, name, no_op));
+
+ compare("after commit");
+ }
+
+ void migration_status(librbd::image_migration_state_t state) {
+ librbd::image_migration_status_t status;
+ EXPECT_EQ(0, librbd::api::Migration<>::status(m_ioctx, m_image_name,
+ &status));
+ EXPECT_EQ(status.source_pool_id, m_ioctx.get_id());
+ EXPECT_EQ(status.source_pool_namespace, m_ioctx.get_namespace());
+ EXPECT_EQ(status.source_image_name, m_image_name);
+ EXPECT_EQ(status.source_image_id, m_image_id);
+ EXPECT_EQ(status.dest_pool_id, m_ictx->md_ctx.get_id());
+ EXPECT_EQ(status.dest_pool_namespace, m_ictx->md_ctx.get_namespace());
+ EXPECT_EQ(status.dest_image_name, m_ictx->name);
+ EXPECT_EQ(status.dest_image_id, m_ictx->id);
+ EXPECT_EQ(status.state, state);
+ }
+
+ void migrate(librados::IoCtx& dst_io_ctx, const std::string &dst_name) {
+ migration_prepare(dst_io_ctx, dst_name);
+ migration_status(RBD_IMAGE_MIGRATION_STATE_PREPARED);
+ migration_execute(dst_io_ctx, dst_name);
+ migration_status(RBD_IMAGE_MIGRATION_STATE_EXECUTED);
+ migration_commit(dst_io_ctx, dst_name);
+ }
+
+ void write(uint64_t off, uint64_t len, char c) {
+ std::cout << "write: " << c << " " << off << "~" << len << std::endl;
+
+ bufferlist ref_bl;
+ ref_bl.append(std::string(len, c));
+ ASSERT_EQ(static_cast<ssize_t>(len),
+ m_ref_ictx->io_work_queue->write(off, len, std::move(ref_bl), 0));
+ bufferlist bl;
+ bl.append(std::string(len, c));
+ ASSERT_EQ(static_cast<ssize_t>(len),
+ m_ictx->io_work_queue->write(off, len, std::move(bl), 0));
+ }
+
+ void discard(uint64_t off, uint64_t len) {
+ std::cout << "discard: " << off << "~" << len << std::endl;
+
+ ASSERT_EQ(static_cast<ssize_t>(len),
+ m_ref_ictx->io_work_queue->discard(off, len, false));
+ ASSERT_EQ(static_cast<ssize_t>(len),
+ m_ictx->io_work_queue->discard(off, len, false));
+ }
+
+ void flush() {
+ ASSERT_EQ(0, m_ref_ictx->io_work_queue->flush());
+ ASSERT_EQ(0, m_ictx->io_work_queue->flush());
+ }
+
+ void snap_create(const std::string &snap_name) {
+ std::cout << "snap_create: " << snap_name << std::endl;
+
+ flush();
+
+ ASSERT_EQ(0, TestFixture::snap_create(*m_ref_ictx, snap_name));
+ ASSERT_EQ(0, TestFixture::snap_create(*m_ictx, snap_name));
+ }
+
+ void snap_protect(const std::string &snap_name) {
+ std::cout << "snap_protect: " << snap_name << std::endl;
+
+ ASSERT_EQ(0, TestFixture::snap_protect(*m_ref_ictx, snap_name));
+ ASSERT_EQ(0, TestFixture::snap_protect(*m_ictx, snap_name));
+ }
+
+ void clone(const std::string &snap_name) {
+ snap_protect(snap_name);
+
+ int order = m_ref_ictx->order;
+ uint64_t features;
+ ASSERT_EQ(0, librbd::get_features(m_ref_ictx, &features));
+ features &= ~RBD_FEATURES_IMPLICIT_ENABLE;
+
+ std::string ref_clone_name = get_temp_image_name();
+ std::string clone_name = get_temp_image_name();
+
+ std::cout << "clone " << m_ictx->name << " -> " << clone_name
+ << std::endl;
+
+ ASSERT_EQ(0, librbd::clone(m_ref_ictx->md_ctx, m_ref_ictx->name.c_str(),
+ snap_name.c_str(), m_ref_ioctx,
+ ref_clone_name.c_str(), features, &order,
+ m_ref_ictx->stripe_unit,
+ m_ref_ictx->stripe_count));
+
+ ASSERT_EQ(0, librbd::clone(m_ictx->md_ctx, m_ictx->name.c_str(),
+ snap_name.c_str(), m_ioctx,
+ clone_name.c_str(), features, &order,
+ m_ictx->stripe_unit,
+ m_ictx->stripe_count));
+
+ close_image(m_ref_ictx);
+ open_image(m_ref_ioctx, ref_clone_name, &m_ref_ictx);
+
+ close_image(m_ictx);
+ open_image(m_ioctx, clone_name, &m_ictx);
+ m_image_name = m_ictx->name;
+ m_image_id = m_ictx->id;
+ }
+
+ void resize(uint64_t size) {
+ std::cout << "resize: " << size << std::endl;
+
+ librbd::NoOpProgressContext no_op;
+ ASSERT_EQ(0, m_ref_ictx->operations->resize(size, true, no_op));
+ ASSERT_EQ(0, m_ictx->operations->resize(size, true, no_op));
+ }
+
+ void test_stress(const std::string &snap_name_prefix = "snap",
+ char start_char = 'A') {
+ uint64_t initial_size = m_ictx->size;
+
+ int nsnaps = 2;
+ const char *c = getenv("TEST_RBD_MIGRATION_STRESS_NSNAPS");
+ if (c != NULL) {
+ std::stringstream ss(c);
+ ASSERT_TRUE(ss >> nsnaps);
+ }
+
+ int nwrites = 2;
+ c = getenv("TEST_RBD_MIGRATION_STRESS_NWRITES");
+ if (c != NULL) {
+ std::stringstream ss(c);
+ ASSERT_TRUE(ss >> nwrites);
+ }
+
+ for (int i = 0; i < nsnaps; i++) {
+ for (int j = 0; j < nwrites; j++) {
+ size_t len = rand() % ((1 << m_ictx->order) * 2);
+ ASSERT_GT(m_ictx->size, len);
+ uint64_t off = std::min(static_cast<uint64_t>(rand() % m_ictx->size),
+ static_cast<uint64_t>(m_ictx->size - len));
+ write(off, len, start_char + i);
+
+ len = rand() % ((1 << m_ictx->order) * 2);
+ ASSERT_GT(m_ictx->size, len);
+ off = std::min(static_cast<uint64_t>(rand() % m_ictx->size),
+ static_cast<uint64_t>(m_ictx->size - len));
+ discard(off, len);
+ }
+
+ std::string snap_name = snap_name_prefix + stringify(i);
+ snap_create(snap_name);
+
+ if (m_ictx->test_features(RBD_FEATURE_LAYERING) &&
+ !m_ictx->test_features(RBD_FEATURE_MIGRATING) &&
+ rand() % 4) {
+ clone(snap_name);
+ }
+
+ if (rand() % 2) {
+ librbd::NoOpProgressContext no_op;
+ uint64_t new_size = initial_size + rand() % m_ictx->size;
+ resize(new_size);
+ ASSERT_EQ(new_size, m_ictx->size);
+ }
+ }
+ flush();
+ }
+
+ void test_stress2(bool concurrent) {
+ test_stress();
+
+ migration_prepare(m_ioctx, m_image_name);
+ migration_status(RBD_IMAGE_MIGRATION_STATE_PREPARED);
+
+ thread user([this]() {
+ test_stress("user", 'a');
+ for (int i = 0; i < 5; i++) {
+ uint64_t off = (i + 1) * m_ictx->size / 10;
+ uint64_t len = m_ictx->size / 40;
+ write(off, len, '1' + i);
+
+ off += len / 4;
+ len /= 2;
+ discard(off, len);
+ }
+ flush();
+ });
+
+ if (concurrent) {
+ librados::IoCtx io_ctx;
+ EXPECT_EQ(0, _rados.ioctx_create2(m_ioctx.get_id(), io_ctx));
+ migration_execute(io_ctx, m_image_name);
+ io_ctx.close();
+ user.join();
+ } else {
+ user.join();
+ compare("before execute");
+ migration_execute(m_ioctx, m_image_name);
+ }
+
+ migration_status(RBD_IMAGE_MIGRATION_STATE_EXECUTED);
+ migration_commit(m_ioctx, m_image_name);
+ }
+
+ static std::string _other_pool_name;
+ static librados::IoCtx _other_pool_ioctx;
+
+ std::string m_image_id;
+ librbd::ImageCtx *m_ictx = nullptr;
+ librados::IoCtx m_ref_ioctx;
+ librbd::ImageCtx *m_ref_ictx = nullptr;
+ librbd::ImageOptions m_opts;
+};
+
+std::string TestMigrationStress::_other_pool_name;
+librados::IoCtx TestMigrationStress::_other_pool_ioctx;
+
+TEST_F(TestMigrationStress, StressNoMigrate)
+{
+ test_stress();
+
+ compare();
+}
+
+TEST_F(TestMigrationStress, Stress)
+{
+ test_stress();
+
+ migrate(m_ioctx, m_image_name);
+}
+
+TEST_F(TestMigrationStress, Stress2)
+{
+ test_stress2(false);
+}
+
+TEST_F(TestMigrationStress, StressLive)
+{
+ test_stress2(true);
+}
diff -uNr ceph-15.2.4/src/test/objectstore/test_bdev.cc ceph-15.2.4-arm32_fix_tests/src/test/objectstore/test_bdev.cc
--- ceph-15.2.4/src/test/objectstore/test_bdev.cc 2020-07-01 01:10:51.000000000 +0930
+++ ceph-15.2.4-arm32_fix_tests/src/test/objectstore/test_bdev.cc 2020-11-17 15:40:57.203039097 +1030
+++ ceph-15.2.4-arm32_fix_tests/src/test/objectstore/test_bdev.cc 2021-01-04 13:34:04.621220183 +1030
@@ -54,8 +54,8 @@
BlockDevice::create(g_ceph_context, bdev.path, NULL, NULL,
[](void* handle, void* aio) {}, NULL));
......@@ -14,7 +663,7 @@ diff -uNr ceph-15.2.4/src/test/objectstore/test_bdev.cc ceph-15.2.4-arm32_fix_te
}
diff -uNr ceph-15.2.4/src/test/objectstore/test_bluefs.cc ceph-15.2.4-arm32_fix_tests/src/test/objectstore/test_bluefs.cc
--- ceph-15.2.4/src/test/objectstore/test_bluefs.cc 2020-07-01 01:10:51.000000000 +0930
+++ ceph-15.2.4-arm32_fix_tests/src/test/objectstore/test_bluefs.cc 2020-11-17 15:41:32.066147015 +1030
+++ ceph-15.2.4-arm32_fix_tests/src/test/objectstore/test_bluefs.cc 2021-01-04 13:34:04.621220183 +1030
@@ -206,7 +206,7 @@
}
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment