Skip to content

Commit 830da3e

Browse files
committed
Bug fix: make sure signal message only printed once by correctly manipulating the cancel signal
1 parent 18f8014 commit 830da3e

File tree

1 file changed

+17
-10
lines changed

1 file changed

+17
-10
lines changed

src/main/java/com/uber/cadence/samples/spring/workflows/impl/SignalWorkflowImpl.java

Lines changed: 17 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -8,26 +8,33 @@
88
public class SignalWorkflowImpl implements SignalWorkflow {
99
private final Logger logger = Workflow.getLogger(SignalWorkflowImpl.class);
1010
private String name;
11-
private String greetingMsg;
11+
private String greetingMsg = "";
1212
private boolean cancel = false;
1313

1414
@Override
1515
public void getGreeting(SampleMessage sampleMessage) {
1616
logger.info("executing SignalWorkflow::getGreeting");
1717
this.name = sampleMessage.GetMessage();
18-
Workflow.await(
19-
() -> {
20-
if (cancel) {
21-
logger.info("SignalWorkflow cancelled");
22-
}
23-
logger.info("greeting: " + this.greetingMsg);
24-
return cancel;
25-
});
26-
logger.info("greeting:" + this.greetingMsg);
18+
int count = 0;
19+
20+
while (!cancel) {
21+
Workflow.await(() -> cancel || !this.greetingMsg.isEmpty());
22+
if (!this.greetingMsg.isEmpty()) {
23+
logger.info(++count + ": " + this.greetingMsg + "!");
24+
this.greetingMsg = "";
25+
}
26+
}
27+
28+
logger.info("workflow canceled");
2729
}
2830

2931
@Override
3032
public void waitForGreeting(String greeting) {
33+
if (cancel) {
34+
logger.info("signal workflow failed because it is already cancelled");
35+
return;
36+
}
37+
3138
logger.info("received signal from SignalWorkflow:waitForName");
3239
this.greetingMsg = String.format("%s, %s!", greeting, this.name);
3340
}

0 commit comments

Comments
 (0)