Repository: redis/redis-py
File: redis/commands/cluster.py (Python)

Code before:

        Returns a list of the results for each processed slot.

        For more information see https://redis.io/commands/cluster-delslots
        """
        return await asyncio.gather(
            *(
                asyncio.create_task(self.execute_command("CLUSTER DELSLOTS", slot))
                for slot in slots
            )
        )

    @deprecated_function(
        version="7.2.0",
        reason="Use client-side caching feature instead.",
    )
    async def client_tracking_on(
        self,
        clientid: Optional[int] = None,
        prefix: Sequence[KeyT] = [],
        bcast: bool = False,
        optin: bool = False,
        optout: bool = False,
        noloop: bool = False,
        target_nodes: Optional["TargetNodesT"] = "all",
    ) -> Awaitable[ResponseT]:
        """
        Enables the tracking feature of the Redis server, that is used
        for server assisted client side caching.

        When clientid is provided - in target_nodes only the node that owns the
        connection with this id should be provided.
        When clientid is not provided - target_nodes can be any node.

        For more information see https://redis.io/commands/client-tracking
        """
        return await self.client_tracking(
            True,
            clientid,
            prefix,
            bcast,
            optin,
            optout,
            noloop,
            target_nodes=target_nodes,
        )

    @deprecated_function(
        version="7.2.0",
        reason="Use client-side caching feature instead.",
    )

Review comment (bug):
The return type annotation should be `ResponseT`, not `Awaitable[ResponseT]`. Since this is an `async def` function, it already returns a coroutine (awaitable). The `Awaitable[ResponseT]` annotation suggests this function returns an awaitable that, when awaited, returns another awaitable, which is incorrect. Other async methods in this file (e.g., `cluster_delslots` at line 842) correctly use the direct type without wrapping it in `Awaitable`.
```suggestion
    ) -> ResponseT:
```

Code after:
        Returns a list of the results for each processed slot.

        For more information see https://redis.io/commands/cluster-delslots
        """
        return await asyncio.gather(
            *(
                asyncio.create_task(self.execute_command("CLUSTER DELSLOTS", slot))
                for slot in slots
            )
        )

    @deprecated_function(
        version="7.2.0",
        reason="Use client-side caching feature instead.",
    )
    async def client_tracking_on(
        self,
        clientid: Optional[int] = None,
        prefix: Sequence[KeyT] = [],
        bcast: bool = False,
        optin: bool = False,
        optout: bool = False,
        noloop: bool = False,
        target_nodes: Optional["TargetNodesT"] = "all",
    ) -> ResponseT:
        """
        Enables the tracking feature of the Redis server, that is used
        for server assisted client side caching.

        When clientid is provided - in target_nodes only the node that owns the
        connection with this id should be provided.
        When clientid is not provided - target_nodes can be any node.

        For more information see https://redis.io/commands/client-tracking
        """
        return await self.client_tracking(
            True,
            clientid,
            prefix,
            bcast,
            optin,
            optout,
            noloop,
            target_nodes=target_nodes,
        )

    @deprecated_function(
        version="7.2.0",
        reason="Use client-side caching feature instead.",
    )
    async def client_tracking_off(