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

Batch: re-added rate-limited objects stay in results.objs.all_responses as errors

Abierto Apto para principiantes
#2,179 0 comentarios 0 reacciones 0 asignados Ver en GitHub

Los mantenedores suelen responder en 1 día

@inchang-ing ya está trabajando en esto.

Desde el 2/10/2026.

  • #2180 de @inchang-ing — abierto

Evaluación

Dificultad
2/5
Tiempo estimado
1-3 horas
Aptitud para principiantes
82/100
Tipo de issue
Error
Claridad
Bien especificado
Estado de actividad
Activo
Stack tecnológico
python
Área
api

Línea de trabajo

Empieza en weaviate/collections/batch/base.py, en _BatchBase.__send_batch, y reprodúcelo con mock_tests/test_probe_readd_dep020.py usando los fixtures de gRPC simulados. Verifica que el retry elimine el ErrorObject obsoleto, no emita ninguna advertencia Dep020 y deje cuatro entradas de resultados sin leer el all_responses obsoleto.

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

Descripción

A rate-limited batch emits Dep020 in code that never reads all_responses, because the re-add in _BatchBase.__send_batch reads the deprecated property (weaviate/collections/batch/base.py:720). That line also filters by list position, while errors and uuids filter by the batch-wide index of the object. From the second chunk on the two differ, and the ErrorObject of the re-added object stays in _all_responses after its retry succeeds.

Mock gRPC server at 38f30c1 with the mock_tests/conftest.py fixtures, 4 objects through fixed_size(batch_size=2, concurrent_requests=1), the first object of the second chunk rate-limited once. The test never reads all_responses:

$ pytest mock_tests/test_probe_readd_dep020.py -q -s
Dep020 during batch=1 errors=0 len(_all_responses)=5 stale=1
mock_tests/test_probe_readd_dep020.py
import warnings
import weaviate
from weaviate.collections.classes.batch import ErrorObject
from weaviate.proto.v1 import batch_pb2, weaviate_pb2_grpc
from .conftest import MOCK_IP, MOCK_PORT, MOCK_PORT_GRPC, mock_class


class Svc(weaviate_pb2_grpc.WeaviateServicer):
    calls = 0

    def BatchObjects(self, request, context):
        self.calls += 1
        if self.calls == 2:  # second chunk, once: rate-limit its first object
            return batch_pb2.BatchObjectsReply(errors=[{"index": 0, "error": "failed with status: 503 error"}])
        return batch_pb2.BatchObjectsReply()


def test_readd(weaviate_mock, start_grpc_server):
    weaviate_mock.expect_request(f"/v1/schema/{mock_class['class']}").respond_with_json(mock_class)
    weaviate_pb2_grpc.add_WeaviateServicer_to_server(Svc(), start_grpc_server)
    client = weaviate.connect_to_local(port=MOCK_PORT, host=MOCK_IP, grpc_port=MOCK_PORT_GRPC)
    try:
        col = client.collections.use(mock_class["class"])
        with warnings.catch_warnings(record=True) as w:
            warnings.simplefilter("always")
            with col.batch.fixed_size(batch_size=2, concurrent_requests=1) as b:
                for i in range(4):
                    b.add_object({"name": f"o{i}"})
        r = col.batch.results.objs
        dep = [x for x in w if "all_responses" in str(x.message)]
        stale = [x for x in r._all_responses if isinstance(x, ErrorObject)]
        print(f"\nDep020 during batch={len(dep)} errors={len(r.errors)} "
              f"len(_all_responses)={len(r._all_responses)} stale={len(stale)}")
    finally:
        client.close()

Expected: no warning and 4 entries. Reading _all_responses and filtering on err.object_.index fixes both. #2166 already edits this function.

@tsmith023, you added Dep020. Would you rather take that one-line fix, or remove all_responses now that its Q4 2024 date has passed?

Lenguaje dominante
Python
Estrellas
228
Forks
158
Merge medio
2 d 9 h
PR fusionados (30 d)
12

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 weaviate/weaviate-python-client

Todos los issues de weaviate/weaviate-python-client

Issues similares

Más issues de Python

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.