tkalkirill commented on code in PR #6777:
URL: https://github.com/apache/ignite-3/pull/6777#discussion_r2432389788
##########
modules/raft/src/main/java/org/apache/ignite/internal/raft/storage/segstore/IndexFileManager.java:
##########
@@ -189,6 +189,18 @@ SegmentFilePointer getSegmentFilePointer(long groupId,
long logIndex) throws IOE
}
}
+ long firstLogIndex(long groupId) {
+ GroupIndexMeta groupIndexMeta = groupIndexMetas.get(groupId);
+
+ return groupIndexMeta == null ? -1 : groupIndexMeta.firstLogIndex();
Review Comment:
It would be good to document `-1`.
I don't insist, resolve it if you don't want to.
##########
modules/raft/src/main/java/org/apache/ignite/internal/raft/storage/segstore/RaftLogCheckpointer.java:
##########
@@ -124,6 +126,36 @@ void onRollover(SegmentFile segmentFile,
ReadModeIndexMemTable indexMemTable) {
return null;
}
+ long firstLogIndex(long groupId) {
+ Iterator<Entry> it = queue.tailIterator();
+
+ long firstIndex = -1;
+
+ while (it.hasNext()) {
+ SegmentInfo segmentInfo =
it.next().memTable().segmentInfo(groupId);
+
+ if (segmentInfo != null) {
+ firstIndex = segmentInfo.firstLogIndex();
+ }
+ }
+
+ return firstIndex;
+ }
+
+ long lastLogIndex(long groupId) {
+ Iterator<Entry> it = queue.tailIterator();
+
+ while (it.hasNext()) {
+ SegmentInfo segmentInfo =
it.next().memTable().segmentInfo(groupId);
+
+ if (segmentInfo != null) {
+ return segmentInfo.lastLogIndex();
+ }
+ }
+
+ return -1;
Review Comment:
It would be good to document `-1`.
I don't insist, resolve it if you don't want to.
##########
modules/raft/src/main/java/org/apache/ignite/internal/raft/storage/segstore/SegmentFileManager.java:
##########
@@ -216,6 +216,56 @@ void appendEntry(long groupId, LogEntry entry,
LogEntryEncoder encoder) throws I
return readFromOtherSegmentFiles(groupId, logIndex);
}
+ long firstLogIndex(long groupId) {
+ long logIndexFromMemtable = firstLogIndexFromMemtable(groupId);
+
+ long logIndexFromCheckpointQueue = checkpointer.firstLogIndex(groupId);
+
+ long logIndexFromIndexFiles = indexFileManager.firstLogIndex(groupId);
+
+ if (logIndexFromIndexFiles >= 0) {
+ return logIndexFromIndexFiles;
+ }
+
+ if (logIndexFromCheckpointQueue >= 0) {
+ return logIndexFromCheckpointQueue;
+ }
+
+ return logIndexFromMemtable;
+ }
+
+ private long firstLogIndexFromMemtable(long groupId) {
+ SegmentFileWithMemtable currentSegmentFile =
this.currentSegmentFile.get();
+
+ SegmentInfo segmentInfo =
currentSegmentFile.memtable().segmentInfo(groupId);
+
+ return segmentInfo == null ? -1 : segmentInfo.firstLogIndex();
+ }
+
+ long lastLogIndex(long groupId) {
+ long logIndexFromMemtable = lastLogIndexFromMemtable(groupId);
+
+ if (logIndexFromMemtable >= 0) {
+ return logIndexFromMemtable;
+ }
+
+ long logIndexFromCheckpointQueue = checkpointer.lastLogIndex(groupId);
+
+ if (logIndexFromCheckpointQueue >= 0) {
+ return logIndexFromCheckpointQueue;
+ }
+
+ return indexFileManager.lastLogIndex(groupId);
+ }
+
+ private long lastLogIndexFromMemtable(long groupId) {
+ SegmentFileWithMemtable currentSegmentFile =
this.currentSegmentFile.get();
+
+ SegmentInfo segmentInfo =
currentSegmentFile.memtable().segmentInfo(groupId);
+
+ return segmentInfo == null ? -1 : segmentInfo.lastLogIndex();
Review Comment:
It would be good to document `-1`.
I don't insist, resolve it if you don't want to.
##########
modules/raft/src/main/java/org/apache/ignite/internal/raft/storage/segstore/RaftLogCheckpointer.java:
##########
@@ -124,6 +126,36 @@ void onRollover(SegmentFile segmentFile,
ReadModeIndexMemTable indexMemTable) {
return null;
}
+ long firstLogIndex(long groupId) {
+ Iterator<Entry> it = queue.tailIterator();
+
+ long firstIndex = -1;
+
+ while (it.hasNext()) {
+ SegmentInfo segmentInfo =
it.next().memTable().segmentInfo(groupId);
+
+ if (segmentInfo != null) {
+ firstIndex = segmentInfo.firstLogIndex();
+ }
+ }
+
+ return firstIndex;
Review Comment:
It would be good to document `-1`.
I don't insist, resolve it if you don't want to.
##########
modules/raft/src/main/java/org/apache/ignite/internal/raft/storage/segstore/IndexFileManager.java:
##########
@@ -189,6 +189,18 @@ SegmentFilePointer getSegmentFilePointer(long groupId,
long logIndex) throws IOE
}
}
+ long firstLogIndex(long groupId) {
+ GroupIndexMeta groupIndexMeta = groupIndexMetas.get(groupId);
+
+ return groupIndexMeta == null ? -1 : groupIndexMeta.firstLogIndex();
+ }
+
+ long lastLogIndex(long groupId) {
+ GroupIndexMeta groupIndexMeta = groupIndexMetas.get(groupId);
+
+ return groupIndexMeta == null ? -1 : groupIndexMeta.lastLogIndex();
Review Comment:
It would be good to document `-1`.
I don't insist, resolve it if you don't want to.
##########
modules/raft/src/main/java/org/apache/ignite/internal/raft/storage/segstore/IndexMemTable.java:
##########
@@ -44,16 +44,24 @@ public void appendSegmentFileOffset(long groupId, long
logIndex, int segmentFile
// File offset can be less than 0 (it's treated as an unsigned
integer) but never 0, because of the file header.
assert segmentFileOffset != 0 : String.format("Segment file offset
must not be 0 [groupId=%d]", groupId);
- SegmentInfo segmentInfo =
stripe(groupId).memTable.computeIfAbsent(groupId, id -> new
SegmentInfo(logIndex));
+ ConcurrentMap<Long, SegmentInfo> memTable = stripe(groupId).memTable;
- segmentInfo.addOffset(logIndex, segmentFileOffset);
+ SegmentInfo segmentInfo = memTable.get(groupId);
+
+ if (segmentInfo == null) {
+ segmentInfo = new SegmentInfo(logIndex);
+
+ segmentInfo.addOffset(logIndex, segmentFileOffset);
+
+ memTable.put(groupId, segmentInfo);
Review Comment:
Is it possible that two threads want to update this map using the same key?
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]