diff --git a/docs/api_status.md b/docs/api_status.md index cb198e1f3..4f40f0fb0 100644 --- a/docs/api_status.md +++ b/docs/api_status.md @@ -157,7 +157,7 @@ with respect to Memcached and Redis APIs. - [X] WATCH - [X] UNWATCH - [X] DISCARD - - [X] CLIENT LIST/SETNAME + - [X] CLIENT LIST/SETNAME/GETNAME - [ ] CLIENT KILL/UNPAUSE/PAUSE/GETNAME/REPLY/TRACKINGINFO - [X] COMMAND - [X] COMMAND COUNT diff --git a/src/server/server_family.cc b/src/server/server_family.cc index 67ef35988..8506d05e8 100644 --- a/src/server/server_family.cc +++ b/src/server/server_family.cc @@ -1040,6 +1040,15 @@ void ServerFamily::Client(CmdArgList args, ConnectionContext* cntx) { return (*cntx)->SendOk(); } + if (sub_cmd == "GETNAME") { + const char* name = cntx->owner()->GetName(); + if (*name != 0) { + return (*cntx)->SendBulkString(name); + } else { + return (*cntx)->SendNull(); + } + } + if (sub_cmd == "LIST") { vector client_info; fibers::mutex mu; diff --git a/tests/dragonfly/server_family_test.py b/tests/dragonfly/server_family_test.py index 020dcb60b..f3a9dde65 100644 --- a/tests/dragonfly/server_family_test.py +++ b/tests/dragonfly/server_family_test.py @@ -52,3 +52,11 @@ def test_multi_eval(client): except Exception as e: msg = str(e) assert "Dragonfly does not allow execution of" in msg + + +def test_connection_name(client): + name = client.execute_command("CLIENT GETNAME") + assert not name + client.execute_command("CLIENT SETNAME test_conn_name") + name = client.execute_command("CLIENT GETNAME") + assert name == "test_conn_name"