Skip to content

Commit

Permalink
Add a ThreadPoolFactory to propagate OpenTelemetry contexts
Browse files Browse the repository at this point in the history
Signed-off-by: Adriano Machado <[email protected]>
  • Loading branch information
ammachado committed Sep 11, 2024
1 parent 67c5361 commit aeb286b
Show file tree
Hide file tree
Showing 3 changed files with 74 additions and 3 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
# Generated by camel build tools - do NOT edit this file!
class=org.apache.camel.opentelemetry.OpenTelemetryInstrumentedThreadPoolFactory
Original file line number Diff line number Diff line change
@@ -0,0 +1,68 @@
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.apache.camel.opentelemetry;

import java.util.concurrent.ExecutorService;
import java.util.concurrent.RejectedExecutionHandler;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.ThreadFactory;
import java.util.concurrent.TimeUnit;

import io.opentelemetry.context.Context;
import org.apache.camel.spi.ThreadPoolFactory;
import org.apache.camel.spi.ThreadPoolProfile;
import org.apache.camel.spi.annotations.JdkService;
import org.apache.camel.support.DefaultThreadPoolFactory;

@JdkService(ThreadPoolFactory.FACTORY)
public class OpenTelemetryInstrumentedThreadPoolFactory extends DefaultThreadPoolFactory implements ThreadPoolFactory {

@Override
public ExecutorService newCachedThreadPool(ThreadFactory threadFactory) {
return Context.current().wrap(super.newCachedThreadPool(threadFactory));
}

@Override
public ExecutorService newThreadPool(
int corePoolSize,
int maxPoolSize,
long keepAliveTime,
TimeUnit timeUnit,
int maxQueueSize,
boolean allowCoreThreadTimeOut,
RejectedExecutionHandler rejectedExecutionHandler,
ThreadFactory threadFactory)
throws IllegalArgumentException {

ExecutorService executorService = super.newThreadPool(
corePoolSize,
maxPoolSize,
keepAliveTime,
timeUnit,
maxQueueSize,
allowCoreThreadTimeOut,
rejectedExecutionHandler,
threadFactory);

return Context.current().wrap(executorService);
}

@Override
public ScheduledExecutorService newScheduledThreadPool(ThreadPoolProfile profile, ThreadFactory threadFactory) {
return Context.current().wrap(super.newScheduledThreadPool(profile, threadFactory));
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@
* Creates ExecutorService and ScheduledExecutorService objects that work with a thread pool for a given
* ThreadPoolProfile and ThreadFactory.
*
* This interface allows to customize the creation of these objects to adapt camel for application servers and other
* This interface allows customizing the creation of these objects to adapt camel for application servers and other
* environments where thread pools should not be created with the jdk methods
*/
public interface ThreadPoolFactory {
Expand All @@ -38,8 +38,9 @@ public interface ThreadPoolFactory {
* Creates a new cached thread pool
* <p/>
* The cached thread pool is a term from the JDK from the method
* {@link java.util.concurrent.Executors#newCachedThreadPool()}. Typically it will have no size limit (this is why
* it is handled separately
* {@link java.util.concurrent.Executors#newCachedThreadPool()}.
* <p/>
* Typically, it will have no size limit (this is why it is handled separately)
*
* @param threadFactory factory for creating threads
* @return the created thread pool
Expand Down

0 comments on commit aeb286b

Please sign in to comment.