Skip to content

Commit

Permalink
Adds configurable connect/read timeouts
Browse files Browse the repository at this point in the history
Sometimes it takes InfluxDb longer to process a request than 1
second. This change increases the default to 1.5 seconds and allows for
a configurable connect and read timeout to be set which will hopefully prevent
the following type of data discard:

    13:03:04,827 WARN  [com.izettle.metrics.influxdb.InfluxDbReporter] (metrics-influxDb-reporter-1-thread-1) Unable to report to InfluxDB. Discarding data.: java.net.SocketTimeoutException: connect timed out
            at java.net.PlainSocketImpl.socketConnect(Native Method) [rt.jar:1.8.0_72]
            at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:350) [rt.jar:1.8.0_72]
            at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:206) [rt.jar:1.8.0_72]
            at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:188) [rt.jar:1.8.0_72]
            at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392) [rt.jar:1.8.0_72]
            at java.net.Socket.connect(Socket.java:589) [rt.jar:1.8.0_72]
            at sun.security.ssl.SSLSocketImpl.connect(SSLSocketImpl.java:668) [jsse.jar:1.8.0_72]
            at sun.net.NetworkClient.doConnect(NetworkClient.java:175) [rt.jar:1.8.0_72]
            at sun.net.www.http.HttpClient.openServer(HttpClient.java:432) [rt.jar:1.8.0_72]
            at sun.net.www.http.HttpClient.openServer(HttpClient.java:527) [rt.jar:1.8.0_72]
            at sun.net.www.protocol.https.HttpsClient.<init>(HttpsClient.java:264) [rt.jar:1.8.0_72]
            at sun.net.www.protocol.https.HttpsClient.New(HttpsClient.java:367) [rt.jar:1.8.0_72]
            at sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.getNewHttpClient(AbstractDelegateHttpsURLConnection.java:191) [rt.jar:1.8.0_72]
            at sun.net.www.protocol.http.HttpURLConnection.plainConnect0(HttpURLConnection.java:1105) [rt.jar:1.8.0_72]
            at sun.net.www.protocol.http.HttpURLConnection.plainConnect(HttpURLConnection.java:999) [rt.jar:1.8.0_72]
            at sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.connect(AbstractDelegateHttpsURLConnection.java:177) [rt.jar:1.8.0_72]
            at sun.net.www.protocol.http.HttpURLConnection.getOutputStream0(HttpURLConnection.java:1283) [rt.jar:1.8.0_72]
            at sun.net.www.protocol.http.HttpURLConnection.getOutputStream(HttpURLConnection.java:1258) [rt.jar:1.8.0_72]
            at sun.net.www.protocol.https.HttpsURLConnectionImpl.getOutputStream(HttpsURLConnectionImpl.java:250) [rt.jar:1.8.0_72]
            at com.izettle.metrics.influxdb.InfluxDbHttpSender.writeData(InfluxDbHttpSender.java:81) [metrics-influxdb-1.0.2.jar:1.0.2]
            at com.izettle.metrics.influxdb.InfluxDbReporter.report(InfluxDbReporter.java:228) [metrics-influxdb-1.0.2.jar:1.0.2]
            at com.codahale.metrics.ScheduledReporter.report(ScheduledReporter.java:162) [metrics-core-3.1.2.jar:3.1.2]
            at com.codahale.metrics.ScheduledReporter$1.run(ScheduledReporter.java:117) [metrics-core-3.1.2.jar:3.1.2]
            at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) [rt.jar:1.8.0_72]
            at java.util.concurrent.FutureTask.runAndReset(FutureTask.java:308) [rt.jar:1.8.0_72]
            at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$301(ScheduledThreadPoolExecutor.java:180) [rt.jar:1.8.0_72]
            at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:294) [rt.jar:1.8.0_72]
            at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) [rt.jar:1.8.0_72]
            at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) [rt.jar:1.8.0_72]
            at java.lang.Thread.run(Thread.java:745) [rt.jar:1.8.0_72]

Closes #31
  • Loading branch information
pp-tim committed Feb 15, 2016
1 parent 1f25923 commit 8242325
Show file tree
Hide file tree
Showing 3 changed files with 62 additions and 5 deletions.
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
package com.izettle.metrics.dw;

import static java.lang.Math.toIntExact;

import com.codahale.metrics.MetricRegistry;
import com.codahale.metrics.ScheduledReporter;
import com.fasterxml.jackson.annotation.JsonProperty;
Expand Down Expand Up @@ -69,6 +71,17 @@
* <td>precision</td>
* <td>1m</td>
* <td>The precision of timestamps. Does not take into account the quantity, so for example `5m` will be minute precision</td>
* </tr>
* <tr>
* <td>connectTimeout</td>
* <td>1500ms</td>
* <td>The connect timeout connecting to InfluxDb.</td>
* </tr>
* <tr>
* <td>readTimeout</td>
* <td>1500ms</td>
* <td>The read timeout connecting to InfluxDb.</td>
* </tr>
* <tr>
* <td>auth</td>
* <td><i>None</i></td>
Expand Down Expand Up @@ -148,6 +161,12 @@ public class InfluxDbReporterFactory extends BaseReporterFactory {
@NotNull
private String auth = "";

@NotNull
private Duration connectTimeout = Duration.milliseconds(1500);

@NotNull
private Duration readTimeout = Duration.milliseconds(1500);

@NotNull
private Duration precision = Duration.minutes(1);

Expand Down Expand Up @@ -279,6 +298,26 @@ public void setAuth(String auth) {
this.auth = auth;
}

@JsonProperty
public Duration getConnectTimeout() {
return connectTimeout;
}

@JsonProperty
public void setConnectTimeout(Duration connectTimeout) {
this.connectTimeout = connectTimeout;
}

@JsonProperty
public Duration getReadTimeout() {
return readTimeout;
}

@JsonProperty
public void setReadTimeout(Duration readTimeout) {
this.readTimeout = readTimeout;
}

@JsonProperty
public boolean getGroupGauges() {
return groupGauges;
Expand Down Expand Up @@ -334,7 +373,18 @@ public void setDefaultMeasurementMappings(ImmutableMap<String, String> defaultMe
@Override
public ScheduledReporter build(MetricRegistry registry) {
try {
return builder(registry).build(new InfluxDbHttpSender(protocol, host, port, database, auth, precision.getUnit()));
return builder(registry).build(
new InfluxDbHttpSender(
protocol,
host,
port,
database,
auth,
precision.getUnit(),
toIntExact(connectTimeout.getQuantity()),
toIntExact(readTimeout.getQuantity())
)
);
} catch (Exception e) {
throw new RuntimeException(e);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,8 @@ public class InfluxDbHttpSender implements InfluxDbSender {
private final String authStringEncoded;
private final InfluxDbWriteObject influxDbWriteObject;
private final InfluxDbWriteObjectSerializer influxDbWriteObjectSerializer;
private final int connectTimeout;
private final int readTimeout;

/**
* Creates a new http sender given connection details.
Expand All @@ -36,7 +38,7 @@ public class InfluxDbHttpSender implements InfluxDbSender {
* @throws Exception exception while creating the influxDb sender(MalformedURLException)
*/
public InfluxDbHttpSender(final String protocol, final String hostname, final int port, final String database, final String authString,
final TimeUnit timePrecision) throws Exception {
final TimeUnit timePrecision, final int connectTimeout, final int readTimeout) throws Exception {
this.url = new URL(protocol, hostname, port, "/write");

if (authString != null && !authString.isEmpty()) {
Expand All @@ -47,6 +49,9 @@ public InfluxDbHttpSender(final String protocol, final String hostname, final in

this.influxDbWriteObject = new InfluxDbWriteObject(database, timePrecision);
this.influxDbWriteObjectSerializer = new InfluxDbWriteObjectSerializer();

this.connectTimeout = connectTimeout;
this.readTimeout = readTimeout;
}

@Override
Expand Down Expand Up @@ -75,8 +80,8 @@ public int writeData() throws Exception {
con.setRequestProperty("Authorization", "Basic " + authStringEncoded);
}
con.setDoOutput(true);
con.setConnectTimeout(1000);
con.setReadTimeout(1000);
con.setConnectTimeout(connectTimeout);
con.setReadTimeout(readTimeout);

OutputStream out = con.getOutputStream();
try {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -61,7 +61,9 @@ private static InfluxDbReporter startInfluxDbReporter(MetricRegistry registry) t
8086,
"dropwizard",
"root:root",
TimeUnit.MINUTES);
TimeUnit.MINUTES,
1000,
1000);
final Map<String, String> tags = new HashMap<String, String>();
tags.put("host", "localhost");
final InfluxDbReporter reporter = InfluxDbReporter
Expand Down

0 comments on commit 8242325

Please sign in to comment.