Add explicit port handling in RESP connection callbacks#261
Add explicit port handling in RESP connection callbacks#261
Conversation
There was a problem hiding this comment.
Cursor Bugbot has reviewed your changes and found 2 potential issues.
Autofix Details
Bugbot Autofix prepared fixes for both issues found in the latest run.
- ✅ Fixed:
UpdateBaseLoggeralways resets todefaultCallbacks- Added port field to InstrumentedRespConnection struct and updated UpdateBaseLogger to use callbacksForPort with the stored port, preserving the correct callback behavior.
- ✅ Fixed: Duplicated callback logic between two functions
- Refactored defaultCallbacks and explicitPortCallbacks into a single callbacksForPort function that handles both default and explicit port cases, eliminating duplication.
Or push these changes by commenting:
@cursor push 94450099fb
Preview (94450099fb)
diff --git a/internal/instrumented_resp_connection/instrumented_resp_connection.go b/internal/instrumented_resp_connection/instrumented_resp_connection.go
--- a/internal/instrumented_resp_connection/instrumented_resp_connection.go
+++ b/internal/instrumented_resp_connection/instrumented_resp_connection.go
@@ -14,16 +14,22 @@
// Logger is used to log a connection's network activity (sent/received)
logger *logger.Logger
+ // port is the port used for this connection (empty string for default behavior)
+ port string
}
-func defaultCallbacks(logger *logger.Logger) resp_connection.RespConnectionCallbacks {
+func callbacksForPort(logger *logger.Logger, port string) resp_connection.RespConnectionCallbacks {
return resp_connection.RespConnectionCallbacks{
BeforeSendCommand: func(reusedConnection bool, command string, args ...string) {
var commandPrefix string
if reusedConnection {
commandPrefix = ">"
} else {
- commandPrefix = "$ redis-cli"
+ if port == "" || port == "6379" {
+ commandPrefix = "$ redis-cli"
+ } else {
+ commandPrefix = "$ redis-cli -p " + port
+ }
}
commandWithArgs := append([]string{command}, args...)
@@ -44,45 +50,12 @@
}
}
-func explicitPortCallbacks(logger *logger.Logger, port string) resp_connection.RespConnectionCallbacks {
- return resp_connection.RespConnectionCallbacks{
- BeforeSendCommand: func(reusedConnection bool, command string, args ...string) {
- var commandPrefix string
- if reusedConnection {
- commandPrefix = ">"
- } else {
- commandPrefix = "$ redis-cli -p " + port
- }
-
- commandWithArgs := append([]string{command}, args...)
- logger.Infof("%s %s", commandPrefix, quoteCLICommand(commandWithArgs))
- },
- BeforeSendValue: func(value resp_value.Value) {
- logger.Infof("Sent %s", value.FormattedString())
- },
- BeforeSendBytes: func(bytes []byte) {
- logger.Debugf("Sent bytes: %q", string(bytes))
- },
- AfterBytesReceived: func(bytes []byte) {
- logger.Debugf("Received bytes: %q", string(bytes))
- },
- AfterReadValue: func(value resp_value.Value) {
- logger.Debugf("Received RESP %s: %s", value.Type, value.FormattedString())
- },
- }
-}
-
func NewFromAddr(baseLogger *logger.Logger, addr string, connIdentifier string) (*InstrumentedRespConnection, error) {
logger := baseLogger.Clone()
logger.PushSecondaryPrefix(connIdentifier)
- var callbacks resp_connection.RespConnectionCallbacks
port := strings.Split(addr, ":")[1]
- if port == "6379" {
- callbacks = defaultCallbacks(logger)
- } else {
- callbacks = explicitPortCallbacks(logger, port)
- }
+ callbacks := callbacksForPort(logger, port)
c, err := resp_connection.NewRespConnectionFromAddr(addr, callbacks)
if err != nil {
@@ -91,19 +64,21 @@
return &InstrumentedRespConnection{
RespConnection: c,
logger: logger,
+ port: port,
}, nil
}
func NewFromConn(baseLogger *logger.Logger, conn net.Conn, connIdentifier string) (*InstrumentedRespConnection, error) {
logger := baseLogger.Clone()
logger.PushSecondaryPrefix(connIdentifier)
- c, err := resp_connection.NewRespConnectionFromConn(conn, defaultCallbacks(logger))
+ c, err := resp_connection.NewRespConnectionFromConn(conn, callbacksForPort(logger, ""))
if err != nil {
return nil, err
}
return &InstrumentedRespConnection{
RespConnection: c,
logger: logger,
+ port: "",
}, nil
}
@@ -121,7 +96,7 @@
newLogger := l.Clone()
newLogger.PushSecondaryPrefix(c.GetIdentifier())
c.logger = newLogger
- c.UpdateCallBacks(defaultCallbacks(c.logger))
+ c.UpdateCallBacks(callbacksForPort(c.logger, c.port))
}
func (c *InstrumentedRespConnection) SetReadValueInterceptor(transformer func(value resp_value.Value) resp_value.Value) {You can send follow-ups to the cloud agent here.
|
Triggered a Github Actions job to update fixtures. |
|
Triggered a Github Actions job to update fixtures. |
d1aa9a6 to
e4c2e4a
Compare
There was a problem hiding this comment.
Cursor Bugbot has reviewed your changes and found 3 potential issues.
Bugbot Autofix prepared fixes for all 3 issues found in the latest run.
- ✅ Fixed: Nil pointer panic from discarded
ResolveTCPAddrerror- Added proper error handling for ResolveTCPAddr to prevent nil pointer dereference when address resolution fails.
- ✅ Fixed: Nil pointer panic from discarded type assertion result
- Replaced unsafe type assertion with stored port information to avoid nil pointer dereference on closed or non-TCP connections.
- ✅ Fixed: Wrong port extracted for accepted connections in
UpdateBaseLogger- Store port at connection creation time instead of extracting from RemoteAddr, ensuring correct port for server-side accepted connections.
Or push these changes by commenting:
@cursor push d7b2ce354c
Preview (d7b2ce354c)
diff --git a/internal/instrumented_resp_connection/instrumented_resp_connection.go b/internal/instrumented_resp_connection/instrumented_resp_connection.go
--- a/internal/instrumented_resp_connection/instrumented_resp_connection.go
+++ b/internal/instrumented_resp_connection/instrumented_resp_connection.go
@@ -2,17 +2,22 @@
import (
"net"
+ "strconv"
resp_connection "github.com/codecrafters-io/redis-tester/internal/resp/connection"
resp_value "github.com/codecrafters-io/redis-tester/internal/resp/value"
"github.com/codecrafters-io/tester-utils/logger"
)
+const REDIS_DEFAULT_PORT = "6379"
+
type InstrumentedRespConnection struct {
*resp_connection.RespConnection
// Logger is used to log a connection's network activity (sent/received)
logger *logger.Logger
+ // port is the server port for this connection (empty string means default port)
+ port string
}
func defaultCallbacks(logger *logger.Logger) resp_connection.RespConnectionCallbacks {
@@ -43,16 +48,62 @@
}
}
+func explicitPortCallbacks(logger *logger.Logger, port string) resp_connection.RespConnectionCallbacks {
+ return resp_connection.RespConnectionCallbacks{
+ BeforeSendCommand: func(reusedConnection bool, command string, args ...string) {
+ var commandPrefix string
+ if reusedConnection {
+ commandPrefix = ">"
+ } else {
+ commandPrefix = "$ redis-cli -p " + port
+ }
+
+ commandWithArgs := append([]string{command}, args...)
+ logger.Infof("%s %s", commandPrefix, quoteCLICommand(commandWithArgs))
+ },
+ BeforeSendValue: func(value resp_value.Value) {
+ logger.Infof("Sent %s", value.FormattedString())
+ },
+ BeforeSendBytes: func(bytes []byte) {
+ logger.Debugf("Sent bytes: %q", string(bytes))
+ },
+ AfterBytesReceived: func(bytes []byte) {
+ logger.Debugf("Received bytes: %q", string(bytes))
+ },
+ AfterReadValue: func(value resp_value.Value) {
+ logger.Debugf("Received RESP %s: %s", value.Type, value.FormattedString())
+ },
+ }
+}
+
func NewFromAddr(baseLogger *logger.Logger, addr string, connIdentifier string) (*InstrumentedRespConnection, error) {
logger := baseLogger.Clone()
logger.PushSecondaryPrefix(connIdentifier)
- c, err := resp_connection.NewRespConnectionFromAddr(addr, defaultCallbacks(logger))
+
+ var callbacks resp_connection.RespConnectionCallbacks
+ var port string
+ tcpAddr, err := net.ResolveTCPAddr("tcp", addr)
+ if err == nil {
+ port = strconv.Itoa(tcpAddr.Port)
+ if port == REDIS_DEFAULT_PORT {
+ callbacks = defaultCallbacks(logger)
+ port = ""
+ } else {
+ callbacks = explicitPortCallbacks(logger, port)
+ }
+ } else {
+ callbacks = defaultCallbacks(logger)
+ port = ""
+ }
+
+ c, err := resp_connection.NewRespConnectionFromAddr(addr, callbacks)
if err != nil {
return nil, err
}
return &InstrumentedRespConnection{
RespConnection: c,
logger: logger,
+ port: port,
}, nil
}
@@ -66,6 +117,7 @@
return &InstrumentedRespConnection{
RespConnection: c,
logger: logger,
+ port: "",
}, nil
}
@@ -83,7 +135,12 @@
newLogger := l.Clone()
newLogger.PushSecondaryPrefix(c.GetIdentifier())
c.logger = newLogger
- c.UpdateCallBacks(defaultCallbacks(c.logger))
+
+ if c.port == "" {
+ c.UpdateCallBacks(defaultCallbacks(c.logger))
+ } else {
+ c.UpdateCallBacks(explicitPortCallbacks(c.logger, c.port))
+ }
}
func (c *InstrumentedRespConnection) SetReadValueInterceptor(transformer func(value resp_value.Value) resp_value.Value) {
diff --git a/internal/test_helpers/fixtures/repl-wait/pass b/internal/test_helpers/fixtures/repl-wait/pass
--- a/internal/test_helpers/fixtures/repl-wait/pass
+++ b/internal/test_helpers/fixtures/repl-wait/pass
@@ -10,12 +10,12 @@
�[33m[tester::#YE5] �[0m�[94mRunning tests for Stage #YE5 (ye5)�[0m
�[33m[tester::#YE5] �[0m�[94m$ ./spawn_redis_server.sh�[0m
-�[33m[tester::#YE5] [client] �[0m�[36mConnected (port 35290 -> port 6379)�[0m
+�[33m[tester::#YE5] [client] �[0m�[36mConnected (port 59988 -> port 6379)�[0m
�[33m[tester::#YE5] [client] �[0m�[94m$ redis-cli INFO replication�[0m
�[33m[tester::#YE5] [client] �[0m�[36mSent bytes: "*2\r\n$4\r\nINFO\r\n$11\r\nreplication\r\n"�[0m
-�[33m[tester::#YE5] [client] �[0m�[36mReceived bytes: "$349\r\n# Replication\r\nrole:master\r\nconnected_slaves:0\r\nmaster_failover_state:no-failover\r\nmaster_replid:5a89fca39c34976e7fdfc46a9727e74e115ddd83\r\nmaster_replid2:0000000000000000000000000000000000000000\r\nmaster_repl_offset:0\r\nsecond_repl_offset:-1\r\nrepl_backlog_active:0\r\nrepl_backlog_size:1048576\r\nrepl_backlog_first_byte_offset:0\r\nrepl_backlog_histlen:0\r\n\r\n"�[0m
-�[33m[tester::#YE5] [client] �[0m�[36mReceived RESP bulk string: "# Replication\r\nrole:master\r\nconnected_slaves:0\r\nmaster_failover_state:no-failover\r\nmaster_replid:5a89fca39c34976e7fdfc46a9727e74e115ddd83\r\nmaster_replid2:0000000000000000000000000000000000000000\r\nmaster_repl_offset:0\r\nsecond_repl_offset:-1\r\nrepl_backlog_active:0\r\nrepl_backlog_size:1048576\r\nrepl_backlog_first_byte_offset:0\r\nrepl_backlog_histlen:0\r\n"�[0m
-�[33m[tester::#YE5] [client] �[0m�[92m✔︎ Received "# Replication\r\nrole:master\r\nconnected_slaves:0\r\nmaster_failover_state:no-failover\r\nmaster_replid:5a89fca39c34976e7fdfc46a9727e74e115ddd83\r\nmaster_replid2:0000000000000000000000000000000000000000\r\nmaster_repl_offset:0\r\nsecond_repl_offset:-1\r\nrepl_backlog_active:0\r\nrepl_backlog_size:1048576\r\nrepl_backlog_first_byte_offset:0\r\nrepl_backlog_histlen:0\r\n"�[0m
+�[33m[tester::#YE5] [client] �[0m�[36mReceived bytes: "$349\r\n# Replication\r\nrole:master\r\nconnected_slaves:0\r\nmaster_failover_state:no-failover\r\nmaster_replid:f7749379f594f41c01461dcdf1aae0882d2cc16c\r\nmaster_replid2:0000000000000000000000000000000000000000\r\nmaster_repl_offset:0\r\nsecond_repl_offset:-1\r\nrepl_backlog_active:0\r\nrepl_backlog_size:1048576\r\nrepl_backlog_first_byte_offset:0\r\nrepl_backlog_histlen:0\r\n\r\n"�[0m
+�[33m[tester::#YE5] [client] �[0m�[36mReceived RESP bulk string: "# Replication\r\nrole:master\r\nconnected_slaves:0\r\nmaster_failover_state:no-failover\r\nmaster_replid:f7749379f594f41c01461dcdf1aae0882d2cc16c\r\nmaster_replid2:0000000000000000000000000000000000000000\r\nmaster_repl_offset:0\r\nsecond_repl_offset:-1\r\nrepl_backlog_active:0\r\nrepl_backlog_size:1048576\r\nrepl_backlog_first_byte_offset:0\r\nrepl_backlog_histlen:0\r\n"�[0m
+�[33m[tester::#YE5] [client] �[0m�[92m✔︎ Received "# Replication\r\nrole:master\r\nconnected_slaves:0\r\nmaster_failover_state:no-failover\r\nmaster_replid:f7749379f594f41c01461dcdf1aae0882d2cc16c\r\nmaster_replid2:0000000000000000000000000000000000000000\r\nmaster_repl_offset:0\r\nsecond_repl_offset:-1\r\nrepl_backlog_active:0\r\nrepl_backlog_size:1048576\r\nrepl_backlog_first_byte_offset:0\r\nrepl_backlog_histlen:0\r\n"�[0m
�[33m[tester::#YE5] �[0m�[92mFound role:master in response.�[0m
�[33m[tester::#YE5] �[0m�[92mTest passed.�[0m
�[33m[tester::#YE5] �[0m�[36mTerminating program�[0m
@@ -24,8 +24,8 @@
�[33m[tester::#HC6] �[0m�[94mRunning tests for Stage #HC6 (hc6)�[0m
�[33m[tester::#HC6] �[0m�[94mMaster is running on port 6379�[0m
�[33m[tester::#HC6] �[0m�[94m$ ./spawn_redis_server.sh --port 6380 --replicaof "localhost 6379"�[0m
-�[33m[tester::#HC6] [client] �[0m�[36mConnected (port 46260 -> port 6380)�[0m
-�[33m[tester::#HC6] [client] �[0m�[94m$ redis-cli INFO replication�[0m
+�[33m[tester::#HC6] [client] �[0m�[36mConnected (port 59993 -> port 6380)�[0m
+�[33m[tester::#HC6] [client] �[0m�[94m$ redis-cli -p 6380 INFO replication�[0m
�[33m[tester::#HC6] [client] �[0m�[36mSent bytes: "*2\r\n$4\r\nINFO\r\n$11\r\nreplication\r\n"�[0m
�[33m[tester::#HC6] [client] �[0m�[36mReceived bytes: "$770\r\n# Replication\r\nrole:slave\r\nmaster_host:localhost\r\nmaster_port:6379\r\nmaster_link_status:down\r\nmaster_last_io_seconds_ago:-1\r\nmaster_sync_in_progress:0\r\nslave_read_repl_offset:0\r\nslave_repl_offset:0\r\nreplica_full_sync_buffer_size:0\r\nreplica_full_sync_buffer_peak:0\r\nmaster_current_sync_attempts:1\r\nmaster_total_sync_attempts:2\r\nmaster_link_down_since_seconds:0\r\ntotal_disconnect_time_sec:0\r\nslave_priority:100\r\nslave_read_only:1\r\nreplica_announced:1\r\nconnected_slaves:0\r\nmaster_failover_state:no-failover\r\nmaster_replid:75cd7bc10c49047e0d163660f3b90625b1af31dc\r\nmaster_replid2:0000000000000000000000000000000000000000\r\nmaster_repl_offset:0\r\nsecond_repl_offset:-1\r\nrepl_backlog_active:1\r\nrepl_backlog_size:1048576\r\nrepl_backlog_first_byte_offset:1\r\nrepl_backlog_histlen:0\r\n\r\n"�[0m
�[33m[tester::#HC6] [client] �[0m�[36mReceived RESP bulk string: "# Replication\r\nrole:slave\r\nmaster_host:localhost\r\nmaster_port:6379\r\nmaster_link_status:down\r\nmaster_last_io_seconds_ago:-1\r\nmaster_sync_in_progress:0\r\nslave_read_repl_offset:0\r\nslave_repl_offset:0\r\nreplica_full_sync_buffer_size:0\r\nreplica_full_sync_buffer_peak:0\r\nmaster_current_sync_attempts:1\r\nmaster_total_sync_attempts:2\r\nmaster_link_down_since_seconds:0\r\ntotal_disconnect_time_sec:0\r\nslave_priority:100\r\nslave_read_only:1\r\nreplica_announced:1\r\nconnected_slaves:0\r\nmaster_failover_state:no-failover\r\nmaster_replid:75cd7bc10c49047e0d163660f3b90625b1af31dc\r\nmaster_replid2:0000000000000000000000000000000000000000\r\nmaster_repl_offset:0\r\nsecond_repl_offset:-1\r\nrepl_backlog_active:1\r\nrepl_backlog_size:1048576\r\nrepl_backlog_first_byte_offset:1\r\nrepl_backlog_histlen:0\r\n"�[0m
@@ -37,12 +37,12 @@
�[33m[tester::#XC1] �[0m�[94mRunning tests for Stage #XC1 (xc1)�[0m
�[33m[tester::#XC1] �[0m�[94m$ ./spawn_redis_server.sh�[0m
-�[33m[tester::#XC1] [client] �[0m�[36mConnected (port 35330 -> port 6379)�[0m
+�[33m[tester::#XC1] [client] �[0m�[36mConnected (port 59996 -> port 6379)�[0m
�[33m[tester::#XC1] [client] �[0m�[94m$ redis-cli INFO replication�[0m
�[33m[tester::#XC1] [client] �[0m�[36mSent bytes: "*2\r\n$4\r\nINFO\r\n$11\r\nreplication\r\n"�[0m
-�[33m[tester::#XC1] [client] �[0m�[36mReceived bytes: "$349\r\n# Replication\r\nrole:master\r\nconnected_slaves:0\r\nmaster_failover_state:no-failover\r\nmaster_replid:de3f715225e8cac8fa48aacda73d48bb8c8f05b7\r\nmaster_replid2:0000000000000000000000000000000000000000\r\nmaster_repl_offset:0\r\nsecond_repl_offset:-1\r\nrepl_backlog_active:0\r\nrepl_backlog_size:1048576\r\nrepl_backlog_first_byte_offset:0\r\nrepl_backlog_histlen:0\r\n\r\n"�[0m
-�[33m[tester::#XC1] [client] �[0m�[36mReceived RESP bulk string: "# Replication\r\nrole:master\r\nconnected_slaves:0\r\nmaster_failover_state:no-failover\r\nmaster_replid:de3f715225e8cac8fa48aacda73d48bb8c8f05b7\r\nmaster_replid2:0000000000000000000000000000000000000000\r\nmaster_repl_offset:0\r\nsecond_repl_offset:-1\r\nrepl_backlog_active:0\r\nrepl_backlog_size:1048576\r\nrepl_backlog_first_byte_offset:0\r\nrepl_backlog_histlen:0\r\n"�[0m
-�[33m[tester::#XC1] [client] �[0m�[92m✔︎ Received "# Replication\r\nrole:master\r\nconnected_slaves:0\r\nmaster_failover_state:no-failover\r\nmaster_replid:de3f715225e8cac8fa48aacda73d48bb8c8f05b7\r\nmaster_replid2:0000000000000000000000000000000000000000\r\nmaster_repl_offset:0\r\nsecond_repl_offset:-1\r\nrepl_backlog_active:0\r\nrepl_backlog_size:1048576\r\nrepl_backlog_first_byte_offset:0\r\nrepl_backlog_histlen:0\r\n"�[0m
+�[33m[tester::#XC1] [client] �[0m�[36mReceived bytes: "$349\r\n# Replication\r\nrole:master\r\nconnected_slaves:0\r\nmaster_failover_state:no-failover\r\nmaster_replid:1f5e3de23bbeb4208591ffa6141f5fb063723512\r\nmaster_replid2:0000000000000000000000000000000000000000\r\nmaster_repl_offset:0\r\nsecond_repl_offset:-1\r\nrepl_backlog_active:0\r\nrepl_backlog_size:1048576\r\nrepl_backlog_first_byte_offset:0\r\nrepl_backlog_histlen:0\r\n\r\n"�[0m
+�[33m[tester::#XC1] [client] �[0m�[36mReceived RESP bulk string: "# Replication\r\nrole:master\r\nconnected_slaves:0\r\nmaster_failover_state:no-failover\r\nmaster_replid:1f5e3de23bbeb4208591ffa6141f5fb063723512\r\nmaster_replid2:0000000000000000000000000000000000000000\r\nmaster_repl_offset:0\r\nsecond_repl_offset:-1\r\nrepl_backlog_active:0\r\nrepl_backlog_size:1048576\r\nrepl_backlog_first_byte_offset:0\r\nrepl_backlog_histlen:0\r\n"�[0m
+�[33m[tester::#XC1] [client] �[0m�[92m✔︎ Received "# Replication\r\nrole:master\r\nconnected_slaves:0\r\nmaster_failover_state:no-failover\r\nmaster_replid:1f5e3de23bbeb4208591ffa6141f5fb063723512\r\nmaster_replid2:0000000000000000000000000000000000000000\r\nmaster_repl_offset:0\r\nsecond_repl_offset:-1\r\nrepl_backlog_active:0\r\nrepl_backlog_size:1048576\r\nrepl_backlog_first_byte_offset:0\r\nrepl_backlog_histlen:0\r\n"�[0m
�[33m[tester::#XC1] �[0m�[92mFound master_replid:xxx in response.�[0m
�[33m[tester::#XC1] �[0m�[92mFound master_reploffset:0 in response.�[0m
�[33m[tester::#XC1] �[0m�[92mTest passed.�[0m
@@ -168,7 +168,7 @@
�[33m[tester::#FJ0] �[0m�[94mRunning tests for Stage #FJ0 (fj0)�[0m
�[33m[tester::#FJ0] �[0m�[94m$ ./spawn_redis_server.sh --port 6379�[0m
-�[33m[tester::#FJ0] [client] �[0m�[36mConnected (port 35384 -> port 6379)�[0m
+�[33m[tester::#FJ0] [client] �[0m�[36mConnected (port 60003 -> port 6379)�[0m
�[33m[tester::#FJ0] [client] �[0m�[94m$ redis-cli PING�[0m
�[33m[tester::#FJ0] [client] �[0m�[36mSent bytes: "*1\r\n$4\r\nPING\r\n"�[0m
�[33m[tester::#FJ0] [client] �[0m�[36mReceived bytes: "+PONG\r\n"�[0m
@@ -190,7 +190,7 @@
�[33m[tester::#VM3] �[0m�[94mRunning tests for Stage #VM3 (vm3)�[0m
�[33m[tester::#VM3] �[0m�[94m$ ./spawn_redis_server.sh --port 6379�[0m
-�[33m[tester::#VM3] [client] �[0m�[36mConnected (port 35390 -> port 6379)�[0m
+�[33m[tester::#VM3] [client] �[0m�[36mConnected (port 60006 -> port 6379)�[0m
�[33m[tester::#VM3] [client] �[0m�[94m$ redis-cli PING�[0m
�[33m[tester::#VM3] [client] �[0m�[36mSent bytes: "*1\r\n$4\r\nPING\r\n"�[0m
�[33m[tester::#VM3] [client] �[0m�[36mReceived bytes: "+PONG\r\n"�[0m
@@ -208,16 +208,16 @@
�[33m[tester::#VM3] [client] �[0m�[92m✔︎ Received "OK"�[0m
�[33m[tester::#VM3] [client] �[0m�[94m> PSYNC ? -1�[0m
�[33m[tester::#VM3] [client] �[0m�[36mSent bytes: "*3\r\n$5\r\nPSYNC\r\n$1\r\n?\r\n$2\r\n-1\r\n"�[0m
-�[33m[tester::#VM3] [client] �[0m�[36mReceived bytes: "+FULLRESYNC a13f10992f57c216690c362d32db8084b6660778 0\r\n"�[0m
-�[33m[tester::#VM3] [client] �[0m�[36mReceived RESP simple string: "FULLRESYNC a13f10992f57c216690c362d32db8084b6660778 0"�[0m
-�[33m[tester::#VM3] [client] �[0m�[92m✔︎ Received "FULLRESYNC a13f10992f57c216690c362d32db8084b6660778 0"�[0m
+�[33m[tester::#VM3] [client] �[0m�[36mReceived bytes: "+FULLRESYNC 381ee5a6229a5b61273b4c9f3390af98f269f2a8 0\r\n"�[0m
+�[33m[tester::#VM3] [client] �[0m�[36mReceived RESP simple string: "FULLRESYNC 381ee5a6229a5b61273b4c9f3390af98f269f2a8 0"�[0m
+�[33m[tester::#VM3] [client] �[0m�[92m✔︎ Received "FULLRESYNC 381ee5a6229a5b61273b4c9f3390af98f269f2a8 0"�[0m
�[33m[tester::#VM3] �[0m�[92mTest passed.�[0m
�[33m[tester::#VM3] �[0m�[36mTerminating program�[0m
�[33m[tester::#VM3] �[0m�[36mProgram terminated successfully�[0m
�[33m[tester::#CF8] �[0m�[94mRunning tests for Stage #CF8 (cf8)�[0m
�[33m[tester::#CF8] �[0m�[94m$ ./spawn_redis_server.sh --port 6379�[0m
-�[33m[tester::#CF8] [client] �[0m�[36mConnected (port 35410 -> port 6379)�[0m
+�[33m[tester::#CF8] [client] �[0m�[36mConnected (port 60009 -> port 6379)�[0m
�[33m[tester::#CF8] [client] �[0m�[94m$ redis-cli PING�[0m
�[33m[tester::#CF8] [client] �[0m�[36mSent bytes: "*1\r\n$4\r\nPING\r\n"�[0m
�[33m[tester::#CF8] [client] �[0m�[36mReceived bytes: "+PONG\r\n"�[0m
@@ -235,11 +235,11 @@
�[33m[tester::#CF8] [client] �[0m�[92m✔︎ Received "OK"�[0m
�[33m[tester::#CF8] [client] �[0m�[94m> PSYNC ? -1�[0m
�[33m[tester::#CF8] [client] �[0m�[36mSent bytes: "*3\r\n$5\r\nPSYNC\r\n$1\r\n?\r\n$2\r\n-1\r\n"�[0m
-�[33m[tester::#CF8] [client] �[0m�[36mReceived bytes: "+FULLRESYNC 408b24f6cecdd3a519f3bd456843be4156130d48 0\r\n"�[0m
-�[33m[tester::#CF8] [client] �[0m�[36mReceived RESP simple string: "FULLRESYNC 408b24f6cecdd3a519f3bd456843be4156130d48 0"�[0m
-�[33m[tester::#CF8] [client] �[0m�[92m✔︎ Received "FULLRESYNC 408b24f6cecdd3a519f3bd456843be4156130d48 0"�[0m
+�[33m[tester::#CF8] [client] �[0m�[36mReceived bytes: "+FULLRESYNC f48bfe3272022e9750a3f9ddbf739624b8479deb 0\r\n"�[0m
+�[33m[tester::#CF8] [client] �[0m�[36mReceived RESP simple string: "FULLRESYNC f48bfe3272022e9750a3f9ddbf739624b8479deb 0"�[0m
+�[33m[tester::#CF8] [client] �[0m�[92m✔︎ Received "FULLRESYNC f48bfe3272022e9750a3f9ddbf739624b8479deb 0"�[0m
�[33m[tester::#CF8] [client] �[0m�[36mReading RDB file...�[0m
-�[33m[tester::#CF8] [client] �[0m�[36mReceived bytes: "$171\r\nREDIS0012\xfa\tredis-ver\x058.4.2\xfa\nredis-bits\xc0@\xfa\x05ctime\xc2ڎ\xb3i\xfa\bused-mem\u0098\r\f\x00\xfa\x0erepl-stream-db\xc0\x00\xfa\arepl-id(408b24f6cecdd3a519f3bd456843be4156130d48\xfa\vrepl-offset\xc0\x00\xfa\baof-base\xc0\x00\xff5\xc5\x1f\xad\x88\x11\xec\xfc"�[0m
+�[33m[tester::#CF8] [client] �[0m�[36mReceived bytes: "$171\r\nREDIS0012\xfa\tredis-ver\x058.2.5\xfa\nredis-bits\xc0@\xfa\x05ctime\xc2\xebm\xd2i\xfa\bused-mem\xc2@\x96\r\x00\xfa\x0erepl-stream-db\xc0\x00\xfa\arepl-id(f48bfe3272022e9750a3f9ddbf739624b8479deb\xfa\vrepl-offset\xc0\x00\xfa\baof-base\xc0\x00\xffʧ|\x96Z2U\xb2"�[0m
�[33m[tester::#CF8] [client] �[0m�[92mReceived RDB file�[0m
�[33m[tester::#CF8] �[0m�[92mTest passed.�[0m
�[33m[tester::#CF8] �[0m�[36mTerminating program�[0m
@@ -247,8 +247,8 @@
�[33m[tester::#ZN8] �[0m�[94mRunning tests for Stage #ZN8 (zn8)�[0m
�[33m[tester::#ZN8] �[0m�[94m$ ./spawn_redis_server.sh --port 6379�[0m
-�[33m[tester::#ZN8] [handshake] [client] �[0m�[36mConnected (port 35418 -> port 6379)�[0m
-�[33m[tester::#ZN8] [handshake] [replica] �[0m�[36mConnected (port 35422 -> port 6379)�[0m
+�[33m[tester::#ZN8] [handshake] [client] �[0m�[36mConnected (port 60012 -> port 6379)�[0m
+�[33m[tester::#ZN8] [handshake] [replica] �[0m�[36mConnected (port 60013 -> port 6379)�[0m
�[33m[tester::#ZN8] [handshake] [replica] �[0m�[94m$ redis-cli PING�[0m
�[33m[tester::#ZN8] [handshake] [replica] �[0m�[36mSent bytes: "*1\r\n$4\r\nPING\r\n"�[0m
�[33m[tester::#ZN8] [handshake] [replica] �[0m�[36mReceived bytes: "+PONG\r\n"�[0m
@@ -266,11 +266,11 @@
�[33m[tester::#ZN8] [handshake] [replica] �[0m�[92m✔︎ Received "OK"�[0m
�[33m[tester::#ZN8] [handshake] [replica] �[0m�[94m> PSYNC ? -1�[0m
�[33m[tester::#ZN8] [handshake] [replica] �[0m�[36mSent bytes: "*3\r\n$5\r\nPSYNC\r\n$1\r\n?\r\n$2\r\n-1\r\n"�[0m
-�[33m[tester::#ZN8] [handshake] [replica] �[0m�[36mReceived bytes: "+FULLRESYNC 527b1d5abe8d8567b879e3e5bdf9ca9c42f4f7ca 0\r\n"�[0m
-�[33m[tester::#ZN8] [handshake] [replica] �[0m�[36mReceived RESP simple string: "FULLRESYNC 527b1d5abe8d8567b879e3e5bdf9ca9c42f4f7ca 0"�[0m
-�[33m[tester::#ZN8] [handshake] [replica] �[0m�[92m✔︎ Received "FULLRESYNC 527b1d5abe8d8567b879e3e5bdf9ca9c42f4f7ca 0"�[0m
+�[33m[tester::#ZN8] [handshake] [replica] �[0m�[36mReceived bytes: "+FULLRESYNC bd582ee907f75890f46eec7b01894ece8e3daa9d 0\r\n"�[0m
+�[33m[tester::#ZN8] [handshake] [replica] �[0m�[36mReceived RESP simple string: "FULLRESYNC bd582ee907f75890f46eec7b01894ece8e3daa9d 0"�[0m
+�[33m[tester::#ZN8] [handshake] [replica] �[0m�[92m✔︎ Received "FULLRESYNC bd582ee907f75890f46eec7b01894ece8e3daa9d 0"�[0m
�[33m[tester::#ZN8] [handshake] [replica] �[0m�[36mReading RDB file...�[0m
-�[33m[tester::#ZN8] [handshake] [replica] �[0m�[36mReceived bytes: "$171\r\nREDIS0012\xfa\tredis-ver\x058.4.2\xfa\nredis-bits\xc0@\xfa\x05ctime\xc2ڎ\xb3i\xfa\bused-mem\xc2hS\f\x00\xfa\x0erepl-stream-db\xc0\x00\xfa\arepl-id(527b1d5abe8d8567b879e3e5bdf9ca9c42f4f7ca\xfa\vrepl-offset\xc0\x00\xfa\baof-base\xc0\x00\xff\xee\xac\v\xfa\xd8\u07b9\x02"�[0m
+�[33m[tester::#ZN8] [handshake] [replica] �[0m�[36mReceived bytes: "$171\r\nREDIS0012\xfa\tredis-ver\x058.2.5\xfa\nredis-bits\xc0@\xfa\x05ctime\xc2\xebm\xd2i\xfa\bused-mem\xc2\xc0\xdb\r\x00\xfa\x0erepl-stream-db\xc0\x00\xfa\arepl-id(bd582ee907f75890f46eec7b01894ece8e3daa9d\xfa\vrepl-offset\xc0\x00\xfa\baof-base\xc0\x00\xff\x82\ndF\x13}F\xad"�[0m
�[33m[tester::#ZN8] [handshake] [replica] �[0m�[92mReceived RDB file�[0m
�[33m[tester::#ZN8] [test] [client] �[0m�[94m$ redis-cli SET foo 123�[0m
�[33m[tester::#ZN8] [test] [client] �[0m�[36mSent bytes: "*3\r\n$3\r\nSET\r\n$3\r\nfoo\r\n$3\r\n123\r\n"�[0m
@@ -308,7 +308,7 @@
�[33m[tester::#HD5] �[0m�[94mRunning tests for Stage #HD5 (hd5)�[0m
�[33m[tester::#HD5] �[0m�[94m$ ./spawn_redis_server.sh --port 6379�[0m
-�[33m[tester::#HD5] [handshake] [client] �[0m�[36mConnected (port 35444 -> port 6379)�[0m
+�[33m[tester::#HD5] [handshake] [client] �[0m�[36mConnected (port 60016 -> port 6379)�[0m
�[33m[tester::#HD5] [setup] �[0m�[94mCreating 3 replicas:�[0m
�[33m[tester::#HD5] [setup] �[0m�[94m1. replica@6380 (Listening port = 6380)�[0m
�[33m[tester::#HD5] [setup] �[0m�[94m2. replica@6381 (Listening port = 6381)�[0m
@@ -331,11 +331,11 @@
�[33m[tester::#HD5] [handshake] [replica@6380] �[0m�[92m✔︎ Received "OK"�[0m
�[33m[tester::#HD5] [handshake] [replica@6380] �[0m�[94m> PSYNC ? -1�[0m
�[33m[tester::#HD5] [handshake] [replica@6380] �[0m�[36mSent bytes: "*3\r\n$5\r\nPSYNC\r\n$1\r\n?\r\n$2\r\n-1\r\n"�[0m
-�[33m[tester::#HD5] [handshake] [replica@6380] �[0m�[36mReceived bytes: "+FULLRESYNC f76a066e02375b6e3cf726f32765c538f70a3b0d 0\r\n"�[0m
-�[33m[tester::#HD5] [handshake] [replica@6380] �[0m�[36mReceived RESP simple string: "FULLRESYNC f76a066e02375b6e3cf726f32765c538f70a3b0d 0"�[0m
-�[33m[tester::#HD5] [handshake] [replica@6380] �[0m�[92m✔︎ Received "FULLRESYNC f76a066e02375b6e3cf726f32765c538f70a3b0d 0"�[0m
+�[33m[tester::#HD5] [handshake] [replica@6380] �[0m�[36mReceived bytes: "+FULLRESYNC 10490c28b153efeb837463f01275025e89f409ea 0\r\n"�[0m
+�[33m[tester::#HD5] [handshake] [replica@6380] �[0m�[36mReceived RESP simple string: "FULLRESYNC 10490c28b153efeb837463f01275025e89f409ea 0"�[0m
+�[33m[tester::#HD5] [handshake] [replica@6380] �[0m�[92m✔︎ Received "FULLRESYNC 10490c28b153efeb837463f01275025e89f409ea 0"�[0m
�[33m[tester::#HD5] [handshake] [replica@6380] �[0m�[36mReading RDB file...�[0m
-�[33m[tester::#HD5] [handshake] [replica@6380] �[0m�[36mReceived bytes: "$171\r\nREDIS0012\xfa\tredis-ver\x058.4.2\xfa\nredis-bits\xc0@\xfa\x05ctime\xc2\u070e\xb3i\xfa\bused-mem\xc2hS\f\x00\xfa\x0erepl-stream-db\xc0\x00\xfa\arepl-id(f76a066e02375b6e3cf726f32765c538f70a3b0d\xfa\vrepl-offset\xc0\x00\xfa\baof-base\xc0\x00\xffHP\x84\xdc\x03\xddp\xf1"�[0m
+�[33m[tester::#HD5] [handshake] [replica@6380] �[0m�[36mReceived bytes: "$171\r\nREDIS0012\xfa\tredis-ver\x058.2.5\xfa\nredis-bits\xc0@\xfa\x05ctime\xc2\xeem\xd2i\xfa\bused-mem\xc2\xc0\xdb\r\x00\xfa\x0erepl-stream-db\xc0\x00\xfa\arepl-id(10490c28b153efeb837463f01275025e89f409ea\xfa\vrepl-offset\xc0\x00\xfa\baof-base\xc0\x00\xff\xf5j\x19\xd6䝿R"�[0m
�[33m[tester::#HD5] [handshake] [replica@6380] �[0m�[92mReceived RDB file�[0m
�[33m[tester::#HD5] �[0m�[36mCreating replica@6381�[0m
�[33m[tester::#HD5] [handshake] [replica@6381] �[0m�[94m$ redis-cli PING�[0m
@@ -355,11 +355,11 @@
�[33m[tester::#HD5] [handshake] [replica@6381] �[0m�[92m✔︎ Received "OK"�[0m
�[33m[tester::#HD5] [handshake] [replica@6381] �[0m�[94m> PSYNC ? -1�[0m
�[33m[tester::#HD5] [handshake] [replica@6381] �[0m�[36mSent bytes: "*3\r\n$5\r\nPSYNC\r\n$1\r\n?\r\n$2\r\n-1\r\n"�[0m
-�[33m[tester::#HD5] [handshake] [replica@6381] �[0m�[36mReceived bytes: "+FULLRESYNC f76a066e02375b6e3cf726f32765c538f70a3b0d 0\r\n"�[0m
-�[33m[tester::#HD5] [handshake] [replica@6381] �[0m�[36mReceived RESP simple string: "FULLRESYNC f76a066e02375b6e3cf726f32765c538f70a3b0d 0"�[0m
-�[33m[tester::#HD5] [handshake] [replica@6381] �[0m�[92m✔︎ Received "FULLRESYNC f76a066e02375b6e3cf726f32765c538f70a3b0d 0"�[0m
+�[33m[tester::#HD5] [handshake] [replica@6381] �[0m�[36mReceived bytes: "+FULLRESYNC 10490c28b153efeb837463f01275025e89f409ea 0\r\n"�[0m
+�[33m[tester::#HD5] [handshake] [replica@6381] �[0m�[36mReceived RESP simple string: "FULLRESYNC 10490c28b153efeb837463f01275025e89f409ea 0"�[0m
+�[33m[tester::#HD5] [handshake] [replica@6381] �[0m�[92m✔︎ Received "FULLRESYNC 10490c28b153efeb837463f01275025e89f409ea 0"�[0m
�[33m[tester::#HD5] [handshake] [replica@6381] �[0m�[36mReading RDB file...�[0m
-�[33m[tester::#HD5] [handshake] [replica@6381] �[0m�[36mReceived bytes: "$171\r\nREDIS0012\xfa\tredis-ver\x058.4.2\xfa\nredis-bits\xc0@\xfa\x05ctime\xc2\u070e\xb3i\xfa\bused-mem°\xf9\f\x00\xfa\x0erepl-stream-db\xc0\x00\xfa\arepl-id(f76a066e02375b6e3cf726f32765c538f70a3b0d\xfa\vrepl-offset\xc0\x00\xfa\baof-base\xc0\x00\xff\xe5\x14\xa1\xfbG\x8b?\xa0"�[0m
+�[33m[tester::#HD5] [handshake] [replica@6381] �[0m�[36mReceived bytes: "$171\r\nREDIS0012\xfa\tredis-ver\x058.2.5\xfa\nredis-bits\xc0@\xfa\x05ctime\xc2\xeem\xd2i\xfa\bused-mem\xc2Ё\x0e\x00\xfa\x0erepl-stream-db\xc0\x00\xfa\arepl-id(10490c28b153efeb837463f01275025e89f409ea\xfa\vrepl-offset\xc0\x00\xfa\baof-base\xc0\x00\xff\xd9?愨\xec\x02\xd4"�[0m
�[33m[tester::#HD5] [handshake] [replica@6381] �[0m�[92mReceived RDB file�[0m
�[33m[tester::#HD5] �[0m�[36mCreating replica@6382�[0m
�[33m[tester::#HD5] [handshake] [replica@6382] �[0m�[94m$ redis-cli PING�[0m
@@ -379,11 +379,11 @@
�[33m[tester::#HD5] [handshake] [replica@6382] �[0m�[92m✔︎ Received "OK"�[0m
�[33m[tester::#HD5] [handshake] [replica@6382] �[0m�[94m> PSYNC ? -1�[0m
�[33m[tester::#HD5] [handshake] [replica@6382] �[0m�[36mSent bytes: "*3\r\n$5\r\nPSYNC\r\n$1\r\n?\r\n$2\r\n-1\r\n"�[0m
-�[33m[tester::#HD5] [handshake] [replica@6382] �[0m�[36mReceived bytes: "+FULLRESYNC f76a066e02375b6e3cf726f32765c538f70a3b0d 0\r\n"�[0m
-�[33m[tester::#HD5] [handshake] [replica@6382] �[0m�[36mReceived RESP simple string: "FULLRESYNC f76a066e02375b6e3cf726f32765c538f70a3b0d 0"�[0m
-�[33m[tester::#HD5] [handshake] [replica@6382] �[0m�[92m✔︎ Received "FULLRESYNC f76a066e02375b6e3cf726f32765c538f70a3b0d 0"�[0m
+�[33m[tester::#HD5] [handshake] [replica@6382] �[0m�[36mReceived bytes: "+FULLRESYNC 10490c28b153efeb837463f01275025e89f409ea 0\r\n"�[0m
+�[33m[tester::#HD5] [handshake] [replica@6382] �[0m�[36mReceived RESP simple string: "FULLRESYNC 10490c28b153efeb837463f01275025e89f409ea 0"�[0m
+�[33m[tester::#HD5] [handshake] [replica@6382] �[0m�[92m✔︎ Received "FULLRESYNC 10490c28b153efeb837463f01275025e89f409ea 0"�[0m
�[33m[tester::#HD5] [handshake] [replica@6382] �[0m�[36mReading RDB file...�[0m
-�[33m[tester::#HD5] [handshake] [replica@6382] �[0m�[36mReceived bytes: "$171\r\nREDIS0012\xfa\tredis-ver\x058.4.2\xfa\nredis-bits\xc0@\xfa\x05ctime\xc2\u070e\xb3i\xfa\bused-mem\u0088\xc7\f\x00\xfa\x0erepl-stream-db\xc0\x00\xfa\arepl-id(f76a066e02375b6e3cf726f32765c538f70a3b0d\xfa\vrepl-offset\xc0\x00\xfa\baof-base\xc0\x00\xff\xc1\x95\xe3՛\xd4z\xb8"�[0m
+�[33m[tester::#HD5] [handshake] [replica@6382] �[0m�[36mReceived bytes: "$171\r\nREDIS0012\xfa\tredis-ver\x058.2.5\xfa\nredis-bits\xc0@\xfa\x05ctime\xc2\xeem\xd2i\xfa\bused-mem\u0080O\x0e\x00\xfa\x0erepl-stream-db\xc0\x00\xfa\arepl-id(10490c28b153efeb837463f01275025e89f409ea\xfa\vrepl-offset\xc0\x00\xfa\baof-base\xc0\x00\xff\xa3\xcfx-kKG\x1e"�[0m
�[33m[tester::#HD5] [handshake] [replica@6382] �[0m�[92mReceived RDB file�[0m
�[33m[tester::#HD5] [test] [client] �[0m�[94m$ redis-cli SET foo 123�[0m
�[33m[tester::#HD5] [test] [client] �[0m�[36mSent bytes: "*3\r\n$3\r\nSET\r\n$3\r\nfoo\r\n$3\r\n123\r\n"�[0m
@@ -503,7 +503,7 @@
�[33m[tester::#YG4] [handshake] [master] �[0m�[36mSending RDB file...�[0m
�[33m[tester::#YG4] [handshake] [master] �[0m�[36mSent bytes: "$88\r\nREDIS0011\xfa\tredis-ver\x057.2.0\xfa\nredis-bits\xc0@\xfa\x05ctime\xc2m\b\xbce\xfa\bused-mem°\xc4\x10\x00\xfa\baof-base\xc0\x00\xff\xf0n;\xfe\xc0\xffZ\xa2"�[0m
�[33m[tester::#YG4] [handshake] [master] �[0m�[92mSent RDB file.�[0m
-�[33m[tester::#YG4] [propagation] [client] �[0m�[36mConnected (port 46274 -> port 6380)�[0m
+�[33m[tester::#YG4] [propagation] [client] �[0m�[36mConnected (port 60021 -> port 6380)�[0m
�[33m[tester::#YG4] [propagation] [master] �[0m�[94m> SET foo 123�[0m
�[33m[tester::#YG4] [propagation] [master] �[0m�[36mSent bytes: "*3\r\n$3\r\nSET\r\n$3\r\nfoo\r\n$3\r\n123\r\n"�[0m
�[33m[tester::#YG4] [propagation] [master] �[0m�[94m> SET bar 456�[0m
@@ -511,7 +511,7 @@
�[33m[tester::#YG4] [propagation] [master] �[0m�[94m> SET baz 789�[0m
�[33m[tester::#YG4] [propagation] [master] �[0m�[36mSent bytes: "*3\r\n$3\r\nSET\r\n$3\r\nbaz\r\n$3\r\n789\r\n"�[0m
�[33m[tester::#YG4] [test] �[0m�[94mGetting key foo�[0m
-�[33m[tester::#YG4] [test] [client] �[0m�[94m$ redis-cli GET foo�[0m
+�[33m[tester::#YG4] [test] [client] �[0m�[94m$ redis-cli -p 6380 GET foo�[0m
�[33m[tester::#YG4] [test] [client] �[0m�[36mSent bytes: "*2\r\n$3\r\nGET\r\n$3\r\nfoo\r\n"�[0m
�[33m[tester::#YG4] [test] [client] �[0m�[36mReceived bytes: "$3\r\n123\r\n"�[0m
�[33m[tester::#YG4] [test] [client] �[0m�[36mReceived RESP bulk string: "123"�[0m
@@ -676,7 +676,7 @@
�[33m[tester::#MY8] �[0m�[94mRunning tests for Stage #MY8 (my8)�[0m
�[33m[tester::#MY8] �[0m�[94m$ ./spawn_redis_server.sh --port 6379�[0m
-�[33m[tester::#MY8] [client] �[0m�[36mConnected (port 35492 -> port 6379)�[0m
+�[33m[tester::#MY8] [client] �[0m�[36mConnected (port 60029 -> port 6379)�[0m
�[33m[tester::#MY8] [client] �[0m�[94m$ redis-cli WAIT 0 60000�[0m
�[33m[tester::#MY8] [client] �[0m�[36mSent bytes: "*3\r\n$4\r\nWAIT\r\n$1\r\n0\r\n$5\r\n60000\r\n"�[0m
�[33m[tester::#MY8] [client] �[0m�[36mReceived bytes: ":0\r\n"�[0m
@@ -713,11 +713,11 @@
�[33m[tester::#TU8] [handshake] [replica@6380] �[0m�[92m✔︎ Received "OK"�[0m
�[33m[tester::#TU8] [handshake] [replica@6380] �[0m�[94m> PSYNC ? -1�[0m
�[33m[tester::#TU8] [handshake] [replica@6380] �[0m�[36mSent bytes: "*3\r\n$5\r\nPSYNC\r\n$1\r\n?\r\n$2\r\n-1\r\n"�[0m
-�[33m[tester::#TU8] [handshake] [replica@6380] �[0m�[36mReceived bytes: "+FULLRESYNC 30ca7599917e5644227619c7f173d40cd7b8bbf5 0\r\n"�[0m
-�[33m[tester::#TU8] [handshake] [replica@6380] �[0m�[36mReceived RESP simple string: "FULLRESYNC 30ca7599917e5644227619c7f173d40cd7b8bbf5 0"�[0m
-�[33m[tester::#TU8] [handshake] [replica@6380] �[0m�[92m✔︎ Received "FULLRESYNC 30ca7599917e5644227619c7f173d40cd7b8bbf5 0"�[0m
+�[33m[tester::#TU8] [handshake] [replica@6380] �[0m�[36mReceived bytes: "+FULLRESYNC 9ba6fc890258a2d66d7592a94ee313451b4de26d 0\r\n"�[0m
+�[33m[tester::#TU8] [handshake] [replica@6380] �[0m�[36mReceived RESP simple string: "FULLRESYNC 9ba6fc890258a2d66d7592a94ee313451b4de26d 0"�[0m
+�[33m[tester::#TU8] [handshake] [replica@6380] �[0m�[92m✔︎ Received "FULLRESYNC 9ba6fc890258a2d66d7592a94ee313451b4de26d 0"�[0m
�[33m[tester::#TU8] [handshake] [replica@6380] �[0m�[36mReading RDB file...�[0m
-�[33m[tester::#TU8] [handshake] [replica@6380] �[0m�[36mReceived bytes: "$171\r\nREDIS0012\xfa\tredis-ver\x058.4.2\xfa\nredis-bits\xc0@\xfa\x05ctime\xc2ݎ\xb3i\xfa\bused-mem\u0098\r\f\x00\xfa\x0erepl-stream-db\xc0\x00\xfa\arepl-id(30ca7599917e5644227619c7f173d40cd7b8bbf5\xfa\vrepl-offset\xc0\x00\xfa\baof-base\xc0\x00\xff\x05\xf0\x94\x1bKR1\x0e"�[0m
+�[33m[tester::#TU8] [handshake] [replica@6380] �[0m�[36mReceived bytes: "$171\r\nREDIS0012\xfa\tredis-ver\x058.2.5\xfa\nredis-bits\xc0@\xfa\x05ctime\xc2\xefm\xd2i\xfa\bused-mem\xc2@\x96\r\x00\xfa\x0erepl-stream-db\xc0\x00\xfa\arepl-id(9ba6fc890258a2d66d7592a94ee313451b4de26d\xfa\vrepl-offset\xc0\x00\xfa\baof-base\xc0\x00\xff\xf2<\x81hA~tE"�[0m
�[33m[tester::#TU8] [handshake] [replica@6380] �[0m�[92mReceived RDB file�[0m
�[33m[tester::#TU8] �[0m�[36mCreating replica@6381�[0m
�[33m[tester::#TU8] [handshake] [replica@6381] �[0m�[94m$ redis-cli PING�[0m
@@ -737,11 +737,11 @@
�[33m[tester::#TU8] [handshake] [replica@6381] �[0m�[92m✔︎ Received "OK"�[0m
�[33m[tester::#TU8] [handshake] [replica@6381] �[0m�[94m> PSYNC ? -1�[0m
�[33m[tester::#TU8] [handshake] [replica@6381] �[0m�[36mSent bytes: "*3\r\n$5\r\nPSYNC\r\n$1\r\n?\r\n$2\r\n-1\r\n"�[0m
-�[33m[tester::#TU8] [handshake] [replica@6381] �[0m�[36mReceived bytes: "+FULLRESYNC 30ca7599917e5644227619c7f173d40cd7b8bbf5 0\r\n"�[0m
-�[33m[tester::#TU8] [handshake] [replica@6381] �[0m�[36mReceived RESP simple string: "FULLRESYNC 30ca7599917e5644227619c7f173d40cd7b8bbf5 0"�[0m
-�[33m[tester::#TU8] [handshake] [replica@6381] �[0m�[92m✔︎ Received "FULLRESYNC 30ca7599917e5644227619c7f173d40cd7b8bbf5 0"�[0m
+�[33m[tester::#TU8] [handshake] [replica@6381] �[0m�[36mReceived bytes: "+FULLRESYNC 9ba6fc890258a2d66d7592a94ee313451b4de26d 0\r\n"�[0m
+�[33m[tester::#TU8] [handshake] [replica@6381] �[0m�[36mReceived RESP simple string: "FULLRESYNC 9ba6fc890258a2d66d7592a94ee313451b4de26d 0"�[0m
+�[33m[tester::#TU8] [handshake] [replica@6381] �[0m�[92m✔︎ Received "FULLRESYNC 9ba6fc890258a2d66d7592a94ee313451b4de26d 0"�[0m
�[33m[tester::#TU8] [handshake] [replica@6381] �[0m�[36mReading RDB file...�[0m
-�[33m[tester::#TU8] [handshake] [replica@6381] �[0m�[36mReceived bytes: "$171\r\nREDIS0012\xfa\tredis-ver\x058.4.2\xfa\nredis-bits\xc0@\xfa\x05ctime\xc2ݎ\xb3i\xfa\bused-mem\xc2\xf0\xb3\f\x00\xfa\x0erepl-stream-db\xc0\x00\xfa\arepl-id(30ca7599917e5644227619c7f173d40cd7b8bbf5\xfa\vrepl-offset\xc0\x00\xfa\baof-base\xc0\x00\xff\xdd\xc2\xcbMi\xe9\x97\x18"�[0m
+�[33m[tester::#TU8] [handshake] [replica@6381] �[0m�[36mReceived bytes: "$171\r\nREDIS0012\xfa\tredis-ver\x058.2.5\xfa\nredis-bits\xc0@\xfa\x05ctime\xc2\xefm\xd2i\xfa\bused-mem\xc2p<\x0e\x00\xfa\x0erepl-stream-db\xc0\x00\xfa\arepl-id(9ba6fc890258a2d66d7592a94ee313451b4de26d\xfa\vrepl-offset\xc0\x00\xfa\baof-base\xc0\x00\xff\xd1\xcf\x1aZ\x02\xbd\x9e?"�[0m
�[33m[tester::#TU8] [handshake] [replica@6381] �[0m�[92mReceived RDB file�[0m
�[33m[tester::#TU8] �[0m�[36mCreating replica@6382�[0m
�[33m[tester::#TU8] [handshake] [replica@6382] �[0m�[94m$ redis-cli PING�[0m
@@ -761,11 +761,11 @@
�[33m[tester::#TU8] [handshake] [replica@6382] �[0m�[92m✔︎ Received "OK"�[0m
�[33m[tester::#TU8] [handshake] [replica@6382] �[0m�[94m> PSYNC ? -1�[0m
�[33m[tester::#TU8] [handshake] [replica@6382] �[0m�[36mSent bytes: "*3\r\n$5\r\nPSYNC\r\n$1\r\n?\r\n$2\r\n-1\r\n"�[0m
-�[33m[tester::#TU8] [handshake] [replica@6382] �[0m�[36mReceived bytes: "+FULLRESYNC 30ca7599917e5644227619c7f173d40cd7b8bbf5 0\r\n"�[0m
-�[33m[tester::#TU8] [handshake] [replica@6382] �[0m�[36mReceived RESP simple string: "FULLRESYNC 30ca7599917e5644227619c7f173d40cd7b8bbf5 0"�[0m
-�[33m[tester::#TU8] [handshake] [replica@6382] �[0m�[92m✔︎ Received "FULLRESYNC 30ca7599917e5644227619c7f173d40cd7b8bbf5 0"�[0m
+�[33m[tester::#TU8] [handshake] [replica@6382] �[0m�[36mReceived bytes: "+FULLRESYNC 9ba6fc890258a2d66d7592a94ee313451b4de26d 0\r\n"�[0m
+�[33m[tester::#TU8] [handshake] [replica@6382] �[0m�[36mReceived RESP simple string: "FULLRESYNC 9ba6fc890258a2d66d7592a94ee313451b4de26d 0"�[0m
+�[33m[tester::#TU8] [handshake] [replica@6382] �[0m�[92m✔︎ Received "FULLRESYNC 9ba6fc890258a2d66d7592a94ee313451b4de26d 0"�[0m
�[33m[tester::#TU8] [handshake] [replica@6382] �[0m�[36mReading RDB file...�[0m
-�[33m[tester::#TU8] [handshake] [replica@6382] �[0m�[36mReceived bytes: "$171\r\nREDIS0012\xfa\tredis-ver\x058.4.2\xfa\nredis-bits\xc0@\xfa\x05ctime\xc2ݎ\xb3i\xfa\bused-mem\xc2Ƚ\f\x00\xfa\x0erepl-stream-db\xc0\x00\xfa\arepl-id(30ca7599917e5644227619c7f173d40cd7b8bbf5\xfa\vrepl-offset\xc0\x00\xfa\baof-base\xc0\x00\xff\xa8\xa8\xc1\x99ey\xc2u"�[0m
+�[33m[tester::#TU8] [handshake] [replica@6382] �[0m�[36mReceived bytes: "$171\r\nREDIS0012\xfa\tredis-ver\x058.2.5\xfa\nredis-bits\xc0@\xfa\x05ctime\xc2\xefm\xd2i\xfa\bused-mem\xc2\x10F\x0e\x00\xfa\x0erepl-stream-db\xc0\x00\xfa\arepl-id(9ba6fc890258a2d66d7592a94ee313451b4de26d\xfa\vrepl-offset\xc0\x00\xfa\baof-base\xc0\x00\xff\xfc\xff-1y\xc4%U"�[0m
�[33m[tester::#TU8] [handshake] [replica@6382] �[0m�[92mReceived RDB file�[0m
�[33m[tester::#TU8] �[0m�[36mCreating replica@6383�[0m
�[33m[tester::#TU8] [handshake] [replica@6383] �[0m�[94m$ redis-cli PING�[0m
@@ -785,11 +785,11 @@
�[33m[tester::#TU8] [handshake] [replica@6383] �[0m�[92m✔︎ Received "OK"�[0m
�[33m[tester::#TU8] [handshake] [replica@6383] �[0m�[94m> PSYNC ? -1�[0m
�[33m[tester::#TU8] [handshake] [replica@6383] �[0m�[36mSent bytes: "*3\r\n$5\r\nPSYNC\r\n$1\r\n?\r\n$2\r\n-1\r\n"�[0m
-�[33m[tester::#TU8] [handshake] [replica@6383] �[0m�[36mReceived bytes: "+FULLRESYNC 30ca7599917e5644227619c7f173d40cd7b8bbf5 0\r\n"�[0m
-�[33m[tester::#TU8] [handshake] [replica@6383] �[0m�[36mReceived RESP simple string: "FULLRESYNC 30ca7599917e5644227619c7f173d40cd7b8bbf5 0"�[0m
-�[33m[tester::#TU8] [handshake] [replica@6383] �[0m�[92m✔︎ Received "FULLRESYNC 30ca7599917e5644227619c7f173d40cd7b8bbf5 0"�[0m
+�[33m[tester::#TU8] [handshake] [replica@6383] �[0m�[36mReceived bytes: "+FULLRESYNC 9ba6fc890258a2d66d7592a94ee313451b4de26d 0\r\n"�[0m
+�[33m[tester::#TU8] [handshake] [replica@6383] �[0m�[36mReceived RESP simple string: "FULLRESYNC 9ba6fc890258a2d66d7592a94ee313451b4de26d 0"�[0m
+�[33m[tester::#TU8] [handshake] [replica@6383] �[0m�[92m✔︎ Received "FULLRESYNC 9ba6fc890258a2d66d7592a94ee313451b4de26d 0"�[0m
�[33m[tester::#TU8] [handshake] [replica@6383] �[0m�[36mReading RDB file...�[0m
-�[33m[tester::#TU8] [handshake] [replica@6383] �[0m�[36mReceived bytes: "$171\r\nREDIS0012\xfa\tredis-ver\x058.4.2\xfa\nredis-bits\xc0@\xfa\x05ctime\xc2ݎ\xb3i\xfa\bused-mem\u00a0\xc7\f\x00\xfa\x0erepl-stream-db\xc0\x00\xfa\arepl-id(30ca7599917e5644227619c7f173d40cd7b8bbf5\xfa\vrepl-offset\xc0\x00\xfa\baof-base\xc0\x00\xff6\xa9~B\x90\x83\x94\xdd"�[0m
+�[33m[tester::#TU8] [handshake] [replica@6383] �[0m�[36mReceived bytes: "$171\r\nREDIS0012\xfa\tredis-ver\x058.2.5\xfa\nredis-bits\xc0@\xfa\x05ctime\xc2\xefm\xd2i\xfa\bused-mem\xc2\xc0O\x0e\x00\xfa\x0erepl-stream-db\xc0\x00\xfa\arepl-id(9ba6fc890258a2d66d7592a94ee313451b4de26d\xfa\vrepl-offset\xc0\x00\xfa\baof-base\xc0\x00\xff[\x83\xbfd\xc4d\xe5\xa9"�[0m
�[33m[tester::#TU8] [handshake] [replica@6383] �[0m�[92mReceived RDB file�[0m
�[33m[tester::#TU8] �[0m�[36mCreating replica@6384�[0m
�[33m[tester::#TU8] [handshake] [replica@6384] �[0m�[94m$ redis-cli PING�[0m
@@ -809,13 +809,13 @@
�[33m[tester::#TU8] [handshake] [replica@6384] �[0m�[92m✔︎ Received "OK"�[0m
�[33m[tester::#TU8] [handshake] [replica@6384] �[0m�[94m> PSYNC ? -1�[0m
�[33m[tester::#TU8] [handshake] [replica@6384] �[0m�[36mSent bytes: "*3\r\n$5\r\nPSYNC\r\n$1\r\n?\r\n$2\r\n-1\r\n"�[0m
-�[33m[tester::#TU8] [handshake] [replica@6384] �[0m�[36mReceived bytes: "+FULLRESYNC 30ca7599917e5644227619c7f173d40cd7b8bbf5 0\r\n"�[0m
-�[33m[tester::#TU8] [handshake] [replica@6384] �[0m�[36mReceived RESP simple string: "FULLRESYNC 30ca7599917e5644227619c7f173d40cd7b8bbf5 0"�[0m
-�[33m[tester::#TU8] [handshake] [replica@6384] �[0m�[92m✔︎ Received "FULLRESYNC 30ca7599917e5644227619c7f173d40cd7b8bbf5 0"�[0m
+�[33m[tester::#TU8] [handshake] [replica@6384] �[0m�[36mReceived bytes: "+FULLRESYNC 9ba6fc890258a2d66d7592a94ee313451b4de26d 0\r\n"�[0m
+�[33m[tester::#TU8] [handshake] [replica@6384] �[0m�[36mReceived RESP simple string: "FULLRESYNC 9ba6fc890258a2d66d7592a94ee313451b4de26d 0"�[0m
+�[33m[tester::#TU8] [handshake] [replica@6384] �[0m�[92m✔︎ Received "FULLRESYNC 9ba6fc890258a2d66d7592a94ee313451b4de26d 0"�[0m
�[33m[tester::#TU8] [handshake] [replica@6384] �[0m�[36mReading RDB file...�[0m
-�[33m[tester::#TU8] [handshake] [replica@6384] �[0m�[36mReceived bytes: "$171\r\nREDIS0012\xfa\tredis-ver\x058.4.2\xfa\nredis-bits\xc0@\xfa\x05ctime\xc2ގ\xb3i\xfa\bused-mem\u0080\xd1\f\x00\xfa\x0erepl-stream-db\xc0\x00\xfa\arepl-id(30ca7599917e5644227619c7f173d40cd7b8bbf5\xfa\vrepl-offset\xc0\x00\xfa\baof-base\xc0\x00\xff\x943j:ñ(:"�[0m
+�[33m[tester::#TU8] [handshake] [replica@6384] �[0m�[36mReceived bytes: "$171\r\nREDIS0012\xfa\tredis-ver\x058.2.5\xfa\nredis-bits\xc0@\xfa\x05ctime\xc2\xefm\xd2i\xfa\bused-mem\xc2pY\x0e\x00\xfa\x0erepl-stream-db\xc0\x00\xfa\arepl-id(9ba6fc890258a2d66d7592a94ee313451b4de26d\xfa\vrepl-offset\xc0\x00\xfa\baof-base\xc0\x00\xff/:\xa4'\xe86U["�[0m
�[33m[tester::#TU8] [handshake] [replica@6384] �[0m�[92mReceived RDB file�[0m
-�[33m[tester::#TU8] [client] �[0m�[36mConnected (port 35550 -> port 6379)�[0m
+�[33m[tester::#TU8] [client] �[0m�[36mConnected (port 60037 -> port 6379)�[0m
�[33m[tester::#TU8] [test] [client] �[0m�[94m$ redis-cli WAIT 3 500�[0m
�[33m[tester::#TU8] [test] [client] �[0m�[36mSent bytes: "*3\r\n$4\r\nWAIT\r\n$1\r\n3\r\n$3\r\n500\r\n"�[0m
�[33m[tester::#TU8] [test] [client] �[0m�[36mReceived bytes: ":5\r\n"�[0m
@@ -871,11 +871,11 @@
�[33m[tester::#NA2] [handshake] [replica@6380] �[0m�[92m✔︎ Received "OK"�[0m
�[33m[tester::#NA2] [handshake] [replica@6380] �[0m�[94m> PSYNC ? -1�[0m
�[33m[tester::#NA2] [handshake] [replica@6380] �[0m�[36mSent bytes: "*3\r\n$5\r\nPSYNC\r\n$1\r\n?\r\n$2\r\n-1\r\n"�[0m
-�[33m[tester::#NA2] [handshake] [replica@6380] �[0m�[36mReceived bytes: "+FULLRESYNC a610f5ed9d3283a69f2781c07d9c931daffece00 0\r\n"�[0m
-�[33m[tester::#NA2] [handshake] [replica@6380] �[0m�[36mReceived RESP simple string: "FULLRESYNC a610f5ed9d3283a69f2781c07d9c931daffece00 0"�[0m
-�[33m[tester::#NA2] [handshake] [replica@6380] �[0m�[92m✔︎ Received "FULLRESYNC a610f5ed9d3283a69f2781c07d9c931daffece00 0"�[0m
+�[33m[tester::#NA2] [handshake] [replica@6380] �[0m�[36mReceived bytes: "+FULLRESYNC 5519367077abcc5829e9a5d9817c5ddd2c3b6ac1 0\r\n"�[0m
+�[33m[tester::#NA2] [handshake] [replica@6380] �[0m�[36mReceived RESP simple string: "FULLRESYNC 5519367077abcc5829e9a5d9817c5ddd2c3b6ac1 0"�[0m
+�[33m[tester::#NA2] [handshake] [replica@6380] �[0m�[92m✔︎ Received "FULLRESYNC 5519367077abcc5829e9a5d9817c5ddd2c3b6ac1 0"�[0m
�[33m[tester::#NA2] [handshake] [replica@6380] �[0m�[36mReading RDB file...�[0m
-�[33m[tester::#NA2] [handshake] [replica@6380] �[0m�[36mReceived bytes: "$171\r\nREDIS0012\xfa\tredis-ver\x058.4.2\xfa\nredis-bits\xc0@\xfa\x05ctime\xc2ߎ\xb3i\xfa\bused-mem\u0098\r\f\x00\xfa\x0erepl-stream-db\xc0\x00\xfa\arepl-id(a610f5ed9d3283a69f2781c07d9c931daffece00\xfa\vrepl-offset\xc0\x00\xfa\baof-base\xc0\x00\xff\x8d\xc4*n\x03ҝ\x01"�[0m
+�[33m[tester::#NA2] [handshake] [replica@6380] �[0m�[36mReceived bytes: "$171\r\nREDIS0012\xfa\tredis-ver\x058.2.5\xfa\nredis-bits\xc0@\xfa\x05ctime\xc2\xf1m\xd2i\xfa\bused-mem\xc2@\x96\r\x00\xfa\x0erepl-stream-db\xc0\x00\xfa\arepl-id(5519367077abcc5829e9a5d9817c5ddd2c3b6ac1\xfa\vrepl-offset\xc0\x00\xfa\baof-base\xc0\x00\xffW\xef\xf2\n\x19d\xe4\xe7"�[0m
�[33m[tester::#NA2] [handshake] [replica@6380] �[0m�[92mReceived RDB file�[0m
�[33m[tester::#NA2] �[0m�[36mCreating replica@6381�[0m
�[33m[tester::#NA2] [handshake] [replica@6381] �[0m�[94m$ redis-cli PING�[0m
@@ -895,11 +895,11 @@
�[33m[tester::#NA2] [handshake] [replica@6381] �[0m�[92m✔︎ Received "OK"�[0m
�[33m[tester::#NA2] [handshake] [replica@6381] �[0m�[94m> PSYNC ? -1�[0m
�[33m[tester::#NA2] [handshake] [replica@6381] �[0m�[36mSent bytes: "*3\r\n$5\r\nPSYNC\r\n$1\r\n?\r\n$2\r\n-1\r\n"�[0m
-�[33m[tester::#NA2] [handshake] [replica@6381] �[0m�[36mReceived bytes: "+FULLRESYNC a610f5ed9d3283a69f2781c07d9c931daffece00 0\r\n"�[0m
-�[33m[tester::#NA2] [handshake] [replica@6381] �[0m�[36mReceived RESP simple string: "FULLRESYNC a610f5ed9d3283a69f2781c07d9c931daffece00 0"�[0m
-�[33m[tester::#NA2] [handshake] [replica@6381] �[0m�[92m✔︎ Received "FULLRESYNC a610f5ed9d3283a69f2781c07d9c931daffece00 0"�[0m
+�[33m[tester::#NA2] [handshake] [replica@6381] �[0m�[36mReceived bytes: "+FULLRESYNC 5519367077abcc5829e9a5d9817c5ddd2c3b6ac1 0\r\n"�[0m
+�[33m[tester::#NA2] [handshake] [replica@6381] �[0m�[36mReceived RESP simple string: "FULLRESYNC 5519367077abcc5829e9a5d9817c5ddd2c3b6ac1 0"�[0m
+�[33m[tester::#NA2] [handshake] [replica@6381] �[0m�[92m✔︎ Received "FULLRESYNC 5519367077abcc5829e9a5d9817c5ddd2c3b6ac1 0"�[0m
�[33m[tester::#NA2] [handshake] [replica@6381] �[0m�[36mReading RDB file...�[0m
-�[33m[tester::#NA2] [handshake] [replica@6381] �[0m�[36mReceived bytes: "$171\r\nREDIS0012\xfa\tredis-ver\x058.4.2\xfa\nredis-bits\xc0@\xfa\x05ctime\xc2ߎ\xb3i\xfa\bused-mem\xc2\xf0\xb3\f\x00\xfa\x0erepl-stream-db\xc0\x00\xfa\arepl-id(a610f5ed9d3283a69f2781c07d9c931daffece00\xfa\vrepl-offset\xc0\x00\xfa\baof-base\xc0\x00\xffU\xf6u8!i;\x17"�[0m
+�[33m[tester::#NA2] [handshake] [replica@6381] �[0m�[36mReceived bytes: "$171\r\nREDIS0012\xfa\tredis-ver\x058.2.5\xfa\nredis-bits\xc0@\xfa\x05ctime\xc2\xf1m\xd2i\xfa\bused-mem\xc2p<\x0e\x00\xfa\x0erepl-stream-db\xc0\x00\xfa\arepl-id(5519367077abcc5829e9a5d9817c5ddd2c3b6ac1\xfa\vrepl-offset\xc0\x00\xfa\baof-base\xc0\x00\xfft\x1ci8Z\xa7\x0e\x9d"�[0m
�[33m[tester::#NA2] [handshake] [replica@6381] �[0m�[92mReceived RDB file�[0m
�[33m[tester::#NA2] �[0m�[36mCreating replica@6382�[0m
�[33m[tester::#NA2] [handshake] [replica@6382] �[0m�[94m$ redis-cli PING�[0m
@@ -919,11 +919,11 @@
�[33m[tester::#NA2] [handshake] [replica@6382] �[0m�[92m✔︎ Received "OK"�[0m
�[33m[tester::#NA2] [handshake] [replica@6382] �[0m�[94m> PSYNC ? -1�[0m
�[33m[tester::#NA2] [handshake] [replica@6382] �[0m�[36mSent bytes: "*3\r\n$5\r\nPSYNC\r\n$1\r\n?\r\n$2\r\n-1\r\n"�[0m
-�[33m[tester::#NA2] [handshake] [replica@6382] �[0m�[36mReceived bytes: "+FULLRESYNC a610f5ed9d3283a69f2781c07d9c931daffece00 0\r\n"�[0m
-�[33m[tester::#NA2] [handshake] [replica@6382] �[0m�[36mReceived RESP simple string: "FULLRESYNC a610f5ed9d3283a69f2781c07d9c931daffece00 0"�[0m
-�[33m[tester::#NA2] [handshake] [replica@6382] �[0m�[92m✔︎ Received "FULLRESYNC a610f5ed9d3283a69f2781c07d9c931daffece00 0"�[0m
+�[33m[tester::#NA2] [handshake] [replica@6382] �[0m�[36mReceived bytes: "+FULLRESYNC 5519367077abcc5829e9a5d9817c5ddd2c3b6ac1 0\r\n"�[0m
+�[33m[tester::#NA2] [handshake] [replica@6382] �[0m�[36mReceived RESP simple string: "FULLRESYNC 5519367077abcc5829e9a5d9817c5ddd2c3b6ac1 0"�[0m
+�[33m[tester::#NA2] [handshake] [replica@6382] �[0m�[92m✔︎ Received "FULLRESYNC 5519367077abcc5829e9a5d9817c5ddd2c3b6ac1 0"�[0m
�[33m[tester::#NA2] [handshake] [replica@6382] �[0m�[36mReading RDB file...�[0m
-�[33m[tester::#NA2] [handshake] [replica@6382] �[0m�[36mReceived bytes: "$171\r\nREDIS0012\xfa\tredis-ver\x058.4.2\xfa\nredis-bits\xc0@\xfa\x05ctime\xc2ߎ\xb3i\xfa\bused-mem\xc2Ƚ\f\x00\xfa\x0erepl-stream-db\xc0\x00\xfa\arepl-id(a610f5ed9d3283a69f2781c07d9c931daffece00\xfa\vrepl-offset\xc0\x00\xfa\baof-base\xc0\x00\xff \x9c\x7f\xec-\xf9nz"�[0m
+�[33m[tester::#NA2] [handshake] [replica@6382] �[0m�[36mReceived bytes: "$171\r\nREDIS0012\xfa\tredis-ver\x058.2.5\xfa\nredis-bits\xc0@\xfa\x05ctime\xc2\xf1m\xd2i\xfa\bused-mem\xc2\x10F\x0e\x00\xfa\x0erepl-stream-db\xc0\x00\xfa\arepl-id(5519367077abcc5829e9a5d9817c5ddd2c3b6ac1\xfa\vrepl-offset\xc0\x00\xfa\baof-base\xc0\x00\xffY,^S!\u07b5\xf7"�[0m
�[33m[tester::#NA2] [handshake] [replica@6382] �[0m�[92mReceived RDB file�[0m
�[33m[tester::#NA2] �[0m�[36mCreating replica@6383�[0m
�[33m[tester::#NA2] [handshake] [replica@6383] �[0m�[94m$ redis-cli PING�[0m
@@ -943,13 +943,13 @@
�[33m[tester::#NA2] [handshake] [replica@6383] �[0m�[92m✔︎ Received "OK"�[0m
�[33m[tester::#NA2] [handshake] [replica@6383] �[0m�[94m> PSYNC ? -1�[0m
�[33m[tester::#NA2] [handshake] [replica@6383] �[0m�[36mSent bytes: "*3\r\n$5\r\nPSYNC\r\n$1\r\n?\r\n$2\r\n-1\r\n"�[0m
-�[33m[tester::#NA2] [handshake] [replica@6383] �[0m�[36mReceived bytes: "+FULLRESYNC a610f5ed9d3283a69f2781c07d9c931daffece00 0\r\n"�[0m
-�[33m[tester::#NA2] [handshake] [replica@6383] �[0m�[36mReceived RESP simple string: "FULLRESYNC a610f5ed9d3283a69f2781c07d9c931daffece00 0"�[0m
-�[33m[tester::#NA2] [handshake] [replica@6383] �[0m�[92m✔︎ Received "FULLRESYNC a610f5ed9d3283a69f2781c07d9c931daffece00 0"�[0m
+�[33m[tester::#NA2] [handshake] [replica@6383] �[0m�[36mReceived bytes: "+FULLRESYNC 5519367077abcc5829e9a5d9817c5ddd2c3b6ac1 0\r\n"�[0m
+�[33m[tester::#NA2] [handshake] [replica@6383] �[0m�[36mReceived RESP simple string: "FULLRESYNC 5519367077abcc5829e9a5d9817c5ddd2c3b6ac1 0"�[0m
+�[33m[tester::#NA2] [handshake] [replica@6383] �[0m�[92m✔︎ Received "FULLRESYNC 5519367077abcc5829e9a5d9817c5ddd2c3b6ac1 0"�[0m
�[33m[tester::#NA2] [handshake] [replica@6383] �[0m�[36mReading RDB file...�[0m
-�[33m[tester::#NA2] [handshake] [replica@6383] �[0m�[36mReceived bytes: "$171\r\nREDIS0012\xfa\tredis-ver\x058.4.2\xfa\nredis-bits\xc0@\xfa\x05ctime\xc2ߎ\xb3i\xfa\bused-mem\u00a0\xc7\f\x00\xfa\x0erepl-stream-db\xc0\x00\xfa\arepl-id(a610f5ed9d3283a69f2781c07d9c931daffece00\xfa\vrepl-offset\xc0\x00\xfa\baof-base\xc0\x00\xff\xbe\x9d\xc07\xd8\x038\xd2"�[0m
+�[33m[tester::#NA2] [handshake] [replica@6383] �[0m�[36mReceived bytes: "$171\r\nREDIS0012\xfa\tredis-ver\x058.2.5\xfa\nredis-bits\xc0@\xfa\x05ctime\xc2\xf1m\xd2i\xfa\bused-mem\xc2\xc0O\x0e\x00\xfa\x0erepl-stream-db\xc0\x00\xfa\arepl-id(5519367077abcc5829e9a5d9817c5ddd2c3b6ac1\xfa\vrepl-offset\xc0\x00\xfa\baof-base\xc0\x00\xff\xfeP\xcc\x06\x9c~u\v"�[0m
�[33m[tester::#NA2] [handshake] [replica@6383] �[0m�[92mReceived RDB file�[0m
-�[33m[tester::#NA2] [client] �[0m�[36mConnected (port 38248 -> port 6379)�[0m
+�[33m[tester::#NA2] [client] �[0m�[36mConnected (port 60044 -> port 6379)�[0m
�[33m[tester::#NA2] [test] [client] �[0m�[94m$ redis-cli SET foo 123�[0m
�[33m[tester::#NA2] [test] [client] �[0m�[36mSent bytes: "*3\r\n$3\r\nSET\r\n$3\r\nfoo\r\n$3\r\n123\r\n"�[0m
�[33m[tester::#NA2] [test] [client] �[0m�[36mReceived bytes: "+OK\r\n"�[0m
diff --git a/internal/test_helpers/fixtures/repl-wait/repl_propagation_retry b/internal/test_helpers/fixtures/repl-wait/repl_propagation_retry
--- a/internal/test_helpers/fixtures/repl-wait/repl_propagation_retry
+++ b/internal/test_helpers/fixtures/repl-wait/repl_propagation_retry
@@ -40,7 +40,7 @@
�[33m[tester::#YG4] [handshake] [master] �[0m�[36mSending RDB file...�[0m
�[33m[tester::#YG4] [handshake] [master] �[0m�[36mSent bytes: "$88\r\nREDIS0011\xfa\tredis-ver\x057.2.0\xfa\nredis-bits\xc0@\xfa\x05ctime\xc2m\b\xbce\xfa\bused-mem°\xc4\x10\x00\xfa\baof-base\xc0\x00\xff\xf0n;\xfe\xc0\xffZ\xa2"�[0m
�[33m[tester::#YG4] [handshake] [master] �[0m�[92mSent RDB file.�[0m
-�[33m[tester::#YG4] [propagation] [client] �[0m�[36mConnected (port 40944 -> port 6380)�[0m
+�[33m[tester::#YG4] [propagation] [client] �[0m�[36mConnected (port 59969 -> port 6380)�[0m
�[33m[tester::#YG4] [propagation] [master] �[0m�[94m> SET foo 123�[0m
�[33m[tester::#YG4] [propagation] [master] �[0m�[36mSent bytes: "*3\r\n$3\r\nSET\r\n$3\r\nfoo\r\n$3\r\n123\r\n"�[0m
... diff truncated: showing 489 of 499 linesYou can send follow-ups to the cloud agent here.
Reviewed by Cursor Bugbot for commit e4c2e4a. Configure here.
internal/instrumented_resp_connection/instrumented_resp_connection.go
Outdated
Show resolved
Hide resolved
internal/instrumented_resp_connection/instrumented_resp_connection.go
Outdated
Show resolved
Hide resolved
internal/instrumented_resp_connection/instrumented_resp_connection.go
Outdated
Show resolved
Hide resolved
367ebba to
e172364
Compare
Introduced a new function, explicitPortCallbacks, to customize logging behavior based on the connection port. The NewFromAddr function now determines the appropriate callbacks to use depending on whether the default Redis port (6379) is used or a different one. This enhances the logging for commands and values sent over the connection.
e172364 to
1f3259e
Compare
|
Thanks to @sharmachait for highlighting the issue! |
Pin Redis version in Makefile
| commandPrefix = ">" | ||
| } else { | ||
| commandPrefix = "$ redis-cli" | ||
| remotePort := remoteAddr.(*net.TCPAddr).Port |
There was a problem hiding this comment.
Is there a reason we need to cast this to net.TCPAddr? Why can't we just accept net.TCPAddr directly in the function args?
| logger.PushSecondaryPrefix(connIdentifier) | ||
| c, err := resp_connection.NewRespConnectionFromAddr(addr, defaultCallbacks(logger)) | ||
|
|
||
| remoteAddr, err := net.ResolveTCPAddr("tcp", addr) |
There was a problem hiding this comment.
Not sure exactly what this does but Resolve sounds like it's doing a DNS lookup or something - is there a more safer version of this like "Parse" or so?


Context:
https://secure.helpscout.net/conversation/3280458366/12317?viewId=8414074
Discrepancy:
New fixture:
Introduced a new function, explicitPortCallbacks, to customize logging behavior based on the connection port. The NewFromAddr function now determines the appropriate callbacks to use depending on whether the default Redis port (6379) is used or a different one. This enhances the logging for commands and values sent over the connection.
Note
Medium Risk
Medium risk because it changes shared connection callback wiring and adds a
net.TCPAddrtype assertion that could panic if a non-TCP address is ever used. Functional impact is otherwise limited to developer-facing logging and local setup behavior.Overview
Improves command logging for non-default Redis ports.
InstrumentedRespConnectioncallbacks now derive the remote TCP port and log initial commands as$ redis-cli -p <port> ...when connecting to anything other than6379, keeping reused-connection commands as>.The constructor/update paths (
NewFromAddr,NewFromConn,UpdateBaseLogger) were updated to pass the resolved/remote address into the callbacks, and replication fixtures were refreshed to reflect the new log output. Separately, theMakefilesetuptarget now pins Redis installs to the8.4package series via apt preferences.Reviewed by Cursor Bugbot for commit 45b3257. Bugbot is set up for automated code reviews on this repo. Configure here.