Details
-
Bug
-
Status: Open (View Workflow)
-
Major
-
Resolution: Unresolved
-
11.6.0
-
None
-
None
-
OS:
VERSION_ID="23.10"
VERSION="23.10 (Mantic Minotaur)"
Chain replication 1->2->3
Description
I've a chain replication 1->2->3 setup.
My test performs some writes on the master and does both master and slave restarts. The slave syncs up with the master successfully but Seconds_Behind_Master is showing value > 0 which eventually settles down to 0.
So, the problem here is that after master sync up the Seconds_Behind_Master value is > 0. The expected behavior is Seconds_Behind_Master should be 0 after sync up.
Test failure message:
server_2 syncs with server_1
|
include/sync_with_master_gtid.inc
|
server_2 info after syncing with server_1
|
#Check that Slave_last_event_time ~= Master_last_event_time
|
set @s2mle3 = '2024-08-30 09:28:38';
|
set @s2sle3 = '2024-08-30 09:28:38';
|
#Check on server_2 Seconds_Behind_Master is equal to 0
|
set @s2sbm3 = 59;
|
rpl.ment2095 'mix' [ fail ]
|
Test ended at 2024-08-30 14:59:39
|
|
CURRENT_TEST: rpl.ment2095
|
mysqltest: At line 165: server_2 SBM didn't set at 0 after sync up.
|
The above problem is seen in all binlog formats.
Here is the full MTR test case,
--source include/have_binlog_format_mixed.inc
|
|
--let $rpl_topology= 1->2->3
|
--source include/rpl_init.inc
|
|
--connection server_1
|
--source include/have_innodb.inc
|
--connection server_2
|
--source include/have_innodb.inc
|
--connection server_3
|
--source include/have_innodb.inc
|
|
|
--connection server_1
|
--echo #Write some data on server_1
|
create table t1 (id INT NOT NULL AUTO_INCREMENT PRIMARY KEY, name CHAR(25)) engine=innodb;
|
insert into t1 (name) values ('foxy1');
|
insert into t1 (name) values ('foxy2');
|
insert into t1 (name) values ('foxy3');
|
insert into t1 (name) values ('foxy4');
|
insert into t1 (name) values ('foxy5');
|
insert into t1 (name) select name from t1;
|
insert into t1 (name) select name from t1;
|
insert into t1 (name) select name from t1;
|
insert into t1 (name) select name from t1;
|
insert into t1 (name) select name from t1;
|
flush logs;
|
|
--eval set @s1tblsize = (select count(id) from t1)
|
--let $s1tblsize = @s1tblsize
|
let $gtid_binlog_pos= query_get_value(SELECT @@gtid_binlog_pos, @@gtid_binlog_pos, 1);
|
--source include/save_master_gtid.inc
|
|
--echo *** Test normal shutdown/restart of server_1 ***
|
--connection server_1
|
--write_file $MYSQLTEST_VARDIR/tmp/mysqld.1.expect
|
wait
|
EOF
|
--shutdown_server
|
--source include/wait_until_disconnected.inc
|
|
--append_file $MYSQLTEST_VARDIR/tmp/mysqld.1.expect
|
restart
|
EOF
|
--connection default
|
--enable_reconnect
|
--source include/wait_until_connected_again.inc
|
--connection server_1
|
--enable_reconnect
|
--source include/wait_until_connected_again.inc
|
--echo *** server_1 restarted ***
|
|
--connection server_2
|
--echo Wait until server_2 replicates the last server_1 event
|
--source include/sync_with_master_gtid.inc
|
--echo #Check on server_2 Master_last_event_time is equal to Slave_last_event_time
|
--eval set @s2mle1 = '$s2mle1'
|
--eval set @s2sle1 = '$s2sle1'
|
if (`SELECT @s2sle1 != @s2mle1`)
|
{
|
--die server_2 SLE didn't match its MLE after sync up.
|
}
|
--echo #Check on server_2 Seconds_Behind_Master is equal to 0
|
--let $s2sbm1 = query_get_value(SHOW ALL SLAVES STATUS, Seconds_Behind_Master, 1)
|
--eval set @s2sbm1 = $s2sbm1
|
if (`SELECT @s2sbm1 != 0`)
|
{
|
--die server_2 SBM didn't set at 0 after sync up.
|
}
|
|
--echo #Induce SQL_DELAY of 60s on server_2
|
--let $s2_master_delay = 60
|
--eval set @s2_master_delay = $s2_master_delay
|
--source include/stop_slave.inc
|
--eval change master to master_delay=$s2_master_delay, master_use_gtid=slave_pos;
|
--source include/start_slave.inc
|
|
--connection server_3
|
--source include/stop_slave.inc
|
--let $s3_master_delay = 90
|
--eval set @s3_master_delay = $s3_master_delay
|
--eval change master to master_delay=$s3_master_delay, master_use_gtid=slave_pos;
|
--source include/start_slave.inc
|
--let $s3sbm1 = query_get_value(SHOW ALL SLAVES STATUS, Seconds_Behind_Master, 1)
|
--eval set @s3sbm1 = $s3sbm1
|
|
--connection server_1
|
--echo Write some data on server_1 after 5s, this is second event
|
--eval set @s1_event_delay = 5
|
--eval set @s1_event_delay_minus1 = @s1_event_delay - 1
|
--eval set @s1_event_delay_plus1 = @s1_event_delay + 1
|
select sleep(@s1_event_delay);
|
insert into t1 (name) select name from t1 where name = 'foxy5';
|
update t1 set name = 'foxynew4' where name = 'foxy4';
|
delete from t1 where name = 'foxy3';
|
flush logs;
|
--source include/save_master_gtid.inc
|
--eval set @s1tblsize = (select count(id) from t1)
|
--let $s1tblsize = @s1tblsize
|
let $gtid_binlog_pos= query_get_value(SELECT @@gtid_binlog_pos, @@gtid_binlog_pos, 1);
|
|
--echo *** Test normal shutdown/restart of server_1 ***
|
--connection server_1
|
--write_file $MYSQLTEST_VARDIR/tmp/mysqld.1.expect
|
wait
|
EOF
|
--shutdown_server
|
--source include/wait_until_disconnected.inc
|
|
--append_file $MYSQLTEST_VARDIR/tmp/mysqld.1.expect
|
restart
|
EOF
|
--connection default
|
--enable_reconnect
|
--source include/wait_until_connected_again.inc
|
--connection server_1
|
--enable_reconnect
|
--source include/wait_until_connected_again.inc
|
--echo *** server_1 restarted ***
|
|
--connection server_2
|
--source include/stop_slave.inc
|
--source include/start_slave.inc
|
--let $wait_condition= SELECT gtid_io_pos = '$gtid_binlog_pos' FROM information_schema.slave_status;
|
--source include/wait_condition.inc
|
--echo #server_2 Info before sync
|
--echo #Check that Slave_last_event_time ~= Master_last_event_time - 5
|
--echo #Check that the second even on server_1 has not been replicated
|
--let $s2mle2= query_get_value(SHOW ALL SLAVES STATUS, Master_last_event_time, 1)
|
--let $s2sle2= query_get_value(SHOW ALL SLAVES STATUS, Slave_last_event_time, 1)
|
--eval set @s2mle2 = '$s2mle2'
|
--eval set @s2sle2 = '$s2sle2'
|
--eval set @timediff = (SELECT ABS(TIME_TO_SEC(TIMEDIFF(@s2mle2, @s2sle2))));
|
if (`SELECT @timediff < @s1_event_delay_minus1 OR @timediff > @s1_event_delay_plus1`)
|
{
|
--die server_2 (MLE - SLE) didn't match ~5s
|
}
|
--echo #Check on server_2 Seconds_Behind_Master is ~5s
|
--let $s2sbm2= query_get_value(SHOW ALL SLAVES STATUS, Seconds_Behind_Master, 1)
|
--eval set @s2sbm2 = $s2sbm2
|
if (`SELECT @s2sbm2 < @s1_event_delay_minus1 OR @s2sbm2 > @s1_event_delay_plus1`)
|
{
|
--die server_2 SBM didn't match ~5s
|
}
|
|
--connection server_2
|
--echo server_2 syncs with server_1
|
--source include/sync_with_master_gtid.inc
|
|
--echo server_2 info after syncing with server_1
|
--echo #Check that Slave_last_event_time ~= Master_last_event_time
|
--let $s2mle3 = query_get_value(SHOW ALL SLAVES STATUS, Master_last_event_time, 1)
|
--let $s2sle3 = query_get_value(SHOW ALL SLAVES STATUS, Slave_last_event_time, 1)
|
--eval set @s2mle3 = '$s2mle3'
|
--eval set @s2sle3 = '$s2sle3'
|
if (`SELECT @s2sle3 != @s2mle3`)
|
{
|
--die server_2 SLE didn't match its MLE after sync up.
|
}
|
--echo #Check on server_2 Seconds_Behind_Master is equal to 0
|
--let $s2sbm3 = query_get_value(SHOW ALL SLAVES STATUS, Seconds_Behind_Master, 1)
|
--eval set @s2sbm3 = $s2sbm3
|
if (`SELECT @s2sbm3 != 0`)
|
{
|
--die server_2 SBM didn't set at 0 after sync up.
|
}
|
Attachments
Issue Links
- relates to
-
MDEV-33856 Alternative Replication Lag Representation via Received/Executed Master Binlog Event Timestamps
-
- Closed
-
Activity
Field | Original Value | New Value |
---|---|---|
Description |
I've a chain replication 1->2->3 setup.
My test performs some writes on the master and does both master and slave restarts. The slave syncs up with the master successfully but Seconds_Behind_Master is showing value > 0 which eventually settles down to 0. So, the problem here is that after master sync up the Seconds_Behind_Master value is > 0. The expected behavior is Seconds_Behind_Master should be 0 after sync up. Test failure message: server_2 syncs with server_1 include/sync_with_master_gtid.inc server_2 info after syncing with server_1 #Check that Slave_last_event_time ~= Master_last_event_time set @s2mle3 = '2024-08-30 09:28:38'; set @s2sle3 = '2024-08-30 09:28:38'; #Check on server_2 Seconds_Behind_Master is equal to 0 set @s2sbm3 = 59; rpl.ment2095 'mix' [ fail ] Test ended at 2024-08-30 14:59:39 CURRENT_TEST: rpl.ment2095 mysqltest: At line 165: server_2 SBM didn't set at 0 after sync up. The above problem is seen in all binlog formats. Here is the full MTR test case, --source include/have_binlog_format_mixed.inc --let $rpl_topology= 1->2->3 --source include/rpl_init.inc --connection server_1 --source include/have_innodb.inc --connection server_2 --source include/have_innodb.inc --connection server_3 --source include/have_innodb.inc --connection server_1 --echo #Write some data on server_1 create table t1 (id INT NOT NULL AUTO_INCREMENT PRIMARY KEY, name CHAR(25)) engine=innodb; insert into t1 (name) values ('foxy1'); insert into t1 (name) values ('foxy2'); insert into t1 (name) values ('foxy3'); insert into t1 (name) values ('foxy4'); insert into t1 (name) values ('foxy5'); insert into t1 (name) select name from t1; insert into t1 (name) select name from t1; insert into t1 (name) select name from t1; insert into t1 (name) select name from t1; insert into t1 (name) select name from t1; flush logs; --eval set @s1tblsize = (select count(id) from t1) --let $s1tblsize = @s1tblsize let $gtid_binlog_pos= query_get_value(SELECT @@gtid_binlog_pos, @@gtid_binlog_pos, 1); --source include/save_master_gtid.inc --echo *** Test normal shutdown/restart of server_1 *** --connection server_1 --write_file $MYSQLTEST_VARDIR/tmp/mysqld.1.expect wait EOF --shutdown_server --source include/wait_until_disconnected.inc --append_file $MYSQLTEST_VARDIR/tmp/mysqld.1.expect restart EOF --connection default --enable_reconnect --source include/wait_until_connected_again.inc --connection server_1 --enable_reconnect --source include/wait_until_connected_again.inc --echo *** server_1 restarted *** --connection server_2 --echo Wait until server_2 replicates the last server_1 event --source include/sync_with_master_gtid.inc --echo #Check on server_2 Master_last_event_time is equal to Slave_last_event_time --eval set @s2mle1 = '$s2mle1' --eval set @s2sle1 = '$s2sle1' if (`SELECT @s2sle1 != @s2mle1`) { --die server_2 SLE didn't match its MLE after sync up. } --echo #Check on server_2 Seconds_Behind_Master is equal to 0 --let $s2sbm1 = query_get_value(SHOW ALL SLAVES STATUS, Seconds_Behind_Master, 1) --eval set @s2sbm1 = $s2sbm1 if (`SELECT @s2sbm1 != 0`) { --die server_2 SBM didn't set at 0 after sync up. } --echo #Induce SQL_DELAY of 60s on server_2 --let $s2_master_delay = 60 --eval set @s2_master_delay = $s2_master_delay --source include/stop_slave.inc --eval change master to master_delay=$s2_master_delay, master_use_gtid=slave_pos; --source include/start_slave.inc --connection server_3 --source include/stop_slave.inc --let $s3_master_delay = 90 --eval set @s3_master_delay = $s3_master_delay --eval change master to master_delay=$s3_master_delay, master_use_gtid=slave_pos; --source include/start_slave.inc --let $s3sbm1 = query_get_value(SHOW ALL SLAVES STATUS, Seconds_Behind_Master, 1) --eval set @s3sbm1 = $s3sbm1 --connection server_1 --echo Write some data on server_1 after 5s, this is second event --eval set @s1_event_delay = 5 --eval set @s1_event_delay_minus1 = @s1_event_delay - 1 --eval set @s1_event_delay_plus1 = @s1_event_delay + 1 select sleep(@s1_event_delay); insert into t1 (name) select name from t1 where name = 'foxy5'; update t1 set name = 'foxynew4' where name = 'foxy4'; delete from t1 where name = 'foxy3'; flush logs; --source include/save_master_gtid.inc --eval set @s1tblsize = (select count(id) from t1) --let $s1tblsize = @s1tblsize let $gtid_binlog_pos= query_get_value(SELECT @@gtid_binlog_pos, @@gtid_binlog_pos, 1); --echo *** Test normal shutdown/restart of server_1 *** --connection server_1 --write_file $MYSQLTEST_VARDIR/tmp/mysqld.1.expect wait EOF --shutdown_server --source include/wait_until_disconnected.inc --append_file $MYSQLTEST_VARDIR/tmp/mysqld.1.expect restart EOF --connection default --enable_reconnect --source include/wait_until_connected_again.inc --connection server_1 --enable_reconnect --source include/wait_until_connected_again.inc --echo *** server_1 restarted *** --connection server_2 --source include/stop_slave.inc --source include/start_slave.inc --let $wait_condition= SELECT gtid_io_pos = '$gtid_binlog_pos' FROM information_schema.slave_status; --source include/wait_condition.inc --echo #server_2 Info before sync --echo #Check that Slave_last_event_time ~= Master_last_event_time - 5 --echo #Check that the second even on server_1 has not been replicated --let $s2mle2= query_get_value(SHOW ALL SLAVES STATUS, Master_last_event_time, 1) --let $s2sle2= query_get_value(SHOW ALL SLAVES STATUS, Slave_last_event_time, 1) --eval set @s2mle2 = '$s2mle2' --eval set @s2sle2 = '$s2sle2' --eval set @timediff = (SELECT ABS(TIME_TO_SEC(TIMEDIFF(@s2mle2, @s2sle2)))); if (`SELECT @timediff < @s1_event_delay_minus1 OR @timediff > @s1_event_delay_plus1`) { --die server_2 (MLE - SLE) didn't match ~5s } --echo #Check on server_2 Seconds_Behind_Master is ~5s --let $s2sbm2= query_get_value(SHOW ALL SLAVES STATUS, Seconds_Behind_Master, 1) --eval set @s2sbm2 = $s2sbm2 if (`SELECT @s2sbm2 < @s1_event_delay_minus1 OR @s2sbm2 > @s1_event_delay_plus1`) { --die server_2 SBM didn't match ~5s } --connection server_2 --echo server_2 syncs with server_1 --source include/sync_with_master_gtid.inc --echo server_2 info after syncing with server_1 --echo #Check that Slave_last_event_time ~= Master_last_event_time --let $s2mle3 = query_get_value(SHOW ALL SLAVES STATUS, Master_last_event_time, 1) --let $s2sle3 = query_get_value(SHOW ALL SLAVES STATUS, Slave_last_event_time, 1) --eval set @s2mle3 = '$s2mle3' --eval set @s2sle3 = '$s2sle3' if (`SELECT @s2sle3 != @s2mle3`) { --die server_2 SLE didn't match its MLE after sync up. } --echo #Check on server_2 Seconds_Behind_Master is equal to 0 --let $s2sbm3 = query_get_value(SHOW ALL SLAVES STATUS, Seconds_Behind_Master, 1) --eval set @s2sbm3 = $s2sbm3 if (`SELECT @s2sbm3 != 0`) { --die server_2 SBM didn't set at 0 after sync up. } |
I've a chain replication 1->2->3 setup.
My test performs some writes on the master and does both master and slave restarts. The slave syncs up with the master successfully but Seconds_Behind_Master is showing value > 0 which eventually settles down to 0. So, the problem here is that after master sync up the Seconds_Behind_Master value is > 0. The expected behavior is Seconds_Behind_Master should be 0 after sync up. Test failure message: {noformat} server_2 syncs with server_1 include/sync_with_master_gtid.inc server_2 info after syncing with server_1 #Check that Slave_last_event_time ~= Master_last_event_time set @s2mle3 = '2024-08-30 09:28:38'; set @s2sle3 = '2024-08-30 09:28:38'; #Check on server_2 Seconds_Behind_Master is equal to 0 set @s2sbm3 = 59; rpl.ment2095 'mix' [ fail ] Test ended at 2024-08-30 14:59:39 CURRENT_TEST: rpl.ment2095 mysqltest: At line 165: server_2 SBM didn't set at 0 after sync up. {noformat} The above problem is seen in all binlog formats. Here is the full MTR test case, {noformat} --source include/have_binlog_format_mixed.inc --let $rpl_topology= 1->2->3 --source include/rpl_init.inc --connection server_1 --source include/have_innodb.inc --connection server_2 --source include/have_innodb.inc --connection server_3 --source include/have_innodb.inc --connection server_1 --echo #Write some data on server_1 create table t1 (id INT NOT NULL AUTO_INCREMENT PRIMARY KEY, name CHAR(25)) engine=innodb; insert into t1 (name) values ('foxy1'); insert into t1 (name) values ('foxy2'); insert into t1 (name) values ('foxy3'); insert into t1 (name) values ('foxy4'); insert into t1 (name) values ('foxy5'); insert into t1 (name) select name from t1; insert into t1 (name) select name from t1; insert into t1 (name) select name from t1; insert into t1 (name) select name from t1; insert into t1 (name) select name from t1; flush logs; --eval set @s1tblsize = (select count(id) from t1) --let $s1tblsize = @s1tblsize let $gtid_binlog_pos= query_get_value(SELECT @@gtid_binlog_pos, @@gtid_binlog_pos, 1); --source include/save_master_gtid.inc --echo *** Test normal shutdown/restart of server_1 *** --connection server_1 --write_file $MYSQLTEST_VARDIR/tmp/mysqld.1.expect wait EOF --shutdown_server --source include/wait_until_disconnected.inc --append_file $MYSQLTEST_VARDIR/tmp/mysqld.1.expect restart EOF --connection default --enable_reconnect --source include/wait_until_connected_again.inc --connection server_1 --enable_reconnect --source include/wait_until_connected_again.inc --echo *** server_1 restarted *** --connection server_2 --echo Wait until server_2 replicates the last server_1 event --source include/sync_with_master_gtid.inc --echo #Check on server_2 Master_last_event_time is equal to Slave_last_event_time --eval set @s2mle1 = '$s2mle1' --eval set @s2sle1 = '$s2sle1' if (`SELECT @s2sle1 != @s2mle1`) { --die server_2 SLE didn't match its MLE after sync up. } --echo #Check on server_2 Seconds_Behind_Master is equal to 0 --let $s2sbm1 = query_get_value(SHOW ALL SLAVES STATUS, Seconds_Behind_Master, 1) --eval set @s2sbm1 = $s2sbm1 if (`SELECT @s2sbm1 != 0`) { --die server_2 SBM didn't set at 0 after sync up. } --echo #Induce SQL_DELAY of 60s on server_2 --let $s2_master_delay = 60 --eval set @s2_master_delay = $s2_master_delay --source include/stop_slave.inc --eval change master to master_delay=$s2_master_delay, master_use_gtid=slave_pos; --source include/start_slave.inc --connection server_3 --source include/stop_slave.inc --let $s3_master_delay = 90 --eval set @s3_master_delay = $s3_master_delay --eval change master to master_delay=$s3_master_delay, master_use_gtid=slave_pos; --source include/start_slave.inc --let $s3sbm1 = query_get_value(SHOW ALL SLAVES STATUS, Seconds_Behind_Master, 1) --eval set @s3sbm1 = $s3sbm1 --connection server_1 --echo Write some data on server_1 after 5s, this is second event --eval set @s1_event_delay = 5 --eval set @s1_event_delay_minus1 = @s1_event_delay - 1 --eval set @s1_event_delay_plus1 = @s1_event_delay + 1 select sleep(@s1_event_delay); insert into t1 (name) select name from t1 where name = 'foxy5'; update t1 set name = 'foxynew4' where name = 'foxy4'; delete from t1 where name = 'foxy3'; flush logs; --source include/save_master_gtid.inc --eval set @s1tblsize = (select count(id) from t1) --let $s1tblsize = @s1tblsize let $gtid_binlog_pos= query_get_value(SELECT @@gtid_binlog_pos, @@gtid_binlog_pos, 1); --echo *** Test normal shutdown/restart of server_1 *** --connection server_1 --write_file $MYSQLTEST_VARDIR/tmp/mysqld.1.expect wait EOF --shutdown_server --source include/wait_until_disconnected.inc --append_file $MYSQLTEST_VARDIR/tmp/mysqld.1.expect restart EOF --connection default --enable_reconnect --source include/wait_until_connected_again.inc --connection server_1 --enable_reconnect --source include/wait_until_connected_again.inc --echo *** server_1 restarted *** --connection server_2 --source include/stop_slave.inc --source include/start_slave.inc --let $wait_condition= SELECT gtid_io_pos = '$gtid_binlog_pos' FROM information_schema.slave_status; --source include/wait_condition.inc --echo #server_2 Info before sync --echo #Check that Slave_last_event_time ~= Master_last_event_time - 5 --echo #Check that the second even on server_1 has not been replicated --let $s2mle2= query_get_value(SHOW ALL SLAVES STATUS, Master_last_event_time, 1) --let $s2sle2= query_get_value(SHOW ALL SLAVES STATUS, Slave_last_event_time, 1) --eval set @s2mle2 = '$s2mle2' --eval set @s2sle2 = '$s2sle2' --eval set @timediff = (SELECT ABS(TIME_TO_SEC(TIMEDIFF(@s2mle2, @s2sle2)))); if (`SELECT @timediff < @s1_event_delay_minus1 OR @timediff > @s1_event_delay_plus1`) { --die server_2 (MLE - SLE) didn't match ~5s } --echo #Check on server_2 Seconds_Behind_Master is ~5s --let $s2sbm2= query_get_value(SHOW ALL SLAVES STATUS, Seconds_Behind_Master, 1) --eval set @s2sbm2 = $s2sbm2 if (`SELECT @s2sbm2 < @s1_event_delay_minus1 OR @s2sbm2 > @s1_event_delay_plus1`) { --die server_2 SBM didn't match ~5s } --connection server_2 --echo server_2 syncs with server_1 --source include/sync_with_master_gtid.inc --echo server_2 info after syncing with server_1 --echo #Check that Slave_last_event_time ~= Master_last_event_time --let $s2mle3 = query_get_value(SHOW ALL SLAVES STATUS, Master_last_event_time, 1) --let $s2sle3 = query_get_value(SHOW ALL SLAVES STATUS, Slave_last_event_time, 1) --eval set @s2mle3 = '$s2mle3' --eval set @s2sle3 = '$s2sle3' if (`SELECT @s2sle3 != @s2mle3`) { --die server_2 SLE didn't match its MLE after sync up. } --echo #Check on server_2 Seconds_Behind_Master is equal to 0 --let $s2sbm3 = query_get_value(SHOW ALL SLAVES STATUS, Seconds_Behind_Master, 1) --eval set @s2sbm3 = $s2sbm3 if (`SELECT @s2sbm3 != 0`) { --die server_2 SBM didn't set at 0 after sync up. } {noformat} |
Component/s | Replication [ 10100 ] |
Link |
This issue relates to |
config:
!include ../my.cnf
[mysqld.3]
log-slave-updates
[ENV]
SERVER_MYPORT_3= @mysqld.3.port
SERVER_MYSOCK_3= @mysqld.3.socket