S3 connection hangs when S3 Put request times out server side.

Abierto
#291 1 comentario 1 reacción 0 asignados Ver en GitHub

Nadie ha tomado este issue todavía.

Evaluación

Dificultad
4/5
Tiempo estimado
3-5 días
Aptitud para principiantes
48/100
Tipo de issue
Error
Claridad
Bastante claro
Estado de actividad
Tranquilo
Stack tecnológico
cpp
Área
cloud, networking

Línea de trabajo

Empieza en s3_key_value_store.cc alrededor de la línea 764 y sigue IssueRequestOptions hasta curl_transport.cc alrededor de las líneas 198-205. Revisa cómo se establecen actualmente de forma predeterminada request_timeout y connect_timeout, y cómo debería exponerlos el controlador S3. Se considera terminado cuando un timeout del servidor hace que la solicitud se cancele y se reintente, en lugar de quedarse bloqueada durante aproximadamente 30 minutos.

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

Descripción

Hi google friends! Apologies for the trouble!! We found this interesting issue when using tensorstore!! Thanks for taking a look

Summary

When an S3 PUT request is timed out server-side, the TensorStore client can hang for ~30 minutes before retrying. During this window, S3 access logs show zero retries — the request appears to be "in flight" on the client but dead on the
server. The receive of the request is confirmed by s3 access logs.

The ~30-minute gap matches the default OS-level TCP keepalive + retransmission timeout, which is the only thing that eventually forces the stalled socket closed.

Root Cause

2 layers of missing timeout configuration compound each other:

1. S3 driver issues requests with no timeouts (s3_key_value_store.cc:764)

auto future = owner->transport_->IssueRequest(
    request, internal_http::IssueRequestOptions(value_));
// IssueRequestOptions only sets payload; request_timeout and connect_timeout
// remain at their defaults of absl::ZeroDuration().
  1. Zero duration → curl sets nothing (curl_transport.cc:198-205)

if (options.request_timeout > absl::ZeroDuration()) { // never true
handle_.SetOption(CURLOPT_TIMEOUT_MS, ...);
}

CURLOPT_TIMEOUT_MS is never set, so libcurl has no deadline on the transfer.

Workaround

Set environment variables before launching your process:

export TENSORSTORE_CURL_LOW_SPEED_TIME_SECONDS=30
export TENSORSTORE_CURL_LOW_SPEED_LIMIT_BYTES=1

This enables the low-speed watchdog: if fewer than 1 byte/sec is transferred for 30 seconds, libcurl aborts the request and the retry logic takes over.

Suggested fix

  • Expose request timeout and connect timeout to s3 query driver
Lenguaje dominante
C++
Estrellas
1.6k
Forks
151
Métricas de merge de PR
Sin PR fusionados en 30 d

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 google/tensorstore

Todos los issues de google/tensorstore

Issues similares

Más issues de C++

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.