in src/SimpleReplay/replay.py [0:0]
def validate_config(config):
if (not len(config["target_cluster_endpoint"].split(":")) == 2
or not len(config["target_cluster_endpoint"].split("/")) == 2
):
logger.error(
'Config file value for "target_cluster_endpoint" is not a valid endpoint. Endpoints must be in the format of <cluster-hostname>:<port>/<database-name>.'
)
exit(-1)
if not config["master_username"]:
logger.error(
'Config file missing value for "master_username". Please provide a value for "master_username".'
)
exit(-1)
if not config["odbc_driver"]:
config["odbc_driver"] = None
logger.debug(
'Config file missing value for "odbc_driver" so replay will not use ODBC. Please provide a value for "odbc_driver" to replay using ODBC.'
)
if config["odbc_driver"] or config["default_interface"] == "odbc":
try:
import pyodbc
except ValueError:
logger.error(
'Import of pyodbc failed. Please install pyodbc library to use ODBC as default driver. Please refer to REAME.md'
)
exit(-1)
if not (
config["default_interface"] == "psql"
or config["default_interface"] == "odbc"
):
logger.error(
'Config file value for "default_interface" must be either "psql" or "odbc". Please change the value for "default_interface" to either "psql" or "odbc".'
)
exit(-1)
if not (
config["time_interval_between_transactions"] == ""
or config["time_interval_between_transactions"] == "all on"
or config["time_interval_between_transactions"] == "all off"
):
logger.error(
'Config file value for "time_interval_between_transactions" must be either "", "all on", or "all off". Please change the value for "time_interval_between_transactions" to be "", "all on", or "all off".'
)
exit(-1)
if not (
config["time_interval_between_queries"] == ""
or config["time_interval_between_queries"] == "all on"
or config["time_interval_between_queries"] == "all off"
):
logger.error(
'Config file value for "time_interval_between_queries" must be either "", "all on", or "all off". Please change the value for "time_interval_between_queries" to be "", "all on", or "all off".'
)
exit(-1)
if not (
config["execute_copy_statements"] == "true"
or config["execute_copy_statements"] == "false"
):
logger.error(
'Config file value for "execute_copy_statements" must be either "true" or "false". Please change the value for "execute_copy_statements" to either "true" or "false".'
)
exit(-1)
if not (
config["execute_unload_statements"] == "true"
or config["execute_unload_statements"] == "false"
):
logger.error(
'Config file value for "execute_unload_statements" must be either "true" or "false". Please change the value for "execute_unload_statements" to either "true" or "false".'
)
exit(-1)
if config["replay_output"] and not config["replay_output"].startswith(
"s3://"
):
logger.error(
'Config file value for "replay_output" must be an S3 location (starts with "s3://"). Please remove this value or put in an S3 location.'
)
exit(-1)
if not config["replay_output"] and config["execute_unload_statements"] == "true":
logger.error(
'Config file value for "replay_output" is not provided while "execute_unload_statements" is set to true. Please provide a valid S3 location for "replay_output".'
)
exit(-1)
if (
config["replay_output"]
and config["target_cluster_system_table_unload_iam_role"]
and not config["unload_system_table_queries"]
):
logger.error(
'Config file missing value for "unload_system_table_queries". Please provide a value for "unload_system_table_queries", or remove the value for "target_cluster_system_table_unload_iam_role".'
)
exit(-1)
if (
config["replay_output"]
and config["target_cluster_system_table_unload_iam_role"]
and config["unload_system_table_queries"]
and not config["unload_system_table_queries"].endswith(".sql")
):
logger.error(
'Config file value for "unload_system_table_queries" does not end with ".sql". Please ensure the value for "unload_system_table_queries" ends in ".sql". See the provided "unload_system_tables.sql" as an example.'
)
exit(-1)
if not config["workload_location"]:
logger.error(
'Config file missing value for "workload_location". Please provide a value for "workload_location".'
)
exit(-1)
config['filters'] = validate_and_normalize_filters(ConnectionLog, config.get('filters', {}))