ibessonov commented on code in PR #6723:
URL: https://github.com/apache/ignite-3/pull/6723#discussion_r2428395855


##########
modules/raft/src/main/java/org/apache/ignite/raft/jraft/entity/codec/v1/V1Decoder.java:
##########
@@ -53,130 +62,92 @@ public LogEntry decode(final byte[] content) {
     }
 
     // Refactored to look closer to Ignites code style.
-    private void decode(final LogEntry log, final byte[] content) {
-        var reader = new Reader(content);
-        reader.pos = LogEntryV1CodecFactory.PAYLOAD_OFFSET;
-
-        int typeNumber = (int)reader.readLong();
+    private void decode(final LogEntry log, final ByteBuffer content) {
+        int typeNumber = (int)readLong(content);
         EnumOutter.EntryType type = 
Objects.requireNonNull(EnumOutter.EntryType.forNumber(typeNumber));
         log.setType(type);
 
-        long index = reader.readLong();
-        long term = reader.readLong();
+        long index = readLong(content);
+        long term = readLong(content);
         log.setId(new LogId(index, term));
 
-        long checksum = Bits.getLongLittleEndian(content, reader.pos);
+        long checksum = content.getLong();
         log.setChecksum(checksum);
 
-        int pos = reader.pos + Long.BYTES;
-
         // Peers and learners.
         if (type != EnumOutter.EntryType.ENTRY_TYPE_DATA) {
-            reader.pos = pos;
-            int peerCount = (int)reader.readLong();
-            pos = reader.pos;
+            int peerCount = (int)readLong(content);
             if (peerCount > 0) {
                 List<PeerId> peers = new ArrayList<>(peerCount);
 
-                pos = readNodesList(reader, pos, content, peerCount, peers);
+                readNodesList(content, peerCount, peers);
 
                 log.setPeers(peers);
             }
 
-            reader.pos = pos;
-            int oldPeerCount = (int)reader.readLong();
-            pos = reader.pos;
+            int oldPeerCount = (int)readLong(content);
             if (oldPeerCount > 0) {
                 List<PeerId> oldPeers = new ArrayList<>(oldPeerCount);
 
-                pos = readNodesList(reader, pos, content, oldPeerCount, 
oldPeers);
+                readNodesList(content, oldPeerCount, oldPeers);
 
                 log.setOldPeers(oldPeers);
             }
 
-            reader.pos = pos;
-            int learnersCount = (int)reader.readLong();
-            pos = reader.pos;
+            int learnersCount = (int)readLong(content);
             if (learnersCount > 0) {
                 List<PeerId> learners = new ArrayList<>(learnersCount);
 
-                pos = readNodesList(reader, pos, content, learnersCount, 
learners);
+                readNodesList(content, learnersCount, learners);
 
                 log.setLearners(learners);
             }
 
-            reader.pos = pos;
-            int oldLearnersCount = (int)reader.readLong();
-            pos = reader.pos;
+            int oldLearnersCount = (int)readLong(content);
             if (oldLearnersCount > 0) {
                 List<PeerId> oldLearners = new ArrayList<>(oldLearnersCount);
 
-                pos = readNodesList(reader, pos, content, oldLearnersCount, 
oldLearners);
+                readNodesList(content, oldLearnersCount, oldLearners);
 
                 log.setOldLearners(oldLearners);
             }
         }
 
         // Data.
         if (type != EnumOutter.EntryType.ENTRY_TYPE_CONFIGURATION) {
-            if (content.length > pos) {
-                int len = content.length - pos;
-
-                ByteBuffer data = ByteBuffer.wrap(content, pos, len).slice();
-
-                log.setData(data);
+            if (content.remaining() > 0) {
+                log.setData(content.slice());

Review Comment:
   > The byte buffer is not tied to the underlying file in Java, so if the file 
is closed, it continues working.
   
   If that's an `mmap` file then no, all pointers will become invalid. 



-- 
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]

Reply via email to