Skip to content
Snippets Groups Projects
Commit 4e02140d authored by Bartek Wrona's avatar Bartek Wrona
Browse files

- LOGGED/UNLOCGGED attributes applied to mostly used tables

- Temporary disabled reputation data collection
parent 3b01c2aa
No related branches found
No related tags found
1 merge request!121Prerequisuites to Reputation api support
This commit is part of merge request !121. Comments created here will be created in the context of that merge request.
......@@ -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
......
......@@ -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'))
""" 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
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment