You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ignite.apache.org by vo...@apache.org on 2016/03/18 14:13:44 UTC

[3/3] ignite git commit: Optimization of IgfsPathIds creation.

Optimization of IgfsPathIds creation.


Project: http://git-wip-us.apache.org/repos/asf/ignite/repo
Commit: http://git-wip-us.apache.org/repos/asf/ignite/commit/7d7f8bcb
Tree: http://git-wip-us.apache.org/repos/asf/ignite/tree/7d7f8bcb
Diff: http://git-wip-us.apache.org/repos/asf/ignite/diff/7d7f8bcb

Branch: refs/heads/ignite-igfs-refactoring
Commit: 7d7f8bcb0f33c0ceff2d3cd30f94434e0ca2502d
Parents: 9a51fd5
Author: vozerov-gridgain <vo...@gridgain.com>
Authored: Fri Mar 18 16:13:35 2016 +0300
Committer: vozerov-gridgain <vo...@gridgain.com>
Committed: Fri Mar 18 16:13:35 2016 +0300

----------------------------------------------------------------------
 .../java/org/apache/ignite/igfs/IgfsPath.java   |  9 +++++++
 .../processors/igfs/IgfsMetaManager.java        | 25 ++++++++++++++++----
 2 files changed, 30 insertions(+), 4 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ignite/blob/7d7f8bcb/modules/core/src/main/java/org/apache/ignite/igfs/IgfsPath.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/igfs/IgfsPath.java b/modules/core/src/main/java/org/apache/ignite/igfs/IgfsPath.java
index fb0621c..bbb4efb 100644
--- a/modules/core/src/main/java/org/apache/ignite/igfs/IgfsPath.java
+++ b/modules/core/src/main/java/org/apache/ignite/igfs/IgfsPath.java
@@ -159,6 +159,15 @@ public final class IgfsPath implements Comparable<IgfsPath>, Externalizable {
     }
 
     /**
+     * Get components in array form.
+     *
+     * @return Components array.
+     */
+    public String[] componentsArray() {
+        return path.length() == 1 ? new String[0] : path.substring(1).split(SLASH);
+    }
+
+    /**
      * Returns the parent of a path or {@code null} if at root.
      *
      * @return The parent of a path or {@code null} if at root.

http://git-wip-us.apache.org/repos/asf/ignite/blob/7d7f8bcb/modules/core/src/main/java/org/apache/ignite/internal/processors/igfs/IgfsMetaManager.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/igfs/IgfsMetaManager.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/igfs/IgfsMetaManager.java
index e21bef6..d91b0bc 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/igfs/IgfsMetaManager.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/igfs/IgfsMetaManager.java
@@ -341,12 +341,29 @@ public class IgfsMetaManager extends IgfsManager {
             try {
                 validTxState(false);
 
-                List<IgniteUuid> ids = fileIds(path, false);
+                // Prepare parts.
+                String[] components = path.componentsArray();
 
-                List<String> parts = new ArrayList<>(path.components());
-                parts.add(0, null);
+                String[] parts = new String[components.length + 1];
 
-                return new IgfsPathIds(path, parts.toArray(new String[0]), ids.toArray(new IgniteUuid[0]));
+                System.arraycopy(components, 0, parts, 1, components.length);
+
+                // Prepare IDs.
+                IgniteUuid[] ids = new IgniteUuid[parts.length];
+
+                ids[0] = IgfsUtils.ROOT_ID;
+
+                for (int i = 1; i < ids.length; i++) {
+                    IgniteUuid id = fileId(ids[i - 1], parts[i], false);
+
+                    if (id != null)
+                        ids[i] = id;
+                    else
+                        break;
+                }
+
+                // Return.
+                return new IgfsPathIds(path, parts, ids);
             }
             finally {
                 busyLock.leaveBusy();