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

gbellato
06.37.2009 096707f6f91e33ecdc4dea986c89bf55007b5f2a
Fix for 3914 : ServerState.reload() fails to update the ServerState 

Fix ServerState.reload() and add a test case for this method.
Also take the chance to add some synchronization.
5 files modified
54 ■■■■ changed files
opends/src/server/org/opends/server/replication/common/ServerState.java 21 ●●●●● patch | view | raw | blame | history
opends/src/server/org/opends/server/replication/server/DbHandler.java 2 ●●● patch | view | raw | blame | history
opends/tests/unit-tests-testng/src/server/org/opends/server/replication/common/ServerStateTest.java 25 ●●●●● patch | view | raw | blame | history
opends/tests/unit-tests-testng/src/server/org/opends/server/replication/server/AssuredReplicationServerTest.java 2 ●●● patch | view | raw | blame | history
opends/tests/unit-tests-testng/src/server/org/opends/server/replication/server/MonitorTest.java 4 ●●●● patch | view | raw | blame | history
opends/src/server/org/opends/server/replication/common/ServerState.java
@@ -66,7 +66,7 @@
   */
  public void clear()
  {
    synchronized (this)
    synchronized (list)
    {
      list.clear();
    }
@@ -155,7 +155,7 @@
    saved = false;
    synchronized(this)
    synchronized(list)
    {
      Short id =  changeNumber.getServerId();
      ChangeNumber oldCN = list.get(id);
@@ -185,13 +185,16 @@
    boolean result = false;
    synchronized (list)
    {
    clear();
    for (Short id : serverState) {
      ChangeNumber maxChangeNumber = getMaxChangeNumber(id);
      if (update(maxChangeNumber)) {
        ChangeNumber maxChangeNumber = serverState.getMaxChangeNumber(id);
        if (this.update(maxChangeNumber)) {
        result = true;
      }
    }
    }
    return (result);
  }
@@ -211,7 +214,7 @@
  {
    HashSet<String> set = new HashSet<String>();
    synchronized (this)
    synchronized (list)
    {
      for (Short key  : list.keySet())
      {
@@ -234,7 +237,7 @@
  {
    ArrayList<ByteString> values = new ArrayList<ByteString>(0);
    synchronized (this)
    synchronized (list)
    {
      for (Short id : list.keySet())
      {
@@ -253,7 +256,7 @@
  {
    StringBuilder buffer = new StringBuilder();
    synchronized (this)
    synchronized (list)
    {
      for (Short key  : list.keySet())
      {
@@ -298,7 +301,7 @@
   */
  public byte[] getBytes() throws UnsupportedEncodingException
  {
    synchronized (this)
    synchronized (list)
    {
      int length = 0;
      List<String> idList = new ArrayList<String>(list.size());
@@ -375,7 +378,7 @@
  public ServerState duplicate()
  {
    ServerState newState = new ServerState();
    synchronized (this)
    synchronized (list)
    {
      for (Short key  : list.keySet())
      {
opends/src/server/org/opends/server/replication/server/DbHandler.java
@@ -550,7 +550,7 @@
      ArrayList<Attribute> attributes = new ArrayList<Attribute>();
      attributes.add(Attributes.create("replicationServer-database",
          String.valueOf(serverId)));
      attributes.add(Attributes.create("base-dn", baseDn.toString()));
      attributes.add(Attributes.create("domain-name", baseDn.toString()));
      if (firstChange != null)
      {
        Date firstTime = new Date(firstChange.getTime());
opends/tests/unit-tests-testng/src/server/org/opends/server/replication/common/ServerStateTest.java
@@ -107,11 +107,36 @@
    // Check getBytes
    byte[] b = serverState.getBytes();
    ServerState generatedServerState = new ServerState(b,0,b.length -1) ;
    assertEquals(b, generatedServerState.getBytes()) ;
  }
  /**
   * Create a new ServerState object
   */
  @Test(dataProvider = "changeNumberData")
  public void serverStateReloadTest(ChangeNumber cn)
  throws Exception
  {
    ChangeNumber cn1, cn3;
    cn1 = new ChangeNumber(cn.getTime()+1,cn.getSeqnum(),cn.getServerId());
    cn3 = new ChangeNumber(cn1.getTime(),cn1.getSeqnum(),(short)(cn1.getServerId()+1));
    ServerState state1 = new ServerState();
    state1.update(cn1);
    state1.update(cn3);
    ServerState state2 = new ServerState();
    state2.reload(state1);
    assertEquals(state1.toString(), state2.toString()) ;
  }
  /**
   * Ensures that the Directory Server is able to
   * translate a ruv entry to a sever state.
   *
opends/tests/unit-tests-testng/src/server/org/opends/server/replication/server/AssuredReplicationServerTest.java
@@ -1486,7 +1486,7 @@
  @DataProvider(name = "testSafeDataLevelHighProvider")
  private Object[][] testSafeDataLevelHighProvider()
  {
    // Constrcut all possible combinations of parameters
    // Construct all possible combinations of parameters
    List<List<Object>> objectArrayList = new ArrayList<List<Object>>();
    // Safe Data Level
opends/tests/unit-tests-testng/src/server/org/opends/server/replication/server/MonitorTest.java
@@ -22,7 +22,7 @@
 * CDDL HEADER END
 *
 *
 *      Copyright 2008 Sun Microsystems, Inc.
 *      Copyright 2008-2009 Sun Microsystems, Inc.
 */
package org.opends.server.replication.server;
@@ -533,7 +533,7 @@
      "-w", "password",
      "-b", "cn=monitor",
      "-s", "sub",
      "(base-dn=*)"
      "(domain-name=*)"
    };
    oStream.reset();