Commit Graph

438 Commits

Author SHA1 Message Date
Kuan-Po Tseng 8c0d7412f4
KAFKA-18462: Upgrade RocksDB dependency from 9.7.3 to 10.1.3 (#19880)
Upgraded RocksDB from 9.7.3 to 10.1.3, deprecate two configuration in
`RocksDBGenericOptionsToDbOptionsColumnFamilyOptionsAdapter.java`
- random_access_max_buffer_size (removed since v9.11.1

541761eaaa)
- rate_limiter (deprecated since v7.6.0

25cc564ff7)

Add one configuration:
- daily_offpeak_time_utc (introduced since v9.11.1

9b1d0c02e9)

Reviewers: Bruno Cadonna <cadonna@apache.org>
2025-06-13 09:37:37 +02:00
Kirk True 7d6e5edf8e
KAFKA-19153: Add OAuth integration tests (#19938)
Adds a test dependency on
[mock-oauth2-server](https://github.com/navikt/mock-oauth2-server/) for
integration tests for OAuth layer. Also includes fixes for some
regressions that were caught by the integration tests.

Reviewers: Manikumar Reddy <manikumar@confluent.io>, Lianet Magrans
 <lmagrans@confluent.io>
2025-06-12 15:48:14 -04:00
Luke Chen ff58e90dfa
KAFKA-19359: force bump commons-beanutils for CVE-2025-48734 (#19939)
Bump the commons-beanutils for CVE-2025-48734. Since `commons-validator`
hasn't had new release with newer `commons-beanutils` versions, we manually bump it in kafka.

Reviewers: Mickael Maison <mickael.maison@gmail.com>
2025-06-11 15:23:04 +08:00
Chih-Yuan Chien 7dd07eb9ba
MINOR: Update opentelemetry-proto dependency (#19945)
CI / build (push) Waiting to run Details
Update opentelemetry-proto from 1.0.0-alpha to 1.3.2-alpha.

OpenTelemetry-Proto versions from v1.0.0 up to and including v1.3.2
introduce no breaking changes.

[release
note](https://github.com/open-telemetry/opentelemetry-proto/releases)

For example, starting with v1.4.0, protobuf-java was updated to version
4.28.3. To mitigate the risk of protobuf compatibility issues, upgrading
to v1.3.2 first allows the existing protobuf version to remain unchanged
for now.

Reviewers: poorv Mittal <apoorvmittal10@gmail.com>, TengYao Chi
 <kitingiao@gmail.com>, Chia-Ping Tsai <chia7712@gmail.com>
2025-06-11 02:17:44 +08:00
Nick Guo 465b01cd2c
KAFKA-19382:Upgrade junit from 5.10 to 5.13 (#19919)
CI / build (push) Waiting to run Details
jira: https://issues.apache.org/jira/browse/KAFKA-19382

Upgrade junit from 5.10.2 to
[5.13.1](https://github.com/junit-team/junit5/releases).

A new behavior was introduced to junit 5.12

(89a46dfa10),
disallowing `ClusterTestExtensions` to generate empty invocation
contexts. However, `ClusterTestExtensions` is invoked by junit extension
so it could result in empty contexts for some tests.

```
> Configure project :
Starting build with version 4.1.0-SNAPSHOT (commit id c4a769bc) using
Gradle 8.14.1, Java 17 and Scala 2.13.16
Build properties: ignoreFailures=false, maxParallelForks=10,
maxScalacThreads=8, maxTestRetries=0

> Task :core:test kafka.api.ConsumerBounceTest.initializationError
failed, log available in
/Users/lansg/Project/OpenSource/kafka/kafka-fork/kafka/core/build/reports/testOutput/kafka.api.ConsumerBounceTest.initializationError.test.stdout

Gradle Test Run :core:test > Gradle Test Executor 5 > ConsumerBounceTest
> testCloseDuringRebalance(String) > initializationError FAILED
org.junit.platform.commons.PreconditionViolationException: Provider
[ClusterTestExtensions] did not provide any invocation contexts, but was
expected to do so. You may override
mayReturnZeroTestTemplateInvocationContexts() to allow this.         at
java.base@17.0.13/java.util.ArrayList.forEach(ArrayList.java:1511) at
java.base@17.0.13/java.util.ArrayList.forEach(ArrayList.java:1511)
kafka.api.ConsumerBounceTest.initializationError failed, log available
in
/Users/lansg/Project/OpenSource/kafka/kafka-fork/kafka/core/build/reports/testOutput/kafka.api.ConsumerBounceTest.initializationError.test.stdout

```

Reviewers: Chia-Ping Tsai <chia7712@gmail.com>, TengYao Chi
 <frankvicky@apache.org>, Ken Huang <s7133700@gmail.com>
2025-06-10 15:35:30 +08:00
YuChia Ma 948a91dfdf
MINOR: Safe update dependencies (#19897)
These dependencies have been updated across both files:

    caffeine: From 3.1.8 to 3.2.0      javassist: From 3.29.2-GA to
3.30.2-GA      Jetty-related: All Jetty components have been updated
from 12.0.15 to 12.0.22, including:          jetty-alpn-client
jetty-client          jetty-ee10-servlet          jetty-ee10-servlets
jetty-http          jetty-io          jetty-security
jetty-server          jetty-session          jetty-util      jose4j:
From 0.9.4 to 0.9.6      Jersey-related: All Jersey components have been
updated from 3.1.9 to 3.1.10, including:          jersey-client
jersey-common          jersey-container-servlet
jersey-container-servlet-core          jersey-hk2          jersey-server
classgraph: From 4.8.173 to 4.8.179      jline: From 3.25.1 to 3.30.4
pcollections: From 4.0.1 to 4.0.2      re2j: From 1.7 to 1.8
snappy-java: From 1.1.10.5 to 1.1.10.7

New Dependency (LICENSE-binary only)

    A new dependency, jspecify-1.0.0, has been added to LICENSE-binary.

gradle/dependencies.gradle Specific Updates

These updates are only reflected in the gradle/dependencies.gradle file:

    bcpkix: From 1.78.1 to 1.80      bndlib: From 7.0.0 to 7.1.0 jacoco:
From 0.8.10 to 0.8.13      hamcrest: From 2.2 to 3.0      jqwik: From
1.8.3 to 1.9.2

Reviewers: Ken Huang <s7133700@gmail.com>, Chia-Ping Tsai
 <chia7712@gmail.com>
2025-06-09 21:52:58 +08:00
S.Y. Wang 543fb6c848
KAFKA-19336 Upgrade Jackson to 2.19.0 (#19835)
`JsonNode.fields()` method has been deprecated by 
- https://github.com/FasterXML/jackson-databind/issues/4863
- https://github.com/FasterXML/jackson-databind/pull/4871

So modified accordingly.

Reviewers: Luke Chen <showuon@gmail.com>, Chia-Ping Tsai
<chia7712@gmail.com>
2025-05-28 20:53:43 +08:00
Federico Valeri ad849f1f27
MINOR: Upgrade to Gradle 8.14.1 (#19780)
This patch upgrades to Gradle 8.14.1.  Note that we are switching to
using the recommended "-bin" package.

Signed-off-by: Federico Valeri <fedevaleri@gmail.com>

Reviewers: Luke Chen <showuon@gmail.com>
2025-05-27 18:04:58 +08:00
Gaurav Narula 8f849f91f1
MINOR: Update Scala to v2.13.16 to support Java 24 (#19782)
Refer

https://docs.scala-lang.org/overviews/jdk-compatibility/overview.html#scala-compatibility-table

Reviewers: Chia-Ping Tsai <chia7712@gmail.com>
2025-05-23 00:54:51 +08:00
Ken Huang 95d31befef
MINOR: update the gradle version for java 24 support (#19760)
Gradle 8.14 starts to support Java 24, so we should update the Gradle
version accordingly.

Reviewers: TengYao Chi <kitingiao@gmail.com>, PoAn Yang
<payang@apache.org>, Chia-Ping Tsai <chia7712@gmail.com>
2025-05-21 15:10:56 +08:00
Luke Chen f314497b63
MINOR: add 3.9.1 to system tests (#19772)
CI / build (push) Waiting to run Details
Add 3.9.1 to system tests following this release guide:

https://cwiki.apache.org/confluence/display/KAFKA/Release+Process#ReleaseProcess-Afterrelease

Reviewers: TengYao Chi <frankvicky@apache.org>
2025-05-21 14:09:00 +08:00
PoAn Yang a1008dc85d
KAFKA-17747: [2/N] Add compute topic and group hash (#19523)
* Add `com.dynatrace.hash4j:hash4j:0.22.0` to dependencies.
* Add `computeTopicHash` to `org.apache.kafka.coordinator.group.Utils`.
  * If topic name is non-existent, return 0.
  * If topic name is existent, use streaming XXH3 to compute topic hash
with magic byte, topic id, topic name, number of partitions, partition
id and sorted racks.
* Add `computeGroupHash` to `org.apache.kafka.coordinator.group.Utils`.
  * If topic map is empty, return 0.
  * If topic map is not empty, use streaming XXH3 to compute group
metadata hash with sorted topic hashes by topic names.
* Add related unit test.

Reviewers: Ismael Juma <ismael@juma.me.uk>, Chia-Ping Tsai <chia7712@gmail.com>, Sean Quah <squah@confluent.io>, David Jacot <djacot@confluent.io>

---------

Signed-off-by: PoAn Yang <payang@apache.org>
2025-05-15 10:48:45 +02:00
Luke Chen ed79212fb8
MINOR: bump zstd minor version to 1.5.6-10 (#19512)
Bump zstd minor version to 1.5.6-10.

Reviewers: Chia-Ping Tsai <chia7712@gmail.com>
2025-04-21 14:13:41 +08:00
Dmitry Werner 84b8fec089
KAFKA-14486 Move LogCleanerManager to storage module (#19216)
Move LogCleanerManager and related classes to storage module and rewrite
in Java.

Reviewers: TengYao Chi <kitingiao@gmail.com>, Jun Rao
<junrao@gmail.com>, Mickael Maison <mickael.maison@gmail.com>, Chia-Ping
Tsai <chia7712@gmail.com>
2025-03-27 12:35:38 +08:00
David Jacot 3ed590288f
MINOR: Add 4.0.0 to deps (#19229)
This patch adds 4.0 release to deps, dockerfile and vagrant.

Reviewers: Lianet Magrans <lmagrans@confluent.io>
2025-03-18 08:56:53 -07:00
Ismael Juma e9ed67d34a
MINOR: Update log4j2 to 2.24.3 (#19135)
2.24.2 includes a critical fix:

"This release fixes a critical bug in Log4j API initialization code,
which can cause LogManager.getLogger() to return null under certain
conditions. See https://github.com/apache/logging-log4j2/issues/3143 for
details."

2.24.3 includes an important fix for our usage:

"Fix ConcurrentModificationException, if multiple threads modify loggers
concurrently.
This bug affects users that modify logger levels programmatically."

Release notes:
* https://github.com/apache/logging-log4j2/releases/tag/rel%2F2.24.2
* https://github.com/apache/logging-log4j2/releases/tag/rel%2F2.24.3

Reviewers: David Jacot <djacot@confluent.io>, Chia-Ping Tsai
<chia7712@gmail.com
2025-03-06 09:11:29 -08:00
Apoorv Mittal 48a506b7b8
KAFKA-18522: Slice records for share fetch (#18804)
The PR handles slicing of fetched records based on acquire response for
share fetch. There could be additional bytes fetched from log but
acquired offsets can be a subset, typically with `max fetch records`
configuration. Rather sending additional bytes of fetched data to client
we should slice the file and wire only needed batches.

Note: If the acquired offsets are within a batch then we need to send
the entire batch within the file record. Hence rather checking for
individual batches, PR finds the first and last acquired offset, and
trims the file for all batches between (inclusive) these two offsets.

Reviewers: Christo Lolov <lolovc@amazon.com>, Andrew Schofield <aschofield@confluent.io>, Jun Rao <junrao@gmail.com>
2025-02-24 09:55:24 -08:00
PoAn Yang 1132f08c57
KAFKA-18773 Migrate the log4j1 config to log4j 2 for native image and README (#18872)
- update reflection-config.json and resource-config.json to include log4j2 and jackson
- remove unused jackson scala library
- fix the incorrect path of log4j2.yaml
- adopt workaround (--standalone) to make this PR work and it will be fixed by KAFKA-18737)

Reviewers: TengYao Chi <kitingiao@gmail.com>, Chia-Ping Tsai <chia7712@gmail.com>
2025-02-19 00:48:46 +08:00
TaiJuWu 934b0159bb
KAFKA-18089: Upgrade Caffeine lib to 3.1.8 (#18004)
- Fixed the RemoteIndexCacheTest that fails with caffeine > 3.1.1

Reviewers: Luke Chen <showuon@gmail.com>, Kamal Chandraprakash <kamal.chandraprakash@gmail.com>
2025-02-18 21:51:38 +05:30
David Jacot 2ecc16b987
MINOR: Remove dropwizard metrics from dependencies.gradle (#18932)
This patch removes dropwizard metrics in the dependency list as it is not used any more. It was introduced in 4f5b4c868e because it was required by Zookeeper. Zookeeper is no longer there so we can remove it too.

Reviewers: Ismael Juma <ismael@juma.me.uk>
2025-02-18 08:10:06 +01:00
Ken Huang 341e535942
KAFKA-18519: Remove Json.scala, cleanup AclEntry.scala (#18614)
Reviewers: Mickael Maison <mickael.maison@gmail.com>, Ismael Juma <ismael@juma.me.uk>, Chia-Ping Tsai <chia7712@gmail.com>
2025-01-22 16:12:06 +01:00
Swikar Patel 8b72204bfd
KAFKA-15443: Upgrade RocksDB to 9.7.3 (#18275)
This PR upgrades RocksDB from 7.9.2 to 9.7.3 and addresses the following compatibility issues introduced by the RocksDB upgrade:

- Removal of AccessHint: The AccessHint class was completely removed in RocksDB 9.7.3. This required removing all import statements, variable declarations, method parameters, method return types, and static method calls related to AccessHint in RocksDBGenericOptionsToDbOptionsColumnFamilyOptionsAdapter.java RocksDBGenericOptionsToDbOptionsColumnFamilyOptionsAdapterTest.java Unused methods are removed in RocksDBGenericOptionsToDbOptionsColumnFamilyOptionsAdapter.java
- Removal of NO_FILE_CLOSES: The NO_FILE_CLOSES metric was also removed in RocksDB 9.7.3. The calculation for numberOfOpenFiles in RocksDBMetricsRecorder.java has been adjusted to now track the total number of file opens since the last reset. The previous calculation, which subtracted NO_FILE_CLOSES from NO_FILE_OPENS, is no longer possible. The reason RocksDB removed NO_FILE_CLOSES seems to be that it did not properly work: https://github.com/search?q=repo%3Afacebook%2Frocksdb+NO_FILE_CLOSES&type=issues
- Removal of methods related to compressed block cache configuration in BlockBasedTableConfig
- Change of the signature of org.rocksdb.Options.setLogger()

Reviewers: Anna Sophie Blee-Goldman <ableegoldman@apache.org>, Matthias J. Sax <matthias@confluent.io>, Bruno Cadonna <cadonna@apache.org>
2025-01-09 11:55:56 +01:00
Colin Patrick McCabe c28d9a3486
KAFKA-18435 Remove zookeeper dependencies in build.gradle (#18450)
Remove Apache ZooKeeper from the Apache Kafka build. Also remove commons IO, commons CLI, and netty, which were dependencies we took only because of ZooKeeper.

In order to keep the size of this PR manageable, I did not remove all classes which formerly interfaced with ZK. I just removed the ZK types. Fortunately, Kafka generally wrapped ZK data structures rather than using them directly.

Some classes were pretty entangled with ZK, so it was easier just to stub them out. For ZkNodeChangeNotificationListener.scala, PartitionStateMachine.scala, ReplicaStateMachine.scala, KafkaZkClient.scala, and ZookeeperClient.scala, I replaced all the functions with "throw new UnsupportedOperationException". Since the tests for these classes have been removed, as well as the ZK-based broker code, this should be OK as an incremental step.

Reviewers: Chia-Ping Tsai <chia7712@gmail.com>
2025-01-09 10:25:17 +08:00
Ismael Juma 083e344b30
MINOR: Remove PureJavaCrc32C and reflective code for CRC32C (#18361)
This is no longer required since we dropped support for Java 8. Also update `NOTICE*` and
`spotbugs-exclude.xml` files.

Reviewers: Chia-Ping Tsai <chia7712@gmail.com>, David Arthur <mumrah@gmail.com>
2025-01-01 02:08:06 -08:00
TengYao Chi 585b7db482
MINOR: log4j2 upgrade follow-up (#18290)
Reviewers: PoAn Yang <payang@apache.org>, Chia-Ping Tsai <chia7712@gmail.com>
2024-12-30 20:38:58 +08:00
TengYao Chi 8c55dcc979
KAFKA-18237: Upgrade system tests from using 3.7.1 to 3.7.2 (#18180)
Reviewers: Matthias J. Sax <matthias@confluent.io>
2024-12-16 09:49:03 -08:00
Ken Huang 5a2b03b200
KAFKA-18235 can't build release tar due to broken genConnectOpenAPIDocs task (#18177)
Reviewers: Christopher L. Shannon <christopher.l.shannon@gmail.com>, Chia-Ping Tsai <chia7712@gmail.com>
2024-12-15 04:30:54 +08:00
TengYao Chi b37b89c668
KAFKA-9366 Upgrade log4j to log4j2 (#17373)
This pull request replaces Log4j with Log4j2 across the entire project, including dependencies, configurations, and code. The notable changes are listed below:

1. Introduce Log4j2 Instead of Log4j
2. Change Configuration File Format from Properties to YAML
3. Adds warnings to notify users if they are still using Log4j properties, encouraging them to transition to Log4j2 configurations

Co-authored-by: Lee Dongjin <dongjin@apache.org>

Reviewers: Luke Chen <showuon@gmail.com>, Mickael Maison <mickael.maison@gmail.com>, Chia-Ping Tsai <chia7712@gmail.com>
2024-12-14 01:14:31 +08:00
Matthias J. Sax 6cdb8c352a
KAFKA-18015: add byDuration auto.offset.reset to Kafka Streams (#18115)
Part of KIP-1106.

Adds support for "by_duration" and "none" reset strategy
to the Kafka Streams runtime.

Reviewers: Bill Bejeck <bill@confluent.io>, Anna Sophie Blee-Goldman <ableegoldman@apache.org>
2024-12-11 15:12:16 -08:00
Christopher L. Shannon bd6d0fbf3d
KAFKA-16437 Upgrade to Jakarta and Jetty 12 (KIP-1032) (#16754)
This commit implements the changes for KIP-1032. This updates Kafka to Jakarta specs, JavaEE 10 and Jetty 12. The changes here primarily effect Kafka Connect and MM2.

Todo/Notes:

1) I bumped the connect modules to JDK 17 but I also had to bump a couple other things that had a dependency on conect. The tools project depends on connect so that had to be bumped, and streams depends on tools so that needed to be bumped. This means we may need to separate some things if we don't want to enforce JDK 17 on streams.

2) There is an issue with a test in DedicatedMirrorIntegrationTest that I had to change for now that involves escaping characters and not quite sure what to do about it yet. The cause is the Servlet 6 spec changing what is allowed in the path. See: Jetty 12: 400: Ambiguous URI path encoding for path <%=FOO%>~1 (encoded: %3C%25%3DFOO%25%3E%7E1) jetty/jetty.project#11890

3) I had to configure the idle timeout in Jetty requests to match our request timeout so tests didn't fail. This was needed to fix the ConnectWorkerIntegrationTest#testPollTimeoutExpiry() test

Testing is being done by just using the existing tests for Connect and MM2 which should be sufficient.

Reviewers: Greg Harris <greg.harris@aiven.io>, David Arthur <mumrah@gmail.com>, Chia-Ping Tsai <chia7712@gmail.com>
2024-12-11 23:24:14 +08:00
mingdaoy 4603f7495e
KAFKA-18030 Remove old upgrade-system-tests modules (#17843)
Reviewers: Chia-Ping Tsai <chia7712@gmail.com>
2024-12-10 11:19:14 +08:00
Ken Huang 2b43c49f51
KAFKA-18050 Upgrade the checkstyle version to 10.20.2 (#17999)
Reviewers: Chia-Ping Tsai <chia7712@gmail.com>
2024-12-05 10:59:18 +08:00
Dejan Stojadinović f9215dae3b
KAFKA-12770 introduce `checkstyleVersion` gradle property (for overriding CheckStyle project-defined dependency version) (#10967)
Reviewers: Ken Huang <s7133700@gmail.com>, Luke Chen <showuon@gmail.com>, Chia-Ping Tsai <chia7712@gmail.com>
2024-12-02 21:14:30 +08:00
Ken Huang b42efc7dc2
KAFKA-18049: Upgrade the caffeine version to 3.1.1 (#17879)
Reviewers: Mickael Maison <mickael.maison@gmail.com>
2024-11-26 18:00:50 +01:00
Joao Pedro Fonseca Dantas e9ccc2d6f5
KAFKA-16041: Replace Afterburn module with Blackbird (#17884)
Reviewers: Mickael Maison <mickael.maison@gmail.com>
2024-11-21 14:52:45 +01:00
Mickael Maison b5158aa3ad
MINOR: Bump Netty to 4.1.115.Final (#17860)
Reviewers: Josep Prat <josep.prat@aiven.io>
2024-11-19 17:27:27 +01:00
TengYao Chi 84fe66827d
KAFKA-18006: Add 3.9.0 to end-to-end test (streams) (#17800)
This commit adds AK 3.9 to the system tests on trunk.
Follow-up of #17797

Reviewers: Chia-Ping Tsai <chia7712@gmail.com>, Bruno Cadonna <cadonna@apache.org>
2024-11-15 14:58:24 +01:00
Chia-Chuan Yu 4319bfa7b8
KAFKA-17974 Upgrade gradle from 8.10 to 8.10.2 (#17734)
Reviewers: Chia-Ping Tsai <chia7712@gmail.com>
2024-11-11 09:14:04 +08:00
Josep Prat 5859df9ee0
MINOR: Add Kafka 3.8.1 to system tests (#17629)
Reviewers: Chia-Ping Tsai <chia7712@gmail.com>
2024-10-31 01:00:37 +08:00
David Jacot af5df59d2b
KAFKA-17593; [1/N] Introduce re2j dependency (#17634)
This patch is the first of a series of patches to introduce support for server side regular expression. It introduces the re2j dependency.

Co-authored-by: Lianet Magrans <lmagrans@confluent.io>

Reviewers: Lianet Magrans <lmagrans@confluent.io>
2024-10-30 08:20:11 -07:00
Mickael Maison 6e88c10ed5
KAFKA-14483 Move LocalLog to storage module (#17587)
Reviewers: Chia-Ping Tsai <chia7712@gmail.com>
2024-10-28 20:41:46 +08:00
Ken Huang 6a37d5cceb
KAFKA-17827 cleanup the mockit version (#17536)
Reviewers: Chia-Ping Tsai <chia7712@gmail.com>
2024-10-18 21:42:30 +08:00
kartik-3513 267220a7af
KAFKA-17802 Update Bouncy castle from 1.75 to 1.78.1 (#17512)
Reviewers: Chia-Ping Tsai <chia7712@gmail.com>
2024-10-18 00:45:46 +08:00
Josep Prat c20c244fd5
KAFKA-17810 upgrade Jetty because of CVE-2024-8184 (#17517)
Reviewers: Chia-Ping Tsai <chia7712@gmail.com>
2024-10-17 14:24:11 +08:00
Chia-Chuan Yu 078760a008
KAFKA-17773 Upgrade spotbug to work under java 23 (#17483)
Reviewers: Chia-Ping Tsai <chia7712@gmail.com>
2024-10-16 16:48:22 +08:00
TengYao Chi 582bb48e88
KAFKA-17748 Remove scala-java8-compat (#17497)
Reviewers: Chia-Ping Tsai <chia7712@gmail.com>
2024-10-15 13:34:21 +08:00
TengYao Chi 9b62c861fa
KAFKA-17739 Clean up build.gradle to adopt the minimum Java version as 11 (#17426)
Reviewers: Chia-Ping Tsai <chia7712@gmail.com>
2024-10-10 14:22:38 +08:00
Colin Patrick McCabe 095ab0acba KAFKA-17753: Update protobuf and commons-io dependencies (#17436)
Reviewers: Josep Prat <jlprat@apache.org>
2024-10-09 16:36:56 -07:00
Federico Valeri 3f2cb55a75
KAFKA-14705: Remove redirections and unused tools (#17386)
Reviewers: Mickael Maison <mickael.maison@gmail.com>
2024-10-07 17:24:43 +02:00
TengYao Chi 0e4eebe9c0
KAFKA-12895 Drop support for Scala 2.12 in Kafka 4.0 (#17313)
Reviewers: Chia-Ping Tsai <chia7712@gmail.com>
2024-10-07 01:34:38 +08:00