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 45485a02d6.

---------

Co-authored-by: Evgenia <139753579+EvgeniaBzzz@users.noreply.github.com>
Co-authored-by: sergeyteleshev <iamsergeyteleshev@gmail.com>
This commit is contained in:
Ainur
2025-02-11 18:56:55 +01:00
committed by GitHub
co-authored by Evgenia sergeyteleshev
parent 7919ec8bda
commit a818a6b6dd
2 changed files with 18 additions and 4 deletions
@@ -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) {
@@ -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);