SearchIndex.drop_keys does not validate cluster hash-tag co-location (inconsistent with drop_documents)
Los mantenedores suelen responder en 5 días
@Hashim1999164 ya está trabajando en esto.
Desde el 18/10/2026.
Evaluación
- Dificultad
- 2/5
- Tiempo estimado
- 1-3 horas
- Aptitud para principiantes
- 78/100
Línea de trabajo
Comienza en redisvl/index/index.py, en SearchIndex.drop_keys (alrededor de la línea 826), y compáralo con drop_documents (alrededor de la línea 840), incluida la validación existente de etiquetas hash de RedisCluster. Asegúrate de que ambos métodos tengan un comportamiento idéntico en clúster: las claves no válidas que abarquen distintos slots deben generar el ValueError indicado antes de que se llame a delete.
Escrito por el modelo de indexación a partir del texto del issue.
Descripción
Current behavior
SearchIndex.drop_documents (redisvl/index/index.py:840) explicitly validates that all keys share a hash tag before calling delete:
if isinstance(self._redis_client, RedisCluster) and not _keys_share_hash_tag(keys):
raise ValueError("All keys must share a hash tag when using Redis Cluster.")
return self._redis_client.delete(*keys)
SearchIndex.drop_keys (redisvl/index/index.py:826) does not. On a clustered Redis Enterprise database, a multi-key DEL whose keys do not all hash to the same slot raises CROSSSLOT from the server — but only some redis-py client modes surface this cleanly. In others the call partially succeeds or fails opaquely.
Proposed change
Apply the same hash-tag check in drop_keys that drop_documents already applies, or factor the check into a shared helper called by both. Behavior on cluster should be identical between the two methods.
Why this surfaces
SemanticCache.drop() uses drop_keys under the hood for the keys= argument path and uses drop_documents for the ids= argument path. The two argument paths therefore behave differently on cluster, which is a footgun for customers building invalidation jobs that take whichever shape comes from their query results.
Notes
Surfaced while writing a scoped semantic caching architecture spec.
- Lenguaje dominante
- Python
- Estrellas
- 431
- Forks
- 107
- Merge medio
- 5 d 17 h
- PR fusionados (30 d)
- 16
Preparar el entorno
- Sin Dockerfile ni archivo de Docker Compose
- Sin plantilla de pull request
- Leer la guía de contribución
Primeros pasos
- Lee el issue completo y luego la guía de contribución del proyecto.
- Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
- Haz un fork del repositorio y trabaja en una rama.
- Abre un pull request que haga referencia al número del issue.
Más de redis/redis-vl-python
-
exists() depends on exact FT.INFO error wording; an unrecognised "missing index" message makes create() never create the index (regression from #672)Posiblemente ocupada @sarankumar1325 la tomó hace 1 día. Abierto
Dificultad 2/5 1-3 horas Aptitud para principiantes 75/100
redis/redis-vl-python#773 ·
Los mantenedores suelen responder en 5 días
-
Vector field with index_missing=True cannot be createdPosiblemente ocupada @RaphaelFakhri la tomó hace 2 días. Abierto
Dificultad 2/5 1-3 horas Aptitud para principiantes 72/100
redis/redis-vl-python#770 ·
Los mantenedores suelen responder en 5 días
-
Add Python 3.15 supportPosiblemente ocupada @vishal-bala la tomó hace 4 días. Abierto
Dificultad 2/5 1-3 horas Aptitud para principiantes 65/100
redis/redis-vl-python#757 · 1 comentario · 1 reacción ·
Los mantenedores suelen responder en 5 días
-
documentation
Dificultad 1/5 Menos de una hora Aptitud para principiantes 62/100
redis/redis-vl-python#300 ·
Los mantenedores suelen responder en 5 días
-
Migration executor cannot read an FT.AGGREGATE cursor over a RESP3 connection, raising KeyErrorPosiblemente ocupada @Kuang-xianxin la tomó hace 44 días. Abierto
Dificultad 3/5 1-2 días Aptitud para principiantes 68/100
redis/redis-vl-python#714 ·
Los mantenedores suelen responder en 5 días
Todos los issues de redis/redis-vl-python
Issues similares
-
Use mhctools predictor_required=False for saved-result rescoringPosiblemente ocupada @iskandr la tomó hoy. Abierto
Dificultad 2/5 1-3 horas Aptitud para principiantes 72/100
Los mantenedores suelen responder en 1 día
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 79/100
-
Dificultad 1/5 Menos de una hora Aptitud para principiantes 85/100
521xueweihan/HelloGitHub#4051 · 1 comentario ·
-
bug documentation
Dificultad 2/5 1-3 horas Aptitud para principiantes 78/100
awslabs/visual-asset-management-system#514 ·
Los mantenedores suelen responder en 1 día
-
backend bug spec:REQ-053
Dificultad 2/5 1-3 horas Aptitud para principiantes 66/100
nolte/kamerplanter#2547 ·
Los mantenedores suelen responder en 1 día