influxdata / influxdata/influxdb-client-java

java.io.InterruptedIOException: interrupted is thrown and I don't know why.

Aperta
#793 0 commenti 0 reazioni 0 assegnatari Vedi su GitHub

Nessuno ha ancora preso questa issue.

Lingua principale
Java
Stelle
477
Fork
129
Metriche di merge delle PR
Nessuna PR unita negli ultimi 30g

Descrizione

Steps to reproduce:
I am facing an unexpected exception: java.io.InterruptedIOException: interrupted . We have 180,000 invoke everyday, 10+ of these will meet java.io.InterruptedIOException: interrupted.

Here is my code:

@Service
public class InfluxdbServiceImpl implements InfluxdbService {

    protected final String bucket;
    protected final String org;
    protected InfluxDBClient client;
    protected WriteApi writeApi;


    public InfluxdbServiceImpl(IotInfluxdbProperties iotInfluxdbProperties) {

        if (StringUtils.hasText(iotInfluxdbProperties.getToken()) &&
                StringUtils.hasText(iotInfluxdbProperties.getUrl()) &&
                StringUtils.hasText(iotInfluxdbProperties.getBucket()) &&
                StringUtils.hasText(iotInfluxdbProperties.getOrg())) {
            client = InfluxDBClientFactory.create(iotInfluxdbProperties.getUrl(),
                    iotInfluxdbProperties.getToken().toCharArray());
            writeApi = client.makeWriteApi();
            this.bucket = iotInfluxdbProperties.getBucket();
            this.org = iotInfluxdbProperties.getOrg();
        } else {
            throw new IllegalArgumentException("Argument is empty:" + iotInfluxdbProperties);
        }


    }

    @Override
    public boolean insert(List<Point> points) {
        writeApi.writePoints(bucket, org, points);
        return true;
    }
}

Here is stacktrace:

java.io.InterruptedIOException: interrupted
 at okio.Timeout.throwIfReached(Timeout.kt:98)
 at okio.OutputStreamSink.write(JvmOkio.kt:50)
 at okio.AsyncTimeout$sink$1.write(AsyncTimeout.kt:103)
 at okio.RealBufferedSink.emitCompleteSegments(RealBufferedSink.kt:255)
 at okio.RealBufferedSink.write(RealBufferedSink.kt:146)
 at okhttp3.internal.http1.Http1ExchangeCodec$KnownLengthSink.write(Http1ExchangeCodec.kt:271)
 at okio.ForwardingSink.write(ForwardingSink.kt:29)
 at okhttp3.internal.connection.Exchange$RequestBodySink.write(Exchange.kt:218)
 at okio.RealBufferedSink.emitCompleteSegments(RealBufferedSink.kt:255)
 at okio.RealBufferedSink.write(RealBufferedSink.kt:185)
 at okhttp3.RequestBody$Companion$toRequestBody$2.writeTo(RequestBody.kt:152)
 at retrofit2.RequestBuilder$ContentTypeOverridingRequestBody.writeTo(RequestBuilder.java:292)
 at okhttp3.internal.http.CallServerInterceptor.intercept(CallServerInterceptor.kt:59)
 at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.kt:109)
 at okhttp3.internal.connection.ConnectInterceptor.intercept(ConnectInterceptor.kt:34)
 at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.kt:109)
 at okhttp3.internal.cache.CacheInterceptor.intercept(CacheInterceptor.kt:95)
 at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.kt:109)
 at okhttp3.internal.http.BridgeInterceptor.intercept(BridgeInterceptor.kt:83)
 at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.kt:109)
 at okhttp3.internal.http.RetryAndFollowUpInterceptor.intercept(RetryAndFollowUpInterceptor.kt:76)
 at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.kt:109)
 at com.influxdb.client.internal.GzipInterceptor.intercept(GzipInterceptor.java:91)
 at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.kt:109)
 at okhttp3.logging.HttpLoggingInterceptor.intercept(HttpLoggingInterceptor.java:152)
 at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.kt:109)
 at com.influxdb.client.internal.AuthenticateInterceptor.intercept(AuthenticateInterceptor.java:103)
 at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.kt:109)
 at com.influxdb.internal.UserAgentInterceptor.intercept(UserAgentInterceptor.java:60)
 at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.kt:109)
 at okhttp3.internal.connection.RealCall.sw$original$getResponseWithInterceptorChain$okhttp$lito5p0(RealCall.kt:201)
 at okhttp3.internal.connection.RealCall.sw$original$getResponseWithInterceptorChain$okhttp$lito5p0$accessor$sw$qmhb7m1(RealCall.kt)
 at okhttp3.internal.connection.RealCall$sw$auxiliary$vnmot80.call(Unknown Source)
 at org.apache.skywalking.apm.agent.core.plugin.interceptor.enhance.InstMethodsInter.intercept(InstMethodsInter.java:86)
 at okhttp3.internal.connection.RealCall.getResponseWithInterceptorChain$okhttp(RealCall.kt)
 at okhttp3.internal.connection.RealCall.sw$original$execute$b3g7a40(RealCall.kt:154)
 at okhttp3.internal.connection.RealCall.sw$original$execute$b3g7a40$accessor$sw$qmhb7m1(RealCall.kt)
 at okhttp3.internal.connection.RealCall$sw$auxiliary$0c49e42.call(Unknown Source)
 at org.apache.skywalking.apm.agent.core.plugin.interceptor.enhance.InstMethodsInter.intercept(InstMethodsInter.java:86)
 at okhttp3.internal.connection.RealCall.execute(RealCall.kt) 
 at retrofit2.OkHttpCall.execute(OkHttpCall.java:204)
 at retrofit2.adapter.rxjava3.CallExecuteObservable.subscribeActual(CallExecuteObservable.java:46)
 at io.reactivex.rxjava3.core.Observable.subscribe(Observable.java:13173)
 at io.reactivex.rxjava3.internal.operators.observable.ObservableSingleSingle.subscribeActual(ObservableSingleSingle.java:36)
 at io.reactivex.rxjava3.core.Single.subscribe(Single.java:4855)
 at io.reactivex.rxjava3.internal.operators.maybe.MaybeFromSingle.subscribeActual(MaybeFromSingle.java:41)
 at io.reactivex.rxjava3.core.Maybe.subscribe(Maybe.java:5375)
 at io.reactivex.rxjava3.internal.operators.maybe.MaybeMap.subscribeActual(MaybeMap.java:41)

I have read Timeout.kt try to find out why this exception is thrown.

  @Throws(IOException::class)
  open fun throwIfReached() {
    if (Thread.interrupted()) {
      Thread.currentThread().interrupt() // Retain interrupted status.
      throw InterruptedIOException("interrupted")
    }

    if (hasDeadline && deadlineNanoTime - System.nanoTime() <= 0) {
      throw InterruptedIOException("deadline reached")
    }
  }

The code indicate that the exception is thrown when thread is interrupted. My code is very simple and do not interrupt any thread.

BTW, as you can see in stack trace ,we are using Skywalking as monitor client. each failed invoking only takes 1 or 2ms .

Expected behavior:
I hope the client tell me the reason more specifically.

Specifications:

  • Client Version: 6.7.0
  • InfluxDB Version: 2.6.1
  • JDK Version: 11
  • Platform: linux

Guida per i contributori

Nessuna guida per i contributori indicizzata per questo repository

Come iniziare

  1. Leggi tutta la issue e poi la guida ai contributi del progetto.
  2. Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
  3. Fai un fork del repository e lavora su un branch.
  4. Apri una pull request che faccia riferimento al numero della issue.

Direzione di ricerca

Inizia dal punto di ingresso writeApi.writePoints e segui il percorso della richiesta mostrato nello stack trace, iniziando da Timeout.kt di Okio e dal GzipInterceptor del client. Riproduci l’interruzione con la configurazione indicata di client, JDK e SkyWalking, quindi determina quale contesto il client può riportare affinché la causa dell’errore sia più specifica.

Scritto dal modello di indicizzazione a partire dal testo della issue.

Valutazione

Stack tecnologico
java
Ambito
api
Tipo di issue
Bug
Difficoltà
4/5
Tempo stimato
3-5 giorni
Stato di attività
Ferma
Chiarezza
Da chiarire
Idoneità per principianti
35/100

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.