Skip to content

Commit 7ac3764

Browse files
authored
Merge pull request #140 from eyalfa/fix_wrapped_callable_tasks_hierarchy
Fix wrapped callable tasks hierarchy
2 parents 4f107e1 + 482953c commit 7ac3764

File tree

6 files changed

+83
-16
lines changed

6 files changed

+83
-16
lines changed

timbermill-java/timbermill-api/pom.xml

+1-1
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616
<properties>
1717
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
1818
<java.source-target.version>1.8</java.source-target.version>
19-
<timbermill.version>2.4.3</timbermill.version>
19+
<timbermill.version>2.4.4</timbermill.version>
2020
<slf4jVersion>1.7.28</slf4jVersion>
2121
</properties>
2222

timbermill-java/timbermill-api/src/main/java/com/datorama/oss/timbermill/EventLogger.java

+31-11
Original file line numberDiff line numberDiff line change
@@ -180,23 +180,43 @@ String getCurrentTaskId() {
180180
return taskIdStack.empty() ? null : taskIdStack.peek();
181181
}
182182

183+
private class Scope implements AutoCloseable {
184+
final Stack<String> origStack = taskIdStack;
185+
186+
Scope(String taskId) {
187+
taskIdStack = new Stack<String>();
188+
if(null != taskId)
189+
taskIdStack.push(taskId);
190+
}
191+
192+
<T> T apply(Callable<T> c) throws Exception {
193+
return c.call();
194+
}
195+
<I, O> O apply(Function<I, O> f, I in) {
196+
return f.apply(in);
197+
}
198+
199+
@Override
200+
public void close() {
201+
taskIdStack = origStack;
202+
}
203+
}
204+
183205
<T> Callable<T> wrapCallable(Callable<T> callable) {
184-
final Stack<String> origTaskIdStack = taskIdStack;
206+
final String currentTaskId = getCurrentTaskId();
185207
return () -> {
186-
get().taskIdStack = (Stack<String>) origTaskIdStack.clone();
187-
T call = callable.call();
188-
get().taskIdStack.clear();
189-
return call;
208+
try(Scope scope = new Scope(currentTaskId)) {
209+
return scope.apply(callable);
210+
}
190211
};
191212
}
192213

193214
<T, R> Function<T, R> wrapFunction(Function<T, R> function) {
194-
final Stack<String> origTaskIdStack = taskIdStack;
195-
return t -> {
196-
get().taskIdStack = (Stack<String>) origTaskIdStack.clone();
197-
R call = function.apply(t);
198-
get().taskIdStack.clear();
199-
return call;
215+
final String currentTaskId = getCurrentTaskId();
216+
return (in) -> {
217+
try(Scope scope = new Scope(currentTaskId)) {
218+
return scope.apply(function, in);
219+
}
200220
};
201221
}
202222

timbermill-java/timbermill-api/src/test/java/com/datorama/oss/timbermill/EventLoggerTest.java

+46
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,13 @@
11
package com.datorama.oss.timbermill;
22

33
import java.util.List;
4+
import java.util.concurrent.Callable;
45
import java.util.concurrent.TimeUnit;
6+
import java.util.function.Function;
57

68
import org.awaitility.Awaitility;
79
import org.junit.After;
10+
import org.junit.Before;
811
import org.junit.BeforeClass;
912
import org.junit.Test;
1013

@@ -39,6 +42,7 @@ public static void init(){
3942

4043
@After
4144
public void tearDown() {
45+
el.clearStack();
4246
EventLogger.exit();
4347
mockPipe.close();
4448
}
@@ -60,6 +64,48 @@ public void testSimpleEventLogger() {
6064
assertEquals(TEST, startEvent.getStrings().get(BOOTSTRAP));
6165
}
6266

67+
@Test
68+
public void testWrapCallable() throws Exception {
69+
String parentTaskId = el.startEvent(QUERY, EMPTY_LOG_PARAMS);
70+
Callable<String> wrappedCallable = el.wrapCallable(() -> {
71+
return el.getCurrentTaskId();
72+
});
73+
74+
String childTaskId = el.startEvent(QUERY, EMPTY_LOG_PARAMS);
75+
76+
String callableVisibleTaskId = wrappedCallable.call();
77+
78+
assertEquals(callableVisibleTaskId, parentTaskId);
79+
}
80+
81+
@Test
82+
public void testWrapCallableOnEmptyStack() throws Exception {
83+
Callable<String> wrappedCallable = el.wrapCallable(() -> {
84+
String parentTaskId = TimberLogger.getCurrentTaskId();
85+
String selfTaskId = TimberLogger.start("some_nifty_task");
86+
TimberLogger.success();
87+
return parentTaskId;
88+
});
89+
90+
String callableVisibleTaskId = wrappedCallable.call();
91+
92+
assertNull(callableVisibleTaskId);
93+
}
94+
95+
@Test
96+
public void testWrapFunction() throws Exception {
97+
String parentTaskId = el.startEvent(QUERY, EMPTY_LOG_PARAMS);
98+
Function<Integer, String> wrappedFunction = el.<Integer, String>wrapFunction(ignored -> {
99+
return el.getCurrentTaskId();
100+
});
101+
102+
String childTaskId = el.startEvent(QUERY, EMPTY_LOG_PARAMS);
103+
104+
String callableVisibleTaskId = wrappedFunction.apply(42);
105+
106+
assertEquals(callableVisibleTaskId, parentTaskId);
107+
}
108+
63109
@Test
64110
public void testFailedEventLogger() {
65111
el.startEvent(QUERY, EMPTY_LOG_PARAMS);

timbermill-java/timbermill-client/pom.xml

+2-2
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515
<properties>
1616
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
1717
<java.source-target.version>1.8</java.source-target.version>
18-
<timbermill.version>2.4.3</timbermill.version>
18+
<timbermill.version>2.4.4</timbermill.version>
1919
<aspectj.version>1.9.6</aspectj.version>
2020
<org.springframework.version>5.3.4</org.springframework.version>
2121
</properties>
@@ -124,7 +124,7 @@
124124
<plugin>
125125
<groupId>org.codehaus.mojo</groupId>
126126
<artifactId>aspectj-maven-plugin</artifactId>
127-
<version>1.7</version>
127+
<version>1.14.0</version>
128128
<configuration>
129129
<showWeaveInfo>true</showWeaveInfo>
130130
<source>${java.source-target.version}</source>

timbermill-java/timbermill-local/pom.xml

+1-1
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414

1515
<properties>
1616
<java.source-target.version>1.8</java.source-target.version>
17-
<timbermill.version>2.4.3</timbermill.version>
17+
<timbermill.version>2.4.4</timbermill.version>
1818
<kamon.bundle.version>2.0.4</kamon.bundle.version>
1919
</properties>
2020

timbermill-java/timbermill-server/pom.xml

+2-1
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
<groupId>org.springframework.boot</groupId>
77
<artifactId>spring-boot-starter-parent</artifactId>
88
<version>2.3.3.RELEASE</version>
9+
<relativePath/>
910
</parent>
1011
<modelVersion>4.0.0</modelVersion>
1112

@@ -16,7 +17,7 @@
1617
<properties>
1718
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
1819
<java.source-target.version>1.8</java.source-target.version>
19-
<timbermill.version>2.4.3</timbermill.version>
20+
<timbermill.version>2.4.4</timbermill.version>
2021
<slf4jVersion>1.7.28</slf4jVersion>
2122
</properties>
2223

0 commit comments

Comments
 (0)