guard_write();
}
- add_write_ops(&m_write);
+ add_write_ops(&m_write, true);
assert(m_write.size() != 0);
librados::AioCompletion *rados_completion =
}
}
-void ObjectWriteRequest::add_write_ops(librados::ObjectWriteOperation *wr) {
+void ObjectWriteRequest::add_write_ops(librados::ObjectWriteOperation *wr,
+ bool set_hints) {
RWLock::RLocker snap_locker(m_ictx->snap_lock);
- if (m_ictx->enable_alloc_hint &&
+ if (set_hints && m_ictx->enable_alloc_hint &&
(m_ictx->object_map == nullptr || !m_object_exist)) {
wr->set_alloc_hint(m_ictx->get_object_size(), m_ictx->get_object_size());
}
}
}
-void ObjectWriteSameRequest::add_write_ops(librados::ObjectWriteOperation *wr) {
+void ObjectWriteSameRequest::add_write_ops(librados::ObjectWriteOperation *wr,
+ bool set_hints) {
RWLock::RLocker snap_locker(m_ictx->snap_lock);
- if (m_ictx->enable_alloc_hint &&
+ if (set_hints && m_ictx->enable_alloc_hint &&
(m_ictx->object_map == nullptr || !m_object_exist)) {
wr->set_alloc_hint(m_ictx->get_object_size(), m_ictx->get_object_size());
}
Context *completion, bool hide_enoent);
~ObjectRequest() override {}
- virtual void add_copyup_ops(librados::ObjectWriteOperation *wr) {};
+ virtual void add_copyup_ops(librados::ObjectWriteOperation *wr,
+ bool set_hints) {
+ };
void complete(int r) override;
uint64_t len, const ::SnapContext &snapc,
Context *completion, bool hide_enoent);
- void add_copyup_ops(librados::ObjectWriteOperation *wr) override
+ void add_copyup_ops(librados::ObjectWriteOperation *wr,
+ bool set_hints) override
{
- add_write_ops(wr);
+ add_write_ops(wr, set_hints);
}
bool should_complete(int r) override;
bool m_object_exist;
bool m_guard = true;
- virtual void add_write_ops(librados::ObjectWriteOperation *wr) = 0;
+ virtual void add_write_ops(librados::ObjectWriteOperation *wr,
+ bool set_hints) = 0;
virtual void guard_write();
virtual bool post_object_map_update() {
return false;
}
protected:
- void add_write_ops(librados::ObjectWriteOperation *wr) override;
+ void add_write_ops(librados::ObjectWriteOperation *wr,
+ bool set_hints) override;
void send_write() override;
void send_write() override;
protected:
- void add_write_ops(librados::ObjectWriteOperation *wr) override {
+ void add_write_ops(librados::ObjectWriteOperation *wr,
+ bool set_hints) override {
if (has_parent()) {
wr->truncate(0);
} else {
}
protected:
- void add_write_ops(librados::ObjectWriteOperation *wr) override {
+ void add_write_ops(librados::ObjectWriteOperation *wr,
+ bool set_hints) override {
wr->remove();
}
void send_write() override;
protected:
- void add_write_ops(librados::ObjectWriteOperation *wr) override {
+ void add_write_ops(librados::ObjectWriteOperation *wr,
+ bool set_hints) override {
wr->truncate(m_object_off);
}
};
}
protected:
- void add_write_ops(librados::ObjectWriteOperation *wr) override {
+ void add_write_ops(librados::ObjectWriteOperation *wr,
+ bool set_hints) override {
wr->zero(m_object_off, m_object_len);
}
};
}
protected:
- void add_write_ops(librados::ObjectWriteOperation *wr) override;
+ void add_write_ops(librados::ObjectWriteOperation *wr,
+ bool set_hints) override;
void send_write() override;