From 4e02140dea8661b36bdfcd710f944bfcb64a7c54 Mon Sep 17 00:00:00 2001 From: Bartek Wrona <wrona@syncad.com> Date: Tue, 8 Sep 2020 21:44:52 +0200 Subject: [PATCH] - LOGGED/UNLOCGGED attributes applied to mostly used tables - Temporary disabled reputation data collection --- hive/db/db_state.py | 11 +++-- hive/db/schema.py | 8 +++- hive/indexer/reputations.py | 87 +++++++++++++++++++------------------ 3 files changed, 58 insertions(+), 48 deletions(-) diff --git a/hive/db/db_state.py b/hive/db/db_state.py index 9b6134b49..d146f7245 100644 --- a/hive/db/db_state.py +++ b/hive/db/db_state.py @@ -8,7 +8,7 @@ from time import perf_counter import logging import sqlalchemy -from hive.db.schema import (setup, reset_autovac, build_metadata, +from hive.db.schema import (setup, reset_autovac, set_logged_table_attribute, build_metadata, build_metadata_community, teardown, DB_VERSION) from hive.db.adapter import Db @@ -148,10 +148,12 @@ class DbState: except sqlalchemy.exc.ProgrammingError as ex: log.warning("Ignoring ex: {}".format(ex)) - from hive.db.schema import drop_fk, create_fk + from hive.db.schema import drop_fk, set_logged_table_attribute log.info("Dropping FKs") drop_fk(cls.db()) + set_logged_table_attribute(cls.db(), False) + log.info("[INIT] Finish pre-initial sync hooks") @classmethod @@ -229,8 +231,11 @@ class DbState: time_end = perf_counter() log.info("[INIT] update_all_posts_active executed in %fs", time_end - time_start) + + from hive.db.schema import create_fk, set_logged_table_attribute + set_logged_table_attribute(cls.db(), True) + log.info("Recreating FKs") - from hive.db.schema import create_fk create_fk(cls.db()) @staticmethod diff --git a/hive/db/schema.py b/hive/db/schema.py index 14459b409..f9917be87 100644 --- a/hive/db/schema.py +++ b/hive/db/schema.py @@ -8,6 +8,9 @@ from sqlalchemy.types import VARCHAR from sqlalchemy.types import TEXT from sqlalchemy.types import BOOLEAN +import logging +log = logging.getLogger(__name__) + #pylint: disable=line-too-long, too-many-lines, bad-whitespace # [DK] we changed and removed some tables so i upgraded DB_VERSION to 18 @@ -1505,11 +1508,11 @@ def set_fillfactor(db): sql = """ALTER TABLE {} SET (FILLFACTOR = {})""" db.query(sql.format(table, fillfactor)) -def set_logged(db, logged): +def set_logged_table_attribute(db, logged): """Initializes/resets LOGGED/UNLOGGED attribute for tables which are intesively updated""" logged_config = [ - 'hive_author', + 'hive_accounts', 'hive_permlink_data', 'hive_post_tags', 'hive_posts', @@ -1519,5 +1522,6 @@ def set_logged(db, logged): ] for table in logged_config: + log.info("Setting {} attribute on a table: {}".format('LOGGED' if logged else 'UNLOGGED', table)) sql = """ALTER TABLE {} SET {}""" db.query_no_return(sql.format(table, 'LOGGED' if logged else 'UNLOGGED')) diff --git a/hive/indexer/reputations.py b/hive/indexer/reputations.py index 127c9fce1..e14a5484f 100644 --- a/hive/indexer/reputations.py +++ b/hive/indexer/reputations.py @@ -1,47 +1,48 @@ -""" Reputation update support """ - -import logging -from hive.indexer.db_adapter_holder import DbAdapterHolder - -log = logging.getLogger(__name__) - -CACHED_ITEMS_LIMIT = 200 - -class Reputations(DbAdapterHolder): - _queries = [] - - @classmethod - def process_vote(self, block_num, effective_vote_op): - self._queries.append("\nSELECT process_reputation_data({}, '{}', '{}', '{}', {});".format(block_num, effective_vote_op['author'], effective_vote_op['permlink'], - effective_vote_op['voter'], effective_vote_op['rshares'])) - - @classmethod - def flush(self): +""" Reputation update support """ + +import logging +from hive.indexer.db_adapter_holder import DbAdapterHolder + +log = logging.getLogger(__name__) + +CACHED_ITEMS_LIMIT = 200 + +class Reputations(DbAdapterHolder): + _queries = [] + + @classmethod + def process_vote(self, block_num, effective_vote_op): + return + self._queries.append("\nSELECT process_reputation_data({}, '{}', '{}', '{}', {});".format(block_num, effective_vote_op['author'], effective_vote_op['permlink'], + effective_vote_op['voter'], effective_vote_op['rshares'])) + + @classmethod + def flush(self): if not self._queries: return 0 self.beginTx() - - query = "" - i = 0 - items = 0 - for s in self._queries: - query = query + str(self._queries[i]) + ";\n" - i = i + 1 - items = items + 1 - if items >= CACHED_ITEMS_LIMIT: - self.db.query_no_return(query) - query = "" - items = 0 - - if items >= CACHED_ITEMS_LIMIT: - self.db.query_no_return(query) - query = "" - items = 0 - - n = len(self._queries) - self._queries.clear() - - self.commitTx() - return n - + + query = "" + i = 0 + items = 0 + for s in self._queries: + query = query + str(self._queries[i]) + ";\n" + i = i + 1 + items = items + 1 + if items >= CACHED_ITEMS_LIMIT: + self.db.query_no_return(query) + query = "" + items = 0 + + if items >= CACHED_ITEMS_LIMIT: + self.db.query_no_return(query) + query = "" + items = 0 + + n = len(self._queries) + self._queries.clear() + + self.commitTx() + return n + -- GitLab