From cd4840a45f24b2b62c72951fd0ee9a92e4fa2792 Mon Sep 17 00:00:00 2001 From: jingtian Date: Thu, 11 Jul 2024 17:22:22 +0800 Subject: [PATCH 1/5] fix failed to auto recreate session when upgrade --- .../oceanbase/odc/service/session/ConnectSessionService.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/server/odc-service/src/main/java/com/oceanbase/odc/service/session/ConnectSessionService.java b/server/odc-service/src/main/java/com/oceanbase/odc/service/session/ConnectSessionService.java index 9848242845..7e0d2a5daa 100644 --- a/server/odc-service/src/main/java/com/oceanbase/odc/service/session/ConnectSessionService.java +++ b/server/odc-service/src/main/java/com/oceanbase/odc/service/session/ConnectSessionService.java @@ -276,7 +276,8 @@ public ConnectionSession create(@NotNull CreateSessionReq req) { DefaultConnectSessionIdGenerator idGenerator = new DefaultConnectSessionIdGenerator(); idGenerator.setDatabaseId(req.getDbId()); idGenerator.setFixRealId(StringUtils.isBlank(req.getRealId()) ? null : req.getRealId()); - idGenerator.setHost(stateHostGenerator.getHost()); + String host = cloudMetadataClient.supportsCloudMetadata() ? req.getFrom() : stateHostGenerator.getHost(); + idGenerator.setHost(host); sessionFactory.setIdGenerator(idGenerator); long timeoutMillis = TimeUnit.MILLISECONDS.convert(sessionProperties.getTimeoutMins(), TimeUnit.MINUTES); timeoutMillis = timeoutMillis + this.connectionSessionManager.getScanIntervalMillis(); From 43d602f34536f96e5aab6303011d1d2259dd2f0b Mon Sep 17 00:00:00 2001 From: jingtian Date: Fri, 12 Jul 2024 10:20:30 +0800 Subject: [PATCH 2/5] The impact of code changes is limited to multiCloud --- .../odc/service/session/ConnectSessionService.java | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/server/odc-service/src/main/java/com/oceanbase/odc/service/session/ConnectSessionService.java b/server/odc-service/src/main/java/com/oceanbase/odc/service/session/ConnectSessionService.java index 7e0d2a5daa..d423e547e2 100644 --- a/server/odc-service/src/main/java/com/oceanbase/odc/service/session/ConnectSessionService.java +++ b/server/odc-service/src/main/java/com/oceanbase/odc/service/session/ConnectSessionService.java @@ -276,7 +276,9 @@ public ConnectionSession create(@NotNull CreateSessionReq req) { DefaultConnectSessionIdGenerator idGenerator = new DefaultConnectSessionIdGenerator(); idGenerator.setDatabaseId(req.getDbId()); idGenerator.setFixRealId(StringUtils.isBlank(req.getRealId()) ? null : req.getRealId()); - String host = cloudMetadataClient.supportsCloudMetadata() ? req.getFrom() : stateHostGenerator.getHost(); + String host = cloudMetadataClient.supportsCloudMetadata() + && Boolean.FALSE.equals(cloudMetadataClient.supportsCloudParentUid()) ? req.getFrom() + : stateHostGenerator.getHost(); idGenerator.setHost(host); sessionFactory.setIdGenerator(idGenerator); long timeoutMillis = TimeUnit.MILLISECONDS.convert(sessionProperties.getTimeoutMins(), TimeUnit.MINUTES); @@ -331,7 +333,8 @@ public ConnectionSession nullSafeGet(@NotNull String sessionId, boolean autoCrea ConnectionSession session = connectionSessionManager.getSession(sessionId); if (session == null) { CreateSessionReq req = new DefaultConnectSessionIdGenerator().getKeyFromId(sessionId); - boolean autoRecreate = cloudMetadataClient.supportsCloudMetadata(); + boolean autoRecreate = cloudMetadataClient.supportsCloudMetadata() + && Boolean.FALSE.equals(cloudMetadataClient.supportsCloudParentUid()); if (!autoCreate || (!StringUtils.equals(req.getFrom(), stateHostGenerator.getHost()) && !autoRecreate)) { throw new NotFoundException(ResourceType.ODC_SESSION, "ID", sessionId); } From 7be88e95a732aa0dad3da77069e400aac99a440b Mon Sep 17 00:00:00 2001 From: jingtian Date: Fri, 12 Jul 2024 10:27:40 +0800 Subject: [PATCH 3/5] response to reivew --- .../odc/service/session/ConnectSessionService.java | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/server/odc-service/src/main/java/com/oceanbase/odc/service/session/ConnectSessionService.java b/server/odc-service/src/main/java/com/oceanbase/odc/service/session/ConnectSessionService.java index d423e547e2..32d3493296 100644 --- a/server/odc-service/src/main/java/com/oceanbase/odc/service/session/ConnectSessionService.java +++ b/server/odc-service/src/main/java/com/oceanbase/odc/service/session/ConnectSessionService.java @@ -276,10 +276,12 @@ public ConnectionSession create(@NotNull CreateSessionReq req) { DefaultConnectSessionIdGenerator idGenerator = new DefaultConnectSessionIdGenerator(); idGenerator.setDatabaseId(req.getDbId()); idGenerator.setFixRealId(StringUtils.isBlank(req.getRealId()) ? null : req.getRealId()); - String host = cloudMetadataClient.supportsCloudMetadata() - && Boolean.FALSE.equals(cloudMetadataClient.supportsCloudParentUid()) ? req.getFrom() - : stateHostGenerator.getHost(); - idGenerator.setHost(host); + if (Objects.nonNull(req.getFrom()) && cloudMetadataClient.supportsCloudMetadata() + && Boolean.FALSE.equals(cloudMetadataClient.supportsCloudParentUid())) { + idGenerator.setHost(req.getFrom()); + } else { + idGenerator.setHost(stateHostGenerator.getHost()); + } sessionFactory.setIdGenerator(idGenerator); long timeoutMillis = TimeUnit.MILLISECONDS.convert(sessionProperties.getTimeoutMins(), TimeUnit.MINUTES); timeoutMillis = timeoutMillis + this.connectionSessionManager.getScanIntervalMillis(); From 6a7dc7bc5ede91076f5ec12aebf93bf9312f05f6 Mon Sep 17 00:00:00 2001 From: jingtian Date: Fri, 12 Jul 2024 10:37:36 +0800 Subject: [PATCH 4/5] response to review --- .../odc/service/session/ConnectSessionService.java | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/server/odc-service/src/main/java/com/oceanbase/odc/service/session/ConnectSessionService.java b/server/odc-service/src/main/java/com/oceanbase/odc/service/session/ConnectSessionService.java index 32d3493296..9ffb401e9c 100644 --- a/server/odc-service/src/main/java/com/oceanbase/odc/service/session/ConnectSessionService.java +++ b/server/odc-service/src/main/java/com/oceanbase/odc/service/session/ConnectSessionService.java @@ -276,8 +276,7 @@ public ConnectionSession create(@NotNull CreateSessionReq req) { DefaultConnectSessionIdGenerator idGenerator = new DefaultConnectSessionIdGenerator(); idGenerator.setDatabaseId(req.getDbId()); idGenerator.setFixRealId(StringUtils.isBlank(req.getRealId()) ? null : req.getRealId()); - if (Objects.nonNull(req.getFrom()) && cloudMetadataClient.supportsCloudMetadata() - && Boolean.FALSE.equals(cloudMetadataClient.supportsCloudParentUid())) { + if (Objects.nonNull(req.getFrom()) && isOBCLoudEnvironment()) { idGenerator.setHost(req.getFrom()); } else { idGenerator.setHost(stateHostGenerator.getHost()); @@ -335,9 +334,8 @@ public ConnectionSession nullSafeGet(@NotNull String sessionId, boolean autoCrea ConnectionSession session = connectionSessionManager.getSession(sessionId); if (session == null) { CreateSessionReq req = new DefaultConnectSessionIdGenerator().getKeyFromId(sessionId); - boolean autoRecreate = cloudMetadataClient.supportsCloudMetadata() - && Boolean.FALSE.equals(cloudMetadataClient.supportsCloudParentUid()); - if (!autoCreate || (!StringUtils.equals(req.getFrom(), stateHostGenerator.getHost()) && !autoRecreate)) { + if (!autoCreate + || (!StringUtils.equals(req.getFrom(), stateHostGenerator.getHost()) && !isOBCLoudEnvironment())) { throw new NotFoundException(ResourceType.ODC_SESSION, "ID", sessionId); } Lock lock = this.sessionId2Lock.computeIfAbsent(sessionId, s -> new ReentrantLock()); @@ -472,4 +470,9 @@ private void preCheckSessionLimit() { } } + private boolean isOBCLoudEnvironment() { + return cloudMetadataClient.supportsCloudMetadata() + && Boolean.FALSE.equals(cloudMetadataClient.supportsCloudParentUid()); + } + } From d5f4210d4d800d3dd28ac62b454c83cc6d23e74d Mon Sep 17 00:00:00 2001 From: jingtian Date: Fri, 12 Jul 2024 10:46:02 +0800 Subject: [PATCH 5/5] response to review --- .../odc/service/session/ConnectSessionService.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/server/odc-service/src/main/java/com/oceanbase/odc/service/session/ConnectSessionService.java b/server/odc-service/src/main/java/com/oceanbase/odc/service/session/ConnectSessionService.java index 9ffb401e9c..afabe00e5b 100644 --- a/server/odc-service/src/main/java/com/oceanbase/odc/service/session/ConnectSessionService.java +++ b/server/odc-service/src/main/java/com/oceanbase/odc/service/session/ConnectSessionService.java @@ -276,7 +276,7 @@ public ConnectionSession create(@NotNull CreateSessionReq req) { DefaultConnectSessionIdGenerator idGenerator = new DefaultConnectSessionIdGenerator(); idGenerator.setDatabaseId(req.getDbId()); idGenerator.setFixRealId(StringUtils.isBlank(req.getRealId()) ? null : req.getRealId()); - if (Objects.nonNull(req.getFrom()) && isOBCLoudEnvironment()) { + if (Objects.nonNull(req.getFrom()) && isOBCloudEnvironment()) { idGenerator.setHost(req.getFrom()); } else { idGenerator.setHost(stateHostGenerator.getHost()); @@ -335,7 +335,7 @@ public ConnectionSession nullSafeGet(@NotNull String sessionId, boolean autoCrea if (session == null) { CreateSessionReq req = new DefaultConnectSessionIdGenerator().getKeyFromId(sessionId); if (!autoCreate - || (!StringUtils.equals(req.getFrom(), stateHostGenerator.getHost()) && !isOBCLoudEnvironment())) { + || (!StringUtils.equals(req.getFrom(), stateHostGenerator.getHost()) && !isOBCloudEnvironment())) { throw new NotFoundException(ResourceType.ODC_SESSION, "ID", sessionId); } Lock lock = this.sessionId2Lock.computeIfAbsent(sessionId, s -> new ReentrantLock()); @@ -470,7 +470,7 @@ private void preCheckSessionLimit() { } } - private boolean isOBCLoudEnvironment() { + private boolean isOBCloudEnvironment() { return cloudMetadataClient.supportsCloudMetadata() && Boolean.FALSE.equals(cloudMetadataClient.supportsCloudParentUid()); }