From 18cb9e5956ce13833be5a40619924ee80cb93b10 Mon Sep 17 00:00:00 2001 From: Alexander Skoblikov Date: Tue, 5 Nov 2024 16:20:06 +0300 Subject: [PATCH] dbeaver/pro#3465 udbt reconnect improve (#3029) * dbeaver/pro#3465 udbt reconnect improve * dbeaver/pro#3465 Make use of `java.time.Duration` in `PeriodicJob` --------- Co-authored-by: kseniaguzeeva <112612526+kseniaguzeeva@users.noreply.github.com> Co-authored-by: ShadelessFox --- .../io/cloudbeaver/server/jobs/SessionStateJob.java | 5 +++-- .../cloudbeaver/server/jobs/WebSessionMonitorJob.java | 5 +++-- .../cloudbeaver/service/session/WebSessionManager.java | 10 +++++++++- 3 files changed, 15 insertions(+), 5 deletions(-) diff --git a/server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/server/jobs/SessionStateJob.java b/server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/server/jobs/SessionStateJob.java index 01aaffb15a..2a03e5262e 100644 --- a/server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/server/jobs/SessionStateJob.java +++ b/server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/server/jobs/SessionStateJob.java @@ -23,13 +23,14 @@ import org.jkiss.dbeaver.model.app.DBPPlatform; import org.jkiss.dbeaver.model.runtime.DBRProgressMonitor; import org.jkiss.dbeaver.model.runtime.PeriodicJob; +import java.time.Duration; + public class SessionStateJob extends PeriodicJob { private static final Log log = Log.getLog(SessionStateJob.class); - private static final int PERIOD_MS = 30_000; // once per 30 seconds private final WebSessionManager sessionManager; public SessionStateJob(@NotNull DBPPlatform platform, WebSessionManager sessionManager) { - super("Session state sender", platform, PERIOD_MS); + super("Session state sender", platform, Duration.ofSeconds(30)); this.sessionManager = sessionManager; } diff --git a/server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/server/jobs/WebSessionMonitorJob.java b/server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/server/jobs/WebSessionMonitorJob.java index e73dacdf62..3de046e1a9 100644 --- a/server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/server/jobs/WebSessionMonitorJob.java +++ b/server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/server/jobs/WebSessionMonitorJob.java @@ -23,16 +23,17 @@ import org.jkiss.dbeaver.model.app.DBPPlatform; import org.jkiss.dbeaver.model.runtime.DBRProgressMonitor; import org.jkiss.dbeaver.model.runtime.PeriodicJob; +import java.time.Duration; + /** * WebSessionMonitorJob */ public class WebSessionMonitorJob extends PeriodicJob { private static final Log log = Log.getLog(WebSessionMonitorJob.class); - private static final int MONITOR_INTERVAL = 10000; // once per 10 seconds private final WebSessionManager sessionManager; public WebSessionMonitorJob(@NotNull DBPPlatform platform, @NotNull WebSessionManager sessionManager) { - super("Web session monitor", platform, MONITOR_INTERVAL); + super("Web session monitor", platform, Duration.ofSeconds(10)); this.sessionManager = sessionManager; } diff --git a/server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/service/session/WebSessionManager.java b/server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/service/session/WebSessionManager.java index 92017155d1..324c96de6d 100644 --- a/server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/service/session/WebSessionManager.java +++ b/server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/service/session/WebSessionManager.java @@ -18,10 +18,10 @@ package io.cloudbeaver.service.session; import io.cloudbeaver.DBWebException; import io.cloudbeaver.auth.SMTokenCredentialProvider; -import io.cloudbeaver.server.AppWebSessionManager; import io.cloudbeaver.model.session.*; import io.cloudbeaver.registry.WebHandlerRegistry; import io.cloudbeaver.registry.WebSessionHandlerDescriptor; +import io.cloudbeaver.server.AppWebSessionManager; import io.cloudbeaver.server.CBApplication; import io.cloudbeaver.server.CBConstants; import io.cloudbeaver.server.events.WSWebUtils; @@ -315,6 +315,14 @@ public class WebSessionManager implements AppWebSessionManager { var existSession = sessionMap.get(sessionId); if (existSession instanceof WebHeadlessSession) { + var creds = existSession.getUserContext().getActiveUserCredentials(); + if (creds == null || !smAccessToken.equals(creds.getSmAccessToken())) { + existSession.getUserContext().refresh( + smAccessToken, + null, + authPermissions + ); + } return (WebHeadlessSession) existSession; } if (existSession != null) {