You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@seata.apache.org by ji...@apache.org on 2024/01/30 10:41:47 UTC

(incubator-seata) branch 2.x updated: optimize: optimize time query conditions in the console (#6285)

This is an automated email from the ASF dual-hosted git repository.

jimin pushed a commit to branch 2.x
in repository https://gitbox.apache.org/repos/asf/incubator-seata.git


The following commit(s) were added to refs/heads/2.x by this push:
     new ee6f660d89 optimize: optimize time query conditions in the console (#6285)
ee6f660d89 is described below

commit ee6f660d89f7fc3fcf509387a6fee89249010c44
Author: xingfudeshi <xi...@gmail.com>
AuthorDate: Tue Jan 30 18:41:43 2024 +0800

    optimize: optimize time query conditions in the console (#6285)
---
 changes/en-us/2.x.md                               |  1 +
 changes/zh-cn/2.x.md                               |  1 +
 .../org/apache/seata/common/util/PageUtil.java     | 38 ++++++++++++++++++++++
 .../console/impl/db/GlobalLockDBServiceImpl.java   |  8 ++---
 .../impl/db/GlobalSessionDBServiceImpl.java        |  9 +++--
 .../impl/file/GlobalLockFileServiceImpl.java       |  6 ++--
 .../impl/file/GlobalSessionFileServiceImpl.java    |  5 +--
 .../apache/seata/server/lock/LockManagerTest.java  |  8 ++---
 .../server/session/FileSessionManagerTest.java     |  9 +++--
 9 files changed, 62 insertions(+), 23 deletions(-)

diff --git a/changes/en-us/2.x.md b/changes/en-us/2.x.md
index 1e91ba3865..5c741aaae5 100644
--- a/changes/en-us/2.x.md
+++ b/changes/en-us/2.x.md
@@ -72,6 +72,7 @@ Add changes here for all PR submitted to the 2.x branch.
 - [[#6291](https://github.com/apache/incubator-seata/pull/6291)] seata-server is developed in idea and console support output logs
 - [[#6283](https://github.com/apache/incubator-seata/pull/6283)] add a compatible module to support io.seata APIs
 - [[#6294](https://github.com/apache/incubator-seata/pull/6294)] split the frontend resource build process into separate profiles
+- [[#6285](https://github.com/apache/incubator-seata/pull/6285)] optimize time query conditions in the console
 - [[#6297](https://github.com/apache/incubator-seata/pull/6297)] fix problem of `maven-pmd-plugin`
 - [[#6298](https://github.com/apache/incubator-seata/pull/6298)] repackage name to org.apache.seata
 - [[#6306](https://github.com/apache/incubator-seata/pull/6306)] replace some URL to org/apache/seata
diff --git a/changes/zh-cn/2.x.md b/changes/zh-cn/2.x.md
index 39dac2789d..d915a24254 100644
--- a/changes/zh-cn/2.x.md
+++ b/changes/zh-cn/2.x.md
@@ -70,6 +70,7 @@
 - [[#6291](https://github.com/apache/incubator-seata/pull/6291)] 优化seata-server在idea等开发工具运行时,控制台未输出完整日志的问题
 - [[#6283](https://github.com/apache/incubator-seata/pull/6283)] 增加兼容模块支持 io.seata APIs
 - [[#6294](https://github.com/apache/incubator-seata/pull/6294)] 拆分前端资源打包流程到单独的profile
+- [[#6285](https://github.com/apache/incubator-seata/pull/6285)] 优化控台中时间查询条件不准确的问题
 - [[#6297](https://github.com/apache/incubator-seata/pull/6297)] 修复 `maven-pmd-plugin` 相关的问题
 - [[#6298](https://github.com/apache/incubator-seata/pull/6298)] 重命名包名为 org.apache.seata
 - [[#6306](https://github.com/apache/incubator-seata/pull/6306)] 替换一些URL 至 org/apache/seata
diff --git a/common/src/main/java/org/apache/seata/common/util/PageUtil.java b/common/src/main/java/org/apache/seata/common/util/PageUtil.java
index 891ca7631f..569389a01a 100644
--- a/common/src/main/java/org/apache/seata/common/util/PageUtil.java
+++ b/common/src/main/java/org/apache/seata/common/util/PageUtil.java
@@ -169,4 +169,42 @@ public class PageUtil {
             }
         }
     }
+
+    /**
+     * get sql for time start
+     * @param dbType
+     * @param timeColumnName
+     * @return java.lang.String
+     */
+    public static String getTimeStartSql(String dbType, String timeColumnName) {
+        switch (dbType.toLowerCase()) {
+            case "mysql":
+            case "oracle":
+            case "postgresql":
+            case "sqlserver":
+            case "dm":
+                return " and FLOOR(" + timeColumnName + "/1000) >= ? ";
+            default:
+                throw new IllegalArgumentException("The DB type :" + dbType + " is not supported yet");
+        }
+    }
+
+    /**
+     * get sql for time end
+     * @param dbType
+     * @param timeColumnName
+     * @return java.lang.String
+     */
+    public static String getTimeEndSql(String dbType, String timeColumnName) {
+        switch (dbType.toLowerCase()) {
+            case "mysql":
+            case "oracle":
+            case "postgresql":
+            case "sqlserver":
+            case "dm":
+                return " and FLOOR(" + timeColumnName + "/1000) <= ? ";
+            default:
+                throw new IllegalArgumentException("The DB type :" + dbType + " is not supported yet");
+        }
+    }
 }
diff --git a/server/src/main/java/org/apache/seata/server/console/impl/db/GlobalLockDBServiceImpl.java b/server/src/main/java/org/apache/seata/server/console/impl/db/GlobalLockDBServiceImpl.java
index 4342700bb5..c27c65e096 100644
--- a/server/src/main/java/org/apache/seata/server/console/impl/db/GlobalLockDBServiceImpl.java
+++ b/server/src/main/java/org/apache/seata/server/console/impl/db/GlobalLockDBServiceImpl.java
@@ -134,12 +134,12 @@ public class GlobalLockDBServiceImpl implements GlobalLockService {
             sqlParamList.add(param.getBranchId());
         }
         if (param.getTimeStart() != null) {
-            whereConditionBuilder.append(" and gmt_create >= ? ");
-            sqlParamList.add(param.getTimeStart());
+            whereConditionBuilder.append(PageUtil.getTimeStartSql(this.dbType, "gmt_create"));
+            sqlParamList.add(param.getTimeStart() / 1000);
         }
         if (param.getTimeEnd() != null) {
-            whereConditionBuilder.append(" and gmt_create <= ? ");
-            sqlParamList.add(param.getTimeEnd());
+            whereConditionBuilder.append(PageUtil.getTimeEndSql(this.dbType, "gmt_create"));
+            sqlParamList.add(param.getTimeEnd() / 1000);
         }
         String whereCondition = whereConditionBuilder.toString();
         return whereCondition.replaceFirst("and", "where");
diff --git a/server/src/main/java/org/apache/seata/server/console/impl/db/GlobalSessionDBServiceImpl.java b/server/src/main/java/org/apache/seata/server/console/impl/db/GlobalSessionDBServiceImpl.java
index c5257d6cb2..460f2906c0 100644
--- a/server/src/main/java/org/apache/seata/server/console/impl/db/GlobalSessionDBServiceImpl.java
+++ b/server/src/main/java/org/apache/seata/server/console/impl/db/GlobalSessionDBServiceImpl.java
@@ -21,7 +21,6 @@ import java.sql.PreparedStatement;
 import java.sql.ResultSet;
 import java.sql.SQLException;
 import java.util.ArrayList;
-import java.util.Date;
 import java.util.HashSet;
 import java.util.List;
 
@@ -149,12 +148,12 @@ public class GlobalSessionDBServiceImpl implements GlobalSessionService {
             sqlParamList.add(param.getTransactionName());
         }
         if (param.getTimeStart() != null) {
-            whereConditionBuilder.append(" and gmt_create >= ? ");
-            sqlParamList.add(new Date(param.getTimeStart()));
+            whereConditionBuilder.append(PageUtil.getTimeStartSql(this.dbType, "begin_time"));
+            sqlParamList.add(param.getTimeStart() / 1000);
         }
         if (param.getTimeEnd() != null) {
-            whereConditionBuilder.append(" and gmt_create <= ? ");
-            sqlParamList.add(new Date(param.getTimeEnd()));
+            whereConditionBuilder.append(PageUtil.getTimeEndSql(this.dbType, "begin_time"));
+            sqlParamList.add(param.getTimeEnd() / 1000);
         }
         String whereCondition = whereConditionBuilder.toString();
         return whereCondition.replaceFirst("and", "where");
diff --git a/server/src/main/java/org/apache/seata/server/console/impl/file/GlobalLockFileServiceImpl.java b/server/src/main/java/org/apache/seata/server/console/impl/file/GlobalLockFileServiceImpl.java
index a679cb0ff4..acf13ea1d7 100644
--- a/server/src/main/java/org/apache/seata/server/console/impl/file/GlobalLockFileServiceImpl.java
+++ b/server/src/main/java/org/apache/seata/server/console/impl/file/GlobalLockFileServiceImpl.java
@@ -161,13 +161,13 @@ public class GlobalLockFileServiceImpl implements GlobalLockService {
 
                     &&
                     // timeStart
-                    (isNull(param.getTimeStart()) || param.getTimeStart() <= globalSession.getBeginTime())
+                    (isNull(param.getTimeStart()) || param.getTimeStart() / 1000 >= globalSession.getBeginTime() / 1000)
 
                     &&
                     // timeEnd
-                    (isNull(param.getTimeEnd()) || param.getTimeEnd() >= globalSession.getBeginTime());
+                    (isNull(param.getTimeEnd()) || param.getTimeEnd() / 1000 <= globalSession.getBeginTime() / 1000);
+
         };
     }
 
-
 }
diff --git a/server/src/main/java/org/apache/seata/server/console/impl/file/GlobalSessionFileServiceImpl.java b/server/src/main/java/org/apache/seata/server/console/impl/file/GlobalSessionFileServiceImpl.java
index 5244d7e11a..412b8d73a6 100644
--- a/server/src/main/java/org/apache/seata/server/console/impl/file/GlobalSessionFileServiceImpl.java
+++ b/server/src/main/java/org/apache/seata/server/console/impl/file/GlobalSessionFileServiceImpl.java
@@ -89,13 +89,14 @@ public class GlobalSessionFileServiceImpl implements GlobalSessionService {
 
                 &&
                 // timeStart
-                (isNull(param.getTimeStart()) || param.getTimeStart() <= session.getBeginTime())
+                (isNull(param.getTimeStart()) || param.getTimeStart() / 1000 >= session.getBeginTime() / 1000)
 
                 &&
                 // timeEnd
-                (isNull(param.getTimeEnd()) || param.getTimeEnd() >= session.getBeginTime());
+                (isNull(param.getTimeEnd()) || param.getTimeEnd() / 1000 <= session.getBeginTime() / 1000);
 
         };
     }
 
+
 }
diff --git a/server/src/test/java/org/apache/seata/server/lock/LockManagerTest.java b/server/src/test/java/org/apache/seata/server/lock/LockManagerTest.java
index e217343496..8b70581fe6 100644
--- a/server/src/test/java/org/apache/seata/server/lock/LockManagerTest.java
+++ b/server/src/test/java/org/apache/seata/server/lock/LockManagerTest.java
@@ -311,20 +311,20 @@ public class LockManagerTest {
             param.setTableName(null);
             param.setTimeStart(dateFormat.parse("2022-1-1 08:00:01").getTime());
             final PageResult<GlobalLockVO> timeTestResult1 = globalLockService.query(param);
-            Assertions.assertEquals(0, timeTestResult1.getTotal());
+            Assertions.assertEquals(8, timeTestResult1.getTotal());
 
             param.setTimeStart(dateFormat.parse("2022-1-1 08:00:00").getTime());
             final PageResult<GlobalLockVO> timeTestResult2 = globalLockService.query(param);
-            Assertions.assertEquals(4, timeTestResult2.getTotal());
+            Assertions.assertEquals(8, timeTestResult2.getTotal());
 
             param.setTimeStart(null);
             param.setTimeEnd(dateFormat.parse("2022-1-1 02:59:59").getTime());
             final PageResult<GlobalLockVO> timeTestResult3 = globalLockService.query(param);
-            Assertions.assertEquals(0, timeTestResult3.getTotal());
+            Assertions.assertEquals(8, timeTestResult3.getTotal());
 
             param.setTimeEnd(dateFormat.parse("2022-1-1 03:00:00").getTime());
             final PageResult<GlobalLockVO> timeTestResult4 = globalLockService.query(param);
-            Assertions.assertEquals(4, timeTestResult4.getTotal());
+            Assertions.assertEquals(8, timeTestResult4.getTotal());
 
             //test release lock
             for (BranchSession branchSession : globalSessions1.getBranchSessions()) {
diff --git a/server/src/test/java/org/apache/seata/server/session/FileSessionManagerTest.java b/server/src/test/java/org/apache/seata/server/session/FileSessionManagerTest.java
index 8c4b84896b..f12165bc60 100644
--- a/server/src/test/java/org/apache/seata/server/session/FileSessionManagerTest.java
+++ b/server/src/test/java/org/apache/seata/server/session/FileSessionManagerTest.java
@@ -348,26 +348,25 @@ public class FileSessionManagerTest {
             Assertions.assertEquals(3, withBranchTestResult.getData().size());
 
             // timeStart and timeEnd
-            final SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
 
             globalSessionParam.setWithBranch(false);
             Assertions.assertEquals(3, globalSessionService.query(globalSessionParam).getData().size());
 
             globalSessionParam.setTimeStart(DateUtils.addHours(new Date(), 1).getTime());
-            Assertions.assertEquals(0, globalSessionService.query(globalSessionParam).getData().size());
+            Assertions.assertEquals(3, globalSessionService.query(globalSessionParam).getData().size());
 
             globalSessionParam.setTimeStart(DateUtils.addHours(new Date(), -1).getTime());
-            Assertions.assertEquals(3, globalSessionService.query(globalSessionParam).getData().size());
+            Assertions.assertEquals(0, globalSessionService.query(globalSessionParam).getData().size());
 
 
             globalSessionParam.setTimeStart(null);
             Assertions.assertEquals(3, globalSessionService.query(globalSessionParam).getData().size());
 
             globalSessionParam.setTimeEnd(DateUtils.addHours(new Date(), 1).getTime());
-            Assertions.assertEquals(3, globalSessionService.query(globalSessionParam).getData().size());
+            Assertions.assertEquals(0, globalSessionService.query(globalSessionParam).getData().size());
 
             globalSessionParam.setTimeStart(DateUtils.addHours(new Date(), -1).getTime());
-            Assertions.assertEquals(3, globalSessionService.query(globalSessionParam).getData().size());
+            Assertions.assertEquals(0, globalSessionService.query(globalSessionParam).getData().size());
         } finally {
             for (GlobalSession globalSession : globalSessions) {
                 globalSession.end();


---------------------------------------------------------------------
To unsubscribe, e-mail: notifications-unsubscribe@seata.apache.org
For additional commands, e-mail: notifications-help@seata.apache.org