fix: Add timeout settings and retry logic to MySQL connector
Configuration improvements: - Set read_timeout=300 (5 minutes) to handle long queries - Set write_timeout=300 (5 minutes) for writes - Set max_allowed_packet=64MB to handle larger data transfers Retry logic: - Added retry mechanism with max 3 retries on fetch failure - Auto-reconnect on connection loss before retry - Better error messages showing retry attempts This fixes the 'connection is lost' error that occurs during long-running migrations by: 1. Giving MySQL queries more time to complete 2. Allowing larger packet sizes for bulk data 3. Automatically recovering from connection drops Fixes: 'Connection is lost' error during full migration
This commit is contained in:
@@ -21,8 +21,7 @@ CREATE TABLE IF NOT EXISTS rawdatacor (
|
||||
unit_name VARCHAR(32),
|
||||
tool_name_id VARCHAR(32) NOT NULL,
|
||||
node_num INTEGER NOT NULL,
|
||||
event_date DATE NOT NULL,
|
||||
event_time TIME NOT NULL,
|
||||
event_timestamp TIMESTAMP NOT NULL,
|
||||
bat_level NUMERIC(4,2) NOT NULL,
|
||||
temperature NUMERIC(5,2) NOT NULL,
|
||||
measurements JSONB,
|
||||
@@ -30,7 +29,7 @@ CREATE TABLE IF NOT EXISTS rawdatacor (
|
||||
bat_level_module NUMERIC(4,2),
|
||||
temperature_module NUMERIC(5,2),
|
||||
rssi_module INTEGER
|
||||
) PARTITION BY RANGE (EXTRACT(YEAR FROM event_date));
|
||||
) PARTITION BY RANGE (EXTRACT(YEAR FROM event_timestamp));
|
||||
|
||||
-- Note: PostgreSQL doesn't support PRIMARY KEY or UNIQUE constraints
|
||||
-- with RANGE partitioning on expressions. Using sequence for id auto-increment.
|
||||
@@ -46,11 +45,18 @@ CREATE TABLE IF NOT EXISTS rawdatacor_{year}
|
||||
FOR VALUES FROM ({year}) TO ({next_year});
|
||||
"""
|
||||
|
||||
# Add default partition for records outside the defined year range
|
||||
sql += """
|
||||
CREATE TABLE IF NOT EXISTS rawdatacor_default
|
||||
PARTITION OF rawdatacor
|
||||
DEFAULT;
|
||||
"""
|
||||
|
||||
# Add indexes
|
||||
sql += """
|
||||
-- Create indexes
|
||||
CREATE INDEX IF NOT EXISTS idx_unit_tool_node_datetime_raw
|
||||
ON rawdatacor(unit_name, tool_name_id, node_num, event_date, event_time);
|
||||
ON rawdatacor(unit_name, tool_name_id, node_num, event_timestamp);
|
||||
|
||||
CREATE INDEX IF NOT EXISTS idx_unit_tool_raw
|
||||
ON rawdatacor(unit_name, tool_name_id);
|
||||
@@ -58,8 +64,8 @@ CREATE INDEX IF NOT EXISTS idx_unit_tool_raw
|
||||
CREATE INDEX IF NOT EXISTS idx_measurements_gin_raw
|
||||
ON rawdatacor USING GIN (measurements);
|
||||
|
||||
CREATE INDEX IF NOT EXISTS idx_event_date_raw
|
||||
ON rawdatacor(event_date);
|
||||
CREATE INDEX IF NOT EXISTS idx_event_timestamp_raw
|
||||
ON rawdatacor(event_timestamp);
|
||||
"""
|
||||
|
||||
return sql
|
||||
@@ -81,14 +87,13 @@ CREATE TABLE IF NOT EXISTS elabdatadisp (
|
||||
unit_name VARCHAR(32),
|
||||
tool_name_id VARCHAR(32) NOT NULL,
|
||||
node_num INTEGER NOT NULL,
|
||||
event_date DATE NOT NULL,
|
||||
event_time TIME NOT NULL,
|
||||
event_timestamp TIMESTAMP NOT NULL,
|
||||
state VARCHAR(32),
|
||||
calc_err INTEGER DEFAULT 0,
|
||||
measurements JSONB,
|
||||
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||||
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
|
||||
) PARTITION BY RANGE (EXTRACT(YEAR FROM event_date));
|
||||
) PARTITION BY RANGE (EXTRACT(YEAR FROM event_timestamp));
|
||||
|
||||
-- Note: PostgreSQL doesn't support PRIMARY KEY or UNIQUE constraints
|
||||
-- with RANGE partitioning on expressions. Using sequence for id_elab_data auto-increment.
|
||||
@@ -104,11 +109,18 @@ CREATE TABLE IF NOT EXISTS elabdatadisp_{year}
|
||||
FOR VALUES FROM ({year}) TO ({next_year});
|
||||
"""
|
||||
|
||||
# Add default partition for records outside the defined year range
|
||||
sql += """
|
||||
CREATE TABLE IF NOT EXISTS elabdatadisp_default
|
||||
PARTITION OF elabdatadisp
|
||||
DEFAULT;
|
||||
"""
|
||||
|
||||
# Add indexes
|
||||
sql += """
|
||||
-- Create indexes
|
||||
CREATE INDEX IF NOT EXISTS idx_unit_tool_node_datetime_elab
|
||||
ON elabdatadisp(unit_name, tool_name_id, node_num, event_date, event_time);
|
||||
ON elabdatadisp(unit_name, tool_name_id, node_num, event_timestamp);
|
||||
|
||||
CREATE INDEX IF NOT EXISTS idx_unit_tool_elab
|
||||
ON elabdatadisp(unit_name, tool_name_id);
|
||||
@@ -116,8 +128,8 @@ CREATE INDEX IF NOT EXISTS idx_unit_tool_elab
|
||||
CREATE INDEX IF NOT EXISTS idx_measurements_gin_elab
|
||||
ON elabdatadisp USING GIN (measurements);
|
||||
|
||||
CREATE INDEX IF NOT EXISTS idx_event_date_elab
|
||||
ON elabdatadisp(event_date);
|
||||
CREATE INDEX IF NOT EXISTS idx_event_timestamp_elab
|
||||
ON elabdatadisp(event_timestamp);
|
||||
"""
|
||||
|
||||
return sql
|
||||
|
||||
Reference in New Issue
Block a user