diff --git a/src/networking.c b/src/networking.c index 24c68dc8a..f9e725e16 100644 --- a/src/networking.c +++ b/src/networking.c @@ -2129,11 +2129,6 @@ int _writeToClient(client *c) { return tot_written > 0 ? C_OK : C_ERR; } -static void postWriteToReplica(client *c) { - serverAssert(inMainThread()); - if (c->nwritten > 0) c->net_output_bytes += c->nwritten; -} - static void _postWriteToClient(client *c) { if (c->nwritten <= 0) return; @@ -2180,9 +2175,7 @@ int postWriteToClient(client *c) { c->io_last_bufpos = 0; /* Update total number of writes on server */ server.stat_total_writes_processed++; - if (getClientType(c) == CLIENT_TYPE_REPLICA) { - postWriteToReplica(c); - } else { + if (getClientType(c) != CLIENT_TYPE_REPLICA) { _postWriteToClient(c); } diff --git a/tests/unit/introspection.tcl b/tests/unit/introspection.tcl index 6d0e48e39..d7253f375 100644 --- a/tests/unit/introspection.tcl +++ b/tests/unit/introspection.tcl @@ -836,6 +836,60 @@ start_server {tags {"introspection"}} { assert_match {*'replicaof "--127.0.0.1"'*wrong number of arguments*} $err } {} {external:skip} + test {tot-net-out for replica client} { + start_server {} { + start_server {} { + set primary [srv -1 client] + set primary_host [srv -1 host] + set primary_port [srv -1 port] + set primary_pid [srv -1 pid] + set replica [srv 0 client] + set replica_pid [srv 0 pid] + + $replica replicaof $primary_host $primary_port + + # Wait for replica to be connected before proceeding. + wait_for_ofs_sync $primary $replica + + # Avoid PINGs to make sure tot-net-out is stable. + $primary config set repl-ping-replica-period 3600 + + # Increase repl timeout to avoid replica disconnecting + $primary config set repl-timeout 3600 + $replica config set repl-timeout 3600 + + # Wait for the replica to receive the command. + wait_for_ofs_sync $primary $replica + + # Get the tot-net-out of the replica before sending the command. + set info_list [$primary client list] + foreach info [split $info_list "\r\n"] { + if {[string match "* flags=S *" $info]} { + set out_before [get_field_in_client_info $info "tot-net-out"] + break + } + } + + # Send a command to the primary. + set value_size 10000 + $primary set foo [string repeat "a" $value_size] + + # Get the tot-net-out of the replica after sending the command. + set info_list [$primary client list] + foreach info [split $info_list "\r\n"] { + if {[string match "* flags=S *" $info]} { + set out_after [get_field_in_client_info $info "tot-net-out"] + break + } + } + + assert_morethan $out_before 0 + assert_morethan $out_after 0 + assert_lessthan $out_after [expr $out_before + $value_size + 1000] ; # + 1000 to account for protocol overhead etc + } + } + } {} {external:skip} + test {valkey-server command line arguments - allow passing option name and option value in the same arg} { start_server {config "default.conf" args {"--maxmemory 700mb" "--maxmemory-policy volatile-lru"}} { assert_match [r config get maxmemory] {maxmemory 734003200}