auto commit_one = [&](bool header=false) {
ObjectOperation op;
+ /*
+ * Shouldn't submit empty op to Rados, which could cause
+ * the cephfs to become readonly.
+ */
+ ceph_assert(header || !_set.empty() || !_rm.empty());
+
+
// don't create new dirfrag blindly
if (!_new)
op.stat(nullptr, nullptr, nullptr);
int count = 0;
for (auto &key : stales) {
unsigned size = key.length() + sizeof(__u32);
- if (write_size + size > max_write_size)
+ if (write_size > 0 && write_size + size > max_write_size)
commit_one();
write_size += size;
for (auto &key : to_remove) {
unsigned size = key.length() + sizeof(__u32);
- if (write_size + size > max_write_size)
+ if (write_size > 0 && write_size + size > max_write_size)
commit_one();
write_size += size;
}
unsigned size = item.key.length() + bl.length() + 2 * sizeof(__u32);
- if (write_size + size > max_write_size)
+ if (write_size > 0 && write_size + size > max_write_size)
commit_one();
write_size += size;