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

Change number indexer's cursor can be aborted due to purge activity

    XMLWordPrintable

    Details

    • Type: Bug
    • Status: Done
    • Priority: Major
    • Resolution: Cannot Reproduce
    • Affects Version/s: 3.0.0, 3.5.0, 3.5.1, 4.0.0
    • Fix Version/s: 5.5.0
    • Component/s: replication
    • Labels:

      Description

      One of a customer's DS+RSes was observed to stop purging its changelog. While investigating this, it was noticed that stopping and restarting the server would cause the change number indexer thread to die during initialization, and debug logging showed this to be due to an unexpected AbortedChangelogCursorException being thrown:

      [01/Feb/2017:13:37:05 +0000] 3 trace thread={Change number indexer(34)} threadDetail={parentThread=main(1) isDaemon=false } method={logUnexpectedException(ChangeNumberIndexer.java:550)} An unexpected error forced the ChangeNumberIndexer thread to shutdown: AbortedChangelogCursorException: Cursor on log '/Users/cjr/Documents/workspace/ericsson/svc3/opends/changelogDb/1.dom/7482.server' has been aborted after a purge or a clear (Log.java:1428 Log.java:1423 Log.java:1521 FileReplicaDBCursor.java:107 ReplicaCursor.java:120 CompositeDBCursor.java:178 DomainDBCursor.java:105 CompositeDBCursor.java:121 DomainDBCursor.java:43 CompositeDBCursor.java:178 MultiDomainDBCursor.java:87 CompositeDBCursor.java:121 MultiDomainDBCursor.java:43 ECLMultiDomainDBCursor.java:110 ChangelogBackend.java:1079 ChangeNumberIndexer.java:322 ChangeNumberIndexer.java:307 ChangeNumberIndexer.java:391). The changeNumber attribute will not move forward anymore. You can reenable this thread by first setting the "compute-change-number" property to false and then back to true
      

      Repeating the test under the debugger shows that the purger thread caused the cursor to be aborted:

      "Changelog DB purger@3713" prio=5 tid=0x26 nid=NA runnable
        java.lang.Thread.State: RUNNABLE
                at org.opends.server.replication.server.changelog.file.Log$AbortableLogCursor.abort(Log.java:1560)
                at org.opends.server.replication.server.changelog.file.Log.abortCursorsOpenOnLogFile(Log.java:769)
                at org.opends.server.replication.server.changelog.file.Log.purgeUpTo(Log.java:733)
                at org.opends.server.replication.server.changelog.file.FileReplicaDB.purgeUpTo(FileReplicaDB.java:253)
                at org.opends.server.replication.server.changelog.file.FileChangelogDB$ChangelogDBPurger.run(FileChangelogDB.java:952)
      

      Another DS+RS in the same topology with the same configuration did not have a problem purging its changelog. The underlying problem with purging is still being investigated.

        Attachments

          Issue Links

            Activity

              People

              Assignee:
              nicolas.capponi@forgerock.com Nicolas Capponi
              Reporter:
              cjr Chris Ridd
              Dev Assignee:
              Nicolas Capponi Nicolas Capponi
              Votes:
              1 Vote for this issue
              Watchers:
              4 Start watching this issue

                Dates

                Created:
                Updated:
                Resolved: