map<shard_id_t, ObjectStore::Transaction> *transactions,
set<hobject_t> *temp_added,
set<hobject_t> *temp_removed,
- DoutPrefixProvider *dpp)
+ DoutPrefixProvider *dpp,
+ const ceph_release_t require_osd_release)
{
ceph_assert(written_map);
ceph_assert(transactions);
entry->mod_desc.update_snaps(op.updated_snaps->first);
}
- map<string, boost::optional<bufferlist> > xattr_rollback;
+ map<string, std::optional<bufferlist> > xattr_rollback;
ceph_assert(hinfo);
bufferlist old_hinfo;
encode(*hinfo, old_hinfo);
if (op.truncate->first != op.truncate->second) {
op.truncate->first = op.truncate->second;
} else {
- op.truncate = boost::none;
+ op.truncate = std::nullopt;
}
op.delete_first = true;
}
if (op.delete_first) {
- /* We also want to remove the boost::none entries since
+ /* We also want to remove the std::nullopt entries since
* the keys already won't exist */
for (auto j = op.attr_updates.begin();
j != op.attr_updates.end();
[&](const PGTransaction::ObjectOperation::Init::None &) {},
[&](const PGTransaction::ObjectOperation::Init::Create &op) {
for (auto &&st: *transactions) {
- st.second.touch(
- coll_t(spg_t(pgid, st.first)),
- ghobject_t(oid, ghobject_t::NO_GEN, st.first));
+ if (require_osd_release >= ceph_release_t::octopus) {
+ st.second.create(
+ coll_t(spg_t(pgid, st.first)),
+ ghobject_t(oid, ghobject_t::NO_GEN, st.first));
+ } else {
+ st.second.touch(
+ coll_t(spg_t(pgid, st.first)),
+ ghobject_t(oid, ghobject_t::NO_GEN, st.first));
+ }
}
},
[&](const PGTransaction::ObjectOperation::Init::Clone &op) {
xattr_rollback.insert(
make_pair(
j.first,
- boost::optional<bufferlist>(citer->second)));
+ std::optional<bufferlist>(citer->second)));
} else {
// won't overwrite anything we put in earlier
xattr_rollback.insert(
make_pair(
j.first,
- boost::none));
+ std::nullopt));
}
}
if (j.second) {