Skip to content

Commit 8a125ef

Browse files
committed
Added parameter to set await termination timeout
1 parent 631a6c3 commit 8a125ef

File tree

6 files changed

+27
-3
lines changed

6 files changed

+27
-3
lines changed

src/main/java/com/splunk/logging/HttpEventCollectorLog4jAppender.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -157,6 +157,7 @@ public static HttpEventCollectorLog4jAppender createAppender(
157157
@PluginAttribute(value = "call_timeout", defaultLong = HttpEventCollectorSender.TimeoutSettings.DEFAULT_CALL_TIMEOUT) final long callTimeout,
158158
@PluginAttribute(value = "read_timeout", defaultLong = HttpEventCollectorSender.TimeoutSettings.DEFAULT_READ_TIMEOUT) final long readTimeout,
159159
@PluginAttribute(value = "write_timeout", defaultLong = HttpEventCollectorSender.TimeoutSettings.DEFAULT_WRITE_TIMEOUT) final long writeTimeout,
160+
@PluginAttribute(value = "await_termination_timeout", defaultLong = HttpEventCollectorSender.TimeoutSettings.DEFAULT_AWAIT_TERMINATION_TIMEOUT) final long awaitTerminationTimeout,
160161
@PluginElement("Layout") Layout<? extends Serializable> layout,
161162
@PluginElement("Filter") final Filter filter
162163
)
@@ -219,7 +220,7 @@ public static HttpEventCollectorLog4jAppender createAppender(
219220
disableCertificateValidation,
220221
eventBodySerializer,
221222
eventHeaderSerializer,
222-
new HttpEventCollectorSender.TimeoutSettings(connectTimeout, callTimeout, readTimeout, writeTimeout)
223+
new HttpEventCollectorSender.TimeoutSettings(connectTimeout, callTimeout, readTimeout, writeTimeout, awaitTerminationTimeout)
223224
);
224225
}
225226

src/main/java/com/splunk/logging/HttpEventCollectorLogbackAppender.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -383,6 +383,14 @@ public long getWriteTimeout(long milliseconds) {
383383
return this.timeoutSettings.writeTimeout = milliseconds;
384384
}
385385

386+
public void setAwaitTerminationTimeout(long milliseconds) {
387+
this.timeoutSettings.awaitTerminationTimeout = milliseconds;
388+
}
389+
390+
public long getAwaitTerminationTimeout(long milliseconds) {
391+
return this.timeoutSettings.awaitTerminationTimeout = milliseconds;
392+
}
393+
386394
private static long parseLong(String string, int defaultValue) {
387395
try {
388396
return Long.parseLong(string);

src/main/java/com/splunk/logging/HttpEventCollectorLoggingHandler.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -114,6 +114,7 @@ public final class HttpEventCollectorLoggingHandler extends Handler {
114114
private final String CallTimeoutConfTag = "call_timeout";
115115
private final String ReadTimeoutConfTag = "read_timeout";
116116
private final String WriteTimeoutConfTag = "write_timeout";
117+
private final String AwaitTerminationTimeoutConfTag = "await_termination_timeout";
117118

118119
/** HttpEventCollectorLoggingHandler c-or */
119120
public HttpEventCollectorLoggingHandler() {
@@ -165,7 +166,8 @@ public HttpEventCollectorLoggingHandler() {
165166
getConfigurationNumericProperty(ConnectTimeoutConfTag, HttpEventCollectorSender.TimeoutSettings.DEFAULT_CONNECT_TIMEOUT),
166167
getConfigurationNumericProperty(CallTimeoutConfTag, HttpEventCollectorSender.TimeoutSettings.DEFAULT_CALL_TIMEOUT),
167168
getConfigurationNumericProperty(ReadTimeoutConfTag, HttpEventCollectorSender.TimeoutSettings.DEFAULT_READ_TIMEOUT),
168-
getConfigurationNumericProperty(WriteTimeoutConfTag, HttpEventCollectorSender.TimeoutSettings.DEFAULT_WRITE_TIMEOUT)
169+
getConfigurationNumericProperty(WriteTimeoutConfTag, HttpEventCollectorSender.TimeoutSettings.DEFAULT_WRITE_TIMEOUT),
170+
getConfigurationNumericProperty(AwaitTerminationTimeoutConfTag, HttpEventCollectorSender.TimeoutSettings.DEFAULT_AWAIT_TERMINATION_TIMEOUT)
169171
);
170172

171173
if ("raw".equalsIgnoreCase(type)) {

src/main/java/com/splunk/logging/HttpEventCollectorSender.java

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@
2929
import java.io.Serializable;
3030
import java.security.cert.CertificateException;
3131
import java.util.*;
32+
import java.util.concurrent.TimeUnit;
3233
import java.util.stream.Collectors;
3334

3435

@@ -263,6 +264,13 @@ public static void putIfPresent(JsonObject collection, String tag, Object value)
263264
private void stopHttpClient() {
264265
if (httpClient != null) {
265266
httpClient.dispatcher().executorService().shutdown();
267+
268+
if (timeoutSettings.awaitTerminationTimeout > 0) {
269+
try {
270+
httpClient.dispatcher().executorService().awaitTermination(timeoutSettings.awaitTerminationTimeout, TimeUnit.MILLISECONDS);
271+
} catch (InterruptedException ignored) { /* nop */ }
272+
}
273+
266274
httpClient = null;
267275
}
268276
}
@@ -392,19 +400,22 @@ public static class TimeoutSettings {
392400
public static final long DEFAULT_WRITE_TIMEOUT = 0; // 0 means no timeout
393401
public static final long DEFAULT_CALL_TIMEOUT = 0;
394402
public static final long DEFAULT_READ_TIMEOUT = 0;
403+
public static final long DEFAULT_AWAIT_TERMINATION_TIMEOUT = 0;
395404

396405
public long connectTimeout = DEFAULT_CONNECT_TIMEOUT;
397406
public long callTimeout = DEFAULT_CALL_TIMEOUT;
398407
public long readTimeout = DEFAULT_READ_TIMEOUT;
399408
public long writeTimeout = DEFAULT_WRITE_TIMEOUT;
409+
public long awaitTerminationTimeout = DEFAULT_AWAIT_TERMINATION_TIMEOUT;
400410

401411
public TimeoutSettings() {}
402412

403-
public TimeoutSettings(long connectTimeout, long callTimeout, long readTimeout, long writeTimeout) {
413+
public TimeoutSettings(long connectTimeout, long callTimeout, long readTimeout, long writeTimeout, long awaitTerminationTimeout) {
404414
this.connectTimeout = connectTimeout;
405415
this.callTimeout = callTimeout;
406416
this.readTimeout = readTimeout;
407417
this.writeTimeout = writeTimeout;
418+
this.awaitTerminationTimeout = awaitTerminationTimeout;
408419
}
409420
}
410421
}

src/test/resources/log4j2.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,7 @@ under the License.
4545
batch_size_count="0"
4646
batch_interval="0"
4747
connect_timeout="5000"
48+
await_termination_timeout="1000"
4849
disableCertificateValidation="true">
4950
<PatternLayout pattern="%m"/>
5051
</SplunkHttp>

src/test/resources/logback.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,7 @@ under the License.
6060
<messageFormat>text</messageFormat>
6161
<middleware>HttpEventCollectorUnitTestMiddleware</middleware>
6262
<connectTimeout>5000</connectTimeout>
63+
<awaitTerminationTieout>2000</awaitTerminationTieout>
6364
<layout class="ch.qos.logback.classic.PatternLayout">
6465
<pattern>%msg</pattern>
6566
</layout>

0 commit comments

Comments
 (0)