diff --git a/src/redis-cli.c b/src/redis-cli.c index 171a2ed79..6ee7add0e 100644 --- a/src/redis-cli.c +++ b/src/redis-cli.c @@ -1342,6 +1342,7 @@ static int cliReadReply(int output_raw_strings) { if (output) { out = cliFormatReply(reply, config.output, output_raw_strings); fwrite(out,sdslen(out),1,stdout); + fflush(stdout); sdsfree(out); } freeReplyObject(reply); @@ -7070,7 +7071,7 @@ static void latencyDistMode(void) { #define RDB_EOF_MARK_SIZE 40 void sendReplconf(const char* arg1, const char* arg2) { - printf("sending REPLCONF %s %s\n", arg1, arg2); + fprintf(stderr, "sending REPLCONF %s %s\n", arg1, arg2); redisReply *reply = redisCommand(context, "REPLCONF %s %s", arg1, arg2); /* Handle any error conditions */ @@ -7130,7 +7131,7 @@ unsigned long long sendSync(redisContext *c, char *out_eof) { } *p = '\0'; if (buf[0] == '-') { - printf("SYNC with master failed: %s\n", buf); + fprintf(stderr, "SYNC with master failed: %s\n", buf); exit(1); } if (strncmp(buf+1,"EOF:",4) == 0 && strlen(buf+5) >= RDB_EOF_MARK_SIZE) { diff --git a/tests/integration/redis-cli.tcl b/tests/integration/redis-cli.tcl index c6f62cac3..a973c1539 100644 --- a/tests/integration/redis-cli.tcl +++ b/tests/integration/redis-cli.tcl @@ -294,9 +294,9 @@ start_server {tags {"cli"}} { assert_equal {key:2} [run_cli --scan --quoted-pattern {"*:\x32"}] } - test "Connecting as a replica" { + proc test_redis_cli_repl {} { set fd [open_cli "--replica"] - wait_for_condition 500 500 { + wait_for_condition 500 100 { [string match {*slave0:*state=online*} [r info]] } else { fail "redis-cli --replica did not connect" @@ -305,12 +305,28 @@ start_server {tags {"cli"}} { for {set i 0} {$i < 100} {incr i} { r set test-key test-value-$i } - r client kill type slave - catch { - assert_match {*SET*key-a*} [read_cli $fd] + + wait_for_condition 500 100 { + [string match {*test-value-99*} [read_cli $fd]] + } else { + fail "redis-cli --replica didn't read commands" } - close_cli $fd + fconfigure $fd -blocking true + r client kill type slave + catch { close_cli $fd } err + assert_match {*Server closed the connection*} $err + } + + test "Connecting as a replica" { + # Disk-based master + assert_match "OK" [r config set repl-diskless-sync no] + test_redis_cli_repl + + # Disk-less master + assert_match "OK" [r config set repl-diskless-sync yes] + assert_match "OK" [r config set repl-diskless-sync-delay 0] + test_redis_cli_repl } {} {needs:repl} test "Piping raw protocol" {