Skip to content

Commit

Permalink
workflow timeout and update
Browse files Browse the repository at this point in the history
  • Loading branch information
dandavison committed Oct 8, 2024
1 parent 98fac0c commit 2087727
Show file tree
Hide file tree
Showing 9 changed files with 140 additions and 1 deletion.
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@ public static void main(String[] args) throws Exception {
.setWorkflowId(WORKFLOW_ID)
.setWorkflowIdReusePolicy(
WorkflowIdReusePolicy.WORKFLOW_ID_REUSE_POLICY_TERMINATE_IF_RUNNING)
.setWorkflowRunTimeout(java.time.Duration.ofSeconds(2))
.build();
MyWorkflow workflow = client.newWorkflowStub(MyWorkflow.class, workflowOptions);

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@ public class MyWorkflowImpl implements MyWorkflow {
.setRetryOptions(RetryOptions.newBuilder().setMaximumAttempts(1).build())
.build());

private boolean done;
private boolean done = false;

@Override
public void run() {
Expand All @@ -43,6 +43,7 @@ public void run() {

@Override
public int myUpdate() {
Workflow.sleep(Duration.ofSeconds(4));
int result = activity.myActivityMethod();
done = true;
return result;
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
worker:
ls *.java | entr -r \
sh -c 'cd $$(git rev-parse --show-toplevel) && ./gradlew -q execute -P mainClass=io.temporal.samples.basic.MyWorker'

run:
cd $$(git rev-parse --show-toplevel) && \
./gradlew -q execute -P mainClass=io.temporal.samples.basic.MyStarter

.PHONY: run worker
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
package io.temporal.samples.workflowtimeout;

import io.temporal.activity.ActivityInterface;
import io.temporal.activity.ActivityMethod;

@ActivityInterface
public interface MyActivity {

@ActivityMethod
int myActivityMethod();
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
package io.temporal.samples.workflowtimeout;

public class MyActivityImpl implements MyActivity {
@Override
public int myActivityMethod() {
return 7;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
package io.temporal.samples.workflowtimeout;

import io.temporal.api.enums.v1.WorkflowIdConflictPolicy;
import io.temporal.client.WorkflowClient;
import io.temporal.client.WorkflowOptions;
import io.temporal.serviceclient.WorkflowServiceStubs;

public class MyStarter {

static final String WORKFLOW_ID = "wid";

public static void main(String[] args) throws Exception {

WorkflowServiceStubs service = WorkflowServiceStubs.newLocalServiceStubs();

WorkflowClient client = WorkflowClient.newInstance(service);

WorkflowOptions workflowOptions =
WorkflowOptions.newBuilder()
.setTaskQueue(MyWorker.TASK_QUEUE)
.setWorkflowId(WORKFLOW_ID)
.setWorkflowIdConflictPolicy(
WorkflowIdConflictPolicy.WORKFLOW_ID_CONFLICT_POLICY_TERMINATE_EXISTING)
.setWorkflowExecutionTimeout(java.time.Duration.ofSeconds(2))
.build();
MyWorkflow workflow = client.newWorkflowStub(MyWorkflow.class, workflowOptions);

WorkflowClient.start(workflow::run);

int upResult = workflow.myUpdate();
System.out.println("upResult: " + upResult);

int wfResult = workflow.run();
System.out.println("wfResult: " + wfResult);

System.exit(0);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
package io.temporal.samples.workflowtimeout;

import io.temporal.client.WorkflowClient;
import io.temporal.serviceclient.WorkflowServiceStubs;
import io.temporal.worker.Worker;
import io.temporal.worker.WorkerFactory;

public class MyWorker {
static final String TASK_QUEUE = "tq";

public static void main(String[] args) throws Exception {

WorkflowServiceStubs service = WorkflowServiceStubs.newLocalServiceStubs();

WorkflowClient client = WorkflowClient.newInstance(service);

WorkerFactory factory = WorkerFactory.newInstance(client);
Worker worker = factory.newWorker(TASK_QUEUE);
worker.registerWorkflowImplementationTypes(MyWorkflowImpl.class);
worker.registerActivitiesImplementations(new MyActivityImpl());
factory.start();
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
package io.temporal.samples.workflowtimeout;

import io.temporal.workflow.UpdateMethod;
import io.temporal.workflow.WorkflowInterface;
import io.temporal.workflow.WorkflowMethod;

@WorkflowInterface
public interface MyWorkflow {
@WorkflowMethod
int run();

@UpdateMethod
int myUpdate();
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
package io.temporal.samples.workflowtimeout;

import io.temporal.activity.ActivityOptions;
import io.temporal.common.RetryOptions;
import io.temporal.workflow.Workflow;
import java.time.Duration;

public class MyWorkflowImpl implements MyWorkflow {

private final MyActivity activity =
Workflow.newActivityStub(
MyActivity.class,
ActivityOptions.newBuilder()
.setStartToCloseTimeout(Duration.ofSeconds(2))
.setRetryOptions(RetryOptions.newBuilder().setMaximumAttempts(1).build())
.build());

// private boolean done;

@Override
public int run() {
Workflow.sleep(Duration.ofSeconds(3));
// Workflow.await(() -> done);
return 8;
}

@Override
public int myUpdate() {
Workflow.sleep(Duration.ofSeconds(2));
int result = activity.myActivityMethod();
// done = true;
return result;
}
}

0 comments on commit 2087727

Please sign in to comment.