Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[BUG] WAL upload method gets negative stream size which results in guava RateLimiter throwing exception and kafka can't startup #2393

Open
keashem opened this issue Mar 31, 2025 · 0 comments
Labels
bug Something isn't working

Comments

@keashem
Copy link
Contributor

keashem commented Mar 31, 2025

What went wrong?

when broker recovers from crash, it loads WAL's data; but in some case, the datas in wal not upload to s3 storage is too large, which results in WAL upload method getting negative stream size , and guava RateLimiter throws exception and kafka can't startup ,the log info as follow:

[2025-03-30 10:43:34,149] INFO try recover from crash, recover records bytes size 4287034156 (com.automq.stream.s3.S3Storage)
[2025-03-30 10:43:34,194] ERROR upload run with unexpected exception (com.automq.stream.s3.DeltaWALUploadTask)
java.lang.IllegalArgumentException: Requested permits (-326332735) must be positive
at com.google.common.base.Preconditions.checkArgument(Preconditions.java:191)
at com.google.common.util.concurrent.RateLimiter.checkPermits(RateLimiter.java:496)
at com.google.common.util.concurrent.RateLimiter.tryAcquire(RateLimiter.java:413)
at com.google.common.util.concurrent.RateLimiter.tryAcquire(RateLimiter.java:368)
at com.automq.stream.utils.AsyncRateLimiter.acquire(AsyncRateLimiter.java:43)
at com.automq.stream.s3.DeltaWALUploadTask.acquireLimiter(DeltaWALUploadTask.java:112)
at com.automq.stream.s3.DeltaWALUploadTask.upload0(DeltaWALUploadTask.java:147)
at com.automq.stream.s3.DeltaWALUploadTask.lambda$upload$1(DeltaWALUploadTask.java:116)
at com.automq.stream.utils.FutureUtil.exec(FutureUtil.java:89)
at com.automq.stream.s3.DeltaWALUploadTask.lambda$upload$2(DeltaWALUploadTask.java:116)
at java.base/java.util.concurrent.CompletableFuture$UniAccept.tryFire(CompletableFuture.java:718)
at java.base/java.util.concurrent.CompletableFuture$Completion.run(CompletableFuture.java:482)
at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136)
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635)
at java.base/java.lang.Thread.run(Thread.java:833)
[2025-03-30 10:43:34,198] ERROR S3Storage start fail (com.automq.stream.s3.S3Storage)
java.util.concurrent.ExecutionException: java.lang.IllegalArgumentException: Requested permits (-326332735) must be positive
at java.base/java.util.concurrent.CompletableFuture.reportGet(CompletableFuture.java:396)
at java.base/java.util.concurrent.CompletableFuture.get(CompletableFuture.java:2073)
at com.automq.stream.s3.S3Storage.recover0(S3Storage.java:367)
at com.automq.stream.s3.S3Storage.recover(S3Storage.java:333)
at com.automq.stream.s3.S3Storage.startup(S3Storage.java:320)
at kafka.log.stream.s3.DefaultS3Client.start(DefaultS3Client.java:139)
at kafka.log.streamaspect.AlwaysSuccessClient.start(AlwaysSuccessClient.java:101)
at kafka.log.streamaspect.ElasticLogManager.startup(ElasticLogManager.scala:107)
at kafka.log.streamaspect.ElasticLogManager$.$anonfun$init$1(ElasticLogManager.scala:140)
at kafka.log.streamaspect.ElasticLogManager$.$anonfun$init$1$adapted(ElasticLogManager.scala:140)
at scala.Option.foreach(Option.scala:437)
at kafka.log.streamaspect.ElasticLogManager$.init(ElasticLogManager.scala:140)
at kafka.server.BrokerServer.startup(BrokerServer.scala:555)
at kafka.server.KafkaRaftServer.$anonfun$startup$2(KafkaRaftServer.scala:86)
at kafka.server.KafkaRaftServer.$anonfun$startup$2$adapted(KafkaRaftServer.scala:86)
at scala.Option.foreach(Option.scala:437)
at kafka.server.KafkaRaftServer.startup(KafkaRaftServer.scala:86)
at kafka.Kafka$.main(Kafka.scala:153)
at kafka.Kafka.main(Kafka.scala)
Caused by: java.lang.IllegalArgumentException: Requested permits (-326332735) must be positive
at com.google.common.base.Preconditions.checkArgument(Preconditions.java:191)
at com.google.common.util.concurrent.RateLimiter.checkPermits(RateLimiter.java:496)
at com.google.common.util.concurrent.RateLimiter.tryAcquire(RateLimiter.java:413)
at com.google.common.util.concurrent.RateLimiter.tryAcquire(RateLimiter.java:368)
at com.automq.stream.utils.AsyncRateLimiter.acquire(AsyncRateLimiter.java:43)
at com.automq.stream.s3.DeltaWALUploadTask.acquireLimiter(DeltaWALUploadTask.java:112)
at com.automq.stream.s3.DeltaWALUploadTask.upload0(DeltaWALUploadTask.java:147)
at com.automq.stream.s3.DeltaWALUploadTask.lambda$upload$1(DeltaWALUploadTask.java:116)
at com.automq.stream.utils.FutureUtil.exec(FutureUtil.java:89)
at com.automq.stream.s3.DeltaWALUploadTask.lambda$upload$2(DeltaWALUploadTask.java:116)
at java.base/java.util.concurrent.CompletableFuture$UniAccept.tryFire(CompletableFuture.java:718)
at java.base/java.util.concurrent.CompletableFuture$Completion.run(CompletableFuture.java:482)
at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136)
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635)
at java.base/java.lang.Thread.run(Thread.java:833)
[2025-03-30 10:43:34,198] INFO [BrokerServer id=20406062] Transition from STARTING to STARTED (kafka.server.BrokerServer)
[2025-03-30 10:43:34,200] ERROR [BrokerServer id=20406062] Fatal error during broker startup. Prepare to shutdown (kafka.server.BrokerServer)

@keashem keashem added the bug Something isn't working label Mar 31, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug Something isn't working
Projects
None yet
Development

No branches or pull requests

1 participant