You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@iotdb.apache.org by ma...@apache.org on 2022/06/30 14:00:19 UTC

[iotdb] branch IOTDB-3709 created (now 79d7cfe584)

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

marklau99 pushed a change to branch IOTDB-3709
in repository https://gitbox.apache.org/repos/asf/iotdb.git


      at 79d7cfe584 rewrite some methods in TsFileResourceList according to LinkedList in JDK

This branch includes the following new commits:

     new 79d7cfe584 rewrite some methods in TsFileResourceList according to LinkedList in JDK

The 1 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.



[iotdb] 01/01: rewrite some methods in TsFileResourceList according to LinkedList in JDK

Posted by ma...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

marklau99 pushed a commit to branch IOTDB-3709
in repository https://gitbox.apache.org/repos/asf/iotdb.git

commit 79d7cfe584c71046207adc6a57df0b6b432767eb
Author: Liu Xuxin <li...@outlook.com>
AuthorDate: Thu Jun 30 22:00:02 2022 +0800

    rewrite some methods in TsFileResourceList according to LinkedList in JDK
---
 .../db/engine/storagegroup/TsFileResourceList.java | 94 ++++++++++++----------
 1 file changed, 53 insertions(+), 41 deletions(-)

diff --git a/server/src/main/java/org/apache/iotdb/db/engine/storagegroup/TsFileResourceList.java b/server/src/main/java/org/apache/iotdb/db/engine/storagegroup/TsFileResourceList.java
index 091d8f180e..f48b2bc6da 100644
--- a/server/src/main/java/org/apache/iotdb/db/engine/storagegroup/TsFileResourceList.java
+++ b/server/src/main/java/org/apache/iotdb/db/engine/storagegroup/TsFileResourceList.java
@@ -43,21 +43,20 @@ public class TsFileResourceList implements List<TsFileResource> {
   /**
    * Insert a new node before an existing node
    *
-   * @param node the existing node
+   * @param succ the existing node
    * @param newNode the file to insert
    */
-  public void insertBefore(TsFileResource node, TsFileResource newNode) {
-    if (newNode.equals(node)) {
+  public void insertBefore(TsFileResource succ, TsFileResource newNode) {
+    if (newNode.equals(succ)) {
       return;
     }
-    newNode.prev = node.prev;
-    newNode.next = node;
-    if (node.prev == null) {
+    TsFileResource pred = succ.prev;
+    succ.prev = newNode;
+    if (pred == null) {
       header = newNode;
     } else {
-      node.prev.next = newNode;
+      pred.next = newNode;
     }
-    node.prev = newNode;
     count++;
   }
 
@@ -68,12 +67,13 @@ public class TsFileResourceList implements List<TsFileResource> {
    * @param newNode the file to insert
    */
   public void insertAfter(TsFileResource node, TsFileResource newNode) {
+    TsFileResource p = node.next;
     newNode.prev = node;
     newNode.next = node.next;
-    if (node.next == null) {
+    if (p == null) {
       tail = newNode;
     } else {
-      node.next.prev = newNode;
+      p.prev = newNode;
     }
     node.next = newNode;
     count++;
@@ -122,13 +122,14 @@ public class TsFileResourceList implements List<TsFileResource> {
       // this node already in a list
       return false;
     }
-    if (tail == null) {
+    final TsFileResource t = tail;
+    tail = newNode;
+    if (t == null) {
       header = newNode;
-      tail = newNode;
-      count++;
     } else {
-      insertAfter(tail, newNode);
+      t.next = newNode;
     }
+    count++;
     return true;
   }
 
@@ -191,37 +192,40 @@ public class TsFileResourceList implements List<TsFileResource> {
    */
   @Override
   public boolean remove(Object o) {
-    TsFileResource tsFileResource = (TsFileResource) o;
-    if (!contains(o)) {
-      // the tsFileResource does not exist in this list
+    if (!(o instanceof TsFileResource)) {
       return false;
     }
-    if (tsFileResource.prev == null) {
-      // remove header
-      header = header.next;
-      if (header != null) {
-        header.prev = null;
-      } else {
-        // if list contains only one item, remove the header and the tail
-        tail = null;
-      }
-    } else if (tsFileResource.next == null) {
-      // remove tail
-      tail = tail.prev;
-      if (tail != null) {
-        tail.next = null;
-      } else {
-        // if list contains only one item, remove the header and the tail
-        header = null;
+    TsFileResource curr = header;
+    TsFileResource target = (TsFileResource) o;
+    while (curr != null) {
+      if (curr.equals(target)) {
+        unlink(target);
+        return true;
       }
+      curr = curr.next;
+    }
+    return false;
+  }
+
+  private void unlink(TsFileResource x) {
+    TsFileResource next = x.next;
+    TsFileResource prev = x.prev;
+
+    if (prev == null) {
+      header = next;
+    } else {
+      prev.next = next;
+      x.prev = null;
+    }
+
+    if (next == null) {
+      tail = prev;
     } else {
-      tsFileResource.prev.next = tsFileResource.next;
-      tsFileResource.next.prev = tsFileResource.prev;
+      next.prev = prev;
+      x.next = null;
     }
-    tsFileResource.prev = null;
-    tsFileResource.next = null;
+
     count--;
-    return true;
   }
 
   @Override
@@ -243,6 +247,14 @@ public class TsFileResourceList implements List<TsFileResource> {
 
   @Override
   public void clear() {
+    TsFileResource curr = header;
+    TsFileResource next;
+    while (curr != null) {
+      curr.prev = null;
+      next = curr.next;
+      curr.next = null;
+      curr = next;
+    }
     header = null;
     tail = null;
     count = 0;
@@ -296,13 +308,13 @@ public class TsFileResourceList implements List<TsFileResource> {
   public TsFileResource set(int index, TsFileResource element) {
     int currIndex = 0;
     TsFileResource currTsFileResource = header;
-    if (header == null && index > 0) {
+    if (index >= count) {
       throw new ArrayIndexOutOfBoundsException(index);
     }
     while (currIndex != index) {
       if (currTsFileResource.next == null) {
         if (currIndex == index - 1) {
-          insertAfter(currTsFileResource, element);
+          add(element);
           return element;
         } else {
           throw new ArrayIndexOutOfBoundsException(currIndex);