Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Developing Logging Feature for 'BinLogStreamReader' Object Creation Parameters #460

26 changes: 25 additions & 1 deletion pymysqlreplication/binlogstream.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
# -*- coding: utf-8 -*-

import struct
import logging
from distutils.version import LooseVersion

import pymysql
Expand Down Expand Up @@ -142,7 +143,8 @@ def __init__(self, connection_settings, server_id,
slave_heartbeat=None,
is_mariadb=False,
annotate_rows_event=False,
ignore_decode_errors=False):
ignore_decode_errors=False,
parma_logging=True, ):
chungeun-choi marked this conversation as resolved.
Show resolved Hide resolved
"""
Attributes:
ctl_connection_settings: Connection settings for cluster holding
Expand Down Expand Up @@ -224,6 +226,8 @@ def __init__(self, connection_settings, server_id,
self.skip_to_timestamp = skip_to_timestamp
self.is_mariadb = is_mariadb
self.__annotate_rows_event = annotate_rows_event
if parma_logging:
self.__log_valid_parameters()

if end_log_pos:
self.is_past_end_log_pos = False
Expand Down Expand Up @@ -363,9 +367,11 @@ def __connect_to_stream(self):

if not self.__blocking:
flags |= 0x01 # BINLOG_DUMP_NON_BLOCK

prelude += struct.pack('<H', flags)

prelude += struct.pack('<I', self.__server_id)

prelude += self.log_file.encode()
else:
if self.is_mariadb:
Expand Down Expand Up @@ -604,6 +610,7 @@ def _allowed_event_list(self, only_events, ignored_events,
if only_events is not None:
events = set(only_events)
else:
a = QueryEvent
events = set((
QueryEvent,
RotateEvent,
Expand Down Expand Up @@ -667,5 +674,22 @@ def __get_table_information(self, schema, table):
else:
raise error

def __log_valid_parameters(self):
ignore_list = ["allowed_events_in_packet", "table_map"]
for parameter, value in self.__dict__.items():
if not value:
continue
if parameter.startswith("_BinLogStreamReader__"):
parameter = parameter.replace("_BinLogStreamReader__", "")
if type(value) == bool or type(value) == int:
comment = f"{parameter} is {value}"
elif type(value) == frozenset:
string_list = [str(item).split()[-1][:-2].split('.')[2] for item in value]
items = ", ".join(string_list)
comment = f"{parameter}: [{items}]"
else:
comment = "Set parameter - {}, value - {}".format(parameter, value)
logging.info(comment)

def __iter__(self):
return iter(self.fetchone, None)