diff --git a/app/server/appsmith-server/src/main/java/com/appsmith/server/services/ce/DatasourceContextServiceCEImpl.java b/app/server/appsmith-server/src/main/java/com/appsmith/server/services/ce/DatasourceContextServiceCEImpl.java index 2ef2ba8d7c..b2f3a98236 100644 --- a/app/server/appsmith-server/src/main/java/com/appsmith/server/services/ce/DatasourceContextServiceCEImpl.java +++ b/app/server/appsmith-server/src/main/java/com/appsmith/server/services/ce/DatasourceContextServiceCEImpl.java @@ -374,6 +374,11 @@ public class DatasourceContextServiceCEImpl implements DatasourceContextServiceC }); } + /** + * removes the datasource context entry from the contextMaps. may return an empty mono + * @param datasourceStorage + * @return removed datasourceContext + */ @Override public Mono> deleteDatasourceContext(DatasourceStorage datasourceStorage) { @@ -390,11 +395,19 @@ public class DatasourceContextServiceCEImpl implements DatasourceContextServiceC } return pluginExecutorHelper .getPluginExecutor(pluginService.findById(datasourceStorage.getPluginId())) - .map(pluginExecutor -> { + .flatMap(pluginExecutor -> { log.info("Clearing datasource context for datasource storage ID {}.", datasourceStorage.getId()); pluginExecutor.datasourceDestroy(datasourceContext.getConnection()); datasourceContextMonoMap.remove(datasourceContextIdentifier); - return datasourceContextMap.remove(datasourceContextIdentifier); + + if (!datasourceContextMap.containsKey(datasourceContextIdentifier)) { + log.info( + "datasourceContextMap does not contain any entry for datasource storage with id: {} ", + datasourceStorage.getId()); + return Mono.empty(); + } + + return Mono.just(datasourceContextMap.remove(datasourceContextIdentifier)); }); } diff --git a/app/server/appsmith-server/src/test/java/com/appsmith/server/services/DatasourceContextServiceTest.java b/app/server/appsmith-server/src/test/java/com/appsmith/server/services/DatasourceContextServiceTest.java index dc86224789..d813c3da15 100644 --- a/app/server/appsmith-server/src/test/java/com/appsmith/server/services/DatasourceContextServiceTest.java +++ b/app/server/appsmith-server/src/test/java/com/appsmith/server/services/DatasourceContextServiceTest.java @@ -754,4 +754,23 @@ public class DatasourceContextServiceTest { }) .verify(); } + + @Test + @WithUserDetails(value = "api_user") + public void verifyDeleteDatasourceContext_whenContextDoesNotExist_returnsEmptyMono() { + + String sampleDatasourceId = UUID.randomUUID().toString(); + String samplePluginId = UUID.randomUUID().toString(); + + DatasourceStorage datasourceStorage = new DatasourceStorage(); + datasourceStorage.setDatasourceId(sampleDatasourceId); + datasourceStorage.setEnvironmentId(defaultEnvironmentId); + datasourceStorage.setPluginId(samplePluginId); + + MockPluginExecutor mockPluginExecutor = new MockPluginExecutor(); + MockPluginExecutor spyMockPluginExecutor = spy(mockPluginExecutor); + StepVerifier.create(datasourceContextService.deleteDatasourceContext(datasourceStorage)) + .expectNextCount(0) + .verifyComplete(); + } }