# IGNITE-418: Applied fix from Ivan V..
The problem was with block size handling as we use it to distinguish between 
files and directories (which is not very correct, honestly).


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

Branch: refs/heads/ignite-410
Commit: acf140c40369e659c963f0b0665105dcdcb74203
Parents: dab66dc
Author: vozerov-gridgain <voze...@gridgain.com>
Authored: Tue Mar 10 16:54:15 2015 +0300
Committer: vozerov-gridgain <voze...@gridgain.com>
Committed: Tue Mar 10 16:58:37 2015 +0300

----------------------------------------------------------------------
 .../ignite/internal/processors/igfs/IgfsFileImpl.java |  7 +++++++
 .../ignite/internal/processors/igfs/IgfsFileInfo.java |  3 ++-
 .../ignite/internal/processors/igfs/IgfsImpl.java     |  4 ++--
 .../fs/IgniteHadoopIgfsSecondaryFileSystem.java       |  5 ++---
 .../ignite/hadoop/fs/v1/IgniteHadoopFileSystem.java   | 14 +++++++++++---
 .../ignite/hadoop/fs/v2/IgniteHadoopFileSystem.java   |  8 +++++---
 6 files changed, 29 insertions(+), 12 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/acf140c4/modules/core/src/main/java/org/apache/ignite/internal/processors/igfs/IgfsFileImpl.java
----------------------------------------------------------------------
diff --git 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/igfs/IgfsFileImpl.java
 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/igfs/IgfsFileImpl.java
index dc1248c..fddfa20 100644
--- 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/igfs/IgfsFileImpl.java
+++ 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/igfs/IgfsFileImpl.java
@@ -77,6 +77,9 @@ public final class IgfsFileImpl implements IgfsFile, 
Externalizable {
 
         if (info.isFile()) {
             blockSize = info.blockSize();
+
+            assert blockSize > 0; // By contract file must have blockSize > 0, 
while directory's blockSize == 0.
+
             len = info.length();
 
             grpBlockSize = info.affinityKey() == null ? globalGrpBlockSize :
@@ -107,6 +110,10 @@ public final class IgfsFileImpl implements IgfsFile, 
Externalizable {
 
         blockSize = entry.blockSize();
 
+        // By contract file must have blockSize > 0, while directory's 
blockSize == 0:
+        assert entry.isFile() == (blockSize > 0);
+        assert entry.isDirectory() == (blockSize == 0);
+
         grpBlockSize = entry.affinityKey() == null ? globalGrpSize :
             entry.length() == 0 ? globalGrpSize : entry.length();
 

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/acf140c4/modules/core/src/main/java/org/apache/ignite/internal/processors/igfs/IgfsFileInfo.java
----------------------------------------------------------------------
diff --git 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/igfs/IgfsFileInfo.java
 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/igfs/IgfsFileInfo.java
index e88503b..de7d077 100644
--- 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/igfs/IgfsFileInfo.java
+++ 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/igfs/IgfsFileInfo.java
@@ -189,7 +189,8 @@ public final class IgfsFileInfo implements Externalizable {
      * @param evictExclude Evict exclude flag.
      */
     IgfsFileInfo(int blockSize, long len, boolean evictExclude, @Nullable 
Map<String, String> props) {
-        this(false, null, blockSize, len, null, null, props, null, true, 
System.currentTimeMillis(), evictExclude);
+        this(blockSize == 0, // NB The contract is: (blockSize == null) <=> 
isDirectory()
+            null, blockSize, len, null, null, props, null, true, 
System.currentTimeMillis(), evictExclude);
     }
 
     /**

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/acf140c4/modules/core/src/main/java/org/apache/ignite/internal/processors/igfs/IgfsImpl.java
----------------------------------------------------------------------
diff --git 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/igfs/IgfsImpl.java
 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/igfs/IgfsImpl.java
index abbfe1e..9ccb2a9 100644
--- 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/igfs/IgfsImpl.java
+++ 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/igfs/IgfsImpl.java
@@ -1018,8 +1018,8 @@ public final class IgfsImpl implements IgfsEx {
                     Collection<IgfsFile> children = 
secondaryFs.listFiles(path);
 
                     for (IgfsFile child : children) {
-                        IgfsFileInfo fsInfo = new 
IgfsFileInfo(cfg.getBlockSize(), child.length(),
-                            evictExclude(path, false), child.properties());
+                        IgfsFileInfo fsInfo = new IgfsFileInfo(
+                            child.blockSize(), child.length(), 
evictExclude(path, false), child.properties());
 
                         files.add(new IgfsFileImpl(child.path(), fsInfo, 
data.groupBlockSize()));
                     }

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/acf140c4/modules/hadoop/src/main/java/org/apache/ignite/hadoop/fs/IgniteHadoopIgfsSecondaryFileSystem.java
----------------------------------------------------------------------
diff --git 
a/modules/hadoop/src/main/java/org/apache/ignite/hadoop/fs/IgniteHadoopIgfsSecondaryFileSystem.java
 
b/modules/hadoop/src/main/java/org/apache/ignite/hadoop/fs/IgniteHadoopIgfsSecondaryFileSystem.java
index 3a7464c..11003a5 100644
--- 
a/modules/hadoop/src/main/java/org/apache/ignite/hadoop/fs/IgniteHadoopIgfsSecondaryFileSystem.java
+++ 
b/modules/hadoop/src/main/java/org/apache/ignite/hadoop/fs/IgniteHadoopIgfsSecondaryFileSystem.java
@@ -40,7 +40,6 @@ import static 
org.apache.ignite.internal.processors.igfs.IgfsEx.*;
  * Adapter to use any Hadoop file system {@link FileSystem} as  {@link 
IgfsSecondaryFileSystem}.
  */
 public class IgniteHadoopIgfsSecondaryFileSystem implements 
IgfsSecondaryFileSystem, AutoCloseable {
-
     /** Hadoop file system. */
     private final FileSystem fileSys;
 
@@ -345,7 +344,8 @@ public class IgniteHadoopIgfsSecondaryFileSystem implements 
IgfsSecondaryFileSys
                 }
 
                 @Override public int blockSize() {
-                    return (int)status.getBlockSize();
+                    // By convention directory has blockSize == 0, while file 
has blockSize > 0:
+                    return isDirectory() ? 0 : (int)status.getBlockSize();
                 }
 
                 @Override public long groupBlockSize() {
@@ -384,7 +384,6 @@ public class IgniteHadoopIgfsSecondaryFileSystem implements 
IgfsSecondaryFileSys
                     return props;
                 }
             };
-
         }
         catch (FileNotFoundException ignore) {
             return null;

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/acf140c4/modules/hadoop/src/main/java/org/apache/ignite/hadoop/fs/v1/IgniteHadoopFileSystem.java
----------------------------------------------------------------------
diff --git 
a/modules/hadoop/src/main/java/org/apache/ignite/hadoop/fs/v1/IgniteHadoopFileSystem.java
 
b/modules/hadoop/src/main/java/org/apache/ignite/hadoop/fs/v1/IgniteHadoopFileSystem.java
index 93c0df4..41ef3e5 100644
--- 
a/modules/hadoop/src/main/java/org/apache/ignite/hadoop/fs/v1/IgniteHadoopFileSystem.java
+++ 
b/modules/hadoop/src/main/java/org/apache/ignite/hadoop/fs/v1/IgniteHadoopFileSystem.java
@@ -694,12 +694,20 @@ public class IgniteHadoopFileSystem extends FileSystem {
                 return secondaryFs.rename(toSecondary(src), toSecondary(dst));
             }
             else {
-                // Will throw exception if failed.
-                rmtClient.rename(srcPath, dstPath);
-
                 if (clientLog.isLogEnabled())
                     clientLog.logRename(srcPath, mode, dstPath);
 
+                try {
+                    rmtClient.rename(srcPath, dstPath);
+                }
+                catch (IOException ioe) {
+                    // Log the exception before rethrowing since it may be 
ignored:
+                    LOG.warn("Failed to rename [srcPath=" + srcPath + ", 
dstPath=" + dstPath + ", mode=" + mode + ']',
+                        ioe);
+
+                    throw ioe;
+                }
+
                 return true;
             }
         }

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/acf140c4/modules/hadoop/src/main/java/org/apache/ignite/hadoop/fs/v2/IgniteHadoopFileSystem.java
----------------------------------------------------------------------
diff --git 
a/modules/hadoop/src/main/java/org/apache/ignite/hadoop/fs/v2/IgniteHadoopFileSystem.java
 
b/modules/hadoop/src/main/java/org/apache/ignite/hadoop/fs/v2/IgniteHadoopFileSystem.java
index 70ad99f..5dac047 100644
--- 
a/modules/hadoop/src/main/java/org/apache/ignite/hadoop/fs/v2/IgniteHadoopFileSystem.java
+++ 
b/modules/hadoop/src/main/java/org/apache/ignite/hadoop/fs/v2/IgniteHadoopFileSystem.java
@@ -587,11 +587,13 @@ public class IgniteHadoopFileSystem extends 
AbstractFileSystem implements Closea
 
                 secondaryFs.renameInternal(toSecondary(src), toSecondary(dst));
             }
+            else {
+                if (clientLog.isLogEnabled())
+                    clientLog.logRename(srcPath, 
modeRslvr.resolveMode(srcPath), dstPath);
 
-            rmtClient.rename(srcPath, dstPath);
+                rmtClient.rename(srcPath, dstPath);
+            }
 
-            if (clientLog.isLogEnabled())
-                clientLog.logRename(srcPath, modeRslvr.resolveMode(srcPath), 
dstPath);
         }
         finally {
             leaveBusy();

Reply via email to