Drop the functional tests for this too.
Return EOPNOTSUPP by default, and tolerate this in the callers.
Signed-off-by: Sage Weil <sage@redhat.com>
* @returns 0 on success, negative error code on failure
*/
virtual int collection_getattr(coll_t cid, const char *name,
- void *value, size_t size) = 0;
+ void *value, size_t size)
+ __attribute__ ((deprecated)) {
+ return -EOPNOTSUPP;
+ }
+
/**
* collection_getattr - get an xattr of a collection
*
* @param bl buffer to receive value
* @returns 0 on success, negative error code on failure
*/
- virtual int collection_getattr(coll_t cid, const char *name, bufferlist& bl) = 0;
+ virtual int collection_getattr(coll_t cid, const char *name, bufferlist& bl)
+ __attribute__ ((deprecated)) {
+ return -EOPNOTSUPP;
+ }
+
/**
* collection_getattrs - get all xattrs of a collection
*
* @param asert map of keys and buffers that contain the values
* @returns 0 on success, negative error code on failure
*/
- virtual int collection_getattrs(coll_t cid, map<string,bufferptr> &aset) = 0;
+ virtual int collection_getattrs(coll_t cid, map<string,bufferptr> &aset)
+ __attribute__ ((deprecated)) {
+ return -EOPNOTSUPP;
+ }
+
/**
* is a collection empty?
*
dirty_big_info = false;
}
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wdeprecated-declarations"
+
bool PG::_has_removal_flag(ObjectStore *store,
spg_t pgid)
{
values.size() == 1)
return true;
- // try old way
+ // try old way. tolerate EOPNOTSUPP.
char val;
if (store->collection_getattr(coll, "remove", &val, 1) > 0)
return true;
return false;
}
-
epoch_t PG::peek_map_epoch(ObjectStore *store,
spg_t pgid,
bufferlist *bl)
return cur_epoch;
}
+#pragma GCC diagnostic pop
+
void PG::write_if_dirty(ObjectStore::Transaction& t)
{
if (dirty_big_info || dirty_info)
dout(10) << "PG relocked, finalizing" << dendl;
- // pg attrs
- osd->store->collection_getattrs(coll, map.attrs);
-
dout(10) << __func__ << " done." << dendl;
}
}
get_pgbackend()->be_scan_list(map, ls, false, handle);
- // pg attrs
- osd->store->collection_getattrs(coll, map.attrs);
}
void PG::repair_object(
int err;
std::map<std::string, bufferptr> b_coll_attrs, a_coll_attrs;
err = b_store->collection_getattrs(coll, b_coll_attrs);
- if (err < 0) {
+ if (err < 0 && err != -EOPNOTSUPP) {
dout(0) << "diff_attrs getattrs on verify coll " << coll.to_str()
<< "returns " << err << dendl;
ret = true;
}
err = a_store->collection_getattrs(coll, a_coll_attrs);
- if (err < 0) {
+ if (err < 0 && err != -EOPNOTSUPP) {
dout(0) << "diff_attrs getattrs on A coll " << coll.to_str()
<< "returns " << err << dendl;
ret = true;
ASSERT_EQ(r, 0);
}
-TEST_P(StoreTest, CollectionAttrTest) {
- coll_t cid("blah");
- int r;
-
- {
- ObjectStore::Transaction t;
- t.create_collection(cid);
- r = store->apply_transaction(t);
- ASSERT_EQ(r, 0);
- }
-
- {
- bufferlist bl;
- map<string, bufferptr> aset;
- char nonexist[] = "nonexist";
-
- r = store->collection_getattr(cid, nonexist, bl);
- ASSERT_EQ(r, -ENODATA);
-
- r = store->collection_getattrs(cid, aset);
- ASSERT_EQ(r, 0);
- ASSERT_EQ(aset.size(), 0u);
- }
-
- {
- bufferlist bl;
- map<string, bufferptr> aset;
- ObjectStore::Transaction t;
- char zero_length[] = "zero-length";
-
- t.collection_setattr(cid, zero_length, bl);
- r = store->apply_transaction(t);
- ASSERT_EQ(r, 0);
- ASSERT_EQ(bl.length(), 0u);
-
- r = store->collection_getattr(cid, zero_length, bl);
- ASSERT_EQ(r, 0);
- ASSERT_EQ(bl.length(), 0u);
-
- r = store->collection_getattrs(cid, aset);
- ASSERT_EQ(r, 0);
- ASSERT_EQ(aset.size(), 1u);
- ASSERT_EQ(aset[zero_length].length(), 0u);
- }
-
- {
- bufferlist bl;
- map<string, bufferptr> aset;
- ObjectStore::Transaction t;
- char normal[] = "normal";
- char data[] = "dasdfjasdlkas";
-
- bl.append(data, sizeof(data));
- t.collection_setattr(cid, normal, bl);
- r = store->apply_transaction(t);
- ASSERT_EQ(r, 0);
- bl.clear();
-
- r = store->collection_getattr(cid, normal, bl);
- ASSERT_EQ(r, (int)sizeof(data));
- ASSERT_EQ(bl.length(), sizeof(data));
- bl.clear();
-
- r = store->collection_getattrs(cid, aset);
- ASSERT_EQ(r, 0);
- ASSERT_EQ(aset.size(), 2u);
- ASSERT_EQ(aset[normal].length(), sizeof(data));
- }
-
- {
- ObjectStore::Transaction t;
- t.remove_collection(cid);
- r = store->apply_transaction(t);
- ASSERT_EQ(r, 0);
- }
-}
-
TEST_P(StoreTest, ScrubTest) {
coll_t cid("blah");
int r;