| | |
| | | private final String dbDirectoryName; |
| | | private final File dbDirectory; |
| | | |
| | | /** |
| | | * The handler of the changelog database, the database stores the relation |
| | | * between a change number and the associated cookie. |
| | | * <p> |
| | | * Guarded by cnIndexDBLock |
| | | */ |
| | | private ChangeNumberIndexDB cnIndexDB; |
| | | |
| | | /** Used for protecting {@link ChangeNumberIndexDB} related state. */ |
| | | private final Object cnIndexDBLock = new Object(); |
| | | |
| | | /** The local replication server. */ |
| | | private final ReplicationServer replicationServer; |
| | | |
| | |
| | | } |
| | | catch (ChangelogException e) |
| | | { |
| | | Message message = |
| | | ERR_COULD_NOT_READ_DB.get(this.dbDirectory.getAbsolutePath(), e |
| | | .getLocalizedMessage()); |
| | | logError(message); |
| | | logError(ERR_COULD_NOT_READ_DB.get(this.dbDirectory.getAbsolutePath(), |
| | | e.getLocalizedMessage())); |
| | | } |
| | | } |
| | | |
| | |
| | | } |
| | | } |
| | | |
| | | private void shutdownCNIndexDB() |
| | | { |
| | | synchronized (cnIndexDBLock) |
| | | { |
| | | if (cnIndexDB != null) |
| | | { |
| | | try |
| | | { |
| | | cnIndexDB.shutdown(); |
| | | } |
| | | catch (ChangelogException ignored) |
| | | { |
| | | if (debugEnabled()) |
| | | { |
| | | TRACER.debugCaught(DebugLogLevel.WARNING, ignored); |
| | | } |
| | | } |
| | | } |
| | | } |
| | | } |
| | | |
| | | /** {@inheritDoc} */ |
| | | @Override |
| | | public void shutdownDB() |
| | | { |
| | | shutdownCNIndexDB(); |
| | | |
| | | if (dbEnv != null) |
| | | { |
| | | dbEnv.shutdown(); |
| | |
| | | |
| | | /** {@inheritDoc} */ |
| | | @Override |
| | | public void clearCNIndexDB() |
| | | { |
| | | synchronized (cnIndexDBLock) |
| | | { |
| | | if (cnIndexDB != null) |
| | | { |
| | | try |
| | | { |
| | | cnIndexDB.clear(); |
| | | } |
| | | catch (Exception ignored) |
| | | { |
| | | if (debugEnabled()) |
| | | { |
| | | TRACER.debugCaught(DebugLogLevel.WARNING, ignored); |
| | | } |
| | | } |
| | | |
| | | shutdownCNIndexDB(); |
| | | |
| | | cnIndexDB = null; |
| | | } |
| | | } |
| | | } |
| | | |
| | | /** {@inheritDoc} */ |
| | | @Override |
| | | public void removeDB() |
| | | { |
| | | StaticUtils.recursiveDelete(dbDirectory); |
| | |
| | | @Override |
| | | public void removeDomain(DN baseDN) |
| | | { |
| | | // 1- clear the replica DBs |
| | | final Map<Integer, DbHandler> domainMap = getDomainMap(baseDN); |
| | | synchronized (domainMap) |
| | | { |
| | |
| | | shutdownDbHandlers(domainMap); |
| | | } |
| | | |
| | | // 2- clear the ChangeNumber index DB |
| | | synchronized (cnIndexDBLock) |
| | | { |
| | | if (cnIndexDB != null) |
| | | { |
| | | try |
| | | { |
| | | cnIndexDB.clear(baseDN); |
| | | } |
| | | catch (Exception ignored) |
| | | { |
| | | if (debugEnabled()) |
| | | { |
| | | TRACER.debugCaught(DebugLogLevel.WARNING, ignored); |
| | | } |
| | | } |
| | | } |
| | | } |
| | | |
| | | // 3- clear the changelogstate DB |
| | | try |
| | | { |
| | | dbEnv.clearGenerationId(baseDN); |
| | |
| | | |
| | | /** {@inheritDoc} */ |
| | | @Override |
| | | public ChangeNumberIndexDB newChangeNumberIndexDB() throws ChangelogException |
| | | public ChangeNumberIndexDB getChangeNumberIndexDB() |
| | | { |
| | | return new DraftCNDbHandler(replicationServer, this.dbEnv); |
| | | synchronized (cnIndexDBLock) |
| | | { |
| | | if (cnIndexDB == null) |
| | | { |
| | | try |
| | | { |
| | | cnIndexDB = new DraftCNDbHandler(replicationServer, this.dbEnv); |
| | | } |
| | | catch (Exception e) |
| | | { |
| | | logError(ERR_CHANGENUMBER_DATABASE.get(e.getLocalizedMessage())); |
| | | } |
| | | } |
| | | return cnIndexDB; |
| | | } |
| | | } |
| | | |
| | | /** {@inheritDoc} */ |