Uploaded image for project: 'OpenDJ'
  1. OpenDJ
  2. OPENDJ-3288

Upgrading backends with compressed entries results in unusable JE backends

    Details

      Description

      Upgrade a server with JE backends from 2.6.3 straight to 3.5.0, skipping the upgrade task to rebuild indexes. The upgrade succeeds, however attempting to start the server will show that each JE pluggable backend has 0 entries:

      [07/Sep/2016:10:16:00 +0100] category=BACKEND severity=NOTICE msgID=513 msg=The database backend rules containing 0 entries has started
      

      Attempt to rebuild-index --rebuildAll in a JE pluggable backend. It will fail with:

      [07/09/2016:10:26:02 +0100] category=TOOLS seq=51 severity=SEVERE msg=An error occurred while attempting to perform index rebuild:  java.util.concurrent.ExecutionException: org.opends.server.backends.pluggable.spi.StorageRuntimeException: java.util.concurrent.ExecutionException: java.lang.IllegalArgumentException: Cannot accept multiple values (current=, new=	) / FutureTask.java:122 / FutureTask.java:192 / OnDiskMergeImporter.java:2718 / OnDiskMergeImporter.java:1313 / OnDiskMergeImporter.java:966 / OnDiskMergeImporter.java:148 / OnDiskMergeImporter.java:329 / OnDiskMergeImporter.java:288 / BackendImpl.java:772 / RebuildIndex.java:437 / RebuildIndex.java:292 / TaskTool.java:262 / RebuildIndex.java:208 / RebuildIndex.java:118 / RebuildIndex.java:90; caused by org.opends.server.backends.pluggable.spi.StorageRuntimeException: java.util.concurrent.ExecutionException: java.lang.IllegalArgumentException: Cannot accept multiple values (current=, new=	) / OnDiskMergeImporter.java:1566 / OnDiskMergeImporter.java:2385 / OnDiskMergeImporter.java:2349 / FutureTask.java:266 / Executors.java:511 / FutureTask.java:266 / ThreadPoolExecutor.java:1142 / ThreadPoolExecutor.java:617 / Thread.java:745; caused by java.util.concurrent.ExecutionException: java.lang.IllegalArgumentException: Cannot accept multiple values (current=, new=	) / FutureTask.java:122 / FutureTask.java:192 / OnDiskMergeImporter.java:2718 / OnDiskMergeImporter.java:148 / OnDiskMergeImporter.java:1544 / OnDiskMergeImporter.java:2385 / OnDiskMergeImporter.java:2349 / FutureTask.java:266 / Executors.java:511 / FutureTask.java:266 / ThreadPoolExecutor.java:1142 / ThreadPoolExecutor.java:617 / Thread.java:745; caused by java.lang.IllegalArgumentException: Cannot accept multiple values (current=, new=	) / OnDiskMergeImporter.java:3169 / OnDiskMergeImporter.java:2078 / OnDiskMergeImporter.java:2067 / OnDiskMergeImporter.java:1914 / OnDiskMergeImporter.java:1631 / OnDiskMergeImporter.java:1617 / FutureTask.java:266 / Executors.java:511 / FutureTask.java:266 / ThreadPoolExecutor.java:1142 / ThreadPoolExecutor.java:617 / Thread.java:745 (id=null--1)
      

      If you try to export all the data using export-ldif, you will end up with an LDIF file containing the correct number of entries, but each one will be an identical copy of the first exported entry.

      The root cause would appear to be a missing call to clean up the compressedEntryBuffer in ID2Entry.EntryCodec.release(), so every call to decode a compressed V1 entry ends up reusing the same data.

        Attachments

          Issue Links

            Activity

              People

              • Assignee:
                ylecaillez Yannick Lecaillez
                Reporter:
                cjr Chris Ridd
              • Votes:
                0 Vote for this issue
                Watchers:
                4 Start watching this issue

                Dates

                • Created:
                  Updated:
                  Resolved: