From a818a6b6dd0c6431ceb2209dbabdbd4e195a74df Mon Sep 17 00:00:00 2001 From: Ainur <59531286+yagudin10@users.noreply.github.com> Date: Tue, 11 Feb 2025 19:56:55 +0200 Subject: [PATCH] CB-6200 disconnect data source on changing config (#3240) * CB-6200 disconnect data source on changing * CB-6200 correctly checks if connection is connected on updated connection resource event * Revert "CB-6200 correctly checks if connection is connected on updated connection resource event" This reverts commit 45485a02d67ad4ea0d125b35fcd0aea996dc938f. --------- Co-authored-by: Evgenia <139753579+EvgeniaBzzz@users.noreply.github.com> Co-authored-by: sergeyteleshev --- .../src/io/cloudbeaver/WebSessionProjectImpl.java | 13 +++++++++---- .../io/cloudbeaver/utils/WebDataSourceUtils.java | 9 +++++++++ 2 files changed, 18 insertions(+), 4 deletions(-) diff --git a/server/bundles/io.cloudbeaver.model/src/io/cloudbeaver/WebSessionProjectImpl.java b/server/bundles/io.cloudbeaver.model/src/io/cloudbeaver/WebSessionProjectImpl.java index dc175a45b2..98531ce0dc 100644 --- a/server/bundles/io.cloudbeaver.model/src/io/cloudbeaver/WebSessionProjectImpl.java +++ b/server/bundles/io.cloudbeaver.model/src/io/cloudbeaver/WebSessionProjectImpl.java @@ -35,7 +35,6 @@ import org.jkiss.dbeaver.runtime.jobs.DisconnectJob; import java.nio.file.Path; import java.util.*; -import java.util.function.Function; import java.util.stream.Collectors; public class WebSessionProjectImpl extends WebProjectImpl { @@ -206,7 +205,7 @@ public class WebSessionProjectImpl extends WebProjectImpl { .filter(Objects::nonNull) .collect(Collectors.toMap( DBPDataSourceContainer::getId, - Function.identity()) + registry::createDataSource) ); if (WSDataSourceEvent.CREATED.equals(eventId) || WSDataSourceEvent.UPDATED.equals(eventId)) { registry.refreshConfig(dataSourceIds); @@ -221,8 +220,14 @@ public class WebSessionProjectImpl extends WebProjectImpl { addConnection(ds); sendDataSourceUpdatedEvent = true; } - case WSDataSourceEvent.UPDATED -> // if settings were changed we need to send event - sendDataSourceUpdatedEvent |= !ds.equalSettings(oldDataSources.get(dsId)); + case WSDataSourceEvent.UPDATED -> { + boolean connectionUpdated = !ds.equalSettings(oldDataSources.get(dsId)); + if (connectionUpdated) { + sendDataSourceUpdatedEvent = true; + WebDataSourceUtils.disconnectDataSource(webSession, ds); + } + // if settings were changed we need to send event + } case WSDataSourceEvent.DELETED -> { WebDataSourceUtils.disconnectDataSource(webSession, ds); if (registry instanceof DBPDataSourceRegistryCache dsrc) { diff --git a/server/bundles/io.cloudbeaver.model/src/io/cloudbeaver/utils/WebDataSourceUtils.java b/server/bundles/io.cloudbeaver.model/src/io/cloudbeaver/utils/WebDataSourceUtils.java index 72c8775cd1..369552fe26 100644 --- a/server/bundles/io.cloudbeaver.model/src/io/cloudbeaver/utils/WebDataSourceUtils.java +++ b/server/bundles/io.cloudbeaver.model/src/io/cloudbeaver/utils/WebDataSourceUtils.java @@ -32,6 +32,7 @@ import org.jkiss.dbeaver.model.app.DBPProject; import org.jkiss.dbeaver.model.connection.DBPConnectionConfiguration; import org.jkiss.dbeaver.model.net.DBWHandlerConfiguration; import org.jkiss.dbeaver.model.net.ssh.SSHConstants; +import org.jkiss.dbeaver.model.websocket.event.datasource.WSDataSourceDisconnectEvent; import org.jkiss.dbeaver.runtime.DBWorkbench; import org.jkiss.utils.CommonUtils; @@ -157,6 +158,14 @@ public class WebDataSourceUtils { if (dataSource.isConnected()) { try { dataSource.disconnect(webSession.getProgressMonitor()); + webSession.addSessionEvent( + new WSDataSourceDisconnectEvent( + dataSource.getProject().getId(), + dataSource.getId(), + webSession.getSessionId(), + webSession.getUserId() + ) + ); return true; } catch (DBException e) { log.error("Error closing connection", e);