private synchronized CompletableFuture<Void> maybeNextTick() {
        if (currentTick.isDone()) {
            // a future which will complete after delay
            currentTick = CompletableFuture.runAsync(() -> {
            }, delayedExecutor);
        }
        return currentTick;
    }
Generate a new tick if the current tick is done
s3stream/src/main/java/com/automq/stream/utils/FutureTicker.java