This is an automated email from the ASF dual-hosted git repository.

dragonyliu pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/ratis.git


The following commit(s) were added to refs/heads/master by this push:
     new a221c2ed5 RATIS-1730. Optimize RaftLog cache eviction time. (#769)
a221c2ed5 is described below

commit a221c2ed56d4c3799a7ddc8d8c52617974f716f6
Author: Tsz-Wo Nicholas Sze <[email protected]>
AuthorDate: Tue Nov 1 09:59:17 2022 +0800

    RATIS-1730. Optimize RaftLog cache eviction time. (#769)
---
 .../raftlog/segmented/SegmentedRaftLogCache.java   | 35 ++++++++--------------
 1 file changed, 13 insertions(+), 22 deletions(-)

diff --git 
a/ratis-server/src/main/java/org/apache/ratis/server/raftlog/segmented/SegmentedRaftLogCache.java
 
b/ratis-server/src/main/java/org/apache/ratis/server/raftlog/segmented/SegmentedRaftLogCache.java
index 6d0aedda4..ae1fac397 100644
--- 
a/ratis-server/src/main/java/org/apache/ratis/server/raftlog/segmented/SegmentedRaftLogCache.java
+++ 
b/ratis-server/src/main/java/org/apache/ratis/server/raftlog/segmented/SegmentedRaftLogCache.java
@@ -38,6 +38,7 @@ import org.slf4j.LoggerFactory;
 import java.io.File;
 import java.io.IOException;
 import java.util.*;
+import java.util.concurrent.CopyOnWriteArrayList;
 import java.util.function.Consumer;
 
 /**
@@ -144,7 +145,7 @@ public class SegmentedRaftLogCache {
 
   static class LogSegmentList {
     private final Object name;
-    private final List<LogSegment> segments = new ArrayList<>();
+    private final List<LogSegment> segments = new CopyOnWriteArrayList<>();
     private final AutoCloseableReadWriteLock lock;
     private long sizeInBytes;
 
@@ -165,15 +166,11 @@ public class SegmentedRaftLogCache {
     }
 
     boolean isEmpty() {
-      try(AutoCloseableLock readLock = readLock()) {
-        return segments.isEmpty();
-      }
+      return segments.isEmpty();
     }
 
     int size() {
-      try(AutoCloseableLock readLock = readLock()) {
-        return segments.size();
-      }
+      return segments.size();
     }
 
     long getTotalFileSize() {
@@ -181,20 +178,11 @@ public class SegmentedRaftLogCache {
     }
 
     long getTotalCacheSize() {
-      try(AutoCloseableLock readLock = readLock()) {
-        long size = 0;
-        // TODO(runzhiwang): If there is performance problem, start a daemon 
thread to checkAndEvictCache.
-        for (LogSegment seg : segments) {
-          size += seg.getTotalCacheSize();
-        }
-        return size;
-      }
+      return segments.stream().mapToLong(LogSegment::getTotalCacheSize).sum();
     }
 
     long countCached() {
-      try(AutoCloseableLock readLock = readLock()) {
-        return segments.stream().filter(LogSegment::hasCache).count();
-      }
+      return segments.stream().filter(LogSegment::hasCache).count();
     }
 
     LogSegment getLast() {
@@ -204,9 +192,7 @@ public class SegmentedRaftLogCache {
     }
 
     LogSegment get(int i) {
-      try(AutoCloseableLock readLock = readLock()) {
-        return segments.get(i);
-      }
+      return segments.get(i);
     }
 
     int binarySearch(long index) {
@@ -353,6 +339,11 @@ public class SegmentedRaftLogCache {
       clearOpenSegment.run();
       return info;
     }
+
+    @Override
+    public String toString() {
+      return name + ":" + segments;
+    }
   }
 
   private final String name;
@@ -403,7 +394,7 @@ public class SegmentedRaftLogCache {
     return openSegment == null ? 0 : openSegment.getTotalFileSize();
   }
 
-  public long getTotalCacheSize() {
+  private long getTotalCacheSize() {
     return closedSegments.getTotalCacheSize() +
             
Optional.ofNullable(openSegment).map(LogSegment::getTotalCacheSize).orElse(0L);
   }

Reply via email to