{"record":{"id":"f71f65d12e0f57e4","repo":"redis/redis-py","slug":"hello-is-intentionally-not-implemented-in-the-clie","errorCode":null,"errorMessage":"HELLO is intentionally not implemented in the client.","messagePattern":"HELLO is intentionally not implemented in the client\\.","errorType":"exception","errorClass":"NotImplementedError","httpStatus":null,"severity":"error","filePath":"redis/commands/core.py","lineNumber":2292,"sourceCode":"    ) -> list[int] | Awaitable[list[int]]:\n        \"\"\"\n        This command blocks the current client until all previous write\n        commands by that client are acknowledged as having been fsynced\n        to the AOF of the local Redis and/or at least the specified number\n        of replicas.\n\n        For more information, see https://redis.io/commands/waitaof\n        \"\"\"\n        return self.execute_command(\n            \"WAITAOF\", num_local, num_replicas, timeout, **kwargs\n        )\n\n    def hello(self):\n        \"\"\"\n        This function throws a NotImplementedError since it is intentionally\n        not supported.\n        \"\"\"\n        raise NotImplementedError(\n            \"HELLO is intentionally not implemented in the client.\"\n        )\n\n    def failover(self):\n        \"\"\"\n        This function throws a NotImplementedError since it is intentionally\n        not supported.\n        \"\"\"\n        raise NotImplementedError(\n            \"FAILOVER is intentionally not implemented in the client.\"\n        )\n\n    @overload\n    def hotkeys_start(\n        self: SyncClientProtocol,\n        metrics: List[HotkeysMetricsTypes],\n        count: int | None = None,\n        duration: int | None = None,","sourceCodeStart":2274,"sourceCodeEnd":2310,"githubUrl":"https://github.com/redis/redis-py/blob/6a6b581b48225afa0b76912d1028c6035baee932/redis/commands/core.py#L2274-L2310","documentation":"Raised by hello() (redis/commands/core.py:2292) which is a stub that unconditionally raises NotImplementedError. HELLO performs RESP protocol negotiation, which the client manages internally during connection setup (driven by the 'protocol' connection kwarg / --protocol test flag), so exposing it on the command surface would conflict with the connection's own state machine. No arguments are accepted.","triggerScenarios":"Calling r.hello(). Any call raises immediately.","commonSituations":"Trying to switch RESP2/RESP3 at runtime; or assuming the CLI HELLO command maps to a client method.","solutions":["Set the protocol at connection time: redis.Redis(host=..., protocol=3) (or protocol=2)","For AUTH/SETNAME during handshake, use the connection kwargs username/password/client_name","If you must issue HELLO manually: r.execute_command(\"HELLO\", 3) on a fresh connection, understanding it can desync the client"],"exampleFix":"# before\nr.hello()\n# after\nimport redis\nr = redis.Redis(host=\"localhost\", protocol=3)","handlingStrategy":"validation","validationCode":"# hello() is intentionally unimplemented; set protocol at connect time\nimport redis\nr = redis.Redis(host=host, port=port, protocol=3)  # or protocol=2","typeGuard":null,"tryCatchPattern":"try:\n    r.hello()\nexcept NotImplementedError:\n    # protocol is chosen at connection time, not via a runtime call\n    pass","preventionTips":["Choose RESP2/RESP3 once via the protocol= connection kwarg.","Never call hello() on the client object.","Reconnect with a new client if you need to change protocols."],"tags":["protocol","notimplemented","intentional","resp3"],"backgroundTag":null,"analyzedSha":"6a6b581b48225afa0b76912d1028c6035baee932","analyzedAt":"2026-08-10T12:52:44.840Z","contentChangedAt":null,"schemaVersion":2},"datasetVersion":"2026-09-21T04:17:39.646Z"}