Details
-
Bug
-
Status: Closed
-
Major
-
Resolution: Duplicate
-
0.4.0
-
None
-
None
-
None
-
Java 5.0
Description
There seems to be a change that happened between 1.4 and 1.5 with respect to static initializers. I can't find this documented, but I can reproduce with a very simple program. Basically, a static initializer is not called unless a static member/method of the class is accessed or an instance is created. This is actually what the JLS says, but until 1.5 the static initializers ran when the class was loaded. Note that this behavior only occurs when running with the 1.5 JRE AND compiling for 1.5.
For many Writables this isn't an issue, so the fallback behavior of the WritableFactory works, but Block is package private, so loadEdits fails when called from org.apache.hadoop.io.ArrayWritable.readFields() yielding the following trace:
Caused by: 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:532)
at org.apache.hadoop.dfs.FSDirectory.loadFSImage(FSDirectory.java:470)
at org.apache.hadoop.dfs.FSDirectory.<init>(FSDirectory.java:307)
at org.apache.hadoop.dfs.FSNamesystem.<init>(FSNamesystem.java:177)
at org.apache.hadoop.dfs.NameNode.<init>(NameNode.java:91)
at org.apache.hadoop.dfs.NameNode.<init>(NameNode.java:84)
at org.apache.hadoop.dfs.NameNode.main(NameNode.java:491)
Attachments
Attachments
Issue Links
- is depended upon by
-
HADOOP-412 provide an input format that fetches a subset of sequence file records
- Closed
- is duplicated by
-
HADOOP-104 Reflexive access to non-public class with public ctor requires setAccessible (with some JVMs)
- Closed