@EventLoopSafe
        public boolean putIntoCache() {
            if (blocks == null) {
                return false;
            }
            for (; ; ) {
                CompletableFuture<ObjectReader.DataBlockGroup> blockCf = blocks.peek();
                if (blockCf == null) {
                    cf.complete(null);
                    return true;
                }
                if (!blockCf.isDone()) {
                    return false;
                }
                if (blockCf.isCompletedExceptionally() || blockCf.isCancelled()) {
                    blocks.poll();
                    continue;
                }
                try (ObjectReader.DataBlockGroup block = blockCf.join()) {
                    put(block.iterator());
                }
                blocks.poll();
            }
        }
Put blocks' records into cache

@return true if all the data is put into cache, false otherwise
s3stream/src/main/java/com/automq/stream/s3/cache/SnapshotReadCache.java