def run_sync(): print("[HIVE] Welcome to hivemind") # make sure db schema is up to date, perform checks DbState.initialize() # prefetch id->name memory map Accounts.load_ids() if DbState.is_initial_sync(): # resume initial sync Sync.initial() DbState.finish_initial_sync() else: # recover from fork Blocks.verify_head() # perform cleanup in case process did not exit cleanly CachedPost.recover_missing_posts() while True: # sync up to irreversible block Sync.from_steemd() # take care of payout backlog CachedPost.dirty_paidouts(Blocks.head_date()) CachedPost.flush(trx=True) # start listening Sync.listen()
def run(cls): """Initialize state; setup/recovery checks; sync and runloop.""" # ensure db schema up to date, check app status DbState.initialize() # prefetch id->name memory map Accounts.load_ids() if DbState.is_initial_sync(): # resume initial sync cls.initial() DbState.finish_initial_sync() else: # recover from fork Blocks.verify_head() # perform cleanup if process did not exit cleanly CachedPost.recover_missing_posts() # debug mode: no sync, just stream if Conf.get('disable_sync'): return cls.listen() while True: # sync up to irreversible block cls.from_steemd() # take care of payout backlog CachedPost.dirty_paidouts(Blocks.head_date()) CachedPost.flush(trx=True) # listen for new blocks cls.listen()
def run(self): """Initialize state; setup/recovery checks; sync and runloop.""" # ensure db schema up to date, check app status DbState.initialize() # prefetch id->name and id->rank memory maps Accounts.load_ids() Accounts.fetch_ranks() Community.recalc_pending_payouts() if DbState.is_initial_sync(): # resume initial sync self.initial() DbState.finish_initial_sync() else: # recover from fork Blocks.verify_head(self._steem) # perform cleanup if process did not exit cleanly CachedPost.recover_missing_posts(self._steem) #audit_cache_missing(self._db, self._steem) #audit_cache_deleted(self._db) self._update_chain_state() if self._conf.get('test_max_block'): # debug mode: partial sync return self.from_steemd() if self._conf.get('test_disable_sync'): # debug mode: no sync, just stream return self.listen() while True: # sync up to irreversible block self.from_steemd() # take care of payout backlog CachedPost.dirty_paidouts(Blocks.head_date()) CachedPost.flush(self._steem, trx=True) try: # listen for new blocks self.listen() except MicroForkException as e: # attempt to recover by restarting stream log.error("NOTIFYALERT microfork: %s", repr(e))
def run(): print("[HIVE] Welcome to hivemind") # make sure db schema is up to date, perform checks DbState.initialize() # prefetch id->name memory map Accounts.load_ids() if DbState.is_initial_sync(): print("[INIT] *** Initial fast sync ***") sync_from_checkpoints() sync_from_steemd() print("[INIT] *** Initial cache build ***") # todo: disable indexes during this process cache_missing_posts() FeedCache.rebuild() DbState.finish_initial_sync() else: # recover from fork Blocks.verify_head() # perform cleanup in case process did not exit cleanly cache_missing_posts() while True: # sync up to irreversible block sync_from_steemd() # take care of payout backlog CachedPost.dirty_paidouts(Blocks.head_date()) CachedPost.flush(trx=True) # start listening listen_steemd()
def run(self): old_sig_int_handler = getsignal(SIGINT) old_sig_term_handler = getsignal(SIGTERM) set_handlers() Community.start_block = self._conf.get("community_start_block") # ensure db schema up to date, check app status DbState.initialize() if self._conf.get("log_explain_queries"): is_superuser = self._db.query_one("SELECT is_superuser()") assert is_superuser, 'The parameter --log_explain_queries=true can be used only when connect to the database with SUPERUSER privileges' _is_consistency = Blocks.is_consistency() if not _is_consistency: raise RuntimeError( "Fatal error related to `hive_blocks` consistency") show_info(self._db) paths = self._conf.get("mock_block_data_path") or [] for path in paths: self.load_mock_data(path) mock_vops_data_path = self._conf.get("mock_vops_data_path") if mock_vops_data_path: MockVopsProvider.load_block_data(mock_vops_data_path) # MockVopsProvider.print_data() # prefetch id->name and id->rank memory maps Accounts.load_ids() # community stats update_communities_posts_and_rank(self._db) last_imported_block = Blocks.head_num() hived_head_block = self._conf.get( 'test_max_block') or self._steem.last_irreversible() log.info("target_head_block : %s", hived_head_block) if DbState.is_initial_sync(): DbState.before_initial_sync(last_imported_block, hived_head_block) # resume initial sync self.initial() if not can_continue_thread(): restore_handlers() return current_imported_block = Blocks.head_num() # beacuse we cannot break long sql operations, then we back default CTRL+C # behavior for the time of post initial actions restore_handlers() try: DbState.finish_initial_sync(current_imported_block) except KeyboardInterrupt: log.info("Break finish initial sync") set_exception_thrown() return set_handlers() else: # recover from fork Blocks.verify_head(self._steem) self._update_chain_state() global trail_blocks trail_blocks = self._conf.get('trail_blocks') assert trail_blocks >= 0 assert trail_blocks <= 100