]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
cls_journal: disallow client registration against missing journal
authorJason Dillaman <dillaman@redhat.com>
Tue, 22 Mar 2016 20:50:18 +0000 (16:50 -0400)
committerJason Dillaman <dillaman@redhat.com>
Tue, 29 Mar 2016 19:12:29 +0000 (15:12 -0400)
Signed-off-by: Jason Dillaman <dillaman@redhat.com>
src/cls/journal/cls_journal.cc
src/test/cls_journal/test_cls_journal.cc

index 472b1003219deab4bc59176e5608b9860539df5f..1b61160a3046a7134766583885f4d523e6624ae5 100644 (file)
@@ -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;
index 9c6000dfd46e7cd67df45267bc1fa54a36b22421..2e1123607752e2864bc6586b93c3d4dbb4e1d3f5 100644 (file)
@@ -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"));