Skip to content
GitLab
Projects
Groups
Snippets
Help
Loading...
Help
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
C
ceph
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
certo
ceph
Commits
1bb91398
Commit
1bb91398
authored
Jan 04, 2021
by
Vladimir Bashkirtsev
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Fixed run-rbd-unit-tests on ARMv7
parent
5b50e2f3
Changes
1
Show whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
651 additions
and
2 deletions
+651
-2
ceph-15.2.4-arm32_fix_tests.patch
ceph-15.2.4-arm32_fix_tests.patch
+651
-2
No files found.
ceph-15.2.4-arm32_fix_tests.patch
View file @
1bb91398
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 202
0-11-17 15:40:57.203039097
+1030
+++ ceph-15.2.4-arm32_fix_tests/src/test/objectstore/test_bdev.cc 202
1-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 202
0-11-17 15:41:32.066147015
+1030
+++ ceph-15.2.4-arm32_fix_tests/src/test/objectstore/test_bluefs.cc 202
1-01-04 13:34:04.621220183
+1030
@@ -206,7 +206,7 @@
}
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment