diff --git a/hive/indexer/blocks.py b/hive/indexer/blocks.py index 3a1949096e165e6a06b87a68574fdd658310b985..9a5d4cd109fa35924492a55457c03ffd3c30a4d7 100644 --- a/hive/indexer/blocks.py +++ b/hive/indexer/blocks.py @@ -29,6 +29,13 @@ log = logging.getLogger(__name__) DB = Db.instance() +def time_collector(f): + startTime = FSM.start() + result = f() + elapsedTime = FSM.stop(startTime) + + return (result, elapsedTime) + class Blocks: """Processes blocks, dispatches work, manages `hive_blocks` table.""" blocks_to_flush = [] @@ -121,26 +128,25 @@ class Blocks: flush_time = register_time(flush_time, "Blocks", cls._flush_blocks()) flush_time = register_time(flush_time, "Posts", Posts.flush()) -# flush_time = register_time(flush_time, "PostDataCache", PostDataCache.flush()) -# flush_time = register_time(flush_time, "Tags", Tags.flush()) -# flush_time = register_time(flush_time, "Votes", Votes.flush()) folllow_items = len(Follow.follow_items_to_flush) + Follow.flush(trx=False) flush_time = register_time(flush_time, "Follow", folllow_items) -# flush_time = register_time(flush_time, "Reputations", cls._flush_reputations()) completedThreads = 0; pool = ThreadPoolExecutor(max_workers = len(cls._concurrent_flush)) - flush_futures = {pool.submit(f): (description, c) for (description, f, c) in cls._concurrent_flush} + flush_futures = {pool.submit(time_collector, f): (description, c) for (description, f, c) in cls._concurrent_flush} for future in concurrent.futures.as_completed(flush_futures): (description, c) = flush_futures[future] completedThreads = completedThreads + 1 try: - n = future.result() + (n, elapsedTime) = future.result() + assert n is not None assert not c.tx_active() - if n > 0: - log.info('%r flush generated %d records' % (description, n)) + FSM.flush_stat(description, elapsedTime, n) + +# if n > 0: +# log.info('%r flush generated %d records' % (description, n)) except Exception as exc: log.error('%r generated an exception: %s' % (description, exc)) raise exc diff --git a/hive/indexer/reputations.py b/hive/indexer/reputations.py index 127c9fce1a9a2e87ac0d4e9e10ae60c94e5a2a75..003662fecd924097fd08805d32ca2c6a3f06ea42 100644 --- a/hive/indexer/reputations.py +++ b/hive/indexer/reputations.py @@ -17,6 +17,8 @@ class Reputations(DbAdapterHolder): @classmethod def flush(self): + self._queries.clear() + if not self._queries: return 0