mirror of https://github.com/OpenIdentityPlatform/OpenDJ.git

Jean-Noel Rouvignac
17.27.2013 793b2352d578039c6070d62fa9f83b4169364694
OPENDJ-1116 Introduce abstraction for the changelog DB


ReplicationDbEnv.java, replication.properties:
In openDatabase(), fixed TODOs for i18n.
In newErrorMessage(), improved error logging by including the DB name.

JEChangelogDB.java:
Simplified the code by calling domainToReplicaDBs.remove() from inside shutdownReplicaDBs().
In shutdownReplicaDBs(), do not bother cleaning up the domainMap since it will be removed from domainToReplicaDBs.
3 files modified
39 ■■■■■ changed files
opends/src/messages/messages/replication.properties 2 ●●●●● patch | view | raw | blame | history
opends/src/server/org/opends/server/replication/server/changelog/je/JEChangelogDB.java 11 ●●●● patch | view | raw | blame | history
opends/src/server/org/opends/server/replication/server/changelog/je/ReplicationDbEnv.java 26 ●●●●● patch | view | raw | blame | history
opends/src/messages/messages/replication.properties
@@ -496,3 +496,5 @@
 when accessing the change number database: impossible to read the newest record \
 after having successfully read the oldest. Database might have been cleaned or \
 closed between successive reads
SEVERE_WARN_CANNOT_OPEN_DATABASE_BECAUSE_SHUTDOWN_WAS_REQUESTED_218=Cannot \
 open database %s because shutdown was requested from replication server RS(%d)
opends/src/server/org/opends/server/replication/server/changelog/je/JEChangelogDB.java
@@ -498,11 +498,11 @@
  @Override
  public void shutdownDomain(DN baseDN)
  {
    shutdownReplicaDBs(getDomainMap(baseDN));
    domainToReplicaDBs.remove(baseDN);
    shutdownReplicaDBs(baseDN, getDomainMap(baseDN));
  }
  private void shutdownReplicaDBs(Map<Integer, JEReplicaDB> domainMap)
  private void shutdownReplicaDBs(DN baseDN,
      Map<Integer, JEReplicaDB> domainMap)
  {
    synchronized (domainMap)
    {
@@ -510,7 +510,7 @@
      {
        replicaDB.shutdown();
      }
      domainMap.clear();
      domainToReplicaDBs.remove(baseDN);
    }
  }
@@ -562,8 +562,7 @@
          firstException = e;
        }
      }
      shutdownReplicaDBs(domainMap);
      domainToReplicaDBs.remove(baseDN);
      shutdownReplicaDBs(baseDN, domainMap);
    }
    // 2- clear the ChangeNumber index DB
opends/src/server/org/opends/server/replication/server/changelog/je/ReplicationDbEnv.java
@@ -171,8 +171,9 @@
  {
    if (isShuttingDown.get())
    {
      // TODO JNR i18n
      throw new ChangelogException(Message.raw("DB is closing"));
      throw new ChangelogException(
          WARN_CANNOT_OPEN_DATABASE_BECAUSE_SHUTDOWN_WAS_REQUESTED.get(
              databaseName, replicationServer.getServerId()));
    }
    final DatabaseConfig dbConfig = new DatabaseConfig();
    dbConfig.setAllowCreate(true);
@@ -182,8 +183,9 @@
    if (isShuttingDown.get())
    {
      closeDB(db);
      // TODO JNR i18n
      throw new ChangelogException(Message.raw("DB is closing"));
      throw new ChangelogException(
          WARN_CANNOT_OPEN_DATABASE_BECAUSE_SHUTDOWN_WAS_REQUESTED.get(
              databaseName, replicationServer.getServerId()));
    }
    allDbs.add(db);
    return db;
@@ -437,7 +439,7 @@
    }
    catch (DatabaseException e)
    {
      logError(newErrorMessage(e));
      logError(newErrorMessage(null, e));
    }
  }
@@ -450,19 +452,21 @@
    }
    catch (DatabaseException e)
    {
      logError(newErrorMessage(e));
      logError(newErrorMessage(db.getDatabaseName(), e));
    }
  }
  private Message newErrorMessage(DatabaseException e)
  private Message newErrorMessage(String dbName, DatabaseException e)
  {
    if (!isShuttingDown.get())
    final MessageBuilder mb = new MessageBuilder();
    if (dbName != null)
    {
      return NOTE_EXCEPTION_CLOSING_DATABASE
          .get(stackTraceToSingleLineString(e));
      mb.append(NOTE_EXCEPTION_CLOSING_DATABASE.get(dbName));
    }
    MessageBuilder mb = new MessageBuilder();
    else
    {
    mb.append(ERR_ERROR_CLOSING_CHANGELOG_ENV.get());
    }
    mb.append(" ");
    mb.append(stackTraceToSingleLineString(e));
    return mb.toMessage();