From 7409b365fae8b65784be77dc3636f0f5a0316815 Mon Sep 17 00:00:00 2001 From: ylinzhu <46126022+ylinzhu@users.noreply.github.com> Date: Thu, 13 Apr 2023 17:51:07 +0800 Subject: [PATCH 1/2] fixed 'show @@connection.sql.status & show @@connection_pool' in python report ValueError inner 2188 fixed 'show @@connection.sql.status & show @@connection_pool' in python report ValueError inner 2188 fixed 'show @@connection_pool' in python report ValueError inner 2188 --- .../services/manager/response/ShowConnectionPoolProperty.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/actiontech/dble/services/manager/response/ShowConnectionPoolProperty.java b/src/main/java/com/actiontech/dble/services/manager/response/ShowConnectionPoolProperty.java index 40eb4543f..950e99c5b 100644 --- a/src/main/java/com/actiontech/dble/services/manager/response/ShowConnectionPoolProperty.java +++ b/src/main/java/com/actiontech/dble/services/manager/response/ShowConnectionPoolProperty.java @@ -36,13 +36,13 @@ public final class ShowConnectionPoolProperty { FIELDS[i] = PacketUtil.getField("DB_GROUP", Fields.FIELD_TYPE_VAR_STRING); FIELDS[i++].setPacketId(++packetId); - FIELDS[i] = PacketUtil.getField("DB_INSTANCE", Fields.FIELD_TYPE_LONG); + FIELDS[i] = PacketUtil.getField("DB_INSTANCE", Fields.FIELD_TYPE_VAR_STRING); FIELDS[i++].setPacketId(++packetId); FIELDS[i] = PacketUtil.getField("PROPERTY", Fields.FIELD_TYPE_VAR_STRING); FIELDS[i++].setPacketId(++packetId); - FIELDS[i] = PacketUtil.getField("VALUE", Fields.FIELD_TYPE_LONG); + FIELDS[i] = PacketUtil.getField("VALUE", Fields.FIELD_TYPE_VAR_STRING); FIELDS[i].setPacketId(++packetId); EOF.setPacketId(++packetId); From cb51b8fdae7f6c594bb4fd0428a83e0ddf869c01 Mon Sep 17 00:00:00 2001 From: wenyh <44251917+wenyh1@users.noreply.github.com> Date: Thu, 18 May 2023 15:58:11 +0800 Subject: [PATCH 2/2] [inner-2227] prevents 'connection-pool-evictor-thread' thread from exiting unexpectedly --- .../dble/backend/pool/ConnectionPool.java | 4 ++++ .../dble/backend/pool/EvictionTimer.java | 17 +++++++++++------ 2 files changed, 15 insertions(+), 6 deletions(-) diff --git a/src/main/java/com/actiontech/dble/backend/pool/ConnectionPool.java b/src/main/java/com/actiontech/dble/backend/pool/ConnectionPool.java index f15836101..539a0f6ea 100644 --- a/src/main/java/com/actiontech/dble/backend/pool/ConnectionPool.java +++ b/src/main/java/com/actiontech/dble/backend/pool/ConnectionPool.java @@ -538,6 +538,8 @@ public class ConnectionPool extends PoolBase implements PooledConnectionListener // Try to maintain minimum connections fillPool(); + } catch (Throwable t) { + LOGGER.warn("Evictor.run happen Throwable: ", t); } finally { // Restore the previous CCL Thread.currentThread().setContextClassLoader(savedClassLoader); @@ -551,6 +553,7 @@ public class ConnectionPool extends PoolBase implements PooledConnectionListener */ void setScheduledFuture(final ScheduledFuture scheduledFuture) { this.scheduledFuture = scheduledFuture; + EvictionTimer.getAliveEvictor().add(scheduledFuture); } /** @@ -558,6 +561,7 @@ public class ConnectionPool extends PoolBase implements PooledConnectionListener */ void cancel() { scheduledFuture.cancel(false); + EvictionTimer.getAliveEvictor().remove(scheduledFuture); } } } diff --git a/src/main/java/com/actiontech/dble/backend/pool/EvictionTimer.java b/src/main/java/com/actiontech/dble/backend/pool/EvictionTimer.java index 2000efd07..e05d8100c 100644 --- a/src/main/java/com/actiontech/dble/backend/pool/EvictionTimer.java +++ b/src/main/java/com/actiontech/dble/backend/pool/EvictionTimer.java @@ -5,20 +5,21 @@ package com.actiontech.dble.backend.pool; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + import java.security.AccessController; import java.security.PrivilegedAction; -import java.util.concurrent.ScheduledFuture; -import java.util.concurrent.ScheduledThreadPoolExecutor; -import java.util.concurrent.ThreadFactory; -import java.util.concurrent.TimeUnit; +import java.util.concurrent.*; final class EvictionTimer { + private static final Logger LOGGER = LoggerFactory.getLogger(EvictionTimer.class); /** * Executor instance */ private static ScheduledThreadPoolExecutor executor; //@GuardedBy("EvictionTimer.class") - + private static ConcurrentLinkedQueue aliveEvictor = new ConcurrentLinkedQueue(); /** * Prevents instantiation */ @@ -26,6 +27,9 @@ final class EvictionTimer { // Hide the default constructor } + public static ConcurrentLinkedQueue getAliveEvictor() { + return aliveEvictor; + } /** * @since 2.4.3 @@ -73,8 +77,9 @@ final class EvictionTimer { if (evictor != null) { evictor.cancel(); } - if (executor != null && executor.getQueue().isEmpty()) { + if (executor != null && aliveEvictor.isEmpty()) { executor.shutdown(); + LOGGER.info("EvictionTimer executor shutdown"); try { executor.awaitTermination(timeout, unit); } catch (final InterruptedException e) {