From 16f0ad24690b28585211270c911100482db15892 Mon Sep 17 00:00:00 2001 From: Yu Ning <78631860+Chillax-0v0@users.noreply.github.com> Date: Fri, 22 Dec 2023 10:21:11 +0800 Subject: [PATCH] refactor(s3stream): only lock the `deltaWAL.append` (#847) Signed-off-by: Ning Yu --- .../main/java/com/automq/stream/s3/S3Storage.java | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/s3stream/src/main/java/com/automq/stream/s3/S3Storage.java b/s3stream/src/main/java/com/automq/stream/s3/S3Storage.java index fbcf18e28..1370e3dfa 100644 --- a/s3stream/src/main/java/com/automq/stream/s3/S3Storage.java +++ b/s3stream/src/main/java/com/automq/stream/s3/S3Storage.java @@ -289,18 +289,19 @@ public boolean append0(WalWriteRequest request, boolean fromBackoff) { return true; } WriteAheadLog.AppendResult appendResult; - Lock lock = confirmOffsetCalculator.addLock(); - lock.lock(); try { try { StreamRecordBatch streamRecord = request.record; streamRecord.retain(); - appendResult = deltaWAL.append(streamRecord.encoded()); - lock.unlock(); + Lock lock = confirmOffsetCalculator.addLock(); + lock.lock(); + try { + appendResult = deltaWAL.append(streamRecord.encoded()); + } finally { + lock.unlock(); + } } catch (WriteAheadLog.OverCapacityException e) { // the WAL write data align with block, 'WAL is full but LogCacheBlock is not full' may happen. - // the read lock must release before write lock https://github.com/AutoMQ/automq-for-kafka/issues/581 - lock.unlock(); confirmOffsetCalculator.update(); forceUpload(LogCache.MATCH_ALL_STREAMS); if (!fromBackoff) { @@ -315,7 +316,6 @@ public boolean append0(WalWriteRequest request, boolean fromBackoff) { request.offset = appendResult.recordOffset(); confirmOffsetCalculator.add(request); } catch (Throwable e) { - lock.unlock(); LOGGER.error("[UNEXPECTED] append WAL fail", e); request.cf.completeExceptionally(e); return false;