Skip to content

Commit 295a5a7

Browse files
Bump jctools-core from 3.3.0 to 4.0.1 (#2792)
* Bump jctools-core from 3.3.0 to 4.0.1 Bumps [jctools-core](https://github.com/JCTools/JCTools) from 3.3.0 to 4.0.1. - [Release notes](https://github.com/JCTools/JCTools/releases) - [Changelog](https://github.com/JCTools/JCTools/blob/master/RELEASE-NOTES.md) - [Commits](JCTools/JCTools@v3.3.0...v4.0.1) --- updated-dependencies: - dependency-name: org.jctools:jctools-core dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] <[email protected]> * refactor for removed classes Signed-off-by: dependabot[bot] <[email protected]> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Sylvain Juge <[email protected]>
1 parent 5da9133 commit 295a5a7

File tree

8 files changed

+29
-63
lines changed

8 files changed

+29
-63
lines changed

apm-agent-core/pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@
5151
<dependency>
5252
<groupId>org.jctools</groupId>
5353
<artifactId>jctools-core</artifactId>
54-
<version>3.3.0</version>
54+
<version>4.0.1</version>
5555
</dependency>
5656
<dependency>
5757
<groupId>com.googlecode.concurrentlinkedhashmap</groupId>

apm-agent-core/src/main/java/co/elastic/apm/agent/objectpool/ObjectPoolFactory.java

Lines changed: 13 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -24,14 +24,12 @@
2424
import co.elastic.apm.agent.impl.transaction.TraceContext;
2525
import co.elastic.apm.agent.impl.transaction.Transaction;
2626
import co.elastic.apm.agent.objectpool.impl.QueueBasedObjectPool;
27-
import org.jctools.queues.atomic.AtomicQueueFactory;
28-
29-
import static org.jctools.queues.spec.ConcurrentQueueSpec.createBoundedMpmc;
27+
import org.jctools.queues.atomic.MpmcAtomicArrayQueue;
3028

3129
public class ObjectPoolFactory {
3230

33-
protected <T extends Recyclable> ObjectPool<T> createRecyclableObjectPool(int maxCapacity, Allocator<T> allocator) {
34-
return QueueBasedObjectPool.ofRecyclable(AtomicQueueFactory.<T>newQueue(createBoundedMpmc(maxCapacity)), false, allocator);
31+
public <T extends Recyclable> ObjectPool<T> createRecyclableObjectPool(int maxCapacity, Allocator<T> allocator) {
32+
return QueueBasedObjectPool.ofRecyclable(new MpmcAtomicArrayQueue<T>((maxCapacity)), false, allocator);
3533
}
3634

3735
public ObjectPool<Transaction> createTransactionPool(int maxCapacity, final ElasticApmTracer tracer) {
@@ -54,19 +52,19 @@ public Span createInstance() {
5452

5553
public ObjectPool<ErrorCapture> createErrorPool(int maxCapacity, final ElasticApmTracer tracer) {
5654
return createRecyclableObjectPool(maxCapacity, new Allocator<ErrorCapture>() {
57-
@Override
58-
public ErrorCapture createInstance() {
59-
return new ErrorCapture(tracer);
60-
}
61-
});
55+
@Override
56+
public ErrorCapture createInstance() {
57+
return new ErrorCapture(tracer);
58+
}
59+
});
6260
}
6361

6462
public ObjectPool<TraceContext> createSpanLinkPool(int maxCapacity, final ElasticApmTracer tracer) {
6563
return createRecyclableObjectPool(maxCapacity, new Allocator<TraceContext>() {
66-
@Override
67-
public TraceContext createInstance() {
68-
return TraceContext.with64BitId(tracer);
69-
}
70-
});
64+
@Override
65+
public TraceContext createInstance() {
66+
return TraceContext.with64BitId(tracer);
67+
}
68+
});
7169
}
7270
}

apm-agent-core/src/test/java/co/elastic/apm/agent/objectpool/TestObjectPoolFactory.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ public class TestObjectPoolFactory extends ObjectPoolFactory {
4343
private BookkeeperObjectPool<TraceContext> spanLinksPool;
4444

4545
@Override
46-
protected <T extends Recyclable> ObjectPool<T> createRecyclableObjectPool(int maxCapacity, Allocator<T> allocator) {
46+
public <T extends Recyclable> ObjectPool<T> createRecyclableObjectPool(int maxCapacity, Allocator<T> allocator) {
4747
ObjectPool<T> pool = super.createRecyclableObjectPool(maxCapacity, allocator);
4848
BookkeeperObjectPool<T> wrappedPool = new BookkeeperObjectPool<>(pool);
4949
createdPools.add(wrappedPool);

apm-agent-plugins/apm-apache-httpclient-plugin/src/main/java/co/elastic/apm/agent/httpclient/helper/ApacheHttpAsyncClientHelper.java

Lines changed: 5 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -18,20 +18,18 @@
1818
*/
1919
package co.elastic.apm.agent.httpclient.helper;
2020

21+
import co.elastic.apm.agent.impl.GlobalTracer;
2122
import co.elastic.apm.agent.impl.transaction.AbstractSpan;
2223
import co.elastic.apm.agent.impl.transaction.Span;
2324
import co.elastic.apm.agent.objectpool.Allocator;
2425
import co.elastic.apm.agent.objectpool.ObjectPool;
25-
import co.elastic.apm.agent.objectpool.impl.QueueBasedObjectPool;
26+
import co.elastic.apm.agent.objectpool.ObjectPoolFactory;
2627
import org.apache.http.concurrent.FutureCallback;
2728
import org.apache.http.nio.protocol.HttpAsyncRequestProducer;
2829
import org.apache.http.protocol.HttpContext;
29-
import org.jctools.queues.atomic.AtomicQueueFactory;
3030

3131
import javax.annotation.Nullable;
3232

33-
import static org.jctools.queues.spec.ConcurrentQueueSpec.createBoundedMpmc;
34-
3533
public class ApacheHttpAsyncClientHelper {
3634

3735
private static final int MAX_POOLED_ELEMENTS = 256;
@@ -40,13 +38,9 @@ public class ApacheHttpAsyncClientHelper {
4038
private final ObjectPool<FutureCallbackWrapper<?>> futureCallbackWrapperObjectPool;
4139

4240
public ApacheHttpAsyncClientHelper() {
43-
requestProducerWrapperObjectPool = QueueBasedObjectPool.ofRecyclable(
44-
AtomicQueueFactory.<HttpAsyncRequestProducerWrapper>newQueue(createBoundedMpmc(MAX_POOLED_ELEMENTS)),
45-
false, new RequestProducerWrapperAllocator());
46-
47-
futureCallbackWrapperObjectPool = QueueBasedObjectPool.ofRecyclable(
48-
AtomicQueueFactory.<FutureCallbackWrapper<?>>newQueue(createBoundedMpmc(MAX_POOLED_ELEMENTS)),
49-
false, new FutureCallbackWrapperAllocator());
41+
ObjectPoolFactory factory = GlobalTracer.requireTracerImpl().getObjectPoolFactory();
42+
requestProducerWrapperObjectPool = factory.createRecyclableObjectPool(MAX_POOLED_ELEMENTS, new RequestProducerWrapperAllocator());
43+
futureCallbackWrapperObjectPool = factory.createRecyclableObjectPool(MAX_POOLED_ELEMENTS, new FutureCallbackWrapperAllocator());
5044
}
5145

5246
private class RequestProducerWrapperAllocator implements Allocator<HttpAsyncRequestProducerWrapper> {

apm-agent-plugins/apm-es-restclient-plugin/apm-es-restclient-plugin-common/src/main/java/co/elastic/apm/agent/esrestclient/ElasticsearchRestClientInstrumentationHelper.java

Lines changed: 3 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -26,25 +26,21 @@
2626
import co.elastic.apm.agent.matcher.WildcardMatcher;
2727
import co.elastic.apm.agent.objectpool.Allocator;
2828
import co.elastic.apm.agent.objectpool.ObjectPool;
29-
import co.elastic.apm.agent.objectpool.impl.QueueBasedObjectPool;
29+
import co.elastic.apm.agent.sdk.logging.Logger;
30+
import co.elastic.apm.agent.sdk.logging.LoggerFactory;
3031
import co.elastic.apm.agent.util.IOUtils;
3132
import org.apache.http.HttpEntity;
3233
import org.apache.http.HttpHost;
3334
import org.elasticsearch.client.Response;
3435
import org.elasticsearch.client.ResponseException;
3536
import org.elasticsearch.client.ResponseListener;
36-
import org.jctools.queues.atomic.AtomicQueueFactory;
37-
import co.elastic.apm.agent.sdk.logging.Logger;
38-
import co.elastic.apm.agent.sdk.logging.LoggerFactory;
3937

4038
import javax.annotation.Nullable;
4139
import java.io.IOException;
4240
import java.util.Arrays;
4341
import java.util.List;
4442
import java.util.concurrent.CancellationException;
4543

46-
import static org.jctools.queues.spec.ConcurrentQueueSpec.createBoundedMpmc;
47-
4844
public class ElasticsearchRestClientInstrumentationHelper {
4945

5046
private static final Logger logger = LoggerFactory.getLogger(ElasticsearchRestClientInstrumentationHelper.class);
@@ -70,10 +66,7 @@ public static ElasticsearchRestClientInstrumentationHelper get() {
7066

7167
private ElasticsearchRestClientInstrumentationHelper(ElasticApmTracer tracer) {
7268
this.tracer = tracer;
73-
responseListenerObjectPool = QueueBasedObjectPool.ofRecyclable(
74-
AtomicQueueFactory.<ResponseListenerWrapper>newQueue(createBoundedMpmc(MAX_POOLED_ELEMENTS)),
75-
false,
76-
new ResponseListenerAllocator());
69+
this.responseListenerObjectPool = tracer.getObjectPoolFactory().createRecyclableObjectPool(MAX_POOLED_ELEMENTS, new ResponseListenerAllocator());
7770
}
7871

7972
private class ResponseListenerAllocator implements Allocator<ResponseListenerWrapper> {

apm-agent-plugins/apm-kafka-plugin/apm-kafka-base-plugin/src/main/java/co/elastic/apm/agent/kafka/helper/KafkaInstrumentationHelper.java

Lines changed: 2 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -25,21 +25,17 @@
2525
import co.elastic.apm.agent.matcher.WildcardMatcher;
2626
import co.elastic.apm.agent.objectpool.Allocator;
2727
import co.elastic.apm.agent.objectpool.ObjectPool;
28-
import co.elastic.apm.agent.objectpool.impl.QueueBasedObjectPool;
2928
import co.elastic.apm.agent.sdk.logging.Logger;
3029
import co.elastic.apm.agent.sdk.logging.LoggerFactory;
3130
import org.apache.kafka.clients.producer.Callback;
3231
import org.apache.kafka.clients.producer.KafkaProducer;
3332
import org.apache.kafka.clients.producer.ProducerRecord;
3433
import org.apache.kafka.common.Node;
3534
import org.apache.kafka.common.PartitionInfo;
36-
import org.jctools.queues.atomic.AtomicQueueFactory;
3735

3836
import javax.annotation.Nullable;
3937
import java.util.List;
4038

41-
import static org.jctools.queues.spec.ConcurrentQueueSpec.createBoundedMpmc;
42-
4339
public class KafkaInstrumentationHelper {
4440

4541
public static final Logger logger = LoggerFactory.getLogger(KafkaInstrumentationHelper.class);
@@ -55,10 +51,8 @@ public static KafkaInstrumentationHelper get() {
5551

5652
public KafkaInstrumentationHelper(ElasticApmTracer tracer) {
5753
this.tracer = tracer;
58-
messagingConfiguration = tracer.getConfig(MessagingConfiguration.class);
59-
this.callbackWrapperObjectPool = QueueBasedObjectPool.ofRecyclable(
60-
AtomicQueueFactory.<CallbackWrapper>newQueue(createBoundedMpmc(256)),
61-
false,
54+
this.messagingConfiguration = tracer.getConfig(MessagingConfiguration.class);
55+
this.callbackWrapperObjectPool = tracer.getObjectPoolFactory().createRecyclableObjectPool(256,
6256
new CallbackWrapperAllocator()
6357
);
6458
}

apm-agent-plugins/apm-servlet-plugin/src/main/java/co/elastic/apm/agent/servlet/helper/JakartaAsyncContextAdviceHelper.java

Lines changed: 2 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -23,18 +23,14 @@
2323
import co.elastic.apm.agent.impl.transaction.Transaction;
2424
import co.elastic.apm.agent.objectpool.Allocator;
2525
import co.elastic.apm.agent.objectpool.ObjectPool;
26-
import co.elastic.apm.agent.objectpool.impl.QueueBasedObjectPool;
2726
import co.elastic.apm.agent.servlet.ServletTransactionHelper;
28-
import org.jctools.queues.atomic.AtomicQueueFactory;
29-
3027
import jakarta.servlet.AsyncContext;
3128
import jakarta.servlet.ServletRequest;
3229

3330
import static co.elastic.apm.agent.servlet.ServletTransactionHelper.ASYNC_ATTRIBUTE;
3431
import static co.elastic.apm.agent.servlet.ServletTransactionHelper.TRANSACTION_ATTRIBUTE;
3532
import static co.elastic.apm.agent.servlet.helper.AsyncConstants.ASYNC_LISTENER_ADDED;
3633
import static co.elastic.apm.agent.servlet.helper.AsyncConstants.MAX_POOLED_ELEMENTS;
37-
import static org.jctools.queues.spec.ConcurrentQueueSpec.createBoundedMpmc;
3834

3935
public class JakartaAsyncContextAdviceHelper implements AsyncContextAdviceHelper<AsyncContext> {
4036

@@ -44,11 +40,8 @@ public class JakartaAsyncContextAdviceHelper implements AsyncContextAdviceHelper
4440

4541
public JakartaAsyncContextAdviceHelper(ElasticApmTracer tracer) {
4642
this.tracer = tracer;
47-
servletTransactionHelper = new ServletTransactionHelper(tracer);
48-
49-
asyncListenerObjectPool = QueueBasedObjectPool.ofRecyclable(
50-
AtomicQueueFactory.<JakartaApmAsyncListener>newQueue(createBoundedMpmc(MAX_POOLED_ELEMENTS)),
51-
false,
43+
this.servletTransactionHelper = new ServletTransactionHelper(tracer);
44+
this.asyncListenerObjectPool = tracer.getObjectPoolFactory().createRecyclableObjectPool(MAX_POOLED_ELEMENTS,
5245
new JakartaAsyncContextAdviceHelper.JakartaApmAsyncListenerAllocator());
5346
}
5447

apm-agent-plugins/apm-servlet-plugin/src/main/java/co/elastic/apm/agent/servlet/helper/JavaxAsyncContextAdviceHelper.java

Lines changed: 2 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -23,9 +23,7 @@
2323
import co.elastic.apm.agent.impl.transaction.Transaction;
2424
import co.elastic.apm.agent.objectpool.Allocator;
2525
import co.elastic.apm.agent.objectpool.ObjectPool;
26-
import co.elastic.apm.agent.objectpool.impl.QueueBasedObjectPool;
2726
import co.elastic.apm.agent.servlet.ServletTransactionHelper;
28-
import org.jctools.queues.atomic.AtomicQueueFactory;
2927

3028
import javax.servlet.AsyncContext;
3129
import javax.servlet.ServletRequest;
@@ -34,7 +32,6 @@
3432
import static co.elastic.apm.agent.servlet.ServletTransactionHelper.TRANSACTION_ATTRIBUTE;
3533
import static co.elastic.apm.agent.servlet.helper.AsyncConstants.ASYNC_LISTENER_ADDED;
3634
import static co.elastic.apm.agent.servlet.helper.AsyncConstants.MAX_POOLED_ELEMENTS;
37-
import static org.jctools.queues.spec.ConcurrentQueueSpec.createBoundedMpmc;
3835

3936
public class JavaxAsyncContextAdviceHelper implements AsyncContextAdviceHelper<AsyncContext> {
4037

@@ -44,11 +41,8 @@ public class JavaxAsyncContextAdviceHelper implements AsyncContextAdviceHelper<A
4441

4542
public JavaxAsyncContextAdviceHelper(ElasticApmTracer tracer) {
4643
this.tracer = tracer;
47-
servletTransactionHelper = new ServletTransactionHelper(tracer);
48-
49-
asyncListenerObjectPool = QueueBasedObjectPool.ofRecyclable(
50-
AtomicQueueFactory.<JavaxApmAsyncListener>newQueue(createBoundedMpmc(MAX_POOLED_ELEMENTS)),
51-
false,
44+
this.servletTransactionHelper = new ServletTransactionHelper(tracer);
45+
this.asyncListenerObjectPool = tracer.getObjectPoolFactory().createRecyclableObjectPool(MAX_POOLED_ELEMENTS,
5246
new JavaxAsyncContextAdviceHelper.ApmAsyncListenerAllocator());
5347
}
5448

0 commit comments

Comments
 (0)