Uploaded image for project: 'HBase'
  1. HBase
  2. HBASE-25516

jdk11 reflective access Field.class.getDeclaredField("modifiers") not supported

Add voteVotersWatch issueWatchersCreate sub-taskLinkCloneUpdate Comment AuthorReplace String in CommentUpdate Comment VisibilityDelete Comments
    XMLWordPrintableJSON

    Details

    • Type: Bug
    • Status: Open
    • Priority: Major
    • Resolution: Unresolved
    • Affects Version/s: 2.3.3
    • Fix Version/s: None
    • Component/s: Filesystem Integration
    • Labels:
    • Environment:

      Description

      The reflective access

      Field.class.getDeclaredField("modifiers")
      

      in HFileSystem.java:334 leads to a warning (and probably error?):

       

      java.lang.NoSuchFieldException: modifiers
      	at java.base/java.lang.Class.getDeclaredField(Class.java:2417)
      	at org.apache.hadoop.hbase.fs.HFileSystem.addLocationsOrderInterceptor(HFileSystem.java:334)
      	at org.apache.hadoop.hbase.fs.HFileSystem.addLocationsOrderInterceptor(HFileSystem.java:291)
      	at org.apache.hadoop.hbase.fs.HFileSystem.<init>(HFileSystem.java:96)
      	at org.apache.hadoop.hbase.fs.HFileSystem.get(HFileSystem.java:465)
      	at org.apache.hadoop.hbase.HBaseTestingUtility.getTestFileSystem(HBaseTestingUtility.java:3330)
      	at org.apache.hadoop.hbase.HBaseTestingUtility.getNewDataTestDirOnTestFS(HBaseTestingUtility.java:565)
      	at org.apache.hadoop.hbase.HBaseTestingUtility.setupDataTestDirOnTestFS(HBaseTestingUtility.java:554)
      	at org.apache.hadoop.hbase.HBaseTestingUtility.getDataTestDirOnTestFS(HBaseTestingUtility.java:527)
      	at org.apache.hadoop.hbase.HBaseTestingUtility.getDefaultRootDirPath(HBaseTestingUtility.java:1415)
      	at org.apache.hadoop.hbase.HBaseTestingUtility.createRootDir(HBaseTestingUtility.java:1446)
      	at org.apache.hadoop.hbase.HBaseTestingUtility.startMiniHBaseCluster(HBaseTestingUtility.java:1157)
      	at org.apache.hadoop.hbase.HBaseTestingUtility.startMiniCluster(HBaseTestingUtility.java:1144)
      	at foo.Main.main(Main.java:11)
      

      when running the following code:

       

      public static void main(String[] args) throws Exception {
          HBaseTestingUtility utility = new HBaseTestingUtility(HBaseConfiguration.create());
          utility.startMiniCluster(StartMiniClusterOption.builder().numRegionServers(3).build());
      }

      From my knowledge this results from the more restrictive reflection protection of java.base classes in the newer java versions.

       

      Related to HBASE-22972

       

        Attachments

          Activity

            People

            • Assignee:
              Unassigned
              Reporter:
              leonbein Leon Bein

              Dates

              • Created:
                Updated:

                Issue deployment