From cb72ac120c6206a82ad4c0af7329f4512803f413 Mon Sep 17 00:00:00 2001 From: Jason Dillaman Date: Tue, 22 Mar 2016 16:50:18 -0400 Subject: [PATCH] cls_journal: disallow client registration against missing journal Signed-off-by: Jason Dillaman --- src/cls/journal/cls_journal.cc | 8 +++++++- src/test/cls_journal/test_cls_journal.cc | 7 +++++++ 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/src/cls/journal/cls_journal.cc b/src/cls/journal/cls_journal.cc index 472b1003219de..1b61160a3046a 100644 --- a/src/cls/journal/cls_journal.cc +++ b/src/cls/journal/cls_journal.cc @@ -547,9 +547,15 @@ int journal_client_register(cls_method_context_t hctx, bufferlist *in, return -EINVAL; } + uint8_t order; + int r = read_key(hctx, HEADER_KEY_ORDER, &order); + if (r < 0) { + return r; + } + std::string key(key_from_client_id(id)); bufferlist stored_clientbl; - int r = cls_cxx_map_get_val(hctx, key, &stored_clientbl); + r = cls_cxx_map_get_val(hctx, key, &stored_clientbl); if (r != -ENOENT) { CLS_ERR("duplicate client id: %s", id.c_str()); return -EEXIST; diff --git a/src/test/cls_journal/test_cls_journal.cc b/src/test/cls_journal/test_cls_journal.cc index 9c6000dfd46e7..2e1123607752e 100644 --- a/src/test/cls_journal/test_cls_journal.cc +++ b/src/test/cls_journal/test_cls_journal.cc @@ -197,6 +197,7 @@ TEST_F(TestClsJournal, GetClient) { ASSERT_EQ(0, _rados.ioctx_create(_pool_name.c_str(), ioctx)); std::string oid = get_temp_image_name(); + ASSERT_EQ(0, client::create(ioctx, oid, 2, 4, ioctx.get_id())); Client client; ASSERT_EQ(-ENOENT, client::get_client(ioctx, oid, "id", &client)); @@ -215,6 +216,7 @@ TEST_F(TestClsJournal, ClientRegister) { ASSERT_EQ(0, _rados.ioctx_create(_pool_name.c_str(), ioctx)); std::string oid = get_temp_image_name(); + ASSERT_EQ(0, client::create(ioctx, oid, 2, 4, ioctx.get_id())); ASSERT_EQ(0, client::client_register(ioctx, oid, "id1", bufferlist())); @@ -230,6 +232,7 @@ TEST_F(TestClsJournal, ClientRegisterDuplicate) { ASSERT_EQ(0, _rados.ioctx_create(_pool_name.c_str(), ioctx)); std::string oid = get_temp_image_name(); + ASSERT_EQ(0, client::create(ioctx, oid, 2, 4, ioctx.get_id())); ASSERT_EQ(0, client::client_register(ioctx, oid, "id1", bufferlist())); ASSERT_EQ(-EEXIST, client::client_register(ioctx, oid, "id1", bufferlist())); @@ -240,6 +243,7 @@ TEST_F(TestClsJournal, ClientUpdateData) { ASSERT_EQ(0, _rados.ioctx_create(_pool_name.c_str(), ioctx)); std::string oid = get_temp_image_name(); + ASSERT_EQ(0, client::create(ioctx, oid, 2, 4, ioctx.get_id())); ASSERT_EQ(-ENOENT, client::client_update_data(ioctx, oid, "id1", bufferlist())); @@ -261,6 +265,7 @@ TEST_F(TestClsJournal, ClientUpdateState) { ASSERT_EQ(0, _rados.ioctx_create(_pool_name.c_str(), ioctx)); std::string oid = get_temp_image_name(); + ASSERT_EQ(0, client::create(ioctx, oid, 2, 4, ioctx.get_id())); ASSERT_EQ(-ENOENT, client::client_update_state(ioctx, oid, "id1", CLIENT_STATE_DISCONNECTED)); @@ -285,6 +290,7 @@ TEST_F(TestClsJournal, ClientUnregister) { ASSERT_EQ(0, _rados.ioctx_create(_pool_name.c_str(), ioctx)); std::string oid = get_temp_image_name(); + ASSERT_EQ(0, client::create(ioctx, oid, 2, 4, ioctx.get_id())); ASSERT_EQ(0, client::client_register(ioctx, oid, "id1", bufferlist())); ASSERT_EQ(0, client::client_unregister(ioctx, oid, "id1")); @@ -295,6 +301,7 @@ TEST_F(TestClsJournal, ClientUnregisterDNE) { ASSERT_EQ(0, _rados.ioctx_create(_pool_name.c_str(), ioctx)); std::string oid = get_temp_image_name(); + ASSERT_EQ(0, client::create(ioctx, oid, 2, 4, ioctx.get_id())); ASSERT_EQ(0, client::client_register(ioctx, oid, "id1", bufferlist())); ASSERT_EQ(0, client::client_unregister(ioctx, oid, "id1")); -- 2.39.5