Uploaded image for project: 'Hadoop Common'
  1. Hadoop Common
  2. HADOOP-16043

NPE in ITestDynamoDBMetadataStore when fs.s3a.s3guard.ddb.table is not set

    XMLWordPrintableJSON

Details

    • Bug
    • Status: Resolved
    • Major
    • Resolution: Fixed
    • 3.2.0
    • 3.3.0
    • fs/s3
    • None

    Description

      When running org.apache.hadoop.fs.s3a.s3guard.ITestDynamoDBMetadataStore integration test, I got the following stack trace:

      [ERROR] org.apache.hadoop.fs.s3a.s3guard.ITestDynamoDBMetadataStore  Time elapsed: 0.333 s  <<< ERROR!
      java.lang.NullPointerException
      	at org.apache.hadoop.fs.s3a.s3guard.ITestDynamoDBMetadataStore.beforeClassSetup(ITestDynamoDBMetadataStore.java:164)
      	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
      	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
      	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
      	at java.lang.reflect.Method.invoke(Method.java:498)
      	at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50)
      	at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
      	at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47)
      	at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:24)
      	at org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:27)
      	at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
      	at org.apache.maven.surefire.junit4.JUnit4Provider.execute(JUnit4Provider.java:365)
      	at org.apache.maven.surefire.junit4.JUnit4Provider.executeWithRerun(JUnit4Provider.java:273)
      	at org.apache.maven.surefire.junit4.JUnit4Provider.executeTestSet(JUnit4Provider.java:238)
      	at org.apache.maven.surefire.junit4.JUnit4Provider.invoke(JUnit4Provider.java:159)
      	at org.apache.maven.surefire.booter.ForkedBooter.invokeProviderInSameClassLoader(ForkedBooter.java:384)
      	at org.apache.maven.surefire.booter.ForkedBooter.runSuitesInProcess(ForkedBooter.java:345)
      	at org.apache.maven.surefire.booter.ForkedBooter.execute(ForkedBooter.java:126)
      	at org.apache.maven.surefire.booter.ForkedBooter.main(ForkedBooter.java:418)
      

      The NPE happened here:

      assertTrue("Test DynamoDB table name: '"
        + S3GUARD_DDB_TEST_TABLE_NAME_KEY + "' and production table name: '"
        + S3GUARD_DDB_TABLE_NAME_KEY + "' can not be the same.",
        !conf.get(S3GUARD_DDB_TABLE_NAME_KEY).equals(testDynamoDBTableName));
      

      The problem is that though we check previously whether the variable testDynamoDBTableName (fs.s3a.s3guard.ddb.test.table config) is not null, but we don't do the same for fs.s3a.s3guard.ddb.table (S3GUARD_DDB_TABLE_NAME_KEY) before calling the .equals(), thus causing an NPE.

      Since we don't need the fs.s3a.s3guard.ddb.table config for the test, we should check first whether that config is given or not, and only comparing the two configs if they both exist.

      Attachments

        1. HADOOP-16043.001.patch
          2 kB
          Gabor Bota

        Activity

          People

            gabor.bota Gabor Bota
            adam.antal Adam Antal
            Votes:
            0 Vote for this issue
            Watchers:
            4 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved: