mirror of
https://github.com/sandronator/finetuning_aufgabe4.git
synced 2026-09-04 00:26:06 +02:00
Two related improvements to make the test runs both usable and
diagnosable:
1. Avoid lock waits / "deadlock" hangs during CLUSTER
The Manager connection ran EXPLAIN ANALYZE without committing, so
psycopg2's default autocommit=False left an open transaction
holding AccessShareLock on publ and auth. The next setup_db then
blocked on DROP INDEX / CLUSTER (both need AccessExclusiveLock),
visible as a hang -- typically at the CLUSTER step. Setting
conn_postsql.autocommit = True releases the locks immediately after
each SELECT, which is safe here because all Manager queries are
read-only.
2. Make the run output identify which test is running
The "Running: ..." line previously printed only the query key
(query_1/query_2), shadowing 'strategy' with the dict key and never
surfacing which join strategy or index config was active. Output
now reads e.g. "[Aufgabe 3b | SortMergeStrategy | idx=nc-both]" by:
- using self.__class__.__name__ so subclasses surface correctly
- passing the current index_config from Manager into the strategy
- threading an optional 'aufgabe' label through Manager.execute()
and into each strategy's run() (including the Nested/SortMerge/
Hash wrappers that override run()).
main.py now tags each execute() call with its assignment number.
Co-Authored-By: Claude Opus 4.7 <[email protected]>
25 lines
912 B
Python
25 lines
912 B
Python
from baseStrategy import BaseStrategy
|
|
import setup
|
|
|
|
class Manager:
|
|
def __init__(self, strategy: BaseStrategy, ):
|
|
self.strategy = strategy
|
|
self.current_index_config = None
|
|
|
|
def setStrategy(self, strategy: BaseStrategy):
|
|
self.strategy = strategy
|
|
# Aktuellen Index-Config an die neue Strategy weiterreichen
|
|
self.strategy.index_config = self.current_index_config
|
|
|
|
def setQueries(self, queries: dict[str, str]):
|
|
self.strategy.set_queries(queries)
|
|
|
|
# Only Postgresql and MariaDb available at the moment
|
|
def setup_db(self, index_config, reload_data=False):
|
|
self.current_index_config = index_config
|
|
self.strategy.index_config = index_config
|
|
setup.reset_postgres(index_config, reload_data=reload_data)
|
|
|
|
def execute(self, aufgabe: str | None = None):
|
|
self.strategy.run(aufgabe=aufgabe)
|
|
|