Merge pull request #37417 from Songweibin/wip-rbd-metadata-update

librbd: should not permit update image metadata via snapshot

Reviewed-by: Jason Dillaman <dillaman@redhat.com>
This commit is contained in:
Jason Dillaman 2020-09-28 19:44:23 -04:00 committed by GitHub
commit fd159956a7
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 15 additions and 19 deletions

View File

@ -1486,7 +1486,7 @@ int Operations<I>::metadata_set(const std::string &key,
r = invoke_async_request("metadata_set",
exclusive_lock::OPERATION_REQUEST_TYPE_GENERAL,
true,
false,
boost::bind(&Operations<I>::execute_metadata_set,
this, key, value, _1),
boost::bind(&ImageWatcher<I>::notify_metadata_set,
@ -1545,7 +1545,7 @@ int Operations<I>::metadata_remove(const std::string &key) {
r = invoke_async_request("metadata_remove",
exclusive_lock::OPERATION_REQUEST_TYPE_GENERAL,
true,
false,
boost::bind(&Operations<I>::execute_metadata_remove,
this, key, _1),
boost::bind(&ImageWatcher<I>::notify_metadata_remove,

View File

@ -5487,8 +5487,8 @@ TEST_F(TestLibRBD, Metadata)
ASSERT_EQ(0, rbd_snap_protect(image1, "snap1"));
ASSERT_EQ(0, rbd_snap_set(image1, "snap1"));
ASSERT_EQ(0, rbd_metadata_set(image1, "key1", "value1"));
ASSERT_EQ(0, rbd_metadata_set(image1, "key3", "value3"));
ASSERT_EQ(-EROFS, rbd_metadata_set(image1, "key1", "value1"));
ASSERT_EQ(-EROFS, rbd_metadata_remove(image1, "key2"));
keys_len = sizeof(keys);
vals_len = sizeof(vals);
@ -5496,18 +5496,14 @@ TEST_F(TestLibRBD, Metadata)
memset_rand(vals, vals_len);
ASSERT_EQ(0, rbd_metadata_list(image1, "key", 0, keys, &keys_len, vals,
&vals_len));
ASSERT_EQ(keys_len,
strlen("key1") + 1 + strlen("key2") + 1 + strlen("key3") + 1);
ASSERT_EQ(vals_len,
strlen("value1") + 1 + strlen("value2") + 1 + strlen("value3") + 1);
ASSERT_STREQ(keys, "key1");
ASSERT_STREQ(keys + strlen("key1") + 1, "key2");
ASSERT_STREQ(keys + strlen("key1") + 1 + strlen("key2") + 1, "key3");
ASSERT_STREQ(vals, "value1");
ASSERT_STREQ(vals + strlen("value1") + 1, "value2");
ASSERT_STREQ(vals + strlen("value1") + 1 + strlen("value2") + 1, "value3");
ASSERT_EQ(keys_len, strlen("key2") + 1);
ASSERT_EQ(vals_len, strlen("value2") + 1);
ASSERT_STREQ(keys, "key2");
ASSERT_STREQ(vals, "value2");
ASSERT_EQ(0, rbd_snap_set(image1, NULL));
ASSERT_EQ(0, rbd_metadata_set(image1, "key1", "value1"));
ASSERT_EQ(0, rbd_metadata_set(image1, "key3", "value3"));
keys_len = sizeof(keys);
vals_len = sizeof(vals);
memset_rand(keys, keys_len);
@ -5650,15 +5646,15 @@ TEST_F(TestLibRBD, MetadataPP)
ASSERT_EQ(0, image1.snap_set("snap1"));
pairs.clear();
ASSERT_EQ(0, image1.metadata_set("key1", "value1"));
ASSERT_EQ(0, image1.metadata_set("key3", "value3"));
ASSERT_EQ(-EROFS, image1.metadata_set("key1", "value1"));
ASSERT_EQ(-EROFS, image1.metadata_remove("key2"));
ASSERT_EQ(0, image1.metadata_list("key", 0, &pairs));
ASSERT_EQ(3U, pairs.size());
ASSERT_EQ(0, strncmp("value1", pairs["key1"].c_str(), 6));
ASSERT_EQ(1U, pairs.size());
ASSERT_EQ(0, strncmp("value2", pairs["key2"].c_str(), 6));
ASSERT_EQ(0, strncmp("value3", pairs["key3"].c_str(), 6));
ASSERT_EQ(0, image1.snap_set(NULL));
ASSERT_EQ(0, image1.metadata_set("key1", "value1"));
ASSERT_EQ(0, image1.metadata_set("key3", "value3"));
ASSERT_EQ(0, image1.metadata_list("key", 0, &pairs));
ASSERT_EQ(3U, pairs.size());
ASSERT_EQ(0, strncmp("value1", pairs["key1"].c_str(), 6));