IGNITE-2206-debug: Dirty fix.
Project: http://git-wip-us.apache.org/repos/asf/ignite/repo Commit: http://git-wip-us.apache.org/repos/asf/ignite/commit/3a2db6e8 Tree: http://git-wip-us.apache.org/repos/asf/ignite/tree/3a2db6e8 Diff: http://git-wip-us.apache.org/repos/asf/ignite/diff/3a2db6e8 Branch: refs/heads/ignite-2206 Commit: 3a2db6e85a3b75ce2791a30a73c6aa6fa36fb856 Parents: 40d2291 Author: vozerov-gridgain <voze...@gridgain.com> Authored: Mon Dec 28 13:17:33 2015 +0300 Committer: vozerov-gridgain <voze...@gridgain.com> Committed: Mon Dec 28 13:17:33 2015 +0300 ---------------------------------------------------------------------- .../internal/processors/igfs/IgfsPaths.java | 23 ++-- .../hadoop/fs/v1/IgniteHadoopFileSystem.java | 7 +- .../processors/hadoop/HadoopClassLoader.java | 15 +++ .../internal/processors/hadoop/TestMain.java | 110 +++++++++++++++++++ 4 files changed, 137 insertions(+), 18 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/ignite/blob/3a2db6e8/modules/core/src/main/java/org/apache/ignite/internal/processors/igfs/IgfsPaths.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/igfs/IgfsPaths.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/igfs/IgfsPaths.java index 0bb581b..86f00cc 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/igfs/IgfsPaths.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/igfs/IgfsPaths.java @@ -33,6 +33,7 @@ import org.apache.ignite.igfs.IgfsMode; import org.apache.ignite.igfs.IgfsPath; import org.apache.ignite.internal.util.typedef.T2; import org.apache.ignite.internal.util.typedef.internal.U; +import org.apache.ignite.marshaller.jdk.JdkMarshaller; import org.jetbrains.annotations.Nullable; /** @@ -74,16 +75,11 @@ public class IgfsPaths implements Externalizable { if (payload == null) payloadBytes = null; else { - ByteArrayOutputStream baos = new ByteArrayOutputStream(); + ByteArrayOutputStream out = new ByteArrayOutputStream(); - try (ObjectOutput oo = new ObjectOutputStream(baos)) { - oo.writeObject(payload); - } - catch (IOException e) { - throw new IgniteCheckedException("Failed to serialize secondary file system factory: " + payload, e); - } + new JdkMarshaller().marshal(payload, out); - payloadBytes = baos.toByteArray(); + payloadBytes = out.toByteArray(); } } @@ -106,16 +102,13 @@ public class IgfsPaths implements Externalizable { * * @throws IgniteCheckedException If failed to deserialize the payload. */ - @Nullable public Object getPayload() throws IgniteCheckedException { + @Nullable public Object getPayload(ClassLoader clsLdr) throws IgniteCheckedException { if (payloadBytes == null) return null; else { - try (ObjectInput oi = new ObjectInputStream(new ByteArrayInputStream(payloadBytes))) { - return oi.readObject(); - } - catch (IOException | ClassNotFoundException e) { - throw new IgniteCheckedException("Failed to deserialize secondary file system factory. ", e); - } + ByteArrayInputStream in = new ByteArrayInputStream(payloadBytes); + + return new JdkMarshaller().unmarshal(in, clsLdr); } } http://git-wip-us.apache.org/repos/asf/ignite/blob/3a2db6e8/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 14b6294..cd83630 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 @@ -330,7 +330,9 @@ public class IgniteHadoopFileSystem extends FileSystem { if (initSecondary) { try { - factory = (HadoopFileSystemFactory) paths.getPayload(); + Object payload0 = paths.getPayload(getClass().getClassLoader()); + + factory = (HadoopFileSystemFactory) paths.getPayload(getClass().getClassLoader()); } catch (IgniteCheckedException e) { throw new IOException("Failed to get secondary file system factory.", e); @@ -505,8 +507,7 @@ public class IgniteHadoopFileSystem extends FileSystem { } secondaryFs.setOwner(toSecondary(p), username, grpName); - } - else if (rmtClient.update(convert(p), F.asMap(PROP_USER_NAME, username, PROP_GROUP_NAME, grpName)) == null) + } else if (rmtClient.update(convert(p), F.asMap(PROP_USER_NAME, username, PROP_GROUP_NAME, grpName)) == null) throw new IOException("Failed to set file permission (file not found?)" + " [path=" + p + ", userName=" + username + ", groupName=" + grpName + ']'); } http://git-wip-us.apache.org/repos/asf/ignite/blob/3a2db6e8/modules/hadoop/src/main/java/org/apache/ignite/internal/processors/hadoop/HadoopClassLoader.java ---------------------------------------------------------------------- diff --git a/modules/hadoop/src/main/java/org/apache/ignite/internal/processors/hadoop/HadoopClassLoader.java b/modules/hadoop/src/main/java/org/apache/ignite/internal/processors/hadoop/HadoopClassLoader.java index f12af46..5d883ab 100644 --- a/modules/hadoop/src/main/java/org/apache/ignite/internal/processors/hadoop/HadoopClassLoader.java +++ b/modules/hadoop/src/main/java/org/apache/ignite/internal/processors/hadoop/HadoopClassLoader.java @@ -270,6 +270,15 @@ public class HadoopClassLoader extends URLClassLoader { * @return {@code true} If the class has external dependencies. */ boolean hasExternalDependencies(final String clsName, final Set<String> visited) { + if (clsName.equals("org.apache.ignite.hadoop.fs.HadoopFileSystemFactory")) + return true; + + if (clsName.contains("BasicHadoopFileSystemFactory")) + return true; + + if (clsName.contains("CachingHadoopFileSystemFactory")) + return true; + if (isHadoop(clsName)) // Hadoop must not be in classpath but Idea sucks, so filtering explicitly as external. return true; @@ -361,6 +370,9 @@ public class HadoopClassLoader extends URLClassLoader { }; void onClass(String depCls) { + if (clsName.equals("org.apache.ignite.hadoop.fs.HadoopFileSystemFactory")) + System.out.println("ON_CLASS: " + depCls); + assert validateClassName(depCls) : depCls; if (depCls.startsWith("java.")) // Filter out platform classes. @@ -429,6 +441,9 @@ public class HadoopClassLoader extends URLClassLoader { @Override public MethodVisitor visitMethod(int i, String name, String desc, String signature, String[] exceptions) { + if (clsName.equals("org.apache.ignite.hadoop.fs.HadoopFileSystemFactory")) + System.out.println("VISIT_METHOD: " + name); + if (exceptions != null) { for (String e : exceptions) onType(e); http://git-wip-us.apache.org/repos/asf/ignite/blob/3a2db6e8/modules/hadoop/src/main/java/org/apache/ignite/internal/processors/hadoop/TestMain.java ---------------------------------------------------------------------- diff --git a/modules/hadoop/src/main/java/org/apache/ignite/internal/processors/hadoop/TestMain.java b/modules/hadoop/src/main/java/org/apache/ignite/internal/processors/hadoop/TestMain.java new file mode 100644 index 0000000..0cbdbac --- /dev/null +++ b/modules/hadoop/src/main/java/org/apache/ignite/internal/processors/hadoop/TestMain.java @@ -0,0 +1,110 @@ +package org.apache.ignite.internal.processors.hadoop; + +import org.objectweb.asm.Opcodes; +import org.objectweb.asm.signature.SignatureReader; +import org.objectweb.asm.signature.SignatureVisitor; + +/** + * Created by vozerov on 12/28/2015. + */ +public class TestMain { + + public static void main(String[] args) { + + String desc = "(Ljava/lang/String;)Lorg/apache/hadoop/fs/FileSystem;"; + + SignatureReader reader = new SignatureReader(desc); + + reader.accept(new SignatureVisitor(Opcodes.ASM4) { + @Override + public void visitFormalTypeParameter(String name) { + System.out.println("visitFormalTypeParameter: " + name); + + super.visitFormalTypeParameter(name); + } + + @Override + public SignatureVisitor visitClassBound() { + return super.visitClassBound(); + } + + @Override + public SignatureVisitor visitInterfaceBound() { + return super.visitInterfaceBound(); + } + + @Override + public SignatureVisitor visitSuperclass() { + return super.visitSuperclass(); + } + + @Override + public SignatureVisitor visitInterface() { + return super.visitInterface(); + } + + @Override + public SignatureVisitor visitParameterType() { + return super.visitParameterType(); + } + + @Override + public SignatureVisitor visitReturnType() { + return super.visitReturnType(); + } + + @Override + public SignatureVisitor visitExceptionType() { + return super.visitExceptionType(); + } + + @Override + public void visitBaseType(char descriptor) { + super.visitBaseType(descriptor); + } + + @Override + public void visitTypeVariable(String name) { + System.out.println("visitTypeVariable: " + name); + + super.visitTypeVariable(name); + } + + @Override + public SignatureVisitor visitArrayType() { + return super.visitArrayType(); + } + + @Override + public void visitClassType(String name) { + System.out.println("visitClassType: " + name); + + super.visitClassType(name); + } + + @Override + public void visitInnerClassType(String name) { + System.out.println("visitInnerClassType: " + name); + + super.visitInnerClassType(name); + } + + @Override + public void visitTypeArgument() { + super.visitTypeArgument(); + } + + @Override + public SignatureVisitor visitTypeArgument(char wildcard) { + System.out.println("visitTypeArgument: " + wildcard); + + return super.visitTypeArgument(wildcard); + } + + @Override + public void visitEnd() { + super.visitEnd(); + } + }); + } +}