You are viewing a plain text version of this content. The canonical link for it is here.
Posted to common-dev@hadoop.apache.org by "Michel Tourn (JIRA)" <ji...@apache.org> on 2006/03/25 00:07:19 UTC

[jira] Created: (HADOOP-104) Reflexive access to non-public class with public ctor requires setAccessible (with some JVMs)

Reflexive access to non-public class with public ctor requires setAccessible (with some JVMs)
---------------------------------------------------------------------------------------------

         Key: HADOOP-104
         URL: http://issues.apache.org/jira/browse/HADOOP-104
     Project: Hadoop
        Type: Bug
    Reporter: Michel Tourn


Multiple times I have hit this problem which prevents the NameNode from starting.
The only fix I had so far was to loose all my DFS data...

Exception in thread "main" java.lang.RuntimeException: java.lang.IllegalAccessException: 
Class org.apache.hadoop.io.WritableFactories can not access a member of 
class org.apache.hadoop.dfs.Block with modifiers "public"
        at org.apache.hadoop.io.WritableFactories.newInstance(WritableFactories.java:49)
        at org.apache.hadoop.io.ArrayWritable.readFields(ArrayWritable.java:81)
        at org.apache.hadoop.dfs.FSDirectory.loadFSEdits(FSDirectory.java:374)
        at org.apache.hadoop.dfs.FSDirectory.loadFSImage(FSDirectory.java:347)
        at org.apache.hadoop.dfs.FSDirectory.<init>(FSDirectory.java:258)
        at org.apache.hadoop.dfs.FSNamesystem.<init>(FSNamesystem.java:151)
        at org.apache.hadoop.dfs.NameNode.<init>(NameNode.java:82)


According to this, 
http://forum.java.sun.com/thread.jspa?threadID=704100&messageID=4082902
this is a known issue when using
reflexive access to a non-public class with public ctor 
(class org.apache.hadoop.dfs.Block is such a class)

This problem may not occur with all JVM releases. 
(I build on 1.5.0-b64 and run on 1.5.0_05-b05)

This problem only occured for me when 
I upgrade code or change XML configuration AND 
have existing files in the DFS.
This problem does not occur when I just stop / restart the NameServer.

In any case, the attached patch fixes it by calling setAccessible
before constructing the instance with reflection.




-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators:
   http://issues.apache.org/jira/secure/Administrators.jspa
-
For more information on JIRA, see:
   http://www.atlassian.com/software/jira


[jira] Commented: (HADOOP-104) Reflexive access to non-public class with public ctor requires setAccessible (with some JVMs)

Posted by "Michel Tourn (JIRA)" <ji...@apache.org>.
    [ http://issues.apache.org/jira/browse/HADOOP-104?page=comments#action_12371821 ] 

Michel Tourn commented on HADOOP-104:
-------------------------------------

class Block registers a factory in its static initializer.

So another thing which may occur here is:
class loading/initialization order is non-deterministic.

If class Block loads before this is called:
  WritableFactories.newInstance(Block.class)
then things work as expected, the Block factory is called.

Else 
WritableFactories does not find a registered factory for Block (yet),
tries to construct the instance reflectively,
and fails as explained in the bug.

In this case an alternate fix is to make sure that all
classes that have a factory method declared as a static initializer
are loaded before they are needed.


> Reflexive access to non-public class with public ctor requires setAccessible (with some JVMs)
> ---------------------------------------------------------------------------------------------
>
>          Key: HADOOP-104
>          URL: http://issues.apache.org/jira/browse/HADOOP-104
>      Project: Hadoop
>         Type: Bug
>     Reporter: Michel Tourn
>  Attachments: setaccessible.patch
>
> Multiple times I have hit this problem which prevents the NameNode from starting.
> The only fix I had so far was to loose all my DFS data...
> Exception in thread "main" java.lang.RuntimeException: java.lang.IllegalAccessException: 
> Class org.apache.hadoop.io.WritableFactories can not access a member of 
> class org.apache.hadoop.dfs.Block with modifiers "public"
>         at org.apache.hadoop.io.WritableFactories.newInstance(WritableFactories.java:49)
>         at org.apache.hadoop.io.ArrayWritable.readFields(ArrayWritable.java:81)
>         at org.apache.hadoop.dfs.FSDirectory.loadFSEdits(FSDirectory.java:374)
>         at org.apache.hadoop.dfs.FSDirectory.loadFSImage(FSDirectory.java:347)
>         at org.apache.hadoop.dfs.FSDirectory.<init>(FSDirectory.java:258)
>         at org.apache.hadoop.dfs.FSNamesystem.<init>(FSNamesystem.java:151)
>         at org.apache.hadoop.dfs.NameNode.<init>(NameNode.java:82)
> According to this, 
> http://forum.java.sun.com/thread.jspa?threadID=704100&messageID=4082902
> this is a known issue when using
> reflexive access to a non-public class with public ctor 
> (class org.apache.hadoop.dfs.Block is such a class)
> This problem may not occur with all JVM releases. 
> (I build on 1.5.0-b64 and run on 1.5.0_05-b05)
> This problem only occured for me when 
> I upgrade code or change XML configuration AND 
> have existing files in the DFS.
> This problem does not occur when I just stop / restart the NameServer.
> In any case, the attached patch fixes it by calling setAccessible
> before constructing the instance with reflection.

-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators:
   http://issues.apache.org/jira/secure/Administrators.jspa
-
For more information on JIRA, see:
   http://www.atlassian.com/software/jira


[jira] Resolved: (HADOOP-104) Reflexive access to non-public class with public ctor requires setAccessible (with some JVMs)

Posted by "Owen O'Malley (JIRA)" <ji...@apache.org>.
     [ http://issues.apache.org/jira/browse/HADOOP-104?page=all ]

Owen O'Malley resolved HADOOP-104.
----------------------------------

    Fix Version/s: 0.5.0
       Resolution: Duplicate
         Assignee: Hairong Kuang

> Reflexive access to non-public class with public ctor requires setAccessible (with some JVMs)
> ---------------------------------------------------------------------------------------------
>
>                 Key: HADOOP-104
>                 URL: http://issues.apache.org/jira/browse/HADOOP-104
>             Project: Hadoop
>          Issue Type: Bug
>            Reporter: Michel Tourn
>         Assigned To: Hairong Kuang
>             Fix For: 0.5.0
>
>         Attachments: setaccessible.patch
>
>
> Multiple times I have hit this problem which prevents the NameNode from starting.
> The only fix I had so far was to loose all my DFS data...
> Exception in thread "main" java.lang.RuntimeException: java.lang.IllegalAccessException: 
> Class org.apache.hadoop.io.WritableFactories can not access a member of 
> class org.apache.hadoop.dfs.Block with modifiers "public"
>         at org.apache.hadoop.io.WritableFactories.newInstance(WritableFactories.java:49)
>         at org.apache.hadoop.io.ArrayWritable.readFields(ArrayWritable.java:81)
>         at org.apache.hadoop.dfs.FSDirectory.loadFSEdits(FSDirectory.java:374)
>         at org.apache.hadoop.dfs.FSDirectory.loadFSImage(FSDirectory.java:347)
>         at org.apache.hadoop.dfs.FSDirectory.<init>(FSDirectory.java:258)
>         at org.apache.hadoop.dfs.FSNamesystem.<init>(FSNamesystem.java:151)
>         at org.apache.hadoop.dfs.NameNode.<init>(NameNode.java:82)
> According to this, 
> http://forum.java.sun.com/thread.jspa?threadID=704100&messageID=4082902
> this is a known issue when using
> reflexive access to a non-public class with public ctor 
> (class org.apache.hadoop.dfs.Block is such a class)
> This problem may not occur with all JVM releases. 
> (I build on 1.5.0-b64 and run on 1.5.0_05-b05)
> This problem only occured for me when 
> I upgrade code or change XML configuration AND 
> have existing files in the DFS.
> This problem does not occur when I just stop / restart the NameServer.
> In any case, the attached patch fixes it by calling setAccessible
> before constructing the instance with reflection.

-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators: http://issues.apache.org/jira/secure/Administrators.jspa
-
For more information on JIRA, see: http://www.atlassian.com/software/jira

        

[jira] Updated: (HADOOP-104) Reflexive access to non-public class with public ctor requires setAccessible (with some JVMs)

Posted by "Michel Tourn (JIRA)" <ji...@apache.org>.
     [ http://issues.apache.org/jira/browse/HADOOP-104?page=all ]

Michel Tourn updated HADOOP-104:
--------------------------------

    Attachment: setaccessible.patch

> Reflexive access to non-public class with public ctor requires setAccessible (with some JVMs)
> ---------------------------------------------------------------------------------------------
>
>          Key: HADOOP-104
>          URL: http://issues.apache.org/jira/browse/HADOOP-104
>      Project: Hadoop
>         Type: Bug
>     Reporter: Michel Tourn
>  Attachments: setaccessible.patch
>
> Multiple times I have hit this problem which prevents the NameNode from starting.
> The only fix I had so far was to loose all my DFS data...
> Exception in thread "main" java.lang.RuntimeException: java.lang.IllegalAccessException: 
> Class org.apache.hadoop.io.WritableFactories can not access a member of 
> class org.apache.hadoop.dfs.Block with modifiers "public"
>         at org.apache.hadoop.io.WritableFactories.newInstance(WritableFactories.java:49)
>         at org.apache.hadoop.io.ArrayWritable.readFields(ArrayWritable.java:81)
>         at org.apache.hadoop.dfs.FSDirectory.loadFSEdits(FSDirectory.java:374)
>         at org.apache.hadoop.dfs.FSDirectory.loadFSImage(FSDirectory.java:347)
>         at org.apache.hadoop.dfs.FSDirectory.<init>(FSDirectory.java:258)
>         at org.apache.hadoop.dfs.FSNamesystem.<init>(FSNamesystem.java:151)
>         at org.apache.hadoop.dfs.NameNode.<init>(NameNode.java:82)
> According to this, 
> http://forum.java.sun.com/thread.jspa?threadID=704100&messageID=4082902
> this is a known issue when using
> reflexive access to a non-public class with public ctor 
> (class org.apache.hadoop.dfs.Block is such a class)
> This problem may not occur with all JVM releases. 
> (I build on 1.5.0-b64 and run on 1.5.0_05-b05)
> This problem only occured for me when 
> I upgrade code or change XML configuration AND 
> have existing files in the DFS.
> This problem does not occur when I just stop / restart the NameServer.
> In any case, the attached patch fixes it by calling setAccessible
> before constructing the instance with reflection.

-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators:
   http://issues.apache.org/jira/secure/Administrators.jspa
-
For more information on JIRA, see:
   http://www.atlassian.com/software/jira