Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion ballerina/Dependencies.toml
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@

[ballerina]
dependencies-toml-version = "2"
distribution-version = "2201.12.0"
distribution-version = "2201.12.3"

[[package]]
org = "ballerina"
Expand Down
4 changes: 4 additions & 0 deletions build-config/spotbugs-exclude.xml
Original file line number Diff line number Diff line change
Expand Up @@ -24,4 +24,8 @@
<class name="io.ballerina.lib.cdc.models.Service"/>
<Bug pattern="EI_EXPOSE_REP2"/>
</Match>
<Match>
<class name="io.ballerina.lib.cdc.Listener"/>
<Bug pattern="RV_RETURN_VALUE_IGNORED_BAD_PRACTICE"/>
</Match>
</FindBugsFilter>
41 changes: 25 additions & 16 deletions native/src/main/java/io/ballerina/lib/cdc/Listener.java
Original file line number Diff line number Diff line change
Expand Up @@ -36,8 +36,8 @@
import java.io.IOException;
import java.util.Map;
import java.util.Properties;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

Expand Down Expand Up @@ -172,33 +172,43 @@
ConcurrentHashMap<String, Service> serviceMap = (ConcurrentHashMap<String, Service>) listener
.getNativeData(TABLE_TO_SERVICE_MAP_KEY);

try (ExecutorService executor = Executors.newVirtualThreadPerTaskExecutor()) {
EngineResult result = new EngineResult();
try {
CompletableFuture<EngineResult> comFuture = new CompletableFuture<>();
ExecutorService executor = Executors.newVirtualThreadPerTaskExecutor();

Check warning on line 177 in native/src/main/java/io/ballerina/lib/cdc/Listener.java

View check run for this annotation

Codecov / codecov/patch

native/src/main/java/io/ballerina/lib/cdc/Listener.java#L176-L177

Added lines #L176 - L177 were not covered by tests
DebeziumEngine<ChangeEvent<String, String>> engine = create(Json.class)
.using(engineProperties)
.notifying(new BalChangeConsumer(serviceMap, environment.getRuntime()))
.using(new DebeziumEngine.ConnectorCallback() {

Check warning on line 181 in native/src/main/java/io/ballerina/lib/cdc/Listener.java

View check run for this annotation

Codecov / codecov/patch

native/src/main/java/io/ballerina/lib/cdc/Listener.java#L181

Added line #L181 was not covered by tests
@Override
public void taskStarted() {
EngineResult result = new EngineResult();
result.success = true;
comFuture.complete(result);
}

Check warning on line 187 in native/src/main/java/io/ballerina/lib/cdc/Listener.java

View check run for this annotation

Codecov / codecov/patch

native/src/main/java/io/ballerina/lib/cdc/Listener.java#L184-L187

Added lines #L184 - L187 were not covered by tests
})
.using((success, message, error) -> {
EngineResult result = new EngineResult();

Check warning on line 190 in native/src/main/java/io/ballerina/lib/cdc/Listener.java

View check run for this annotation

Codecov / codecov/patch

native/src/main/java/io/ballerina/lib/cdc/Listener.java#L190

Added line #L190 was not covered by tests
result.success = success;
result.message = message;
result.error = error;
result.latch.countDown();
comFuture.complete(result);

Check warning on line 194 in native/src/main/java/io/ballerina/lib/cdc/Listener.java

View check run for this annotation

Codecov / codecov/patch

native/src/main/java/io/ballerina/lib/cdc/Listener.java#L194

Added line #L194 was not covered by tests
})
.build();
executor.execute(engine);
executor.submit(engine);

Check warning on line 197 in native/src/main/java/io/ballerina/lib/cdc/Listener.java

View check run for this annotation

Codecov / codecov/patch

native/src/main/java/io/ballerina/lib/cdc/Listener.java#L197

Added line #L197 was not covered by tests

result.latch.await();
if (result.success) {
EngineResult engineResult = comFuture.get();

Check warning on line 199 in native/src/main/java/io/ballerina/lib/cdc/Listener.java

View check run for this annotation

Codecov / codecov/patch

native/src/main/java/io/ballerina/lib/cdc/Listener.java#L199

Added line #L199 was not covered by tests
if (engineResult.success) {
listener.addNativeData(DEBEZIUM_ENGINE_KEY, engine);
listener.addNativeData(EXECUTOR_SERVICE_KEY, executor);
} else {
String errorMessage = result.message != null ? result.message
: (result.error != null ? result.error.getMessage() : "Unknown error");
String errorMessage = engineResult.message != null ? engineResult.message
: (engineResult.error != null ? engineResult.error.getMessage() : "Unknown error");
return createCdcError("Failed to start the Debezium engine: " + errorMessage);
}
} catch (InterruptedException e) {
return createCdcError("Failed to start the Debezium engine: " + e.getMessage());
return null;
} catch (Throwable t) {
return createCdcError("Failed to start the Debezium engine: " + t.getMessage());

Check warning on line 210 in native/src/main/java/io/ballerina/lib/cdc/Listener.java

View check run for this annotation

Codecov / codecov/patch

native/src/main/java/io/ballerina/lib/cdc/Listener.java#L208-L210

Added lines #L208 - L210 were not covered by tests
}
return null;
}

private static Properties populateEngineProperties(BMap<BString, Object> config) {
Expand Down Expand Up @@ -237,9 +247,8 @@

// Helper class to store result
static class EngineResult {
CountDownLatch latch = new CountDownLatch(1);
boolean success = false;
String message = null;
Throwable error = null;
volatile boolean success = true;
volatile String message = null;
volatile Throwable error = null;

Check warning on line 252 in native/src/main/java/io/ballerina/lib/cdc/Listener.java

View check run for this annotation

Codecov / codecov/patch

native/src/main/java/io/ballerina/lib/cdc/Listener.java#L250-L252

Added lines #L250 - L252 were not covered by tests
}
}
Loading