Skip to content

Commit accb612

Browse files
authored
RATIS-2227. LogEntryProto leak in SegmentedRaftLog (#1199)
1 parent c2ae864 commit accb612

File tree

2 files changed

+6
-4
lines changed

2 files changed

+6
-4
lines changed

ratis-common/src/main/java/org/apache/ratis/util/ReferenceCountedLeakDetector.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -271,7 +271,7 @@ static class TraceInfo {
271271
}
272272

273273
static <T> int findFirstUnequalFromTail(T[] current, T[] previous) {
274-
int c = current.length - 1;
274+
int c = current.length == 0 ? 0 : current.length - 1;
275275
for(int p = previous.length - 1; p >= 0; p--, c--) {
276276
if (!previous[p].equals(current[c])) {
277277
return c;

ratis-server/src/main/java/org/apache/ratis/server/leader/LogAppenderBase.java

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -261,7 +261,7 @@ protected ReferenceCountedObject<AppendEntriesRequestProto> nextAppendEntriesReq
261261
final long halfMs = heartbeatWaitTimeMs/2;
262262
final Map<Long, ReferenceCountedObject<EntryWithData>> offered = new HashMap<>();
263263
for (long next = followerNext; leaderNext > next && getHeartbeatWaitTimeMs() - halfMs > 0; next++) {
264-
ReferenceCountedObject<EntryWithData> entryWithData = null;
264+
final ReferenceCountedObject<EntryWithData> entryWithData;
265265
try {
266266
entryWithData = getRaftLog().retainEntryWithData(next);
267267
if (!buffer.offer(entryWithData.get())) {
@@ -270,9 +270,11 @@ protected ReferenceCountedObject<AppendEntriesRequestProto> nextAppendEntriesReq
270270
}
271271
offered.put(next, entryWithData);
272272
} catch (Exception e){
273-
if (entryWithData != null) {
274-
entryWithData.release();
273+
for (ReferenceCountedObject<EntryWithData> ref : offered.values()) {
274+
ref.release();
275275
}
276+
offered.clear();
277+
throw e;
276278
}
277279
}
278280
if (buffer.isEmpty()) {

0 commit comments

Comments
 (0)