From 5a7c38983d5c0f51af09f491b4de9d3bc204e901 Mon Sep 17 00:00:00 2001 From: Shijie Sheng Date: Tue, 14 Oct 2025 09:50:52 -0700 Subject: [PATCH] chore (thrift deprecation): remove tchannel dependency and other thrift related names Signed-off-by: Shijie Sheng --- .travis.yml | 15 ---- CONTRIBUTING.md | 25 +++--- build.gradle | 3 +- .../GenericWorkflowClientExternalImpl.java | 30 +++---- .../replay/ActivityDecisionContext.java | 10 +-- .../replay/WorkflowDecisionContext.java | 10 +-- .../shadowing/ReplayWorkflowActivityImpl.java | 2 +- .../internal/shadowing/WorkflowExecution.java | 2 +- .../cadence/serviceclient/ClientOptions.java | 22 ++--- .../converter/JsonDataConverterTest.java | 83 +------------------ .../common/WorkflowExecutionUtilsTest.java | 2 +- .../compatibility/MapperTestUtil.java | 6 +- .../internal/testing/ActivityTestingTest.java | 4 +- src/test/resources/docker-compose.yml | 2 +- 14 files changed, 60 insertions(+), 156 deletions(-) delete mode 100644 .travis.yml diff --git a/.travis.yml b/.travis.yml deleted file mode 100644 index fd8bd1014..000000000 --- a/.travis.yml +++ /dev/null @@ -1,15 +0,0 @@ -language: java - -sudo: required - -env: - - SKIP_DOCKER_SERVICE=true # used to skip docker service tests in WorkflowTest for now. - -before_install: - - pushd /tmp - - wget https://archive.apache.org/dist/thrift/0.9.3/thrift-0.9.3.tar.gz - - tar xfz thrift-0.9.3.tar.gz - - cd thrift-0.9.3 - - ./configure --enable-libs=no --enable-tests=no --enable-tutorial=no --with-cpp=no --with-c_glib=no --with-java=yes --with-ruby=no --with-erlang=no --with-go=no --with-nodejs=no --with-python=no - - make -j2 && sudo make install - - popd diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index d00215bad..c66a0c6e4 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -7,13 +7,10 @@ This doc is intended for contributors to `cadence-java-client` (hopefully that's ## Development Environment * Java 11 (currently, we use Java 11 to compile Java 8 code). -* Thrift 0.9.3 (use [homebrew](https://formulae.brew.sh/formula/thrift@0.9) or [distribution](https://downloads.apache.org/thrift/0.9.3/)). Alternatively you can install with `scripts/install-thrift-locally-osx.sh`. * Gradle build tool [6.x](https://github.com/uber/cadence-java-client/blob/master/gradle/wrapper/gradle-wrapper.properties) * Docker -:warning: Note 1: You must install the 0.9.x version of Thrift. Otherwise compiling would fail at error `error: package org.apache.thrift.annotation does not exist` - -:warning: Note 2: It's currently compatible with Java 8 compiler but no guarantee in the future. +:warning: Note 1: It's currently compatible with Java 8 compiler but no guarantee in the future. ## IntelliJ IDE integration (Optional) @@ -21,7 +18,7 @@ This doc is intended for contributors to `cadence-java-client` (hopefully that's ![IntelliJ](https://user-images.githubusercontent.com/4523955/135696878-81c1e62e-eb04-45e6-9bcb-785ac38b6607.png) -* Then all the below `gradlew` command can be replaced with the Gradle plugin operation +* Then all the below `gradlew` command can be replaced with the Gradle plugin operation ![Gradle](https://user-images.githubusercontent.com/4523955/135696922-d43bc36d-18a4-4b7b-adee-0fe8300bf855.png) ## Licence headers @@ -61,11 +58,11 @@ Comment out the first section in `publications` ( line 160 to line 191 in [this 2. Change the [version](https://github.com/uber/cadence-java-client/blob/c9ec6786aa9f866b0310292ea3ee5df63adc8799/build.gradle#L43) to add a `local` suffix. E.g. ``` version = '3.3.0' -```` -to +```` +to ``` version = '3.3.0-local' -``` +``` Then run the command ```bash ./gradlew publishToMavenLocal @@ -73,12 +70,12 @@ Then run the command Now you have the local cadence-java-client in your machine using veriosn `3.3.0-local` 3. To test with Cadence Java Samples, [change](https://github.com/uber/cadence-java-samples/blob/master/build.gradle#L32) `mavenCentral()` to `mavenLocal()` -and also change the [version](https://github.com/uber/cadence-java-samples/blob/a79d8d6e5860cf9986bf549fc1f96badecb09f8f/build.gradle#L38) with your suffix. +and also change the [version](https://github.com/uber/cadence-java-samples/blob/a79d8d6e5860cf9986bf549fc1f96badecb09f8f/build.gradle#L38) with your suffix. -Then `./gradlew build` and refer to the sample repo for how to run the code(it needs to run with a [Cadence server](https://github.com/uber/cadence)). +Then `./gradlew build` and refer to the sample repo for how to run the code(it needs to run with a [Cadence server](https://github.com/uber/cadence)). -:warning: If you run into problem with `version.properties` [creation task](https://github.com/uber/cadence-java-client/blob/c9ec6786aa9f866b0310292ea3ee5df63adc8799/build.gradle#L109), you can comment the task out. It's okay for local testing. -The property file is being used by [Version class](https://github.com/uber/cadence-java-client/blob/master/src/main/java/com/uber/cadence/internal/Version.java#L39)to report the library version for logging/metrics. +:warning: If you run into problem with `version.properties` [creation task](https://github.com/uber/cadence-java-client/blob/c9ec6786aa9f866b0310292ea3ee5df63adc8799/build.gradle#L109), you can comment the task out. It's okay for local testing. +The property file is being used by [Version class](https://github.com/uber/cadence-java-client/blob/master/src/main/java/com/uber/cadence/internal/Version.java#L39)to report the library version for logging/metrics. ## Unit & Integration Test @@ -92,10 +89,10 @@ The test by default will run with TestEnvironment without Cadence service. If yo ```bash USE_DOCKER_SERVICE=true ./gradlew test ``` -And sometimes it's important to test the non-sticky mode +And sometimes it's important to test the non-sticky mode ```bash STICKY_OFF=true USE_DOCKER_SERVICE=true ./gradlew test ``` -Also, if there is any Github Actions test failure that you cannot reproduce locally, +Also, if there is any Github Actions test failure that you cannot reproduce locally, follow [github action docker-compose](./docker/github_actions/README.md) instructions to run the tests. diff --git a/build.gradle b/build.gradle index 45489d18e..fa8be595f 100644 --- a/build.gradle +++ b/build.gradle @@ -73,7 +73,8 @@ dependencies { errorproneJavac('com.google.errorprone:javac:9+181-r4173-1') errorprone('com.google.errorprone:error_prone_core:2.3.4') - compile group: 'com.uber.tchannel', name: 'tchannel-core', version: '0.8.30' + compile group: 'io.opentracing', name: 'opentracing-api', version: '0.33.0' + compile group: 'io.opentracing', name: 'opentracing-util', version: '0.33.0' compile group: 'org.slf4j', name: 'slf4j-api', version: '1.7.36' compile group: 'com.google.code.gson', name: 'gson', version: '2.10' compile group: 'com.uber.m3', name: 'tally-core', version: '0.11.1' diff --git a/src/main/java/com/uber/cadence/internal/external/GenericWorkflowClientExternalImpl.java b/src/main/java/com/uber/cadence/internal/external/GenericWorkflowClientExternalImpl.java index 7f279c568..21b3b7e2c 100644 --- a/src/main/java/com/uber/cadence/internal/external/GenericWorkflowClientExternalImpl.java +++ b/src/main/java/com/uber/cadence/internal/external/GenericWorkflowClientExternalImpl.java @@ -255,9 +255,9 @@ private StartWorkflowExecutionRequest getStartRequest( if (!Strings.isNullOrEmpty(startParameters.getCronSchedule())) { request.setCronSchedule(startParameters.getCronSchedule()); } - request.setMemo(toMemoThrift(startParameters.getMemo())); - request.setSearchAttributes(toSearchAttributesThrift(startParameters.getSearchAttributes())); - request.setHeader(toHeaderThrift(startParameters.getContext())); + request.setMemo(toMemo(startParameters.getMemo())); + request.setSearchAttributes(toSearchAttributes(startParameters.getSearchAttributes())); + request.setHeader(toHeader(startParameters.getContext())); if (startParameters.getDelayStart() != null) { request.setDelayStartSeconds((int) startParameters.getDelayStart().getSeconds()); } @@ -265,7 +265,7 @@ private StartWorkflowExecutionRequest getStartRequest( return request; } - private Memo toMemoThrift(Map memo) { + private Memo toMemo(Map memo) { if (memo == null || memo.isEmpty()) { return null; } @@ -274,12 +274,12 @@ private Memo toMemoThrift(Map memo) { for (Map.Entry item : memo.entrySet()) { fields.put(item.getKey(), item.getValue()); } - Memo memoThrift = new Memo(); - memoThrift.setFields(fields); - return memoThrift; + Memo memoEntity = new Memo(); + memoEntity.setFields(fields); + return memoEntity; } - private SearchAttributes toSearchAttributesThrift(Map searchAttributes) { + private SearchAttributes toSearchAttributes(Map searchAttributes) { if (searchAttributes == null || searchAttributes.isEmpty()) { return null; } @@ -288,12 +288,12 @@ private SearchAttributes toSearchAttributesThrift(Map searchAttr for (Map.Entry item : searchAttributes.entrySet()) { fields.put(item.getKey(), item.getValue()); } - SearchAttributes searchAttrThrift = new SearchAttributes(); - searchAttrThrift.setIndexedFields(fields); - return searchAttrThrift; + SearchAttributes searchAttrEntity = new SearchAttributes(); + searchAttrEntity.setIndexedFields(fields); + return searchAttrEntity; } - private Header toHeaderThrift(Map headers) { + private Header toHeader(Map headers) { if (headers == null || headers.isEmpty()) { return null; } @@ -301,9 +301,9 @@ private Header toHeaderThrift(Map headers) { for (Map.Entry item : headers.entrySet()) { fields.put(item.getKey(), item.getValue()); } - Header headerThrift = new Header(); - headerThrift.setFields(fields); - return headerThrift; + Header headerEntity = new Header(); + headerEntity.setFields(fields); + return headerEntity; } private RetryPolicy toRetryPolicy(RetryParameters retryParameters) { diff --git a/src/main/java/com/uber/cadence/internal/replay/ActivityDecisionContext.java b/src/main/java/com/uber/cadence/internal/replay/ActivityDecisionContext.java index 817f6abcb..99bae559d 100644 --- a/src/main/java/com/uber/cadence/internal/replay/ActivityDecisionContext.java +++ b/src/main/java/com/uber/cadence/internal/replay/ActivityDecisionContext.java @@ -122,7 +122,7 @@ Consumer scheduleActivityTask( attributes.setRetryPolicy(retryParameters.toRetryPolicy()); } - attributes.setHeader(toHeaderThrift(parameters.getContext())); + attributes.setHeader(toHeader(parameters.getContext())); long scheduledEventId = decisions.scheduleActivityTask(attributes); context.setCompletionHandle(callback); @@ -200,7 +200,7 @@ void handleActivityTaskTimedOut(HistoryEvent event) { } } - private Header toHeaderThrift(Map headers) { + private Header toHeader(Map headers) { if (headers == null || headers.isEmpty()) { return null; } @@ -208,8 +208,8 @@ private Header toHeaderThrift(Map headers) { for (Map.Entry item : headers.entrySet()) { fields.put(item.getKey(), item.getValue()); } - Header headerThrift = new Header(); - headerThrift.setFields(fields); - return headerThrift; + Header headerEntity = new Header(); + headerEntity.setFields(fields); + return headerEntity; } } diff --git a/src/main/java/com/uber/cadence/internal/replay/WorkflowDecisionContext.java b/src/main/java/com/uber/cadence/internal/replay/WorkflowDecisionContext.java index 8cbd061c5..d5a1220ba 100644 --- a/src/main/java/com/uber/cadence/internal/replay/WorkflowDecisionContext.java +++ b/src/main/java/com/uber/cadence/internal/replay/WorkflowDecisionContext.java @@ -146,7 +146,7 @@ Consumer startChildWorkflow( attributes.setCronSchedule(parameters.getCronSchedule()); } - attributes.setHeader(toHeaderThrift(parameters.getContext())); + attributes.setHeader(toHeader(parameters.getContext())); ParentClosePolicy parentClosePolicy = parameters.getParentClosePolicy(); if (parentClosePolicy != null) { @@ -172,7 +172,7 @@ Consumer startChildWorkflow( return new ChildWorkflowCancellationHandler(initiatedEventId, attributes.getWorkflowId()); } - private Header toHeaderThrift(Map headers) { + private Header toHeader(Map headers) { if (headers == null || headers.isEmpty()) { return null; } @@ -180,9 +180,9 @@ private Header toHeaderThrift(Map headers) { for (Map.Entry item : headers.entrySet()) { fields.put(item.getKey(), item.getValue()); } - Header headerThrift = new Header(); - headerThrift.setFields(fields); - return headerThrift; + Header headerEntity = new Header(); + headerEntity.setFields(fields); + return headerEntity; } boolean isChildWorkflowExecutionStartedWithRetryOptions() { diff --git a/src/main/java/com/uber/cadence/internal/shadowing/ReplayWorkflowActivityImpl.java b/src/main/java/com/uber/cadence/internal/shadowing/ReplayWorkflowActivityImpl.java index eae82edb0..8b0ea6f95 100644 --- a/src/main/java/com/uber/cadence/internal/shadowing/ReplayWorkflowActivityImpl.java +++ b/src/main/java/com/uber/cadence/internal/shadowing/ReplayWorkflowActivityImpl.java @@ -179,7 +179,7 @@ protected WorkflowExecutionHistory getFullHistory(String domain, WorkflowExecuti RpcRetryer.DEFAULT_RPC_RETRY_OPTIONS, () -> WorkflowExecutionUtils.getHistoryPage( - nextPageToken, this.serviceClient, domain, execution.toThrift())); + nextPageToken, this.serviceClient, domain, execution.toEntity())); pageToken = resp.getNextPageToken(); // TODO support raw history feature once server removes default Thrift encoding diff --git a/src/main/java/com/uber/cadence/internal/shadowing/WorkflowExecution.java b/src/main/java/com/uber/cadence/internal/shadowing/WorkflowExecution.java index 45be38352..afebc2145 100644 --- a/src/main/java/com/uber/cadence/internal/shadowing/WorkflowExecution.java +++ b/src/main/java/com/uber/cadence/internal/shadowing/WorkflowExecution.java @@ -51,7 +51,7 @@ public void setRunId(String runId) { this.runId = runId; } - public com.uber.cadence.WorkflowExecution toThrift() { + public com.uber.cadence.WorkflowExecution toEntity() { return new com.uber.cadence.WorkflowExecution().setWorkflowId(workflowId).setRunId(runId); } diff --git a/src/main/java/com/uber/cadence/serviceclient/ClientOptions.java b/src/main/java/com/uber/cadence/serviceclient/ClientOptions.java index d7c7072d7..7f5a96ea2 100644 --- a/src/main/java/com/uber/cadence/serviceclient/ClientOptions.java +++ b/src/main/java/com/uber/cadence/serviceclient/ClientOptions.java @@ -47,7 +47,7 @@ public class ClientOptions { private static final String DEFAULT_CLIENT_APP_NAME = "cadence-client"; - /** Name of the Cadence service front end as required by TChannel. */ + /** Name of the Cadence service front end. */ private static final String DEFAULT_SERVICE_NAME = "cadence-frontend"; private static final ClientOptions DEFAULT_INSTANCE; @@ -59,23 +59,23 @@ public class ClientOptions { private final String host; private final int port; private final ManagedChannel gRPCChannel; - /** The tChannel timeout in milliseconds */ + /** The timeout in milliseconds */ private final long rpcTimeoutMillis; - /** The tChannel timeout for long poll calls in milliseconds */ + /** The ttimeout for long poll calls in milliseconds */ private final long rpcLongPollTimeoutMillis; - /** The tChannel timeout for query workflow call in milliseconds */ + /** The timeout for query workflow call in milliseconds */ private final long rpcQueryTimeoutMillis; - /** The tChannel timeout for list archived workflow call in milliseconds */ + /** The timeout for list archived workflow call in milliseconds */ private final long rpcListArchivedWorkflowTimeoutMillis; - /** TChannel service name that the Cadence service was started with. */ + /** Grpc Service name that the Cadence service was started with. */ private final String serviceName; /** Name of the service using the cadence-client. */ private final String clientAppName; /** Client for metrics reporting. */ private final Scope metricsScope; - /** Optional TChannel transport headers */ + /** Optional transport headers */ private final Map transportHeaders; - /** Optional TChannel headers */ + /** Optional headers */ private final Map headers; /** Optional authorization provider */ private final IAuthorizationProvider authProvider; @@ -320,8 +320,8 @@ public Builder setFeatureFlags(FeatureFlags featureFlags) { /** * Sets the client application name. * - *

This name will be used as the tchannel client service name. It will also be reported as a - * tag along with metrics emitted to m3. + *

This name will be used as the client service name. It will also be reported as a tag along + * with metrics emitted to m3. * * @param clientAppName String representing the client application name. * @return Builder for ClentOptions @@ -354,7 +354,7 @@ public Builder setMetricsScope(Scope metricsScope) { } /** - * Sets additional transport headers for tchannel client. + * Sets additional transport headers for client. * * @param transportHeaders Map with additional transport headers * @return Builder for ClentOptions diff --git a/src/test/java/com/uber/cadence/converter/JsonDataConverterTest.java b/src/test/java/com/uber/cadence/converter/JsonDataConverterTest.java index 83eeccfc6..93567ca73 100644 --- a/src/test/java/com/uber/cadence/converter/JsonDataConverterTest.java +++ b/src/test/java/com/uber/cadence/converter/JsonDataConverterTest.java @@ -20,7 +20,6 @@ import static org.junit.Assert.*; import com.google.gson.JsonIOException; -import com.uber.cadence.EventType; import com.uber.cadence.History; import com.uber.cadence.HistoryEvent; import com.uber.cadence.TaskList; @@ -37,7 +36,6 @@ import java.nio.charset.StandardCharsets; import java.util.ArrayList; import java.util.List; -import java.util.Objects; import java.util.UUID; import org.junit.Test; @@ -45,38 +43,8 @@ public class JsonDataConverterTest { private final DataConverter converter = JsonDataConverter.getInstance(); - static class TestData { - String val1; - // TBase value; - HistoryEvent val2; - // TEnum value; - EventType val3; - - public TestData(String val1, HistoryEvent val2, EventType val3) { - this.val1 = val1; - this.val2 = val2; - this.val3 = val3; - } - - @Override - public boolean equals(Object o) { - if (this == o) return true; - if (!(o instanceof TestData)) return false; - TestData testData = (TestData) o; - return Objects.equals(val1, testData.val1) - && Objects.equals(val2, testData.val2) - && val3 == testData.val3; - } - - @Override - public int hashCode() { - - return Objects.hash(val1, val2, val3); - } - } - @Test - public void testThrift() { + public void testEntity() { List events = new ArrayList<>(); WorkflowExecutionStartedEventAttributes started = new WorkflowExecutionStartedEventAttributes() @@ -97,7 +65,7 @@ public void testThrift() { } @Test - public void testThriftArray() { + public void testArray() { List events = new ArrayList<>(); WorkflowExecutionStartedEventAttributes started = new WorkflowExecutionStartedEventAttributes() @@ -118,53 +86,6 @@ public void testThriftArray() { assertEquals(new String(converted, StandardCharsets.UTF_8), history, fromConverted[1]); } - @Test - public void testThriftFieldsInPOJO() { - WorkflowExecutionStartedEventAttributes started = - new WorkflowExecutionStartedEventAttributes() - .setExecutionStartToCloseTimeoutSeconds(11) - .setIdentity("testIdentity") - .setInput("input".getBytes(StandardCharsets.UTF_8)) - .setWorkflowType(new WorkflowType().setName("workflowType1")) - .setTaskList(new TaskList().setName("taskList1")); - - HistoryEvent historyEvent = - new HistoryEvent() - .setTimestamp(1234567) - .setEventId(321) - .setWorkflowExecutionStartedEventAttributes(started); - - TestData testData = new TestData("test-thrift", historyEvent, EventType.ActivityTaskCompleted); - - byte[] converted = converter.toData(testData); - TestData fromConverted = converter.fromData(converted, TestData.class, TestData.class); - assertEquals(new String(converted, StandardCharsets.UTF_8), testData, fromConverted); - } - - @Test - public void testThriftFieldsInPOJOArray() { - WorkflowExecutionStartedEventAttributes started = - new WorkflowExecutionStartedEventAttributes() - .setExecutionStartToCloseTimeoutSeconds(11) - .setIdentity("testIdentity") - .setInput("input".getBytes(StandardCharsets.UTF_8)) - .setWorkflowType(new WorkflowType().setName("workflowType1")) - .setTaskList(new TaskList().setName("taskList1")); - - HistoryEvent historyEvent = - new HistoryEvent() - .setTimestamp(1234567) - .setEventId(321) - .setWorkflowExecutionStartedEventAttributes(started); - - TestData testData = new TestData("test-thrift", historyEvent, EventType.ActivityTaskCompleted); - - byte[] converted = converter.toData("abc", testData); - Object[] fromConverted = converter.fromDataArray(converted, String.class, TestData.class); - assertEquals(new String(converted, StandardCharsets.UTF_8), "abc", fromConverted[0]); - assertEquals(new String(converted, StandardCharsets.UTF_8), testData, fromConverted[1]); - } - public static void foo(List arg) {} @Test diff --git a/src/test/java/com/uber/cadence/internal/common/WorkflowExecutionUtilsTest.java b/src/test/java/com/uber/cadence/internal/common/WorkflowExecutionUtilsTest.java index 2213b9419..078fec93e 100644 --- a/src/test/java/com/uber/cadence/internal/common/WorkflowExecutionUtilsTest.java +++ b/src/test/java/com/uber/cadence/internal/common/WorkflowExecutionUtilsTest.java @@ -405,7 +405,7 @@ public void testGetHistoryPage_HistoryIsNull() throws Exception { // =========================== @Test public void testGetHistoryPage_ExceptionWhileRetrievingExecutionHistory() throws Exception { - final String errMessage = "thrift comm exception"; + final String errMessage = "comm exception"; when(mockService.GetWorkflowExecutionHistory(any())).thenThrow(new CadenceError(errMessage)); Error exception = diff --git a/src/test/java/com/uber/cadence/internal/compatibility/MapperTestUtil.java b/src/test/java/com/uber/cadence/internal/compatibility/MapperTestUtil.java index 8de471539..f2d464e86 100644 --- a/src/test/java/com/uber/cadence/internal/compatibility/MapperTestUtil.java +++ b/src/test/java/com/uber/cadence/internal/compatibility/MapperTestUtil.java @@ -23,9 +23,9 @@ import org.junit.Assert; /** - * Utility that asserts all fields on a Thrift object are present other than a specified list of - * fields. This ensures that any changes to the IDL will result in the test failing unless either - * the test or mapper is updated. + * Utility that asserts all fields on a object are present other than a specified list of fields. + * This ensures that any changes to the IDL will result in the test failing unless either the test + * or mapper is updated. */ public class MapperTestUtil { public static void assertNoMissingFields(Object message) { diff --git a/src/test/java/com/uber/cadence/internal/testing/ActivityTestingTest.java b/src/test/java/com/uber/cadence/internal/testing/ActivityTestingTest.java index a3fb0dfe0..bdca3dd8f 100644 --- a/src/test/java/com/uber/cadence/internal/testing/ActivityTestingTest.java +++ b/src/test/java/com/uber/cadence/internal/testing/ActivityTestingTest.java @@ -32,8 +32,8 @@ import com.uber.cadence.serviceclient.IWorkflowService; import com.uber.cadence.testing.TestActivityEnvironment; import com.uber.cadence.workflow.ActivityFailureException; -import io.netty.util.internal.ConcurrentSet; import java.io.IOException; +import java.util.concurrent.ConcurrentSkipListSet; import java.util.concurrent.atomic.AtomicInteger; import java.util.concurrent.atomic.AtomicReference; import org.junit.Before; @@ -134,7 +134,7 @@ public void activity1() throws InterruptedException { @Test public void testHeartbeatThrottling() throws InterruptedException { testEnvironment.registerActivitiesImplementations(new BurstHeartbeatActivityImpl()); - ConcurrentSet details = new ConcurrentSet<>(); + ConcurrentSkipListSet details = new ConcurrentSkipListSet<>(); testEnvironment.setActivityHeartbeatListener(Integer.class, details::add); InterruptibleTestActivity activity = testEnvironment.newActivityStub(InterruptibleTestActivity.class); diff --git a/src/test/resources/docker-compose.yml b/src/test/resources/docker-compose.yml index ff791a47e..146242123 100644 --- a/src/test/resources/docker-compose.yml +++ b/src/test/resources/docker-compose.yml @@ -79,4 +79,4 @@ services: depends_on: - prometheus ports: - - '3000:3000' \ No newline at end of file + - '3000:3000'