plebble
daemon.h
Go to the documentation of this file.
1 /*
2 -------------------------------------------------------------------------------
3  PLEBBLE
4 -------------------------------------------------------------------------------
5  Copyright (C) 2019-2020 KATLAS Technology. (http://katlastechnology.com)
6  Copyright (C) 2017-2020 Marcos Mayorga. (mm@mm-studios.com)
7 
8  This file is part of our Plebble(R) Platform.
9 
10  The code below cannot be copied, used for any purpose other than the one
11  agreed and/or distributed without the express permission of
12  KATLAS Technology.
13 -------------------------------------------------------------------------------
14 
15 
16 */
17 #ifndef USGOV_c13d19f0c3971de6c878039137bc456aee76c735c59394602b4d3ee39130825d
18 #define USGOV_c13d19f0c3971de6c878039137bc456aee76c735c59394602b4d3ee39130825d
19 
20 #include <us/gov/auth.h>
21 #include "diff.h"
22 #include "peer_t.h"
23 #include "app.h"
24 #include "auth_app.h"
25 #include "policies.h"
26 #include <unordered_map>
27 #include <unordered_set>
28 #include <map>
29 #include <set>
30 #include <list>
31 #include <us/gov/dfs.h>
32 #include <vector>
33 #include <cassert>
34 #include <thread>
35 #include <chrono>
36 #include <ctime>
37 #include <condition_variable>
38 #include <mutex>
39 #include "shell.h"
40 #include "calendar.h"
41 #include "networking.h"
42 #include "syncd.h"
43 #include "evidence.h"
44 #include <inttypes.h>
45 #include <us/gov/dfs/fileattr_t.h>
46 #include <us/gov/config.h>
47 #include <us/gov/bgtask.h>
48 #include "evidence_processor.h"
49 
50 namespace us { namespace gov {
51 namespace sys {
52  struct app;
53 }
54 namespace cash {
55  struct app;
56 }
57 
58 namespace engine {
59  using namespace std;
60  using socket::datagram;
61  using namespace std::chrono;
62 
63  struct daemon;
64 
65  struct mezzanine: bgtask {
66  typedef bgtask b;
69  };
70 
72  typedef mezzanine t;
74 
75  struct apps final:map<int,app*> {
76  virtual ~apps();
77  void dump(const string& prefix, ostream& os) const;
78  bool shell_command(int app_id, istream&, ostream&) const;
79  void process(const evidence&);
80  };
81 
82  struct neuralyzer_t final {
84  neuralyzer_t(const neuralyzer_t&)=delete;
85  neuralyzer_t& operator = (const neuralyzer_t&)=delete;
87  void old_chain(const diff::hash_t& h);
88  void delete_chain(const diff::hash_t& h);
89  void get_blocks(set<diff::hash_t>& s, const diff::hash_t& h);
90 
91  int cleanup();
94  };
95 
96  struct votes_t final {
97  #if CFG_COUNTERS==1
98  unordered_map<pubkey_t::hash_t,const diff::hash_t> voters;
99  #else
100  unordered_set<pubkey_t::hash_t> voters;
101  #endif
102  unordered_map<diff::hash_t,uint64_t> votes;
103  void clear();
104  void dump(const string& prefix, ostream& os) const;
105  bool add(const pubkey_t::hash_t&,const diff::hash_t& v);
107  void logline(ostream&os) const;
108  #ifdef CFG_PERMISSIONED_NETWORK
109  diff::hash_t master_vote{0};
110  #endif
111  mutable mutex mx;
112  };
113 
114  struct sysops_t final:unordered_map<peer_t *,shell> {
115  sysops_t(daemon&d): d(d) {}
117  mutex mx;
119  };
120  #if CFG_COUNTERS==1
121  struct counters_t final {
122  uint32_t cycles{0};
123  uint32_t computed_right_delta{0};
124  uint32_t diff_applied{0};
125  uint32_t genesis_diff_applied{0};
126  uint32_t diff_discarded_not_in_sequence{0};
127  uint32_t clear_db{0};
128  uint32_t patch_db{0};
129  uint32_t problem_opening_block_file{0};
130  uint32_t problem_reading_block_file{0};
131  uint32_t problem_importing_diff_file{0};
132  uint32_t problem_loading_base_file{0};
133  uint32_t patch_db_ok{0};
134  uint32_t load_db{0};
135  uint32_t problem_opening_db{0};
136  uint32_t problem_reading_db{0};
137  uint32_t snapshot_create{0};
138  uint32_t error_renaming_db_file{0};
139  uint32_t relay_local_deltas{0};
140  uint32_t created_empty_local_deltas{0};
141  uint32_t created_nonempty_local_deltas{0};
142  uint32_t sent_vote{0};
143  uint32_t recv_vote{0};
144  uint32_t recv_vote_wrong_signature{0};
145  uint32_t relay_vote_success{0};
146  uint32_t relay_vote_fail{0};
147  uint32_t recv_dup_vote{0};
148  uint32_t recv_local_deltas_accepted{0};
149  uint32_t recv_local_deltas_unparseable{0};
150  uint32_t recv_local_deltas_wrong_signature{0};
151  uint32_t recv_local_deltas_duplicate{0};
152  uint32_t lost_evidences{0};
153  uint32_t processed_evidences{0};
154  uint32_t processed_evidences_last_block{0};
155  uint32_t processed_evidences_cur_block{0};
156  void dump(ostream&os) const;
157  };
158  static counters_t counters;
159  #endif
160 
161  struct pools_t final:unordered_map<uint64_t,diff*> {
163  bool add(local_deltas* ld, bool create_diff);
164  diff* close(uint64_t id);
165  mutable mutex mx;
166  };
167 
168  struct reg final {
169  void register_arrival(uint64_t r) {
170  max=r;
171  sum+=r;
172  ++num;
173  }
174  void reset() {
175  sum=num=max=0;
176  }
177  atomic<uint64_t> sum{0};
178  atomic<uint32_t> num{0};
179  atomic<uint32_t> max{0};
180  };
181 
182  enum evt_status_t { //values coupled in fragment_w2w.java (android app)
191 
192  evt_num
193  };
194 
195  static constexpr const char* evt_status_str[evt_num]={"unknown","error","wait_arrival","calendar","mempool","consensus","settled","untracked"};
196 
197  struct ev_track_t final: unordered_map<uint64_t,pair<evt_status_t,string>> {
199  void set_error(uint64_t ts,const string& err);
200  void set_error(uint64_t from, uint64_t to, const string&err);
201  void set_status(uint64_t ts,evt_status_t st);
202  void set_status(uint64_t from, uint64_t to, evt_status_t st);
203  void dump(ostream&) const;
204  uint64_t mints{0};
205  mutex mx;
206  };
207 
209  static void fsinfo(const string& home, bool dot, ostream& os);
210  daemon(const keys&);
211  daemon(const keys&, const string& home, uint16_t port, uint16_t pport, uint8_t num_edges, uint8_t devices, int workers, const vector<pair<uint32_t,uint16_t>>& seed_nodes,const string&status_file);
212  daemon(const daemon&)=delete;
213  daemon(daemon&&)=delete;
214  void constructor();
215  ~daemon() override;
216  daemon& operator =(const daemon&)=delete;
217  void add(app*app);
219  void list_apps(const string& prefix, ostream& os) const;
220  static bool file_exists(const string& f);
221  void eat_diff(const diff::hash_t& voted_tip, diff*);
227  void print_map(ostream& os) const;
228  bool wait_for_secs_to(const seconds& s, uint64_t block_deadline);
229  void fsinfo(bool dot, ostream& os) const;
230  void dbg_output() const;
231  void vote_tip(const diff& b);
232  void dump(const string& prefix, ostream& os) const;
233  bool import(const diff& b, const diff::hash_t&);
234  bool import_(const diff& b, const diff::hash_t&);
235  bool ready_for_consensus() const;
237  void set_last_delta_imported(const diff::hash_t&, uint64_t id);
238  void set_last_delta_imported_(const diff::hash_t&, uint64_t id);
239  string save_db(const string& dir) const;
240  void save_db(ostream& os);
241  void load_db(const string& file);
242  bool load_db(istream&);
243  void logline(ostream&os) const;
244  static char block_type(istream&);
245  void list_files(ostream& os) const;
247  bool get_prev(const diff::hash_t& h, diff::hash_t& prev) const override;
248  bool patch_db(vector<diff::hash_t>& patches) override;
249  void on_sync() override;
250  void clear() override;
251  int query_block(const diff::hash_t& hash) override;
253  bool load_db(const base::hash_t&);
254  void run();
255  void load_head();
256  void wait(const seconds& t) const;
259  void clear_();
260  bool shell_command(int app_id, istream&, ostream&) const;
261  void save(const diff& bl) const;
262  #if CFG_COUNTERS==1
263  void print_performances(ostream&) const;
264  void save_dashboard() const;
265  void write_status(ostream& os) const;
266  #endif
270  void on_block_closure(uint64_t block_closure) override;
271  bool ready_for_block_opening(uint64_t) const override;
272  #include <us/api/apitool_generated__c++__protocol_gov_engine_service_handler_headers>
273  static string get_blocksdir(const string& govhome);
274  static string get_fsrootdir(const string& govhome);
275  string uptime() const;
276  ko start() override;
277  ko wait_ready(const chrono::system_clock::time_point& deadline) const override;
278  void stop() override;
279  void join() override;
280  void onwakeup();
281  void watch(ostream& os) const;
282  void write_status(const string& line) const;
283  void exec_evidence(const evidence& e) override;
284 
285  diff::hash_t last_vote{0};
286  diff::hash_t last_consensus{0};
287  condition_variable cv_cyc;
288  string home;
290  chrono::system_clock::time_point running_since;
297  bool sysop_allowed{false};
298  bool encrypt_protocol{false};
299  local_deltas* _local_deltas{0};
301  #if CFG_COUNTERS==1
302  struct silent_t:set<diff::hash_t> {
303  void dump(ostream&os) const;
304  };
305  silent_t silent;
306  #endif
312  mutable mutex mx_import;
313  uint16_t depth{0};
314  string blocksdir;
317  #if CFG_LOGS==1
318  string logdir;
319  #endif
320  string status_file;
322  mutable mutex mx_dashboard;
323  };
324 
325 }}
326 }
327 
328 #endif
329 
us::gov::engine::daemon::pools_t
Definition: daemon.h:161
us::gov::engine::daemon::evt_calendar
@ evt_calendar
Definition: daemon.h:186
us::gov::engine::daemon::add
void add(app *app)
app.h
us::gov::engine::daemon::clear_
void clear_()
us::gov::engine::daemon::mx_dashboard
mutex mx_dashboard
Definition: daemon.h:322
us::gov::engine::daemon::create_local_deltas
local_deltas * create_local_deltas(uint64_t id)
us::gov::dfs::fileattr_t
Definition: fileattr_t.h:28
us::gov::engine::daemon::wait_for_secs_to
bool wait_for_secs_to(const seconds &s, uint64_t block_deadline)
us::gov::engine::daemon::evt_mempool
@ evt_mempool
Definition: daemon.h:187
us::gov::engine::daemon::last_delta_imported_id
uint64_t last_delta_imported_id
Definition: daemon.h:311
us::gov::engine::daemon::process_query
bool process_query(peer_t *c, datagram *d)
us::gov::engine::daemon::load_db
bool load_db(istream &)
us::gov::engine::daemon::auth_app
auth::app * auth_app
Definition: daemon.h:292
networking.h
us::gov::engine::daemon::reg::reset
void reset()
Definition: daemon.h:174
us::gov::engine::daemon::neuralyzer_t::delete_chain
void delete_chain(const diff::hash_t &h)
bgtask.h
evidence.h
fileattr_t.h
us::gov::engine::daemon::block_type
static char block_type(istream &)
us::gov::engine::daemon::~daemon
~daemon() override
diff.h
us::gov::engine::daemon::apps
Definition: daemon.h:75
us::gov::engine::daemon::ev_track_t::track
pair< evt_status_t, string > track(uint64_t)
us::gov::engine::auth::app
Definition: auth_app.h:57
us::gov::engine::daemon::evt_error
@ evt_error
Definition: daemon.h:184
us::gov::engine::daemon::dump
void dump(const string &prefix, ostream &os) const
us::gov::engine::daemon::votes_t::votes
unordered_map< diff::hash_t, uint64_t > votes
Definition: daemon.h:102
us.ko
Definition: ko.java:20
us::gov::engine::daemon::join
void join() override
us::gov::engine::daemon::sysops_t::mx
mutex mx
Definition: daemon.h:117
dfs.h
us::gov::engine::daemon::home
string home
Definition: daemon.h:288
us::gov::engine::daemon::neuralyzer
neuralyzer_t neuralyzer
Definition: daemon.h:309
us::gov::engine::daemon::apps::shell_command
bool shell_command(int app_id, istream &, ostream &) const
us::gov::engine::daemon::save_db
diff::hash_t save_db()
us::gov::engine::daemon::exec_evidence
void exec_evidence(const evidence &e) override
us::gov::engine::daemon::clean_unlisted_files
int clean_unlisted_files()
us::gov::engine::daemon::pools_t::mx
mutex mx
Definition: daemon.h:165
us::gov::engine::daemon::neuralyzer_t::old_chain
void old_chain(const diff::hash_t &h)
us
Definition: daemon.h:22
us::gov::crypto::ripemd160::value_type
Definition: ripemd160.h:38
us::gov::engine::daemon::votes_timing
reg votes_timing
Definition: daemon.h:315
us::gov::engine::daemon::onwakeup
void onwakeup()
us::gov::engine::daemon::evt
ev_track_t evt
Definition: daemon.h:321
us::gov::engine::daemon::ready_for_block_opening
bool ready_for_block_opening(uint64_t) const override
us::gov::engine::daemon::sysops
sysops_t sysops
Definition: daemon.h:296
us::gov::engine::daemon::votes_t::add
bool add(const pubkey_t::hash_t &, const diff::hash_t &v)
us::gov::engine::daemon::snapshot
bool snapshot(diff::hash_t &)
us::gov::engine::daemon::t
mezzanine t
Definition: daemon.h:72
us::gov::engine::daemon::evt_unknown
@ evt_unknown
Definition: daemon.h:183
us::gov::engine::daemon::load_head
void load_head()
us::gov::engine::daemon::reg
Definition: daemon.h:168
us::gov::engine::daemon::ev_track_t::set_status
void set_status(uint64_t ts, evt_status_t st)
us::gov::engine::daemon::neuralyzer_t::old
diff::hash_t old
Definition: daemon.h:93
us::gov::engine::daemon::votes_t::clear
void clear()
us::gov::engine::daemon::list_files
void list_files(ostream &os) const
us::gov::engine::daemon::blocksdir
string blocksdir
Definition: daemon.h:314
us::gov::engine::daemon::sysops_t::process_work
bool process_work(peer_t *p, datagram *d)
us::gov::engine::local_deltas
Definition: diff.h:46
us::gov::engine::diff
Definition: diff.h:67
us::gov::engine::daemon::votes_t::voters
unordered_set< pubkey_t::hash_t > voters
Definition: daemon.h:100
us::gov::engine::daemon::peerd
networking peerd
Definition: daemon.h:295
us::gov::engine::daemon::fsinfo
void fsinfo(bool dot, ostream &os) const
us::gov::engine::daemon::save_db
string save_db(const string &dir) const
us::gov::engine::daemon::daemon
daemon(const keys &)
us::gov::engine::daemon::neuralyzer_t::d
daemon * d
Definition: daemon.h:92
us::gov::cash::app
Definition: app.h:65
us::gov::engine::daemon::save
void save(const diff &bl) const
us::gov::engine::daemon::run
void run()
us::gov::engine::daemon::load_db
void load_db(const string &file)
us::gov::engine::daemon::query_block
int query_block(const diff::hash_t &hash) override
us::gov::engine::daemon::stop
void stop() override
us::gov::engine::daemon::status_file
string status_file
Definition: daemon.h:320
us::gov::engine::daemon::apps::~apps
virtual ~apps()
us::gov::engine::daemon::list_apps
void list_apps(const string &prefix, ostream &os) const
us::gov::socket::datagram
Definition: datagram.h:44
us::gov::engine::daemon::ev_track_t
Definition: daemon.h:197
us::gov::engine::peer_t
Definition: peer_t.h:27
us::gov::engine::daemon::votes
votes_t votes
Definition: daemon.h:300
us::gov::auth::daemon
id::daemon daemon
Definition: daemon.h:25
us::gov::engine::daemon::logline
void logline(ostream &os) const
evidence_processor.h
us::gov::engine::daemon::neuralyzer_t::~neuralyzer_t
~neuralyzer_t()
us::gov::engine::daemon::id
keys id
Definition: daemon.h:289
us::gov::engine::daemon::process_evidence
bool process_evidence(evidence *)
us::gov::engine::daemon::daemon
daemon(daemon &&)=delete
us::gov::engine::daemon::neuralyzer_t
Definition: daemon.h:82
us::gov::engine::daemon::pools_t::add
bool add(local_deltas *ld, bool create_diff)
us::gov::engine::daemon::running_since
chrono::system_clock::time_point running_since
Definition: daemon.h:290
us::gov::engine::daemon::local_deltas_timing
reg local_deltas_timing
Definition: daemon.h:316
us::gov::engine::daemon::on_block_closure
void on_block_closure(uint64_t block_closure) override
us::gov::engine::daemon::on_sync
void on_sync() override
us::gov::engine::daemon::files_to_keep
void files_to_keep(vector< pair< dfs::hash_t, uint32_t >> &) const
us::gov::engine::daemon::load_db
bool load_db(const base::hash_t &)
us::gov::engine::app
Definition: app.h:43
us::gov::engine::daemon::apps::process
void process(const evidence &)
us::gov::engine::daemon::ev_track_t::mx
mutex mx
Definition: daemon.h:205
us::gov::engine::daemon::file_exists
static bool file_exists(const string &f)
us::gov::engine::daemon::vote_tip
void vote_tip(const diff &b)
us::gov::engine::syncd_t::actuator
Definition: syncd.h:36
us::gov::engine::daemon::apps::dump
void dump(const string &prefix, ostream &os) const
us::gov::engine::daemon::sysops_t::d
daemon & d
Definition: daemon.h:118
us::gov::engine::daemon::syncd
syncd_t syncd
Definition: daemon.h:308
us::gov::engine::daemon::dbg_output
void dbg_output() const
us::gov::engine::mezzanine::mezzanine
mezzanine(daemon *)
us::gov::engine::daemon::keys
crypto::ec::keys keys
Definition: daemon.h:73
us::gov::engine::daemon::ready_for_consensus
bool ready_for_consensus() const
us::gov::engine::daemon::update_dfs_index
void update_dfs_index()
us::gov::engine::daemon::sysops_t::sysops_t
sysops_t(daemon &d)
Definition: daemon.h:115
peer_t.h
us::gov::engine::daemon::ev_track_t::set_error
void set_error(uint64_t ts, const string &err)
us::gov::engine::daemon::write_status
void write_status(const string &line) const
us::gov::engine::daemon::get_blocksdir
static string get_blocksdir(const string &govhome)
us::gov::engine::daemon::process_sysop_request
bool process_sysop_request(peer_t *c, datagram *d)
us::gov::engine::daemon
Definition: daemon.h:71
syncd.h
us::gov::engine::daemon::daemon
daemon(const daemon &)=delete
us::gov::engine::daemon::save_db
void save_db(ostream &os)
us::gov::engine::daemon::print_map
void print_map(ostream &os) const
us::gov::engine::daemon::votes_t::mx
mutex mx
Definition: daemon.h:111
us::gov::engine::daemon::set_last_delta_imported
void set_last_delta_imported(const diff::hash_t &, uint64_t id)
us::gov::engine::daemon::evt_settled
@ evt_settled
Definition: daemon.h:189
us::gov::engine::mezzanine::d
daemon * d
Definition: daemon.h:68
calendar.h
us::gov::engine::daemon::apps_
apps apps_
Definition: daemon.h:291
us::gov::engine::daemon::get_fsrootdir
static string get_fsrootdir(const string &govhome)
us::gov::engine::daemon::import_
bool import_(const diff &b, const diff::hash_t &)
us::gov::engine::daemon::votes_t
Definition: daemon.h:96
c
Definition: client.cpp:417
us::gov::engine::daemon::set_last_delta_imported_
void set_last_delta_imported_(const diff::hash_t &, uint64_t id)
us::gov::engine::daemon::get_prev
bool get_prev(const diff::hash_t &h, diff::hash_t &prev) const override
us::gov::engine::daemon::evt_untracked
@ evt_untracked
Definition: daemon.h:190
us::gov::engine::daemon::eat_diff
void eat_diff(const diff::hash_t &voted_tip, diff *)
us::gov::engine::daemon::neuralyzer_t::neuralyzer_t
neuralyzer_t(daemon *d)
us::gov::engine::daemon::process_work
bool process_work(peer_t *c, datagram *d)
us::gov::engine::daemon::uptime
string uptime() const
us::gov::engine::daemon::neuralyzer_t::neuralyzer_t
neuralyzer_t(const neuralyzer_t &)=delete
us::gov::engine::daemon::patch_db
bool patch_db(vector< diff::hash_t > &patches) override
us::gov::engine::daemon::evt_consensus
@ evt_consensus
Definition: daemon.h:188
us::gov::engine::daemon::pools_t::close
diff * close(uint64_t id)
us::gov::engine::daemon::ev_track_t::set_status
void set_status(uint64_t from, uint64_t to, evt_status_t st)
us::gov::engine::daemon::mx_import
mutex mx_import
Definition: daemon.h:312
us::gov::engine::daemon::update_peers_state
void update_peers_state()
us::gov::engine::networking
Definition: networking.h:32
us::gov::engine::daemon::clean_orphaned_blocks
int clean_orphaned_blocks()
us::gov::engine::daemon::start
ko start() override
std
Definition: app.h:380
us::gov::engine::daemon::evt_status_t
evt_status_t
Definition: daemon.h:182
us::gov::engine::daemon::reg::register_arrival
void register_arrival(uint64_t r)
Definition: daemon.h:169
us::gov::engine::daemon::sysops_t
Definition: daemon.h:114
auth.h
us::gov::engine::mezzanine::b
bgtask b
Definition: daemon.h:66
us::gov::engine::daemon::get_last_delta_imported
diff::hash_t get_last_delta_imported() const
us::gov::engine::daemon::update_dfs_index_delta
void update_dfs_index_delta()
us::gov::engine::syncd_t
Definition: syncd.h:32
us::gov::engine::daemon::fsinfo
static void fsinfo(const string &home, bool dot, ostream &os)
us::gov::engine::evidence_processor
Definition: evidence_processor.h:29
policies.h
us::gov::engine::daemon::wait
void wait(const seconds &t) const
us::gov::crypto::ec::keys
Definition: ec.h:43
config.h
us::gov::engine::daemon::wait_ready
ko wait_ready(const chrono::system_clock::time_point &deadline) const override
us::gov::engine::daemon::votes_t::dump
void dump(const string &prefix, ostream &os) const
us::gov::engine::daemon::evt_wait_arrival
@ evt_wait_arrival
Definition: daemon.h:185
us::gov::engine::daemon::shell_command
bool shell_command(int app_id, istream &, ostream &) const
us::gov::engine::daemon::watch
void watch(ostream &os) const
us::gov::engine::daemon::fileattr_t
us::gov::dfs::fileattr_t fileattr_t
Definition: daemon.h:208
us::gov::engine::daemon::daemon
daemon(const keys &, const string &home, uint16_t port, uint16_t pport, uint8_t num_edges, uint8_t devices, int workers, const vector< pair< uint32_t, uint16_t >> &seed_nodes, const string &status_file)
us::gov::relay::evidence
Definition: evidence.h:31
us::gov::engine::daemon::pools_t::~pools_t
~pools_t()
us::gov::engine::mezzanine
Definition: daemon.h:65
us::gov::sys::app
Definition: app.h:63
us::gov::engine::daemon::ev_track_t::set_error
void set_error(uint64_t from, uint64_t to, const string &err)
us::gov::engine::daemon::constructor
void constructor()
us::gov::engine::daemon::sys_app
us::gov::sys::app * sys_app
Definition: daemon.h:293
us.pair
Definition: pair.java:19
shell.h
us::gov::engine::daemon::neuralyzer_t::get_blocks
void get_blocks(set< diff::hash_t > &s, const diff::hash_t &h)
us::gov::engine::daemon::ev_track_t::dump
void dump(ostream &) const
us::gov::engine::daemon::cash_app
us::gov::cash::app * cash_app
Definition: daemon.h:294
us::gov::engine::daemon::cv_cyc
condition_variable cv_cyc
Definition: daemon.h:287
us::gov::engine::daemon::pools
pools_t pools
Definition: daemon.h:307
us::gov::engine::daemon::neuralyzer_t::cleanup
int cleanup()
auth_app.h
us::gov::engine::daemon::votes_t::logline
void logline(ostream &os) const
us::gov::engine::daemon::votes_t::select
diff::hash_t select()
us::gov::engine::daemon::clear
void clear() override
us::gov::engine::daemon::last_delta_imported
diff::hash_t last_delta_imported
Definition: daemon.h:310
us::gov::bgtask
Definition: bgtask.h:31