Uploaded image for project: 'Confluence Data Center'
  1. Confluence Data Center
  2. CONFSERVER-93795

Backport CONFSERVER-90581 to 8.5

    XMLWordPrintable

Details

    Description

      Issue Summary

      This is reproducible on Data Center: yes

      Running a space backup when the space contains references to inexistent users fails with NullPointerException

      Steps to Reproduce

      1. Create a test space
      2. Create a new page and add the following using the source viewer to the page: 
        <ac:structured-macro ac:macro-id="4f850f29-b691-46f7-a0b6-4b534b17b4d9" ac:name="profile" ac:schema-version="1">
        <ac:parameter ac:name="user">
        <ri:user ri:username="asdf"/>
        </ac:parameter>
        </ac:structured-macro> 
      3. Go to Space Tools -> Content Tools -> Backup and create a backup

      Expected Results

      The backup will be successfully created.

      Actual Results

      The below exception is thrown in the GUI:

      java.util.concurrent.ExecutionException: java.lang.NullPointerException 

      And in the atlassian-confluence.log we see:

      2023-08-04 15:19:34,373 WARN [ConfluenceBackupRestoreManager:thread-11] [confluence.impl.backuprestore.ConfluenceBackupRestoreManager] runJobAndUpdateJobProperties Backup restore job BackupRestoreJob{id=1277958, jobOperation=BACKUP, jobScope=SPACE, jobState=PROCESSING, createTime=2023-08-04T13:19:34Z, startProcessingTime=2023-08-04T13:19:34Z, finishProcessingTime=null, cancelTime=null, owner='admin', whoCancelledTheJob='null', errorMessage='null'} failed: java.util.concurrent.ExecutionException: java.lang.NullPointerException
       -- url: /c840/rest/api/backup-restore/backup/space | userName: admin | referer: http://localhost:6840/c840/plugins/servlet/space-tool-backup/TEST | traceId: d6ed5d5679e7d6e4
      com.atlassian.confluence.backuprestore.exception.BackupRestoreException: java.util.concurrent.ExecutionException: java.lang.NullPointerException
      	at com.atlassian.confluence.impl.backuprestore.backup.SpaceBackupService.doBackupSynchronously(SpaceBackupService.java:133)
      	at com.atlassian.confluence.impl.backuprestore.BackupRestoreJobRunner.runJobSynchronously(BackupRestoreJobRunner.java:58)
      	at com.atlassian.confluence.impl.backuprestore.ConfluenceBackupRestoreManager.runJobAndUpdateJobProperties(ConfluenceBackupRestoreManager.java:277)
      	at com.atlassian.confluence.impl.backuprestore.ConfluenceBackupRestoreManager.processJobsFromTheQueue(ConfluenceBackupRestoreManager.java:259)
      	at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:515)
      	at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
      	at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
      	at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
      	at java.base/java.lang.Thread.run(Thread.java:834)
      Caused by: java.util.concurrent.ExecutionException: java.lang.NullPointerException
      	at java.base/java.util.concurrent.FutureTask.report(FutureTask.java:122)
      	at java.base/java.util.concurrent.FutureTask.get(FutureTask.java:191)
      	at com.atlassian.confluence.impl.backuprestore.ParallelTasksExecutor.waitUntilAllJobsComplete(ParallelTasksExecutor.java:150)
      	at com.atlassian.confluence.impl.backuprestore.ParallelTasksExecutor.waitUntilAllJobsComplete(ParallelTasksExecutor.java:122)
      	at com.atlassian.confluence.impl.backuprestore.ParallelTasksExecutor.waitUntilAllJobsComplete(ParallelTasksExecutor.java:139)
      	at com.atlassian.confluence.impl.backuprestore.backup.SpaceBackupService.backupAllEntitiesAndAttachments(SpaceBackupService.java:173)
      	at com.atlassian.confluence.impl.backuprestore.backup.SpaceBackupService.doBackupSynchronously(SpaceBackupService.java:109)
      	... 8 more
      Caused by: java.lang.NullPointerException
      	at com.atlassian.confluence.impl.backuprestore.backup.exporters.UserKeyExtractorFragmentTransformer.lambda$getReferences$0(UserKeyExtractorFragmentTransformer.java:67)
      	at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:195)
      	at java.base/java.util.HashMap$KeySpliterator.forEachRemaining(HashMap.java:1620)
      	at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:484)
      	at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:474)
      	at java.base/java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:913)
      	at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
      	at java.base/java.util.stream.ReferencePipeline.collect(ReferencePipeline.java:578)
      	at com.atlassian.confluence.impl.backuprestore.backup.exporters.UserKeyExtractorFragmentTransformer.getReferences(UserKeyExtractorFragmentTransformer.java:68)
      	at com.atlassian.confluence.impl.backuprestore.backup.exporters.ReferenceEntityFromBodyContentExtractor.lambda$extractReferenceContentFrom$1(ReferenceEntityFromBodyContentExtractor.java:85)
      	at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:271)
      	at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:195)
      	at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1655)
      	at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:484)
      	at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:474)
      	at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150)
      	at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173)
      	at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
      	at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:497)
      	at com.atlassian.confluence.impl.backuprestore.backup.exporters.ReferenceEntityFromBodyContentExtractor.extractReferenceContentFrom(ReferenceEntityFromBodyContentExtractor.java:90)
      	at com.atlassian.confluence.impl.backuprestore.backup.exporters.BodyContentDataExporter.extractReferencesFromBody(BodyContentDataExporter.java:162)
      	at com.atlassian.confluence.impl.backuprestore.backup.exporters.BodyContentDataExporter.extractReferencesFromBody(BodyContentDataExporter.java:130)
      	at com.atlassian.confluence.impl.backuprestore.backup.exporters.BodyContentDataExporter.lambda$exportInBatchByQueryWithCondition$0(BodyContentDataExporter.java:99)
      	... 4 more

      Workaround

      The old XML export function can still be accessed by going directly there via the URL:

      <BASE_URL>/spaces/exportspacexml.action?key=<SPACE_KEY>

      This issue does not appear to happen using this function.

      Attachments

        Issue Links

          Activity

            People

              8b5c2ab424ac Jing Zheng
              23540fb20e73 Chris Psonis
              Votes:
              0 Vote for this issue
              Watchers:
              2 Start watching this issue

              Dates

                Created:
                Updated:
                Resolved: