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

copilot-swe-agent[bot]
11 hours ago 5379f4a2c7666c33bc2f8d49ec4de02e2a849bd1
Merge remote-tracking branch 'origin/master' into copilot/fix-referential-integrity-plugin-bug
Co-authored-by: vharseko <6818498+vharseko@users.noreply.github.com>
9 files modified
91 ■■■■■ changed files
opendj-core/src/main/java/org/forgerock/opendj/ldap/spi/LdapMessages.java 8 ●●●●● patch | view | raw | blame | history
opendj-server-legacy/lib/launcher_administrator.exe patch | view | raw | blame | history
opendj-server-legacy/lib/opendj_service.exe patch | view | raw | blame | history
opendj-server-legacy/lib/winlauncher.exe patch | view | raw | blame | history
opendj-server-legacy/src/build-tools/windows/service.c 45 ●●●● patch | view | raw | blame | history
opendj-server-legacy/src/main/java/org/opends/server/core/LoggerConfigManager.java 8 ●●●● patch | view | raw | blame | history
opendj-server-legacy/src/test/java/org/opends/server/backends/ChangelogBackendTestCase.java 2 ●●●●● patch | view | raw | blame | history
opendj-server-legacy/src/test/java/org/opends/server/replication/GenerationIdTest.java 22 ●●●●● patch | view | raw | blame | history
opendj-server-legacy/tests/unit-tests-testng/resource/config-changes.ldif 6 ●●●●● patch | view | raw | blame | history
opendj-core/src/main/java/org/forgerock/opendj/ldap/spi/LdapMessages.java
@@ -12,6 +12,7 @@
 * information: "Portions Copyright [year] [name of copyright owner]".
 *
 * Copyright 2016 ForgeRock AS.
 * Portions Copyright 2026 3A Systems, LLC.
 */
package org.forgerock.opendj.ldap.spi;
@@ -106,6 +107,13 @@
        private LdapResponseMessage(final byte messageType, final int messageId, final Response content) {
            super(messageType, messageId, content);
        }
        @Override
        public String toString() {
            return "LdapResponseMessage(messageType=" + getMessageType()
                    + ", messageId=" + getMessageId()
                    + ", content=" + getContent() + ")";
        }
    }
    private static abstract class LdapMessageEnvelope<T> {
opendj-server-legacy/lib/launcher_administrator.exe
Binary files differ
opendj-server-legacy/lib/opendj_service.exe
Binary files differ
opendj-server-legacy/lib/winlauncher.exe
Binary files differ
opendj-server-legacy/src/build-tools/windows/service.c
@@ -13,6 +13,7 @@
 *
 * Copyright 2008-2010 Sun Microsystems, Inc.
 * Portions Copyright 2011-2013 ForgeRock AS.
 * Portions Copyright 2026 3A Systems, LLC.
 */
#include "service.h"
@@ -563,12 +564,44 @@
  if (createOk && waitOk)
    {
    BOOL running;
      // Just check once if the server is running or not: since the wait
      // wait was successful, if the server is getting the lock, it already
      // got it.
    isServerRunning(&running, TRUE);
    if (running)
      // The batch file process completed successfully, but the Java server
      // process may not have acquired the lock file yet (especially on
      // Windows 11 where JVM startup can be slower). Retry with a loop
      // similar to the else-if branch below.
      // See: https://github.com/OpenIdentityPlatform/OpenDJ/issues/259
      const DWORD DEFAULT_TRIES = 100;
      int nTries = DEFAULT_TRIES;
      char * nTriesEnv = getenv("OPENDJ_WINDOWS_SERVICE_START_NTRIES");
      BOOL running = FALSE;
      if (nTriesEnv != NULL)
      {
        debug("OPENDJ_WINDOWS_SERVICE_START_NTRIES env var set to %s", nTriesEnv);
        nTries = (int)strtol(nTriesEnv, (char **)NULL, 10);
        if (nTries <= 0)
        {
          nTries = DEFAULT_TRIES;
        }
      }
      else
      {
        debug("OPENDJ_WINDOWS_SERVICE_START_NTRIES is not set.  Using default %d tries.", nTries);
      }
      while ((nTries > 0) && !running)
      {
        nTries--;
        if (isServerRunning(&running, TRUE) != SERVICE_RETURN_OK)
        {
          break;
        }
        if (!running)
        {
          debug("Sleeping for 5 seconds to allow the process to get the lock.  %d tries remaining.",
              nTries);
          Sleep(5000);
        }
      }
      if (running)
      {
        returnValue = SERVICE_RETURN_OK;
        debug("doStartApplication: server running.");
opendj-server-legacy/src/main/java/org/opends/server/core/LoggerConfigManager.java
@@ -13,6 +13,7 @@
 *
 * Copyright 2006-2008 Sun Microsystems, Inc.
 * Portions Copyright 2013-2016 ForgeRock AS.
 * Portions Copyright 2026 3A Systems, LLC.
 */
package org.opends.server.core;
@@ -109,8 +110,13 @@
      {
        SLF4JBridgeHandler.removeHandlersForRootLogger();
        // This is needed to avoid major performance issue. See: http://www.slf4j.org/legacy.html#jul-to-slf4j
        // Limit Grizzly JUL logging to FINE to prevent a ClassCastException in
        // FilterChainContext.toString() (Grizzly bug) when debug logging is enabled.
        // Grizzly 3.0.1 DefaultFilterChain.executeFilter() checks isLoggable(FINEST) but
        // its FilterChainContext.toString() incorrectly casts the message to char[].
        LogManager.getLogManager().readConfiguration(
                new ByteArrayInputStream((".level=" + newLevel).getBytes()));
                new ByteArrayInputStream(
                        (".level=" + newLevel + "\norg.glassfish.grizzly.level=FINE").getBytes()));
        SLF4JBridgeHandler.install();
        currentJulLogLevel = newLevel;
      }
opendj-server-legacy/src/test/java/org/opends/server/backends/ChangelogBackendTestCase.java
@@ -590,6 +590,8 @@
    // write 4 more changes starting from changenumber 5, and search them
    testName = "Multiple/5";
    csns = generateAndPublishUpdateMsgForEachOperationType(testName, false);
    // Wait until all 8 changes are indexed before searching
    assertChangelogAttributesInRootDSE(1, 8);
    searchChangesForEachOperationTypeUsingChangeNumberMode(5, csns, testName);
    // search from the provided change number: 6 (should be the add msg)
opendj-server-legacy/src/test/java/org/opends/server/replication/GenerationIdTest.java
@@ -921,7 +921,7 @@
      replServer3 = createReplicationServer(replServerId3, true, testCase);
      connectServer1ToReplServer(replServer1);
      Thread.sleep(2000); //wait for all RS handshakes to complete
      waitForDomainsOnAllReplicationServers();
      debugInfo("Expect genId are set in all replServers.");
      waitForStableGenerationId(EMPTY_DN_GENID);
@@ -990,7 +990,7 @@
    }
  }
  private void waitForStableGenerationId(final long expectedGenId) throws Exception
  private void waitForDomainsOnAllReplicationServers() throws Exception
  {
    TestTimer timer = new TestTimer.Builder()
      .maxSleep(30, SECONDS)
@@ -1001,6 +1001,24 @@
      @Override
      public void call() throws Exception
      {
        assertNotNull(replServer1.getReplicationServerDomain(baseDN), "domain missing on replServer1");
        assertNotNull(replServer2.getReplicationServerDomain(baseDN), "domain missing on replServer2");
        assertNotNull(replServer3.getReplicationServerDomain(baseDN), "domain missing on replServer3");
      }
    });
  }
  private void waitForStableGenerationId(final long expectedGenId) throws Exception
  {
    TestTimer timer = new TestTimer.Builder()
      .maxSleep(60, SECONDS)
      .sleepTimes(100, MILLISECONDS)
      .toTimer();
    timer.repeatUntilSuccess(new CallableVoid()
    {
      @Override
      public void call() throws Exception
      {
        assertGenIdEquals(expectedGenId);
      }
    });
opendj-server-legacy/tests/unit-tests-testng/resource/config-changes.ldif
@@ -11,6 +11,7 @@
# information: "Portions Copyright [year] [name of copyright owner]".
#
# Copyright 2016 ForgeRock AS.
# Portions Copyright 2026 3A Systems LLC.
dn: cn=config
changetype: modify
replace: ds-cfg-notify-abandoned-operations
@@ -1610,3 +1611,8 @@
-
replace: ds-cfg-default-throwable-stack-frames
ds-cfg-default-throwable-stack-frames: 500
dn: cn=Multimaster Synchronization,cn=Synchronization Providers,cn=config
changetype: modify
replace: ds-cfg-connection-timeout
ds-cfg-connection-timeout: 30000 ms