This is an automated email from the ASF dual-hosted git repository.
yiguolei pushed a commit to branch branch-4.1
in repository https://gitbox.apache.org/repos/asf/doris.git
The following commit(s) were added to refs/heads/branch-4.1 by this push:
new 6834ca13b3f [fix](regression) Stabilize information schema timezone
checks on branch-4.1 (#68920)
6834ca13b3f is described below
commit 6834ca13b3fc2004201e9f7adeee898e40884021
Author: Gabriel <[email protected]>
AuthorDate: Mon Oct 12 09:27:57 2026 +0800
[fix](regression) Stabilize information schema timezone checks on
branch-4.1 (#68920)
### What problem does this PR solve?
`test_information_schema_timezone` can wait for 30 seconds on a tablet
from an empty partition. The test writes only one of its three
partitions, but selects the first tablet from the whole table. In cloud
mode, `information_schema.rowsets` enumerates BE-cached tablets, so a
pruned empty partition need not become visible by polling. The test also
compares only hour fields, which can both misclassify queries crossing a
boundary and miss incorrect dates or sub-hour offsets.
This change selects a visible data rowset from the populated partition
and keeps its backend/tablet/rowset identity across the timezone switch.
Stable metadata timestamps are compared in full. Procedure creation
timestamps and active-query timestamps are checked against their own FE
UTC time windows, preserving the procedure's creation-time string
semantics. Unique query markers isolate processlist and active-query
rows. The original session timezone is restored in `finally`.
### Validation
- Complete suite passed on an isolated local FE/BE deployment, including
the original result comparisons: 1 suite, 0 failed, 0 fatal, 0 skipped.
- A diagnostic run starting with session timezone `+05:30` passed and
explicitly verified restoration after the suite.
- Confirmed that the original first tablet belongs to an empty partition
and that the updated selection uses a populated partition.
- 13 source-extracted Groovy checks passed for full timestamp
comparisons, null rejection, UTC windows, and hour/day boundaries. The
original comparator fails the check for an incorrect one-second offset.
- `git diff --check` passed.
The local runtime is a reused 4.1.4-rc04 build (BE `ff368cbc11`), not a
freshly compiled branch head. Cloud integration and the original failing
CI build were not rerun locally; CI verification is still required. No
FE or BE production code changes are included.
### Release note
None: regression-test stabilization only.
---
.../test_information_schema_timezone.groovy | 436 +++++++++++----------
1 file changed, 224 insertions(+), 212 deletions(-)
diff --git
a/regression-test/suites/external_table_p0/info_schema_db/test_information_schema_timezone.groovy
b/regression-test/suites/external_table_p0/info_schema_db/test_information_schema_timezone.groovy
index 262b7a28ee9..c6535cec5ee 100644
---
a/regression-test/suites/external_table_p0/info_schema_db/test_information_schema_timezone.groovy
+++
b/regression-test/suites/external_table_p0/info_schema_db/test_information_schema_timezone.groovy
@@ -19,239 +19,251 @@ import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
suite("test_information_schema_timezone",
"p0,external,hive,kerberos,external_docker,external_docker_kerberos") {
- /*
- * In this test case, we compare the intervals between two time zones.
- * List<List<Object>> routines_res_1 = sql """ select
CREATED,LAST_ALTERED from information_schema.routines where
ROUTINE_NAME="TEST_INFORMATION_SCHEMA_TIMEZONE1" """
- * List<List<Object>> routines_res_2 = sql """ select
CREATED,LAST_ALTERED from information_schema.routines where
ROUTINE_NAME="TEST_INFORMATION_SCHEMA_TIMEZONE2"; """
- * assertEquals(true, isEightHoursDiff(tables_res_2[0][0],
tables_res_1[0][0]))
- * If the two SQL queries are executed across the hour mark, it will cause
the test case to fail.
- * eg. routines_res_1 executed at 00:59:50, and routines_res_2 executed at
01:00:05, assert will fail.
- * The execution time of this test case is within 2 minutes, and the
interval between the two queries is about 20 seconds.
- */
- waitUntilSafeExecutionTime("NOT_CROSS_HOUR_BOUNDARY", 45)
-
def table_name = "test_information_schema_timezone"
- sql """ DROP TABLE IF EXISTS ${table_name} """
- sql """
- CREATE TABLE IF NOT EXISTS ${table_name} (
- `id` int(11) NULL,
- `name` string NULL,
- `age` int(11) NULL
- )
- PARTITION BY RANGE(id)
- (
- PARTITION less_than_20 VALUES LESS THAN ("20"),
- PARTITION between_20_70 VALUES [("20"),("70")),
- PARTITION more_than_70 VALUES LESS THAN ("151")
- )
- DISTRIBUTED BY HASH(id) BUCKETS 3
- PROPERTIES("replication_num" = "1");
- """
- StringBuilder sb = new StringBuilder()
- int i = 1
- for (; i < 10; i ++) {
- sb.append("""
- (${i}, 'ftw-${i}', ${i + 18}),
- """)
- }
- sb.append("""
- (${i}, NULL, NULL)
- """)
- sql """ INSERT INTO ${table_name} VALUES
- ${sb.toString()}
+ def originalTimeZone = sql("select @@time_zone")[0][0]
+ try {
+ sql """ SET time_zone = "Asia/Shanghai" """
+ sql """ DROP TABLE IF EXISTS ${table_name} """
+ sql """
+ CREATE TABLE IF NOT EXISTS ${table_name} (
+ `id` int(11) NULL,
+ `name` string NULL,
+ `age` int(11) NULL
+ )
+ PARTITION BY RANGE(id)
+ (
+ PARTITION less_than_20 VALUES LESS THAN ("20"),
+ PARTITION between_20_70 VALUES [("20"),("70")),
+ PARTITION more_than_70 VALUES LESS THAN ("151")
+ )
+ DISTRIBUTED BY HASH(id) BUCKETS 3
+ PROPERTIES("replication_num" = "1");
"""
- qt_select_export """ SELECT * FROM ${table_name} t ORDER BY id; """
-
- def isEightHoursDiff = {LocalDateTime dateTime1, LocalDateTime dateTime2
->
- logger.info("dateTime1 = " + dateTime1 + " ; dateTime2 = " + dateTime2)
- try {
- int hour1 = dateTime1.getHour();
- int hour2 = dateTime2.getHour();
- logger.info("hour1 = " + hour1 + " ; hour2 = " + hour2)
-
-
- int difference = Math.abs(hour1 - hour2);
- return difference == 8 || difference == 24 - 8;
- } catch (Exception e) {
- throw exception("Wrong datetime formatter: " + e.getMessage());
+ StringBuilder sb = new StringBuilder()
+ int i = 1
+ for (; i < 10; i ++) {
+ sb.append("""
+ (${i}, 'ftw-${i}', ${i + 18}),
+ """)
}
- }
-
- def getStableRowsetsTime = { tabletId ->
- List<List<Object>> result = null
- awaitUntil(30) {
- result = sql """
- select CREATION_TIME, NEWEST_WRITE_TIMESTAMP
- from information_schema.rowsets
- where TABLET_ID = ${tabletId}
- order by CREATION_TIME, NEWEST_WRITE_TIMESTAMP
- limit 1
+ sb.append("""
+ (${i}, NULL, NULL)
+ """)
+ sql """ INSERT INTO ${table_name} VALUES
+ ${sb.toString()}
"""
- logger.info("stable rowsets result = " + result)
- return result != null && !result.isEmpty()
+ qt_select_export """ SELECT * FROM ${table_name} t ORDER BY id; """
+
+ def isEightHoursDiff = { LocalDateTime shanghaiTime, LocalDateTime
utcTime ->
+ // Comparing the same event must include the date and sub-hour
fields, even across midnight.
+ return shanghaiTime != null && utcTime != null &&
shanghaiTime.minusHours(8) == utcTime
}
- return result
- }
- // 0. Assert the timezone
- qt_session_time_zone_UTC """ show variables like "time_zone" """
+ def getStableRowsetsTime = { String predicate ->
+ List<List<Object>> result = null
+ awaitUntil(30) {
+ result = sql """
+ select BACKEND_ID, TABLET_ID, ROWSET_ID, CREATION_TIME,
NEWEST_WRITE_TIMESTAMP
+ from information_schema.rowsets
+ where ${predicate}
+ order by BACKEND_ID, TABLET_ID, ROWSET_ID
+ limit 1
+ """
+ logger.info("stable rowsets predicate = ${predicate}, result =
${result}")
+ return result != null && !result.isEmpty()
+ }
+ return result
+ }
- // 1. tables
- List<List<Object>> tables_res_1 = sql """ select CREATE_TIME, UPDATE_TIME
from information_schema.tables where TABLE_NAME = "${table_name}" """
- logger.info("tables_res_1 = " + tables_res_1);
+ def assertTimeInWindow = { LocalDateTime time, int offsetHours,
LocalDateTime before, LocalDateTime after ->
+ LocalDateTime utcTime = time.minusHours(offsetHours)
+ assertTrue(!utcTime.isBefore(before) && !utcTime.isAfter(after),
+ "Timestamp ${utcTime} is outside FE time window
[${before}, ${after}]")
+ }
- // 2. routines
- sql """DROP PROC test_information_schema_timezone1"""
- def procedure_body = "BEGIN DECLARE a int = 1; print a; END;"
- sql """ CREATE OR REPLACE PROCEDURE test_information_schema_timezone1()
${procedure_body} """
- List<List<Object>> routines_res_1 = sql """ select CREATED,LAST_ALTERED
from information_schema.routines where
ROUTINE_NAME="TEST_INFORMATION_SCHEMA_TIMEZONE1" """
- logger.info("routines_res_1 = " + routines_res_1);
- sql """DROP PROC test_information_schema_timezone1"""
+ def checkProcedureTime = { String procedureName, int offsetHours ->
+ // Procedure timestamps are stored as strings in the creation
session's time zone.
+ // Check each creation event independently; reading it later does
not convert its zone.
+ sql """ DROP PROC ${procedureName} """
+ LocalDateTime before = sql("select utc_timestamp()")[0][0]
+ sql """ CREATE OR REPLACE PROCEDURE ${procedureName}() BEGIN
DECLARE a int = 1; print a; END; """
+ def result = sql """
+ select CREATED, LAST_ALTERED from information_schema.routines
+ where ROUTINE_SCHEMA = database() and ROUTINE_NAME =
'${procedureName.toUpperCase(Locale.ROOT)}'
+ """
+ LocalDateTime after = sql("select utc_timestamp()")[0][0]
+ assertEquals(1, result.size())
+ result[0].each { timestamp -> assertTimeInWindow(timestamp,
offsetHours, before, after) }
+ }
- // 3. partitions
- List<List<Object>> partitions_res_1 = sql """ select UPDATE_TIME from
information_schema.partitions where TABLE_NAME = "${table_name}" """
- logger.info("partitions_res_1 = " + partitions_res_1);
+ def getLoginTime = {
+ // Connection IDs are local to each FE, while processlist can
include every FE.
+ String marker = UUID.randomUUID().toString()
+ def result = sql """
+ select LOGINTIME from information_schema.processlist
+ where ID = connection_id() and INFO like '%${marker}%'
+ """
+ assertEquals(1, result.size())
+ return result[0][0]
+ }
- // 4. processlist
- List<List<Object>> processlist_res_1 = sql """
- select LOGINTIME from information_schema.processlist where INFO
like "%information_schema.processlist%"
+ def checkActiveQueryTime = { int offsetHours ->
+ // These queries are different events. Bound each timestamp with
FE time instead of
+ // assuming that queries in two time zones start in the same
minute or hour.
+ LocalDateTime before = sql("select utc_timestamp()")[0][0]
+ String marker = UUID.randomUUID().toString()
+ def result = sql """
+ select QUERY_START_TIME from information_schema.active_queries
+ where SQL like '%${marker}%'
"""
- logger.info("processlist_res_1 = " + processlist_res_1);
-
- // 5. rowsets
- def rowsets_table_name_tablets = sql_return_maparray """ show tablets from
${table_name}; """
- def tablet_id = rowsets_table_name_tablets[0].TabletId
- List<List<Object>> rowsets_res_1 = getStableRowsetsTime(tablet_id)
- logger.info("rowsets_res_1 = " + rowsets_res_1);
-
- // 6. backend_kerberos_ticket_cache
- // TODO(ftw): Since there are some problems in kerveros case, we don't
test this case tempraturely.
- // String enabled = context.config.otherConfigs.get("enableKerberosTest")
- String enabled = false
- String externalEnvIp = context.config.otherConfigs.get("externalEnvIp")
- logger.info("enableKerberosTest = " + enabled + " ; externalEnvIp = " +
externalEnvIp);
- List<List<Object>> kerberos_cache_res_1 = null
- if (enabled != null && enabled.equalsIgnoreCase("true")) {
- sql """
- CREATE CATALOG IF NOT EXISTS
test_information_schema_timezone_catalog
- PROPERTIES (
- "type" = "hms",
- "hive.metastore.uris" = "thrift://${externalEnvIp}:9583",
- "fs.defaultFS" = "hdfs://${externalEnvIp}:8520",
- "dfs.namenode.kerberos.principal" =
"hdfs/[email protected]",
- "dfs.client.use.datanode.hostname" = "true",
- "hadoop.security.token.service.use_ip" = "false",
- "hadoop.kerberos.min.seconds.before.relogin" = "5",
- "hadoop.security.authentication" = "kerberos",
-
"hadoop.kerberos.principal"="hive/[email protected]",
- "hadoop.kerberos.keytab" =
"${keytab_root_dir}/hive-presto-master.keytab",
- "hive.metastore.kerberos.principal" =
"hive/[email protected]"
- );
+ LocalDateTime after = sql("select utc_timestamp()")[0][0]
+ assertEquals(1, result.size())
+ LocalDateTime start = LocalDateTime.parse(result[0][0],
+ DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"))
+ assertTimeInWindow(start, offsetHours, before, after)
+ }
+
+ // 0. Assert the timezone
+ qt_session_time_zone_UTC """ show variables like "time_zone" """
+
+ // 1. tables
+ List<List<Object>> tables_res_1 = sql """ select CREATE_TIME,
UPDATE_TIME from information_schema.tables where TABLE_SCHEMA = database() and
TABLE_NAME = "${table_name}" """
+ logger.info("tables_res_1 = " + tables_res_1);
+
+ // 2. routines
+ checkProcedureTime("test_information_schema_timezone1", 8)
+
+ // 3. partitions
+ List<List<Object>> partitions_res_1 = sql """ select UPDATE_TIME from
information_schema.partitions where TABLE_SCHEMA = database() and TABLE_NAME =
"${table_name}" and PARTITION_NAME = "less_than_20" """
+ logger.info("partitions_res_1 = " + partitions_res_1);
+
+ // 4. processlist
+ LocalDateTime processlist_res_1 = getLoginTime()
+ logger.info("processlist_res_1 = " + processlist_res_1);
+
+ // 5. rowsets
+ // Cloud rowsets only exposes cached tablets. Empty partitions can be
pruned from the
+ // preceding scan, so choose a visible data rowset from the partition
we actually populated.
+ def rowsets_table_name_tablets = sql_return_maparray """
+ show tablets from ${table_name} partition(less_than_20)
"""
+ def tabletIds = rowsets_table_name_tablets.collect { it.TabletId
}.unique().join(",")
+ List<List<Object>> rowsets_res_1 = getStableRowsetsTime(
+ "TABLET_ID in (${tabletIds}) and ROWSET_NUM_ROWS > 0")
+ def rowset = rowsets_res_1[0]
+ String rowsetPredicate = "BACKEND_ID = ${rowset[0]} and TABLET_ID =
${rowset[1]} and ROWSET_ID = '${rowset[2]}'"
+ logger.info("rowsets_res_1 = " + rowsets_res_1);
- sql """ DROP TABLE IF EXISTS
test_information_schema_timezone_catalog.test_krb_hive_db.test_information_schema_table
"""
- sql """ CREATE TABLE
test_information_schema_timezone_catalog.test_krb_hive_db.test_information_schema_table
(id int, str string, dd date) engine = hive; """
- sql """ INSERT INTO
test_information_schema_timezone_catalog.test_krb_hive_db.test_information_schema_table
values(1, 'krb1', '2023-05-14') """
- sql """ INSERT INTO
test_information_schema_timezone_catalog.test_krb_hive_db.test_information_schema_table
values(2, 'krb2', '2023-05-24') """
+ // 6. backend_kerberos_ticket_cache
+ // TODO(ftw): Since there are some problems in kerveros case, we don't
test this case tempraturely.
+ // String enabled =
context.config.otherConfigs.get("enableKerberosTest")
+ String enabled = false
+ String externalEnvIp = context.config.otherConfigs.get("externalEnvIp")
+ logger.info("enableKerberosTest = " + enabled + " ; externalEnvIp = "
+ externalEnvIp);
+ List<List<Object>> kerberos_cache_res_1 = null
+ if (enabled != null && enabled.equalsIgnoreCase("true")) {
+ sql """
+ CREATE CATALOG IF NOT EXISTS
test_information_schema_timezone_catalog
+ PROPERTIES (
+ "type" = "hms",
+ "hive.metastore.uris" = "thrift://${externalEnvIp}:9583",
+ "fs.defaultFS" = "hdfs://${externalEnvIp}:8520",
+ "dfs.namenode.kerberos.principal" =
"hdfs/[email protected]",
+ "dfs.client.use.datanode.hostname" = "true",
+ "hadoop.security.token.service.use_ip" = "false",
+ "hadoop.kerberos.min.seconds.before.relogin" = "5",
+ "hadoop.security.authentication" = "kerberos",
+
"hadoop.kerberos.principal"="hive/[email protected]",
+ "hadoop.kerberos.keytab" =
"${keytab_root_dir}/hive-presto-master.keytab",
+ "hive.metastore.kerberos.principal" =
"hive/[email protected]"
+ );
+ """
- order_qt_select_kerberos """ select * from
test_information_schema_timezone_catalog.test_krb_hive_db.test_information_schema_table;
"""
+ sql """ DROP TABLE IF EXISTS
test_information_schema_timezone_catalog.test_krb_hive_db.test_information_schema_table
"""
+ sql """ CREATE TABLE
test_information_schema_timezone_catalog.test_krb_hive_db.test_information_schema_table
(id int, str string, dd date) engine = hive; """
+ sql """ INSERT INTO
test_information_schema_timezone_catalog.test_krb_hive_db.test_information_schema_table
values(1, 'krb1', '2023-05-14') """
+ sql """ INSERT INTO
test_information_schema_timezone_catalog.test_krb_hive_db.test_information_schema_table
values(2, 'krb2', '2023-05-24') """
- kerberos_cache_res_1 = sql """
+ order_qt_select_kerberos """ select * from
test_information_schema_timezone_catalog.test_krb_hive_db.test_information_schema_table;
"""
+
+ kerberos_cache_res_1 = sql """
+ select START_TIME, EXPIRE_TIME, AUTH_TIME from
information_schema.backend_kerberos_ticket_cache where
PRINCIPAL="hive/[email protected]" and KEYTAB =
"${keytab_root_dir}/hive-presto-master.keytab"
+ """
+ logger.info("kerberos_cache_res_1 = " + kerberos_cache_res_1);
+
+ }
+
+ // 7. active_queries
+ checkActiveQueryTime(8)
+
+ // ------------------- change the time zone
+ sql """ SET time_zone = "UTC" """
+ qt_session_time_zone_UTC """ show variables like "time_zone" """
+
+ // 1. tables
+ List<List<Object>> tables_res_2 = sql """ select CREATE_TIME,
UPDATE_TIME from information_schema.tables where TABLE_SCHEMA = database() and
TABLE_NAME = "${table_name}" """
+ logger.info("tables_res_2 = " + tables_res_2);
+ assertEquals(true, isEightHoursDiff(tables_res_1[0][0],
tables_res_2[0][0]))
+ assertEquals(true, isEightHoursDiff(tables_res_1[0][1],
tables_res_2[0][1]))
+
+ // 2. routines
+ checkProcedureTime("test_information_schema_timezone2", 0)
+
+ // 3. partitions
+ List<List<Object>> partitions_res_2 = sql """ select UPDATE_TIME from
information_schema.partitions where TABLE_SCHEMA = database() and TABLE_NAME =
"${table_name}" and PARTITION_NAME = "less_than_20" """
+ logger.info("partitions_res_2 = " + partitions_res_2);
+ assertEquals(true, isEightHoursDiff(partitions_res_1[0][0],
partitions_res_2[0][0]))
+
+ // 4. processlist
+ LocalDateTime processlist_res_2 = getLoginTime()
+ logger.info("processlist_res_2 = " + processlist_res_2);
+ assertEquals(true, isEightHoursDiff(processlist_res_1,
processlist_res_2))
+
+ // 5. rowsets
+ List<List<Object>> rowsets_res_2 =
getStableRowsetsTime(rowsetPredicate)
+ logger.info("rowsets_res_2 = " + rowsets_res_2);
+ assertEquals(rowsets_res_1[0][0..2], rowsets_res_2[0][0..2])
+ assertEquals(true, isEightHoursDiff(rowsets_res_1[0][3],
rowsets_res_2[0][3]))
+ if (rowsets_res_1[0][4] == null || rowsets_res_2[0][4] == null) {
+ assertEquals(rowsets_res_1[0][4], rowsets_res_2[0][4])
+ } else {
+ assertEquals(true, isEightHoursDiff(rowsets_res_1[0][4],
rowsets_res_2[0][4]))
+ }
+
+ // 6. backend_kerberos_ticket_cache
+ if (enabled != null && enabled.equalsIgnoreCase("true")) {
+ List<List<Object>> kerberos_cache_res_2 = sql """
select START_TIME, EXPIRE_TIME, AUTH_TIME from
information_schema.backend_kerberos_ticket_cache where
PRINCIPAL="hive/[email protected]" and KEYTAB =
"${keytab_root_dir}/hive-presto-master.keytab"
"""
- logger.info("kerberos_cache_res_1 = " + kerberos_cache_res_1);
+ logger.info("kerberos_cache_res_2 = " + kerberos_cache_res_2);
- }
+ assertEquals(true, isEightHoursDiff(kerberos_cache_res_1[0][0],
kerberos_cache_res_2[0][0]))
+ assertEquals(true, isEightHoursDiff(kerberos_cache_res_1[0][1],
kerberos_cache_res_2[0][1]))
+ assertEquals(true, isEightHoursDiff(kerberos_cache_res_1[0][2],
kerberos_cache_res_2[0][2]))
- // 7. active_queries
- List<List<Object>> active_queries_res_1 = sql """
- select QUERY_START_TIME from information_schema.active_queries
where SQL like "%information_schema.active_queries%"
- """
- logger.info("active_queries_res_1 = " + active_queries_res_1);
-
- // ------------------- change the time zone
- sql """ SET time_zone = "UTC" """
- qt_session_time_zone_UTC """ show variables like "time_zone" """
-
- // 1. tables
- List<List<Object>> tables_res_2 = sql """ select CREATE_TIME, UPDATE_TIME
from information_schema.tables where TABLE_NAME = "${table_name}" """
- logger.info("tables_res_2 = " + tables_res_2);
- assertEquals(true, isEightHoursDiff(tables_res_2[0][0],
tables_res_1[0][0]))
- assertEquals(true, isEightHoursDiff(tables_res_2[0][1],
tables_res_1[0][1]))
-
- // 2. routines
- sql """DROP PROC test_information_schema_timezone2"""
- def procedure_body2 = "BEGIN DECLARE a int = 1; print a; END;"
- sql """ CREATE OR REPLACE PROCEDURE test_information_schema_timezone2()
${procedure_body2} """
- List<List<Object>> routines_res_2 = sql """ select CREATED,LAST_ALTERED
from information_schema.routines where
ROUTINE_NAME="TEST_INFORMATION_SCHEMA_TIMEZONE2"; """
- logger.info("routines_res_2 = " + routines_res_2);
- sql """DROP PROC test_information_schema_timezone2"""
- assertEquals(true, isEightHoursDiff(routines_res_1[0][0],
routines_res_2[0][0]))
- assertEquals(true, isEightHoursDiff(routines_res_1[0][1],
routines_res_2[0][1]))
-
-
- // 3. partitions
- List<List<Object>> partitions_res_2 = sql """ select UPDATE_TIME from
information_schema.partitions where TABLE_NAME = "${table_name}" """
- logger.info("partitions_res_2 = " + partitions_res_2);
- assertEquals(true, isEightHoursDiff(partitions_res_1[0][0],
partitions_res_2[0][0]))
-
- // 4. processlist
- List<List<Object>> processlist_res_2 = sql """
- select LOGINTIME from information_schema.processlist where INFO
like "%information_schema.processlist%"
- """
- logger.info("processlist_res_2 = " + processlist_res_2);
- assertEquals(true, isEightHoursDiff(processlist_res_1[0][0],
processlist_res_2[0][0]))
-
- // 5. rowsets
- List<List<Object>> rowsets_res_2 = getStableRowsetsTime(tablet_id)
- logger.info("rowsets_res_2 = " + rowsets_res_2);
- assertEquals(true, isEightHoursDiff(rowsets_res_1[0][0],
rowsets_res_2[0][0]))
- if (rowsets_res_1[0][1] == null || rowsets_res_2[0][1] == null) {
- assertEquals(rowsets_res_1[0][1], rowsets_res_2[0][1])
- } else {
- assertEquals(true, isEightHoursDiff(rowsets_res_1[0][1],
rowsets_res_2[0][1]))
- }
-
- // 6. backend_kerberos_ticket_cache
- if (enabled != null && enabled.equalsIgnoreCase("true")) {
- List<List<Object>> kerberos_cache_res_2 = sql """
- select START_TIME, EXPIRE_TIME, AUTH_TIME from
information_schema.backend_kerberos_ticket_cache where
PRINCIPAL="hive/[email protected]" and KEYTAB =
"${keytab_root_dir}/hive-presto-master.keytab"
- """
- logger.info("kerberos_cache_res_2 = " + kerberos_cache_res_2);
+ sql """DROP CATALOG IF EXISTS
test_information_schema_timezone_catalog"""
+ }
- assertEquals(true, isEightHoursDiff(kerberos_cache_res_1[0][0],
kerberos_cache_res_2[0][0]))
- assertEquals(true, isEightHoursDiff(kerberos_cache_res_1[0][1],
kerberos_cache_res_2[0][1]))
- assertEquals(true, isEightHoursDiff(kerberos_cache_res_1[0][2],
kerberos_cache_res_2[0][2]))
-
- sql """DROP CATALOG IF EXISTS
test_information_schema_timezone_catalog"""
- }
+ // 7. active_queries
+ checkActiveQueryTime(0)
- // 7. active_queries
- List<List<Object>> active_queries_res_2 = sql """
- select QUERY_START_TIME from information_schema.active_queries
where SQL like "%information_schema.active_queries%"
- """
- logger.info("active_queries_res_2 = " + active_queries_res_2);
+ // set time_zone back
+ sql """ SET time_zone = "Asia/Shanghai" """
- DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd
HH:mm:ss");
- try {
- LocalDateTime dateTime1 =
LocalDateTime.parse(active_queries_res_1[0][0], formatter);
- LocalDateTime dateTime2 =
LocalDateTime.parse(active_queries_res_2[0][0], formatter);
- assertEquals(true, isEightHoursDiff(dateTime1, dateTime2))
- } catch (Exception e) {
- throw exception("Wrong datetime formatter: " + e.getMessage())
+ // 8. Test offset format timezone (e.g. +08:00)
+ // This tests the fix for cctz returning "Fixed/UTC+08:00:00" format
+ sql """ SET time_zone = '+08:00' """
+ sql """
+ select a.*, b.*, c.NAME as WORKLOAD_GROUP_NAME
+ from information_schema.active_queries a
+ left join information_schema.backend_active_tasks b on a.QUERY_ID
= b.QUERY_ID
+ left join information_schema.workload_groups c on
a.WORKLOAD_GROUP_ID = c.ID
+ """
+ sql """ SET time_zone = "Asia/Shanghai" """
+ } finally {
+ sql """ SET time_zone = '${originalTimeZone}' """
+ sql """ DROP PROC test_information_schema_timezone1 """
+ sql """ DROP PROC test_information_schema_timezone2 """
+ sql """ DROP TABLE IF EXISTS ${table_name} """
}
-
- // set time_zone back
- sql """ SET time_zone = "Asia/Shanghai" """
-
- // 8. Test offset format timezone (e.g. +08:00)
- // This tests the fix for cctz returning "Fixed/UTC+08:00:00" format
- sql """ SET time_zone = '+08:00' """
- sql """
- select a.*, b.*, c.NAME as WORKLOAD_GROUP_NAME
- from information_schema.active_queries a
- left join information_schema.backend_active_tasks b on a.QUERY_ID =
b.QUERY_ID
- left join information_schema.workload_groups c on a.WORKLOAD_GROUP_ID
= c.ID
- """
- sql """ SET time_zone = "Asia/Shanghai" """
}
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]