Hacktoberfest 2026: los issues que los mantenedores marcaron para octubre, abiertos y aptos para principiantes. Explorar issues de Hacktoberfest

RedisSession fails on Redis Cluster: add_items/clear_session raise AttributeError ('ClusterPipeline' has no 'raise_first_error')

Abierto
#5,322 2 comentarios 0 reacciones 0 asignados Ver en GitHub

Los mantenedores suelen responder en 1 día

Nadie ha tomado este issue todavía.

Evaluación

Dificultad
5/5
Tiempo estimado
Más de una semana
Aptitud para principiantes
35/100
Tipo de issue
Error
Claridad
Bastante claro
Estado de actividad
Activo
Stack tecnológico
python, redis

Línea de trabajo

Start with _write_items_attempt in src/agents/extensions/memory/redis_session.py and reproduce the failure using the provided Redis Cluster setup. Investigate how add_items and clear_session handle ClusterPipeline and the keys' cluster slots; the issue outlines alternative approaches but does not choose one. Done means both operations work with RedisCluster while preserving session writes and clearing.

Escrito por el modelo de indexación a partir del texto del issue.

Descripción

Please read this first
  • Have you read the docs? Yes
  • Have you searched for related issues? Yes. #5202 moved clear_session into the same watched transaction; I found no issue covering Redis Cluster.
Describe the bug

RedisSession fails on a Redis Cluster client (redis.asyncio.cluster.RedisCluster). add_items (since 0.20) and clear_session (latest) raise AttributeError before any write lands, so a session backed by Redis Cluster cannot store history.

Two things combine:

  1. _write_items_attempt hooks pipeline internals that only the standalone redis.asyncio.client.Pipeline has: it wraps pipe.raise_first_error and pipe.parse_response and swaps pipe.connection_pool (src/agents/extensions/memory/redis_session.py:483 on main). redis-py's ClusterPipeline has neither raise_first_error nor parse_response, and has per-node pools.
  2. The write is a WATCH/MULTI transaction over {prefix}:{id}, {prefix}:{id}:messages and {prefix}:{id}:counter, which don't share a hash tag, so they land in different cluster slots (e.g. 13192 vs 7329). Redis Cluster only runs a transaction within one slot, so adding the missing hooks would not be enough on its own.

Up to 0.14.5, add_items used a plain pipeline, which redis-py's cluster client splits per key, and it worked on a cluster.

Debug information
  • Agents SDK version: 0.23.1 (latest release); same code on main. First broken release we hit: 0.20.0 (0.14.5 works)
  • Related library versions: redis 8.1.0
  • Python version: 3.12
  • Operating system: macOS 15 (also seen on Linux in Kubernetes)
  • Model and model provider: not involved (no model call)
  • Does the issue reproduce with the latest Agents SDK release? Yes
  • Does the issue occur consistently or intermittently? Consistently
Traceback (most recent call last):
  ...
  File "agents/extensions/memory/redis_session.py", line 483, in _write_items_attempt
    raise_first_error = pipe.raise_first_error
AttributeError: 'ClusterPipeline' object has no attribute 'raise_first_error'
Repro steps

Start a local 3-node cluster:

for p in 7101 7102 7103; do redis-server --port $p --cluster-enabled yes --cluster-config-file nodes-$p.conf --daemonize yes --save ""; done
redis-cli --cluster create 127.0.0.1:7101 127.0.0.1:7102 127.0.0.1:7103 --cluster-replicas 0
import asyncio
from redis.asyncio.cluster import RedisCluster
from agents.extensions.memory.redis_session import RedisSession

async def main() -> None:
    client = RedisCluster(host="127.0.0.1", port=7101)
    session = RedisSession("s1", redis_client=client, key_prefix="repro")
    await session.add_items([{"role": "user", "content": "hi"}])   # AttributeError
    await session.clear_session()                                  # AttributeError (latest)

asyncio.run(main())

On 0.23.1 against the cluster: add_items FAIL, clear_session FAIL, get_items OK, pop_item OK. On 0.14.5: all four OK.

Expected behavior

RedisSession works with RedisCluster, as it did through 0.14.5. Either hash-tag the session's keys into one slot and use a transaction path that ClusterPipeline supports, or fall back to a non-transactional pipeline when the client is a cluster. Our workaround meanwhile is a subclass that restores the 0.14.5 add_items.

Lenguaje dominante
Python
Estrellas
30k
Forks
4.9k
Merge medio
18 h 13 min
PR fusionados (30 d)
215

Preparar el entorno

Primeros pasos

  1. Lee el issue completo y luego la guía de contribución del proyecto.
  2. Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
  3. Haz un fork del repositorio y trabaja en una rama.
  4. Abre un pull request que haga referencia al número del issue.

Más de openai/openai-agents-python

Todos los issues de openai/openai-agents-python

Issues similares

Más issues de Python

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.