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

    • Type: Bug
    • Status: Resolved
    • Priority: Major
    • Resolution: Fixed
    • Affects Version/s: 3.2.0
    • Fix Version/s: 3.3.0
    • Component/s: fs/s3
    • Labels:
      None
    • Target Version/s:

      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

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

              Dates

              • Created:
                Updated:
                Resolved: