SWC-DB  v0.5.12 C++ documentations
SWC-DB© (Super Wide Column Database) - High Performance Scalable Database (https://github.com/kashirin-alex/swc-db)
Scanner.cc
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 
12 
13 
14 namespace SWC { namespace client { namespace Query { namespace Select {
15 
16 
17 
18 #define SWC_SCANNER_REQ_DEBUG(msg) \
19  SWC_LOG_OUT(LOG_DEBUG, params.print(SWC_LOG_OSTREAM << msg << ' '); );
20 
21 #define SWC_SCANNER_RSP_DEBUG(msg) \
22  SWC_LOG_OUT(LOG_DEBUG, \
23  print(SWC_LOG_OSTREAM << msg << ' '); \
24  rsp.print(SWC_LOG_OSTREAM << ' '); \
25  );
26 
27 
28 
29 static const uint8_t RETRY_POINT_NONE = 0;
30 static const uint8_t RETRY_POINT_MASTER = 1;
31 static const uint8_t RETRY_POINT_META = 2;
32 static const uint8_t RETRY_POINT_DATA = 3;
33 
34 
36  const DB::Types::KeySeq a_col_seq,
37  const DB::Specs::Interval& a_interval,
38  const cid_t cid)
39  : completion(0),
40  selector(hdlr),
41  col_seq(a_col_seq),
42  interval(a_interval),
43  master_cid(DB::Types::SystemColumn::get_master_cid(col_seq)),
44  meta_cid(DB::Types::SystemColumn::get_meta_cid(col_seq)),
45  data_cid(cid),
46  master_rid(0),
47  meta_rid(0),
48  data_rid(0),
49  master_mngr_revision(0),
50  master_mngr_is_end(false),
51  master_mngr_next(false),
52  master_rgr_next(false),
53  meta_next(false),
54  retry_point(RETRY_POINT_NONE),
55  need_data_cid_check(false),
56  master_rgr_req_base(nullptr),
57  meta_req_base(nullptr),
58  data_req_base(nullptr),
59  master_mngr_offset(),
60  master_rgr_offset(),
61  meta_offset(),
62  meta_end(),
63  master_rgr_endpoints(),
64  meta_endpoints(),
65  data_endpoints() {
66 }
67 
69  const DB::Types::KeySeq a_col_seq,
70  DB::Specs::Interval&& a_interval,
71  const cid_t cid) noexcept
72  : completion(0),
73  selector(hdlr),
74  col_seq(a_col_seq),
75  interval(std::move(a_interval)),
76  master_cid(DB::Types::SystemColumn::get_master_cid(col_seq)),
77  meta_cid(DB::Types::SystemColumn::get_meta_cid(col_seq)),
78  data_cid(cid),
79  master_rid(0),
80  meta_rid(0),
81  data_rid(0),
82  master_mngr_revision(0),
83  master_mngr_is_end(false),
84  master_mngr_next(false),
85  master_rgr_next(false),
86  meta_next(false),
87  retry_point(RETRY_POINT_NONE),
88  need_data_cid_check(false),
89  master_rgr_req_base(nullptr),
90  meta_req_base(nullptr),
91  data_req_base(nullptr),
92  master_mngr_offset(),
93  master_rgr_offset(),
94  meta_offset(),
95  meta_end(),
96  master_rgr_endpoints(),
97  meta_endpoints(),
98  data_endpoints() {
99 }
100 
101 Scanner::~Scanner() noexcept { }
102 
103 void Scanner::debug_res_cache(const char* msg, cid_t cid, rid_t rid,
104  const Comm::EndPoints& endpoints) {
106  print(SWC_LOG_OSTREAM << msg << ' ');
108  << " Ranger(cid=" << cid << " rid=" << rid << " endpoints=[";
109  for(auto& endpoint : endpoints)
110  SWC_LOG_OSTREAM << endpoint << ',';
111  SWC_LOG_OSTREAM << "])";
112  );
113 }
114 
115 void Scanner::print(std::ostream& out) {
116  out << "Scanner(" << DB::Types::to_string(col_seq)
117  << " master(" << master_cid << '/' << master_rid
118  << " mngr-rev=" << master_mngr_revision
119  << " mngr-next=" << master_mngr_next
120  << " rgr-next=" << master_rgr_next << ')'
121  << " meta(" << meta_cid << '/' << meta_rid
122  << " next=" << meta_next << ')'
123  << " data(" << data_cid << '/' << data_rid << ") ";
124  interval.print(out);
125  out << " completion=" << completion.count()
126  << " retry-point=";
127  switch(retry_point) {
128  case RETRY_POINT_NONE: {
129  out << "NONE";
130  break;
131  }
132  case RETRY_POINT_MASTER: {
133  out << "MASTER";
134  break;
135  }
136  case RETRY_POINT_META: {
137  out << "META";
138  break;
139  }
140  case RETRY_POINT_DATA: {
141  out << "DATA";
142  break;
143  }
144  default: {
145  out << "UNKNOWN";
146  break;
147  }
148  }
149  out << ')';
150 }
151 
152 
153 struct ReqDataBase {
156  ReqDataBase(const Scanner::Ptr& a_scanner)
157  noexcept : scanner(a_scanner) { }
159  ~ReqDataBase() noexcept { }
162  return scanner->selector->clients;
163  }
165  bool valid() {
166  return scanner->selector->valid();
167  }
168 };
169 
170 
171 
173  if(completion.is_last()) {
174  master_rgr_req_base = nullptr;
175  meta_req_base = nullptr;
176  data_req_base = nullptr;
177  if(selector->completion.is_last())
178  selector->response(Error::OK);
179  }
180 }
181 
183  if(meta_next) {
184  if(!interval.offset_key.empty() && !meta_end.empty()) {
186  != Condition::LT) {
188  interval.offset_rev = 0;
189  }
190  }
191  rgr_locate_meta();
192 
193  } else if(master_rgr_next) {
195 
196  } else if(master_mngr_next) {
198  }
199 }
200 
201 
202 //
205  if(!selector->valid())
206  return response_if_last();
207 
208  Profiling::Component::Start profile(selector->profile.mngr_locate());
209 
212 
213  if(master_mngr_next) {
215  }
216  /*** MASTER columns need to have aligned MetaData interval
217  if(master_mngr_offset.empty()) {
218  interval.apply_possible_range(
219  params.range_begin, params.range_end);
220  } else {
221  params.range_begin.copy(master_mngr_offset);
222  interval.apply_possible_range_end(params.range_end);
223  }
224  ***/
225 
227  auto data_cid_str = std::to_string(data_cid);
228  if(!master_mngr_next)
229  params.range_begin.insert(0, data_cid_str);
230  params.range_end.insert(0, data_cid_str);
231  }
234  if(!master_mngr_next)
235  params.range_begin.insert(0, meta_cid_str);
236  params.range_end.insert(0, meta_cid_str);
237  }
238 
239  SWC_SCANNER_REQ_DEBUG("mngr_locate_master");
240  struct ReqData : ReqDataBase {
243  ReqData(const Ptr& a_scanner,
244  Profiling::Component::Start& a_profile) noexcept
245  : ReqDataBase(a_scanner), profile(a_profile) { }
247  ~ReqData() noexcept { }
249  void callback(const ReqBase::Ptr& req,
251  profile.add(rsp.err || !rsp.rid);
252  if(scanner->mngr_located_master(req, rsp))
253  scanner->response_if_last();
254  }
255  };
256 
258  ::make(params, 10000, shared_from_this(), profile);
259 
262  selector->clients->mngr_cache_get_read_master(
263  master_cid, params.range_begin, params.range_end,
266  profile.add_cached(Error::OK);
268  << "mngr_located_master Cache hit"
269  << " Ranger(cid=" << master_cid << " rid=" << master_rid
270  << " rev=" << master_mngr_revision << " endpoints=[";
271  for(auto& endpoint : master_rgr_endpoints)
272  SWC_LOG_OSTREAM << endpoint << ',';
274  SWC_LOG_OSTREAM << ')';
275  );
276  master_mngr_next = true;
277  master_rgr_req_base = req;
280  } else {
281  req->run();
282  }
283 }
284 
286  const ReqBase::Ptr& req,
288  switch(rsp.err) {
289  case Error::OK: {
290  if(!rsp.rid) {
291  SWC_SCANNER_RSP_DEBUG("mngr_located_master RETRYING(no rid)");
292  if(selector->valid()) {
293  req->request_again();
294  return false;
295  }
296  return true;
297  }
298  if(master_cid != rsp.cid) {
299  SWC_SCANNER_RSP_DEBUG("mngr_located_master RETRYING(cid no match)");
300  if(selector->valid()) {
301  req->request_again();
302  return false;
303  }
304  return true;
305  }
306 
307  SWC_SCANNER_RSP_DEBUG("mngr_located_master");
308  master_mngr_next = true;
311  data_rid = rsp.rid;
312  data_req_base = req;
313  data_endpoints = std::move(rsp.endpoints);
314  rgr_select();
315  } else {
316  selector->clients->mngr_cache_set_master(
317  master_cid, rsp.rid,
318  rsp.range_begin, rsp.range_end,
319  rsp.endpoints, rsp.revision
320  );
321  master_rid = rsp.rid;
322  master_rgr_req_base = req;
323  master_rgr_endpoints = std::move(rsp.endpoints);
327  }
328  return true;
329  }
330  case Error::CLIENT_STOPPING: {
331  SWC_SCANNER_RSP_DEBUG("mngr_located_master STOPPED");
332  selector->error(rsp.err);
333  return true;
334  }
335  case Error::RANGE_NOT_FOUND: {
336  if(master_mngr_next) {
337  master_mngr_next = false;
338  SWC_SCANNER_RSP_DEBUG("mngr_located_master finished");
339  return true;
340  }
341  [[fallthrough]];
342  }
343  default: {
344  SWC_SCANNER_RSP_DEBUG("mngr_located_master RETRYING");
345  if(selector->valid()) {
346  req->request_again();
347  return false;
348  }
349  return true;
350  }
351  }
352 }
353 
354 
355 //
358  if(!selector->valid())
359  return response_if_last();
360 
364  auto data_cid_str = std::to_string(data_cid);
365  if(master_rgr_next) {
366  params.flags |= retry_point
370  params.range_offset.insert(0, data_cid_str);
371  }
372 
373  /*** MASTER columns need to have aligned MetaData interval
374  bool range_end_rest = false;
375  interval.apply_possible_range(
376  params.range_begin, params.range_end, &range_end_rest);
377  if(range_end_rest)
378  params.flags
379  |= Comm::Protocol::Rgr::Params::RangeLocateReq::RANGE_END_REST;
380  if(interval.has_opt__key_equal())
381  params.flags
382  |= Comm::Protocol::Rgr::Params::RangeLocateReq::KEY_EQUAL;
383  ***/
384 
385  params.range_begin.insert(0, data_cid_str);
386  params.range_end.insert(0, data_cid_str);
389  params.range_begin.insert(0, meta_cid_str);
390  params.range_end.insert(0, meta_cid_str);
391  if(master_rgr_next)
392  params.range_offset.insert(0, meta_cid_str);
393  }
394 
395  SWC_SCANNER_REQ_DEBUG("rgr_locate_master");
396  struct ReqData : ReqDataBase {
399  ReqData(const Ptr& a_scanner) noexcept
400  : ReqDataBase(a_scanner),
401  profile(scanner->selector->profile.rgr_locate(
402  DB::Types::Range::MASTER)) { }
404  ~ReqData() noexcept { }
406  void callback(const ReqBase::Ptr& req,
408  profile.add(!rsp.rid || rsp.err);
409  scanner->rgr_located_master(req, rsp);
410  }
411  };
412 
414  ::request(params, master_rgr_endpoints, 10000, shared_from_this());
415 }
416 
418  const ReqBase::Ptr& req,
422  switch(rsp.err) {
423  case Error::OK: {
424  if(!rsp.rid) { // sake check (must be an err rsp)
425  SWC_SCANNER_RSP_DEBUG("rgr_located_master RETRYING(no rid)");
426  selector->clients->mngr_cache_remove_master(master_cid, master_rid);
427  if(selector->valid()) {
428  if(!retry_point)
430  return master_rgr_req_base->request_again();
431  }
432  break;
433  }
434  if(meta_cid != rsp.cid) { // sake check (must be an err rsp)
435  SWC_SCANNER_RSP_DEBUG("rgr_located_master RETRYING(cid no match)");
436  selector->clients->mngr_cache_remove_master(master_cid, master_rid);
437  if(selector->valid()) {
438  if(!retry_point)
440  return master_rgr_req_base->request_again();
441  }
442  break;
443  }
444  SWC_SCANNER_RSP_DEBUG("rgr_located_master");
445  master_rgr_next = true;
448  data_rid = rsp.rid;
449  data_req_base = req;
451  } else {
452  meta_rid = rsp.rid;
453  meta_req_base = req;
455  }
456  break;
457  }
458  case Error::RANGE_NOT_FOUND: {
459  if(master_rgr_next) {
460  master_rgr_next = false;
461  SWC_SCANNER_RSP_DEBUG("rgr_located_master master_rgr_next");
462  next_call();
463  break;
464  }
465  [[fallthrough]];
466  }
470  SWC_SCANNER_RSP_DEBUG("rgr_located_master RETRYING");
471  selector->clients->mngr_cache_remove_master(master_cid, master_rid);
472  if(selector->valid()) {
473  if(!retry_point)
475  return master_rgr_req_base->request_again();
476  }
477  break;
478  }
479  default: {
480  if(selector->valid())
481  return req->request_again();
482  break;
483  }
484  }
486 }
487 
488 
489 //
492  if(!selector->valid())
493  return response_if_last();
494 
495  auto profile = selector->profile.mngr_res();
496 
497  if(selector->clients->rgr_cache_get(meta_cid, meta_rid, meta_endpoints)) {
498  profile.add_cached(Error::OK);
499  debug_res_cache("mngr_resolved_rgr_meta Cache hit",
501  rgr_locate_meta();
502  return response_if_last();
503  }
504 
506  SWC_SCANNER_REQ_DEBUG("mngr_resolve_rgr_meta");
507  struct ReqData : ReqDataBase {
510  ReqData(const Ptr& a_scanner,
511  Profiling::Component::Start& a_profile) noexcept
512  : ReqDataBase(a_scanner), profile(a_profile) { }
514  ~ReqData() noexcept { }
516  void callback(const ReqBase::Ptr& req,
518  profile.add(rsp.err || !rsp.rid || rsp.endpoints.empty());
519  if(scanner->mngr_resolved_rgr_meta(req, rsp))
520  scanner->response_if_last();
521  }
522  };
523 
525  ::request(params, 10000, shared_from_this(), profile);
526 }
527 
529  const ReqBase::Ptr& req,
531  switch(rsp.err) {
532  case Error::OK: {
533  SWC_SCANNER_RSP_DEBUG("mngr_resolved_rgr_meta");
534  selector->clients->rgr_cache_set(meta_cid, meta_rid, rsp.endpoints);
535  meta_endpoints = std::move(rsp.endpoints);
536  rgr_locate_meta();
537  return true;
538  }
539  case Error::RANGE_NOT_FOUND: {
540  SWC_SCANNER_RSP_DEBUG("mngr_resolved_rgr_meta RETRYING");
541  if(selector->valid()) {
542  if(!retry_point)
544  meta_req_base->request_again();
545  return false;
546  }
547  return true;
548  }
549  case Error::CLIENT_STOPPING: {
550  SWC_SCANNER_RSP_DEBUG("mngr_resolved_rgr_meta STOPPED");
551  selector->error(rsp.err);
552  return true;
553  }
554  default: {
555  SWC_SCANNER_RSP_DEBUG("mngr_resolved_rgr_meta RETRYING");
556  if(selector->valid()) {
557  req->request_again();
558  return false;
559  }
560  return true;
561  }
562  }
563 }
564 
565 
566 //
569  if(!selector->valid())
570  return response_if_last();
571 
573  auto data_cid_str = std::to_string(data_cid);
574  if(meta_next) {
575  params.flags |= retry_point
578  params.range_offset.copy(meta_offset);
579  params.range_offset.insert(0, data_cid_str);
580  }
581 
582  bool range_end_rest = false;
584  params.range_begin, params.range_end, &range_end_rest);
585  if(range_end_rest ||
587  params.flags
590  params.flags
592 
593  params.range_begin.insert(0, data_cid_str);
594  params.range_end.insert(0, data_cid_str);
595 
596  SWC_SCANNER_REQ_DEBUG("rgr_locate_meta");
597  struct ReqData : ReqDataBase {
600  ReqData(const Ptr& a_scanner) noexcept
601  : ReqDataBase(a_scanner),
602  profile(scanner->selector->profile.rgr_locate(
603  DB::Types::Range::META)) { }
605  ~ReqData() noexcept { }
607  void callback(const ReqBase::Ptr& req,
609  profile.add(!rsp.rid || rsp.err);
610  scanner->rgr_located_meta(req, rsp);
611  }
612  };
613 
615  ::request(params, meta_endpoints, 10000, shared_from_this());
616 }
617 
619  const ReqBase::Ptr& req,
623  switch(rsp.err) {
624  case Error::OK: {
625  if(!rsp.rid) { // sake check (must be an err rsp)
626  SWC_SCANNER_RSP_DEBUG("rgr_located_meta RETRYING(no rid)");
627  selector->clients->rgr_cache_remove(meta_cid, meta_rid);
628  if(selector->valid()) {
629  if(!retry_point)
631  return meta_req_base->request_again();
632  }
633  break;
634  }
635  if(data_cid != rsp.cid) { // sake check (must be an err rsp)
636  SWC_SCANNER_RSP_DEBUG("rgr_located_meta RETRYING(cid no match)");
637  selector->clients->rgr_cache_remove(meta_cid, meta_rid);
638  if(selector->valid()) {
639  if(!retry_point)
641  return meta_req_base->request_again();
642  }
643  break;
644  }
645  SWC_SCANNER_RSP_DEBUG("rgr_located_meta");
646  meta_next = true;
648  meta_end.copy(rsp.range_end);
649  data_rid = rsp.rid;
650  data_req_base = req;
652  break;
653  }
654  case Error::RANGE_NOT_FOUND: {
655  if(need_data_cid_check) {
656  selector->clients->schemas.remove(data_cid);
657  int err = Error::OK;
658  selector->clients->get_schema(err, data_cid);
659  if(err) {
660  selector->error(err); // rsp.err = Error::CONSIST_ERRORS;
661  selector->error(data_cid, err);
662  SWC_SCANNER_RSP_DEBUG("rgr_located_meta QUIT(no-schema)");
663  break;
664  }
665  need_data_cid_check = false;
666  } else {
667  need_data_cid_check = true;
668  }
669  meta_next = false;
670  SWC_SCANNER_RSP_DEBUG("rgr_located_meta meta_next");
671  next_call();
672  break;
673  }
677  SWC_SCANNER_RSP_DEBUG("rgr_located_meta RETRYING");
678  selector->clients->rgr_cache_remove(meta_cid, meta_rid);
679  if(selector->valid()) {
680  if(!retry_point)
682  return meta_req_base->request_again();
683  }
684  break;
685  }
686  default: {
687  SWC_SCANNER_RSP_DEBUG("rgr_located_meta RETRYING-locate");
688  if(selector->valid())
689  return req->request_again();
690  break;
691  }
692  }
694 }
695 
696 
697 //
700  if(!selector->valid())
701  return response_if_last();
702 
703  auto profile = selector->profile.mngr_res();
704 
705  if(selector->clients->rgr_cache_get(data_cid, data_rid, data_endpoints)) {
706  profile.add_cached(Error::OK);
707  debug_res_cache("mngr_resolved_rgr_select Cache hit",
709  rgr_select();
710  return response_if_last();
711  }
712 
714  SWC_SCANNER_REQ_DEBUG("mngr_resolve_rgr_select");
715  struct ReqData : ReqDataBase {
718  ReqData(const Ptr& a_scanner,
719  Profiling::Component::Start& a_profile) noexcept
720  : ReqDataBase(a_scanner), profile(a_profile) { }
722  ~ReqData() noexcept { }
724  void callback(const ReqBase::Ptr& req,
726  profile.add(rsp.err || !rsp.rid || rsp.endpoints.empty());
727  if(scanner->mngr_resolved_rgr_select(req, rsp))
728  scanner->response_if_last();
729  }
730  };
731 
733  ::request(params, 10000, shared_from_this(), profile);
734 }
735 
737  const ReqBase::Ptr& req,
739  switch(rsp.err) {
740  case Error::OK: {
741  SWC_SCANNER_RSP_DEBUG("mngr_resolved_rgr_select");
742  selector->clients->rgr_cache_set(data_cid, data_rid, rsp.endpoints);
743  data_endpoints = std::move(rsp.endpoints);
744  rgr_select();
745  return true;
746  }
748  SWC_SCANNER_RSP_DEBUG("mngr_resolved_rgr_select QUIT");
749  selector->clients->schemas.remove(data_cid);
750  selector->error(rsp.err); // rsp.err = Error::CONSIST_ERRORS;
751  selector->error(data_cid, rsp.err);
752  return true;
753  }
754  case Error::RANGE_NOT_FOUND: {
755  SWC_SCANNER_RSP_DEBUG("mngr_resolved_rgr_select RETRYING");
756  if(selector->valid()) {
758  data_req_base->request_again();
759  return false;
760  }
761  return true;
762  }
763  case Error::CLIENT_STOPPING: {
764  SWC_SCANNER_RSP_DEBUG("mngr_resolved_rgr_select STOPPED");
765  selector->error(rsp.err);
766  return true;
767  }
768  default: {
769  SWC_SCANNER_RSP_DEBUG("mngr_resolved_rgr_select RETRYING");
770  if(selector->valid()) {
771  req->request_again();
772  return false;
773  }
774  return true;
775  }
776  }
777 }
778 
779 
780 //
783  if(!selector->valid())
784  return response_if_last();
785 
788 
789  SWC_SCANNER_REQ_DEBUG("rgr_select");
790  struct ReqData : ReqDataBase {
793  ReqData(const Ptr& a_scanner) noexcept
794  : ReqDataBase(a_scanner),
795  profile(scanner->selector->profile.rgr_data()) { }
797  ~ReqData() noexcept { }
799  void callback(const ReqBase::Ptr& req,
801  profile.add(rsp.err);
802  scanner->rgr_selected(req, rsp);
803  }
804  };
805 
807  ::request(params, selector->timeout, data_endpoints, shared_from_this());
808 }
809 
811  const ReqBase::Ptr& req,
814  switch(rsp.err) {
815  case Error::OK: {
816  SWC_SCANNER_RSP_DEBUG("rgr_selected");
817  if(interval.flags.offset)
818  interval.flags.offset = rsp.offset;
819 
820  if(!rsp.data.size ||
821  selector->add_cells(data_cid, rsp.data, rsp.reached_limit, interval))
822  rsp.reached_limit ? rgr_select() : next_call();
823  break;
824  }
828  SWC_SCANNER_RSP_DEBUG("rgr_selected RETRYING");
829  selector->clients->rgr_cache_remove(data_cid, data_rid);
830  if(selector->valid()) {
832  return data_req_base->request_again();
833  }
834  break;
835  }
838  SWC_SCANNER_RSP_DEBUG("rgr_selected QUIT");
839  selector->clients->schemas.remove(data_cid);
840  selector->error(rsp.err); // rsp.err = Error::CONSIST_ERRORS;
841  selector->error(data_cid, rsp.err);
842  break;
843  }
844  case Error::CLIENT_STOPPING: {
845  SWC_SCANNER_RSP_DEBUG("rgr_selected STOPPED");
846  selector->error(rsp.err);
847  break;
848  }
849  default: {
850  if(selector->valid())
851  return req->request_again();
852  }
853  }
855 }
856 
857 
858 #undef SWC_SCANNER_REQ_DEBUG
859 #undef SWC_SCANNER_RSP_DEBUG
860 
861 }}}}
SWC::client::Query::Select::Scanner::master_cid
const cid_t master_cid
Definition: Scanner.h:52
SWC::Comm::Protocol::Rgr::Params::RangeQuerySelectRsp::err
int32_t err
Definition: RangeQuerySelect.h:105
SWC::Comm::Protocol::Mngr::Params::RgrGetReq
Definition: RgrGet.h:20
SWC::client::Query::Select::Scanner::master_mngr_offset
DB::Cell::Key master_mngr_offset
Definition: Scanner.h:73
SWC::Error::RGR_NOT_LOADED_RANGE
@ RGR_NOT_LOADED_RANGE
Definition: Error.h:91
SWC_LOG_OSTREAM
#define SWC_LOG_OSTREAM
Definition: Logger.h:44
SWC::DB::Specs::Interval::apply_possible_range
SWC_CAN_INLINE void apply_possible_range(DB::Cell::Key &begin, DB::Cell::Key &end, bool *end_restp=nullptr) const
Definition: SpecsInterval.h:208
SWC::client::Query::Select::RETRY_POINT_MASTER
static const uint8_t RETRY_POINT_MASTER
Definition: Scanner.cc:30
SWC::Comm::Protocol::Rgr::Params::RangeLocateRsp::cid
cid_t cid
Definition: RangeLocate.h:76
SWC::Comm::Protocol::Mngr::Params::RgrGetRsp
Definition: RgrGet.h:53
SWC::client::Query::Select::Scanner::interval
DB::Specs::Interval interval
Definition: Scanner.h:50
SWC::Comm::Protocol::Rgr::Req::RangeLocate::request
static SWC_CAN_INLINE void request(const Ptr &req, const EndPoints &endpoints)
Definition: RangeLocate.h:38
SWC::client::Query::Select::Scanner::master_rgr_offset
DB::Cell::Key master_rgr_offset
Definition: Scanner.h:74
SWC::Error::SERVER_SHUTTING_DOWN
@ SERVER_SHUTTING_DOWN
Definition: Error.h:84
SWC::client::Query::Select::Scanner::master_mngr_is_end
bool master_mngr_is_end
Definition: Scanner.h:61
SWC::client::Query::Select::Scanner::meta_offset
DB::Cell::Key meta_offset
Definition: Scanner.h:75
SWC_LOG_OUT
#define SWC_LOG_OUT(pr, _code_)
Definition: Logger.h:178
SWC::client::Query::Select::Scanner::mngr_resolve_rgr_select
void mngr_resolve_rgr_select()
Definition: Scanner.cc:698
SWC::Comm::Protocol::Rgr::Params::RangeQuerySelectRsp::offset
uint64_t offset
Definition: RangeQuerySelect.h:107
SWC::Comm::Protocol::Rgr::Params::RangeLocateReq::range_begin
DB::Cell::Key range_begin
Definition: RangeLocate.h:43
SWC::client::Query::Select::Scanner::debug_res_cache
void debug_res_cache(const char *msg, cid_t cid, rid_t rid, const Comm::EndPoints &endpoints)
Definition: Scanner.cc:103
SWC::DB::Types::SystemColumn::is_meta
constexpr SWC_CAN_INLINE bool is_meta(cid_t cid) noexcept
Definition: SystemColumn.h:36
SWC::client::Query::Select::Scanner::master_rgr_endpoints
Comm::EndPoints master_rgr_endpoints
Definition: Scanner.h:78
SWC::DB::Types::SystemColumn::get_meta_cid_str
const char *SWC_CONST_FUNC get_meta_cid_str(KeySeq col_seq) noexcept
Definition: SystemColumn.cc:58
SWC::Comm::Protocol::Rgr::Params::RangeLocateRsp
Definition: RangeLocate.h:59
SWC::client::Query::Select::Scanner::next_call
void next_call()
Definition: Scanner.cc:182
SWC::DB::Types::SystemColumn::is_data
constexpr SWC_CAN_INLINE bool is_data(cid_t cid) noexcept
Definition: SystemColumn.h:46
SWC::Comm::Protocol::Rgr::Params::RangeLocateReq::NEXT_RANGE
static const uint8_t NEXT_RANGE
Definition: RangeLocate.h:23
SWC::client::Query::Select::Scanner::meta_next
bool meta_next
Definition: Scanner.h:65
SWC::DB::Cell::Key::insert
SWC_CAN_INLINE void insert(uint32_t idx, const std::string &fraction)
Definition: CellKey.h:150
SWC::DB::Types::to_string
const char *SWC_CONST_FUNC to_string(Column typ) noexcept
Definition: Column.cc:38
SWC::client::Clients::Ptr
ClientsPtr Ptr
Definition: Clients.h:58
SWC_SCANNER_RSP_DEBUG
#define SWC_SCANNER_RSP_DEBUG(msg)
Definition: Scanner.cc:21
SWC::client::Query::Select::Scanner::meta_endpoints
Comm::EndPoints meta_endpoints
Definition: Scanner.h:79
SWC::DB::Specs::Flags::offset
uint64_t offset
Definition: SpecsFlags.h:142
SWC::DB::Types::SystemColumn::get_master_cid
cid_t SWC_CONST_FUNC get_master_cid(KeySeq col_seq) noexcept
Definition: SystemColumn.cc:32
SWC::Comm::Protocol::Rgr::Params::RangeLocateRsp::range_end
DB::Cell::Key range_end
Definition: RangeLocate.h:78
SWC::Condition::LT
@ LT
Definition: Comparators.h:34
SWC::Comm::Protocol::Rgr::Params::RangeLocateReq::HAVE_REVISION
static const uint8_t HAVE_REVISION
Definition: RangeLocate.h:27
SWC::Comm::Protocol::Mngr::Params::RgrGetRsp::rid
rid_t rid
Definition: RgrGet.h:80
SWC::DB::Specs::Interval::print
void print(std::ostream &out) const
Definition: SpecsInterval.cc:322
SWC::Comm::Protocol::Rgr::Params::RangeLocateRsp::rid
rid_t rid
Definition: RangeLocate.h:77
SWC::client::Query::Select::Scanner::mngr_resolved_rgr_meta
bool mngr_resolved_rgr_meta(const ReqBase::Ptr &base, Comm::Protocol::Mngr::Params::RgrGetRsp &rsp)
Definition: Scanner.cc:528
SWC::Comm::Protocol::Mngr::Params::RgrGetRsp::range_begin
DB::Cell::Key range_begin
Definition: RgrGet.h:82
SWC::client::Query::Select::Scanner::meta_rid
cid_t meta_rid
Definition: Scanner.h:57
SWC::client::Query::Select::Scanner::mngr_located_master
bool mngr_located_master(const ReqBase::Ptr &base, Comm::Protocol::Mngr::Params::RgrGetRsp &rsp)
Definition: Scanner.cc:285
SWC::DB::Types::SystemColumn::is_master
constexpr SWC_CAN_INLINE bool is_master(cid_t cid) noexcept
Definition: SystemColumn.h:31
SWC::Comm::Protocol::Mngr::Params::RgrGetReq::range_end
DB::Cell::Key range_end
Definition: RgrGet.h:37
SWC::client::Query::Select::ReqDataBase::ReqDataBase
SWC_CAN_INLINE ReqDataBase(const Scanner::Ptr &a_scanner) noexcept
Definition: Scanner.cc:156
SWC::client::Query::Select::Scanner::print
void print(std::ostream &out)
Definition: Scanner.cc:115
SWC::Comm::Protocol::Rgr::Params::RangeQuerySelectRsp::reached_limit
bool reached_limit
Definition: RangeQuerySelect.h:106
SWC::client::Query::Select::Scanner::~Scanner
~Scanner() noexcept
Definition: Scanner.cc:101
SWC::Comm::Protocol::Mngr::Req::RgrGet::make
static SWC_CAN_INLINE Ptr make(const Params::RgrGetReq &params, const uint32_t timeout, DataArgsT &&... args)
Definition: RgrGet.h:27
SWC::client::Query::Select::ReqDataBase
Definition: Scanner.cc:153
SWC::client::Query::Select::ReqDataBase::~ReqDataBase
SWC_CAN_INLINE ~ReqDataBase() noexcept
Definition: Scanner.cc:159
SWC::client::Query::Select::Scanner::retry_point
uint8_t retry_point
Definition: Scanner.h:66
SWC::DB::Types::KeySeq
KeySeq
Definition: KeySeq.h:13
SWC::client::Query::Select::Scanner::master_rid
cid_t master_rid
Definition: Scanner.h:56
SWC::client::Query::Select::Scanner::rgr_select
void rgr_select()
Definition: Scanner.cc:781
SWC::DB::Cell::Key::empty
constexpr SWC_CAN_INLINE bool empty() const noexcept
Definition: CellKey.h:186
SWC::Comm::Protocol::Rgr::Params::RangeQuerySelectReqRef
Definition: RangeQuerySelect.h:51
RgrGet.h
SWC::Comm::Protocol::Rgr::Params::RangeLocateReq::RANGE_END_REST
static const uint8_t RANGE_END_REST
Definition: RangeLocate.h:25
SWC::Error::OK
@ OK
Definition: Error.h:45
Scanner.h
SWC::Core::Vector::empty
constexpr SWC_CAN_INLINE bool empty() const noexcept
Definition: Vector.h:168
SWC::client::Query::Select::Scanner::rgr_located_meta
void rgr_located_meta(const ReqBase::Ptr &base, const Comm::Protocol::Rgr::Params::RangeLocateRsp &rsp)
Definition: Scanner.cc:618
SWC_CAN_INLINE
#define SWC_CAN_INLINE
Definition: Compat.h:102
SWC::client::Query::Select::RETRY_POINT_META
static const uint8_t RETRY_POINT_META
Definition: Scanner.cc:31
SWC::LOG_DEBUG
@ LOG_DEBUG
Definition: Logger.h:36
SWC::Comm::Protocol::Rgr::Params::RangeLocateReq::range_end
DB::Cell::Key range_end
Definition: RangeLocate.h:43
SWC::client::Query::Select::Scanner::data_rid
cid_t data_rid
Definition: Scanner.h:58
SWC::client::Query::Select::Scanner::meta_end
DB::Cell::Key meta_end
Definition: Scanner.h:76
SWC::client::Query::Select::Scanner::mngr_resolved_rgr_select
bool mngr_resolved_rgr_select(const ReqBase::Ptr &base, Comm::Protocol::Mngr::Params::RgrGetRsp &rsp)
Definition: Scanner.cc:736
RangeLocate.h
SWC::Comm::Protocol::Mngr::Params::RgrGetRsp::range_end
DB::Cell::Key range_end
Definition: RgrGet.h:81
SWC::Comm::Protocol::Rgr::Params::RangeLocateRsp::range_begin
DB::Cell::Key range_begin
Definition: RangeLocate.h:79
SWC::Comm::Protocol::Rgr::Params::RangeQuerySelectRsp::data
StaticBuffer data
Definition: RangeQuerySelect.h:108
SWC
The SWC-DB C++ namespace 'SWC'.
Definition: main.cc:12
SWC::Comm::Protocol::Rgr::Params::RangeLocateReq::range_offset
DB::Cell::Key range_offset
Definition: RangeLocate.h:43
SWC::client::Query::Select::Scanner::master_mngr_revision
int64_t master_mngr_revision
Definition: Scanner.h:60
SWC::client::Query::Select::Scanner::meta_req_base
ReqBase::Ptr meta_req_base
Definition: Scanner.h:70
RangeQuerySelect.h
SWC::client::Query::Select::RETRY_POINT_DATA
static const uint8_t RETRY_POINT_DATA
Definition: Scanner.cc:32
SWC::Comm::Protocol::Rgr::Params::RangeLocateReq
Definition: RangeLocate.h:19
SWC::Core::Buffer::size
size_t size
Definition: Buffer.h:130
SWC::DB::Specs::Interval::has_opt__key_equal
constexpr SWC_CAN_INLINE bool has_opt__key_equal() const noexcept
Definition: SpecsInterval.h:168
SWC::DB::Cell::Key::copy
void copy(const Key &other)
Definition: CellKey.h:314
SWC::client::Query::Select::Scanner::rgr_locate_meta
void rgr_locate_meta()
Definition: Scanner.cc:567
SWC::Comm::Protocol::Mngr::Params::RgrGetReq::range_begin
DB::Cell::Key range_begin
Definition: RgrGet.h:37
SWC::client::Query::Select::Scanner::selector
Handlers::Base::Ptr selector
Definition: Scanner.h:48
SWC::Comm::Protocol::Rgr::Req::RangeQuerySelect::request
static SWC_CAN_INLINE void request(const Ptr &req, const EndPoints &endpoints)
Definition: RangeQuerySelect.h:37
SWC::DB::Specs::Interval::has_opt__range_end_rest
constexpr SWC_CAN_INLINE bool has_opt__range_end_rest() const noexcept
Definition: SpecsInterval.h:173
SWC::client::Query::Select::RETRY_POINT_NONE
static const uint8_t RETRY_POINT_NONE
Definition: Scanner.cc:29
SWC::Comm::Protocol::Mngr::Params::RgrGetRsp::cid
cid_t cid
Definition: RgrGet.h:79
SWC::Error::CLIENT_STOPPING
@ CLIENT_STOPPING
Definition: Error.h:127
SWC::Comm::Protocol::Rgr::Params::RangeLocateReq::flags
uint8_t flags
Definition: RangeLocate.h:44
SWC::client::Query::Select::Scanner::completion
Core::CompletionCounter< uint64_t > completion
Definition: Scanner.h:46
SWC::DB::Specs::Interval::flags
Flags flags
Definition: SpecsInterval.h:242
SWC::Error::COMM_NOT_CONNECTED
@ COMM_NOT_CONNECTED
Definition: Error.h:64
SWC::Comm::Protocol::Mngr::Params::RgrGetRsp::revision
int64_t revision
Definition: RgrGet.h:83
SWC::cid_t
uint64_t cid_t
Definition: Identifiers.h:16
SWC::client::Query::Select::Scanner::master_rgr_req_base
ReqBase::Ptr master_rgr_req_base
Definition: Scanner.h:69
SWC::client::Query::Select::Handlers::Base::Ptr
std::shared_ptr< Base > Ptr
Definition: Base.h:28
SWC::Error::COLUMN_NOT_EXISTS
@ COLUMN_NOT_EXISTS
Definition: Error.h:100
SWC::Core::CompletionCounter::count
constexpr SWC_CAN_INLINE CountT count() const noexcept
Definition: CompletionCounter.h:42
SWC::Comm::Protocol::Rgr::Params::RangeLocateReq::revision
int64_t revision
Definition: RangeLocate.h:45
SWC::client::Query::Select::Scanner::response_if_last
void response_if_last()
Definition: Scanner.cc:172
SWC::DB::Specs::Interval::range_end
Cell::Key range_end
Definition: SpecsInterval.h:238
SWC::client::Query::Select::Scanner::mngr_locate_master
void mngr_locate_master()
Definition: Scanner.cc:203
SWC::Core::Vector< EndPoint >
SWC::DB::Cell::Key::free
SWC_CAN_INLINE void free() noexcept
Definition: CellKey.h:73
SWC::client::Query::Select::Scanner::Scanner
Scanner(const Handlers::Base::Ptr &hdlr, const DB::Types::KeySeq col_seq, const DB::Specs::Interval &interval, const cid_t cid)
Definition: Scanner.cc:35
SWC::DB::Specs::Interval
Definition: SpecsInterval.h:25
SWC::client::Query::Select::ReqDataBase::scanner
Scanner::Ptr scanner
Definition: Scanner.cc:154
SWC::Comm::Protocol::Mngr::Params::RgrGetRsp::err
int err
Definition: RgrGet.h:78
SWC::client::Query::Select::Scanner::col_seq
const DB::Types::KeySeq col_seq
Definition: Scanner.h:49
SWC::Core::CompletionCounter::increment
constexpr SWC_CAN_INLINE void increment(CountT v=1) noexcept
Definition: CompletionCounter.h:32
SWC::client::Query::Select::Scanner::master_mngr_next
bool master_mngr_next
Definition: Scanner.h:62
SWC::client::Query::Select::Scanner::rgr_locate_master
void rgr_locate_master()
Definition: Scanner.cc:356
SWC::Comm::Protocol::Rgr::Params::RangeLocateRsp::err
int err
Definition: RangeLocate.h:75
SWC::Error::RANGE_NOT_FOUND
@ RANGE_NOT_FOUND
Definition: Error.h:116
SWC::DB::Specs::Interval::offset_rev
int64_t offset_rev
Definition: SpecsInterval.h:245
SWC::Error::COLUMN_MARKED_REMOVED
@ COLUMN_MARKED_REMOVED
Definition: Error.h:102
SWC::Comm::Protocol::Rgr::Params::RangeLocateReq::KEY_EQUAL
static const uint8_t KEY_EQUAL
Definition: RangeLocate.h:26
SWC::DB::Types::SystemColumn::get_meta_cid
cid_t SWC_CONST_FUNC get_meta_cid(KeySeq col_seq) noexcept
Definition: SystemColumn.cc:45
SWC::client::Query::Select::Scanner::Ptr
std::shared_ptr< Scanner > Ptr
Definition: Scanner.h:45
SWC::client::Query::Select::Scanner::mngr_resolve_rgr_meta
void mngr_resolve_rgr_meta()
Definition: Scanner.cc:490
SWC::DB::Specs::Interval::offset_key
Cell::Key offset_key
Definition: SpecsInterval.h:244
SWC::rid_t
uint64_t rid_t
Definition: Identifiers.h:17
SWC::client::Query::Select::Scanner::data_req_base
ReqBase::Ptr data_req_base
Definition: Scanner.h:71
SWC::client::Query::Profiling::Component::Start
Definition: Profiling.h:56
SWC::client::Query::Select::Scanner::data_endpoints
Comm::EndPoints data_endpoints
Definition: Scanner.h:80
SWC::client::Query::Select::Scanner::need_data_cid_check
bool need_data_cid_check
Definition: Scanner.h:67
SWC::DB::Cell::Key::print
void print(std::ostream &out) const
Definition: CellKey.cc:182
SWC::Core::CompletionCounter::is_last
constexpr SWC_CAN_INLINE bool is_last() noexcept
Definition: CompletionCounter.h:37
SWC::Comm::Protocol::Mngr::Params::RgrGetRsp::endpoints
EndPoints endpoints
Definition: RgrGet.h:77
SWC::client::Query::Select::Scanner::master_rgr_next
bool master_rgr_next
Definition: Scanner.h:64
SWC::Comm::client::ConnQueueReqBase::Ptr
std::shared_ptr< ConnQueueReqBase > Ptr
Definition: ClientConnQueue.h:25
SWC::Comm::Protocol::Rgr::Params::RangeQuerySelectRsp
Definition: RangeQuerySelect.h:81
SWC::client::Query::Profiling::Component::Start::add_cached
SWC_CAN_INLINE void add_cached(bool err) const noexcept
Definition: Profiling.h:71
SWC::client::Query::Select::Scanner::data_cid
const cid_t data_cid
Definition: Scanner.h:54
SWC::Core::to_string
SWC_CAN_INLINE std::string to_string(const BitFieldInt< T, SZ > &v)
Definition: BitFieldInt.h:263
SWC::client::Query::Select::Scanner::rgr_located_master
void rgr_located_master(const ReqBase::Ptr &base, const Comm::Protocol::Rgr::Params::RangeLocateRsp &rsp)
Definition: Scanner.cc:417
SWC::Comm::Protocol::Rgr::Params::RangeLocateReq::CURRENT_RANGE
static const uint8_t CURRENT_RANGE
Definition: RangeLocate.h:22
SWC::client::Query::Select::ReqDataBase::get_clients
SWC_CAN_INLINE client::Clients::Ptr & get_clients() noexcept
Definition: Scanner.cc:161
SWC::Comm::Protocol::Mngr::Req::RgrGet::request
static SWC_CAN_INLINE void request(const Params::RgrGetReq &params, const uint32_t timeout, DataArgsT &&... args)
Definition: RgrGet.h:36
SWC::client::Query::Select::ReqDataBase::valid
SWC_CAN_INLINE bool valid()
Definition: Scanner.cc:165
SWC::client::Query::Select::Scanner::rgr_selected
void rgr_selected(const ReqBase::Ptr &req, Comm::Protocol::Rgr::Params::RangeQuerySelectRsp &rsp)
Definition: Scanner.cc:810
SystemColumn.h
SWC::client::Query::Select::Scanner::meta_cid
const cid_t meta_cid
Definition: Scanner.h:53
SWC::DB::KeySeq::compare
Condition::Comp compare(const Types::KeySeq seq, const Cell::Key &key, const Cell::Key &other) SWC_ATTRIBS((SWC_ATTRIB_O3))
Definition: KeyComparator.h:294
SWC_SCANNER_REQ_DEBUG
#define SWC_SCANNER_REQ_DEBUG(msg)
Definition: Scanner.cc:18
SWC::client::Query::Profiling::Component::Start::add
SWC_CAN_INLINE void add(bool err) const noexcept
Definition: Profiling.h:66