SWC-DB  v0.5.12 C++ documentations
SWC-DB© (Super Wide Column Database) - High Performance Scalable Database (https://github.com/kashirin-alex/swc-db)
RangeQuerySelectDeleting.h
Go to the documentation of this file.
1 /*
2  * SWC-DB© Copyright since 2019 Alex Kashirin <kashirin.alex@gmail.com>
3  * License details at <https://github.com/kashirin-alex/swc-db/#license>
4  */
5 
6 #ifndef swcdb_ranger_callbacks_RangeQuerySelectDeleting_h
7 #define swcdb_ranger_callbacks_RangeQuerySelectDeleting_h
8 
9 
11 
12 
13 namespace SWC { namespace Ranger { namespace Callback {
14 
15 
17  public:
18 
19  typedef std::shared_ptr<RangeQuerySelectDeleting> Ptr;
20 
23  const Comm::Event::Ptr& ev,
24  DB::Specs::Interval&& req_spec,
25  const RangePtr& a_range)
27  conn,
28  ev,
29  std::move(req_spec),
30  a_range
31  ),
32  del_flag(
33  a_range->cfg->cell_versions() == 1
34  ? DB::Cells::Flag::DELETE_LE
35  : DB::Cells::Flag::DELETE_EQ
36  ) {
37  }
38 
39  virtual ~RangeQuerySelectDeleting() noexcept { }
40 
41  bool has_update() const noexcept override {
42  return true;
43  }
44 
45  void update(DB::Cells::Mutable& blk_cells) override {
46  if(cells.ptr == cells.mark)
47  return;
48 
49  const uint8_t* ptr = cells.mark;
50  size_t remain = cells.fill() - (cells.mark - cells.base);
51 
52  size_t log_offset_it = 0;
53  size_t log_offset_hint = 0;
54  size_t blk_offset_hint = 0;
55 
56  auto& commitlog = range->blocks.commitlog;
57  {
58  Core::ScopedLock commitlog_lock(commitlog.cells_mutex());
59 
60  if(expired(remain/100000))
62 
63  for(DB::Cells::Cell updated_cell; remain; ) {
64  updated_cell.read(&ptr, &remain, false);
65 
66  updated_cell.flag = del_flag;
67  updated_cell.set_revision(Time::now_ns());
68 
69  commitlog._add(updated_cell, &log_offset_it, &log_offset_hint);
70  blk_cells.add_raw(updated_cell, &blk_offset_hint, true);
71  }
72  }
73  commitlog.commit();
74 
75  cells.set_mark();
76  }
77 
78  private:
80 
81 };
82 
83 
84 }}}
85 #endif // swcdb_ranger_callbacks_RangeQuerySelectDeleting_h
SWC::Core::BufferDyn::ptr
value_type * ptr
Definition: Buffer.h:293
SWC::DB::Cells::Mutable::add_raw
SWC_CAN_INLINE void add_raw(const DynamicBuffer &cells, bool finalized)
Definition: Mutable.h:436
SWC::DB::Cells::DELETE_EQ
@ DELETE_EQ
Definition: Cell.h:64
SWC::Error::REQUEST_TIMEOUT
@ REQUEST_TIMEOUT
Definition: Error.h:73
SWC::Ranger::Callback::RangeQuerySelect::cells
DynamicBuffer cells
Definition: RangeQuerySelect.h:139
SWC::Ranger::Callback::RangeQuerySelectDeleting::del_flag
const DB::Cells::Flag del_flag
Definition: RangeQuerySelectDeleting.h:79
SWC::Time::now_ns
SWC_CAN_INLINE int64_t now_ns() noexcept
Definition: Time.h:43
SWC::DB::Cells::Flag
Flag
Definition: Cell.h:60
SWC::Core::ScopedLock
Definition: MutexLock.h:41
SWC::Core::BufferDyn::mark
value_type * mark
Definition: Buffer.h:294
SWC::DB::Cells::DELETE_LE
@ DELETE_LE
Definition: Cell.h:63
SWC::DB::Cells::Cell
Definition: Cell.h:92
RangeQuerySelect.h
SWC::Ranger::Callback::RangeQuerySelectDeleting::Ptr
std::shared_ptr< RangeQuerySelectDeleting > Ptr
Definition: RangeQuerySelectDeleting.h:19
SWC::Ranger::RangePtr
std::shared_ptr< Range > RangePtr
Definition: Columns.h:15
SWC_CAN_INLINE
#define SWC_CAN_INLINE
Definition: Compat.h:102
SWC::Ranger::Callback::RangeQuerySelectDeleting
Definition: RangeQuerySelectDeleting.h:16
SWC::Core::Buffer::base
value_type * base
Definition: Buffer.h:131
SWC
The SWC-DB C++ namespace 'SWC'.
Definition: main.cc:12
SWC::Core::BufferDyn::set_mark
constexpr SWC_CAN_INLINE void set_mark() noexcept
Definition: Buffer.h:202
SWC::Ranger::Callback::RangeQuerySelectDeleting::has_update
bool has_update() const noexcept override
Definition: RangeQuerySelectDeleting.h:41
SWC::Ranger::Callback::RangeQuerySelect
Definition: RangeQuerySelect.h:14
SWC::Ranger::Callback::RangeQuerySelectDeleting::update
void update(DB::Cells::Mutable &blk_cells) override
Definition: RangeQuerySelectDeleting.h:45
SWC::Comm::ConnHandlerPtr
std::shared_ptr< ConnHandler > ConnHandlerPtr
Definition: AppContext.h:17
SWC::Core::BufferDyn::fill
constexpr SWC_CAN_INLINE size_t fill() const noexcept
Definition: Buffer.h:192
SWC::DB::Specs::Interval
Definition: SpecsInterval.h:25
SWC::Comm::ResponseCallback::expired
virtual bool expired(int64_t within=0) const noexcept
Definition: ResponseCallback.cc:13
SWC::Ranger::Callback::RangeQuerySelectDeleting::RangeQuerySelectDeleting
SWC_CAN_INLINE RangeQuerySelectDeleting(const Comm::ConnHandlerPtr &conn, const Comm::Event::Ptr &ev, DB::Specs::Interval &&req_spec, const RangePtr &a_range)
Definition: RangeQuerySelectDeleting.h:22
SWC::Comm::Event::Ptr
std::shared_ptr< Event > Ptr
Definition: Event.h:33
SWC::Ranger::Callback::RangeQuerySelectDeleting::~RangeQuerySelectDeleting
virtual ~RangeQuerySelectDeleting() noexcept
Definition: RangeQuerySelectDeleting.h:39
SWC::Ranger::Callback::RangeQuerySelect::range
RangePtr range
Definition: RangeQuerySelect.h:138
SWC::Error::Exception
Definition: Exception.h:21
SWC::DB::Cells::Mutable
Definition: Mutable.h:21