const ghobject_t& end,
uint64_t limit) const
{
- return seastar::make_ready_future<std::tuple<std::vector<ghobject_t>, ghobject_t>>(
- std::make_tuple(std::vector<ghobject_t>(), end));
+ using RetType = typename OnodeManager::list_onodes_bare_ret;
+ return seastar::do_with(
+ RetType(),
+ [this, start, end, limit] (auto& ret) {
+ return repeat_eagain([this, start, end, limit, &ret] {
+ return seastar::do_with(
+ transaction_manager->create_transaction(),
+ [this, start, end, limit, &ret] (auto& t) {
+ return onode_manager->list_onodes(*t, start, end, limit
+ ).safe_then([&ret] (auto&& _ret) {
+ ret = std::move(_ret);
+ });
+ });
+ }).safe_then([&ret] {
+ return std::move(ret);
+ });
+ }).handle_error(
+ crimson::ct_error::assert_all{
+ "Invalid error in SeaStore::list_objects"
+ }
+ );
}
seastar::future<CollectionRef> SeaStore::create_new_collection(const coll_t& cid)
{
LOG_PREFIX(SeaStore::_remove);
DEBUGT("onode={}", *ctx.transaction, *onode);
- return tm_ertr::now();
+ return onode_manager->erase_onode(*ctx.transaction, onode);
}
SeaStore::tm_ret SeaStore::_touch(
std::map<string, bufferlist> omap;
bufferlist contents;
+ void touch(
+ CTransaction &t) {
+ t.touch(cid, oid);
+ }
+
+ void touch(
+ SeaStore &seastore) {
+ CTransaction t;
+ touch(t);
+ seastore.do_transaction(
+ coll,
+ std::move(t)).get0();
+ }
+
+ void remove(
+ CTransaction &t) {
+ t.remove(cid, oid);
+ }
+
+ void remove(
+ SeaStore &seastore) {
+ CTransaction t;
+ remove(t);
+ seastore.do_transaction(
+ coll,
+ std::move(t)).get0();
+ }
+
void set_omap(
CTransaction &t,
const string &key,
oid,
object_state_t{coll_name, coll, oid})).first->second;
}
+
+ void remove_object(
+ object_state_t &sobj) {
+
+ sobj.remove(*seastore);
+ auto erased = test_objects.erase(sobj.oid);
+ ceph_assert(erased == 1);
+ }
+
+ void validate_objects() const {
+ std::vector<ghobject_t> oids;
+ for (auto& [oid, obj] : test_objects) {
+ oids.emplace_back(oid);
+ }
+ auto ret = seastore->list_objects(
+ coll,
+ ghobject_t(),
+ ghobject_t::get_max(),
+ std::numeric_limits<uint64_t>::max()).get0();
+ EXPECT_EQ(std::get<1>(ret), ghobject_t::get_max());
+ EXPECT_EQ(std::get<0>(ret), oids);
+ }
};
ghobject_t make_oid(int i) {
});
}
-TEST_F(seastore_test_t, touch_stat)
+TEST_F(seastore_test_t, touch_stat_list_remove)
{
run_async([this] {
- auto test = make_oid(0);
- {
- CTransaction t;
- t.touch(coll_name, test);
- do_transaction(std::move(t));
- }
+ auto &test_obj = get_object(make_oid(0));
+ test_obj.touch(*seastore);
+ test_obj.check_size(*seastore);
+ validate_objects();
- auto result = seastore->stat(
- coll,
- test).get0();
- EXPECT_EQ(result.st_size, 0);
+ remove_object(test_obj);
+ validate_objects();
});
}