Describe the bug, including details regarding any error messages, version, and platform.
sdk install java 21.0.6-ms
git clone git@github.com:linghengqian/influxdb-3-core-jdbc-test.git
cd ./influxdb-3-core-jdbc-test/
sdk use java 21.0.6-ms
./mvnw -T 1C -Dtest=TimeDifferenceTest clean test
Click me to view the core logic of the unit test🥯🥨🍟🧂🥖🥚🍔🦪🍜🍘
@TestcontainerspublicclassTimeDifferenceTest {
privatefinalInstantmagicTime = Instant.now().minusSeconds(10);
@ContainerprivatefinalGenericContainer<?> container = newGenericContainer<>("quay.io/influxdb/influxdb3-core:911ba92ab4133e75fe2a420e16ed9cb4cf32196f")
.withCommand("serve --node-id local01 --object-store memory")
.withExposedPorts(8181);
@Testvoidtest() throwsException {
try (InfluxDBClientclient = InfluxDBClient.getInstance(
"http://" + container.getHost() + ":" + container.getMappedPort(8181),
null,
"mydb")) {
writeData(client);
queryDataByHttp();
queryDataByJdbcDriver();
}
}
privatevoidwriteData(InfluxDBClientclient) {
Pointpoint = Point.measurement("home")
.setTag("location", "London")
.setField("value", 30.01)
.setTimestamp(magicTime);
client.writePoint(point);
}
privatevoidqueryDataByHttp() throwsURISyntaxException, IOException, InterruptedException {
URIuri = newURIBuilder().setScheme("http")
.setHost(container.getHost())
.setPort(container.getMappedPort(8181))
.setPath("/api/v3/query_sql")
.setParameter("db", "mydb")
.setParameter("q", "select time,location,value from home order by time desc limit 10")
.build();
HttpResponse<String> response = HttpClient.newHttpClient()
.send(HttpRequest.newBuilder().uri(uri).GET().build(), BodyHandlers.ofString());
assertThat(
newObjectMapper().readTree(response.body()).get(0).get("time").asText(),
is(magicTime.atOffset(ZoneOffset.UTC).toLocalDateTime().toString())
);
}
privatevoidqueryDataByJdbcDriver() throwsSQLException {
HikariConfighikariConfig = newHikariConfig();
hikariConfig.setJdbcUrl("jdbc:arrow-flight-sql://" + container.getHost() + ":" + container.getMappedPort(8181) + "/?useEncryption=0&database=mydb");
try (HikariDataSourcehikariDataSource = newHikariDataSource(hikariConfig);
Connectionconnection = hikariDataSource.getConnection()) {
ResultSetresultSet = connection.createStatement().executeQuery("select time,location,value from home order by time desc limit 10");
assertThat(resultSet.next(), is(true));
assertThat(resultSet.getString("location"), is("London"));
assertThat(resultSet.getString("value"), is("30.01"));
assertThat(resultSet.getTimestamp("time"), notNullValue());
// todo linghengqian why fail?assertThat(resultSet.getTimestamp("time").toInstant(), is(magicTime));
}
}
}[INFO] Running io.github.linghengqian.TimeDifferenceTest
SLF4J(W): No SLF4J providers were found.
SLF4J(W): Defaulting to no-operation (NOP) logger implementation
SLF4J(W): See https://www.slf4j.org/codes.html#noProviders for further details.
2月 25, 2025 9:17:46 上午 org.apache.arrow.driver.jdbc.shaded.org.apache.arrow.memory.BaseAllocator <clinit>
信息: Debug mode disabled. Enable with the VM option -Darrow.memory.debug.allocator=true.
2月 25, 2025 9:17:46 上午 org.apache.arrow.driver.jdbc.shaded.org.apache.arrow.memory.DefaultAllocationManagerOption getDefaultAllocationManagerFactory
信息: allocation manager type not specified, using netty as the default type
2月 25, 2025 9:17:46 上午 org.apache.arrow.driver.jdbc.shaded.org.apache.arrow.memory.CheckAllocator reportResult
信息: Using DefaultAllocationManager at memory/netty/DefaultAllocationManagerFactory.class
[ERROR] Tests run: 1, Failures: 1, Errors: 0, Skipped: 0, Time elapsed: 3.520 s <<<FAILURE! -- in io.github.linghengqian.TimeDifferenceTest
[ERROR] io.github.linghengqian.TimeDifferenceTest.test -- Time elapsed: 3.457 s <<<FAILURE!
java.lang.AssertionError: Expected: is <2025-02-25T01:17:34.640356152Z>
but: was <2025-02-24T09:17:34.640356152Z>
at org.hamcrest.MatcherAssert.assertThat(MatcherAssert.java:20)
at org.hamcrest.MatcherAssert.assertThat(MatcherAssert.java:8)
at io.github.linghengqian.TimeDifferenceTest.queryDataByJdbcDriver(TimeDifferenceTest.java:89)
at io.github.linghengqian.TimeDifferenceTest.test(TimeDifferenceTest.java:50)
at java.base/java.lang.reflect.Method.invoke(Method.java:580)
at java.base/java.util.ArrayList.forEach(ArrayList.java:1596)
at java.base/java.util.ArrayList.forEach(ArrayList.java:1596)
[INFO] [INFO] Results:
[INFO] [ERROR] Failures: [ERROR] TimeDifferenceTest.test:50->queryDataByJdbcDriver:89 Expected: is <2025-02-25T01:17:34.640356152Z>
but: was <2025-02-24T09:17:34.640356152Z>
[INFO] [ERROR] Tests run: 1, Failures: 1, Errors: 0, Skipped: 0
Describe the bug, including details regarding any error messages, version, and platform.
java.time.Instantobtained through Arrow Flight JDBC Driver is 16 hours different from the original timestamp. This was originally discussed at Timestamps queried from InfluxDB 3 Core via JDBC Driver are inconsistent with those inserted influxdata/influxdb#25983 but it looks like there is mishandling within the Arrow Flight JDBC Driver.SDKMAN!andDocker CEin advance, then,Click me to view the core logic of the unit test🥯🥨🍟🧂🥖🥚🍔🦪🍜🍘
Asia/Shanghai, the timestamp obtained by this unit test through the HTTP port is normal, but the timestamp obtained through the Arrow Flight JDBC Driver has a 16-hour error. This is unreasonable.java.time.Instantneeds to be circumvented?