opendj-server-legacy/pom.xml
@@ -21,7 +21,7 @@ ! ! CDDL HEADER END ! ! Copyright 2011-2015 ForgeRock AS. ! Copyright 2011-2016 ForgeRock AS. ! --> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> @@ -227,6 +227,12 @@ <artifactId>forgerock-persistit-core</artifactId> <version>4.3.1</version> </dependency> <dependency> <groupId>com.github.stephenc.jcip</groupId> <artifactId>jcip-annotations</artifactId> <version>1.0-1</version> </dependency> </dependencies> <build> opendj-server-legacy/src/main/java/org/opends/server/backends/pluggable/spi/Importer.java
@@ -21,12 +21,14 @@ * CDDL HEADER END * * * Copyright 2014-2015 ForgeRock AS * Copyright 2014-2016 ForgeRock AS */ package org.opends.server.backends.pluggable.spi; import java.io.Closeable; import net.jcip.annotations.ThreadSafe; import org.forgerock.opendj.ldap.ByteSequence; import org.forgerock.opendj.ldap.ByteString; @@ -34,10 +36,8 @@ * Allows to run an import. For performance reasons, imports are run without transactions. * <p> * Since import is multi threaded, implementations must be thread-safe. * <p> * * @ThreadSafe */ @ThreadSafe public interface Importer extends Closeable { /** @@ -86,4 +86,5 @@ @Override void close(); } } opendj-server-legacy/src/main/java/org/opends/server/replication/common/DSInfo.java
@@ -22,20 +22,27 @@ * * * Copyright 2008-2010 Sun Microsystems, Inc. * Portions copyright 2011-2015 ForgeRock AS * Portions copyright 2011-2016 ForgeRock AS */ package org.opends.server.replication.common; import java.util.*; import java.util.ArrayList; import java.util.Collection; import java.util.Collections; import java.util.HashSet; import java.util.List; import java.util.Objects; import java.util.Set; import net.jcip.annotations.Immutable; /** * This class holds information about a DS connected to the topology. This * information is to be exchanged through the replication protocol in topology * messages, to keep every member (RS or DS) of the topology aware of the DS * topology. * <p> * @Immutable */ @Immutable public final class DSInfo { /** DS server id. */ opendj-server-legacy/src/main/java/org/opends/server/replication/server/ChangelogState.java
@@ -21,7 +21,7 @@ * CDDL HEADER END * * * Copyright 2013-2015 ForgeRock AS * Copyright 2013-2016 ForgeRock AS */ package org.opends.server.replication.server; @@ -30,6 +30,8 @@ import java.util.Set; import java.util.concurrent.ConcurrentSkipListMap; import net.jcip.annotations.ThreadSafe; import org.opends.server.replication.common.CSN; import org.opends.server.replication.common.MultiDomainServerState; import org.opends.server.types.DN; @@ -44,9 +46,8 @@ * <p> * This class is used during replication initialization to decouple the code * that reads the changelogStateDB from the code that makes use of its data. * * @ThreadSafe */ @ThreadSafe public class ChangelogState { private final ConcurrentSkipListMap<DN, Long> domainToGenerationId = new ConcurrentSkipListMap<>(); opendj-server-legacy/src/main/java/org/opends/server/replication/server/MsgQueue.java
@@ -22,23 +22,25 @@ * * * Copyright 2006-2010 Sun Microsystems, Inc. * Portions Copyright 2012-2015 ForgeRock AS. * Portions Copyright 2012-2016 ForgeRock AS. */ package org.opends.server.replication.server; import static org.opends.messages.ReplicationMessages.*; import java.util.TreeMap; import net.jcip.annotations.ThreadSafe; import org.forgerock.i18n.slf4j.LocalizedLogger; import org.opends.server.replication.common.CSN; import org.opends.server.replication.protocol.UpdateMsg; import static org.opends.messages.ReplicationMessages.*; /** * This class is used to build ordered lists of UpdateMsg. * The order is defined by the order of the CSN of the UpdateMsg. * @ThreadSafe */ @ThreadSafe public class MsgQueue { private static final LocalizedLogger logger = LocalizedLogger.getLoggerForThisClass(); opendj-server-legacy/src/main/java/org/opends/server/replication/server/ReplicationServerDomain.java
@@ -22,7 +22,7 @@ * * * Copyright 2006-2010 Sun Microsystems, Inc. * Portions Copyright 2011-2015 ForgeRock AS * Portions Copyright 2011-2016 ForgeRock AS */ package org.opends.server.replication.server; @@ -41,6 +41,8 @@ import java.util.concurrent.atomic.AtomicReference; import java.util.concurrent.locks.ReentrantLock; import net.jcip.annotations.GuardedBy; import org.forgerock.i18n.LocalizableMessage; import org.forgerock.i18n.LocalizableMessageBuilder; import org.forgerock.i18n.slf4j.LocalizedLogger; @@ -272,7 +274,7 @@ private final Object pendingStatusMessagesLock = new Object(); /** @GuardedBy("pendingStatusMessagesLock") */ @GuardedBy("pendingStatusMessagesLock") private PendingStatusMessages pendingStatusMessages = new PendingStatusMessages(); /** opendj-server-legacy/src/main/java/org/opends/server/replication/server/changelog/api/DBCursor.java
@@ -21,13 +21,15 @@ * CDDL HEADER END * * * Copyright 2013-2015 ForgeRock AS * Copyright 2013-2016 ForgeRock AS */ package org.opends.server.replication.server.changelog.api; import java.io.Closeable; import java.util.Objects; import net.jcip.annotations.NotThreadSafe; import org.opends.server.replication.common.CSN; /** @@ -88,8 +90,8 @@ * * @param <T> * type of the record being returned * \@NotThreadSafe */ @NotThreadSafe public interface DBCursor<T> extends Closeable { opendj-server-legacy/src/main/java/org/opends/server/replication/server/changelog/file/CompositeDBCursor.java
@@ -21,7 +21,7 @@ * CDDL HEADER END * * * Copyright 2013-2015 ForgeRock AS * Copyright 2013-2016 ForgeRock AS */ package org.opends.server.replication.server.changelog.file; @@ -32,6 +32,8 @@ import java.util.Map.Entry; import java.util.TreeMap; import net.jcip.annotations.NotThreadSafe; import org.opends.server.replication.common.CSN; import org.opends.server.replication.protocol.UpdateMsg; import org.opends.server.replication.server.changelog.api.ChangelogException; @@ -45,8 +47,8 @@ * * @param <T> * The type of data associated with each cursor * \@NotThreadSafe */ @NotThreadSafe abstract class CompositeDBCursor<T> implements DBCursor<UpdateMsg> { private static final byte UNINITIALIZED = 0; opendj-server-legacy/src/main/java/org/opends/server/replication/server/changelog/file/DomainDBCursor.java
@@ -20,7 +20,7 @@ * * CDDL HEADER END * * Copyright 2014-2015 ForgeRock AS * Copyright 2014-2016 ForgeRock AS */ package org.opends.server.replication.server.changelog.file; @@ -28,6 +28,8 @@ import java.util.Map.Entry; import java.util.concurrent.ConcurrentSkipListMap; import net.jcip.annotations.NotThreadSafe; import org.opends.server.replication.common.CSN; import org.opends.server.replication.protocol.UpdateMsg; import org.opends.server.replication.server.changelog.api.ChangelogException; @@ -35,11 +37,8 @@ import org.opends.server.replication.server.changelog.api.ReplicationDomainDB; import org.opends.server.types.DN; /** * Cursor iterating over a replication domain's replica DBs. * * \@NotThreadSafe */ /** Cursor iterating over a replication domain's replica DBs. */ @NotThreadSafe public class DomainDBCursor extends CompositeDBCursor<Void> { /** Replaces null CSNs in ConcurrentSkipListMap that does not support null values. */ opendj-server-legacy/src/main/java/org/opends/server/replication/server/changelog/file/FileChangeNumberIndexDBCursor.java
@@ -21,22 +21,20 @@ * CDDL HEADER END * * * Copyright 2014 ForgeRock AS. * Copyright 2014-2016 ForgeRock AS. */ package org.opends.server.replication.server.changelog.file; import net.jcip.annotations.NotThreadSafe; import org.opends.server.replication.server.changelog.api.ChangeNumberIndexRecord; import org.opends.server.replication.server.changelog.api.ChangelogException; import org.opends.server.replication.server.changelog.api.DBCursor; /** * A cursor on ChangeNumberIndexDB. * * \@NotThreadSafe */ /** A cursor on ChangeNumberIndexDB. */ @NotThreadSafe class FileChangeNumberIndexDBCursor implements DBCursor<ChangeNumberIndexRecord> { /** The underlying cursor. */ private final DBCursor<Record<Long, ChangeNumberIndexRecord>> cursor; opendj-server-legacy/src/main/java/org/opends/server/replication/server/changelog/file/FileChangelogDB.java
@@ -42,6 +42,8 @@ import java.util.concurrent.atomic.AtomicBoolean; import java.util.concurrent.atomic.AtomicReference; import net.jcip.annotations.GuardedBy; import org.forgerock.i18n.LocalizableMessageBuilder; import org.forgerock.i18n.slf4j.LocalizedLogger; import org.forgerock.opendj.config.DurationUnit; @@ -101,9 +103,8 @@ /** * The handler of the changelog database, the database stores the relation * between a change number and the associated cookie. * <p> * @GuardedBy("cnIndexDBLock") */ @GuardedBy("cnIndexDBLock") private FileChangeNumberIndexDB cnIndexDB; private final AtomicReference<ChangeNumberIndexer> cnIndexer = new AtomicReference<>(); opendj-server-legacy/src/main/java/org/opends/server/replication/server/changelog/file/FileReplicaDB.java
@@ -21,15 +21,19 @@ * CDDL HEADER END * * * Copyright 2014-2015 ForgeRock AS * Copyright 2014-2016 ForgeRock AS */ package org.opends.server.replication.server.changelog.file; import static org.opends.messages.ReplicationMessages.*; import java.util.ArrayList; import java.util.Date; import java.util.List; import java.util.concurrent.atomic.AtomicBoolean; import net.jcip.annotations.Immutable; import org.forgerock.opendj.config.server.ConfigException; import org.forgerock.opendj.ldap.ByteString; import org.opends.server.admin.std.server.MonitorProviderCfg; @@ -50,8 +54,6 @@ import org.opends.server.types.DN; import org.opends.server.types.InitializationException; import static org.opends.messages.ReplicationMessages.*; /** * Represents a replication server database for one server in the topology. * <p> @@ -69,12 +71,8 @@ /** The parser of records stored in Replica DB. */ static final RecordParser<CSN, UpdateMsg> RECORD_PARSER = new ReplicaDBParser(); /** * Class that allows atomically setting oldest and newest CSNs without * synchronization. * * @Immutable */ /** Class that allows atomically setting oldest and newest CSNs without synchronization. */ @Immutable private static final class CSNLimits { private final CSN oldestCSN; opendj-server-legacy/src/main/java/org/opends/server/replication/server/changelog/file/FileReplicaDBCursor.java
@@ -21,13 +21,15 @@ * CDDL HEADER END * * * Copyright 2014 ForgeRock AS. * Copyright 2014-2016 ForgeRock AS. */ package org.opends.server.replication.server.changelog.file; import static org.opends.server.replication.server.changelog.api.DBCursor.KeyMatchingStrategy.*; import static org.opends.server.replication.server.changelog.api.DBCursor.PositionStrategy.*; import net.jcip.annotations.NotThreadSafe; import org.opends.server.replication.common.CSN; import org.opends.server.replication.protocol.UpdateMsg; import org.opends.server.replication.server.changelog.api.ChangelogException; @@ -56,9 +58,8 @@ * record is newly available, a subsequent call to the {@code next()} method will * return {@code true} and the record will be available by calling {@code getRecord()} * method. * * \@NotThreadSafe */ @NotThreadSafe class FileReplicaDBCursor implements DBCursor<UpdateMsg> { /** The underlying cursor. */ opendj-server-legacy/src/main/java/org/opends/server/replication/server/changelog/file/Log.java
@@ -21,7 +21,7 @@ * CDDL HEADER END * * * Copyright 2014-2015 ForgeRock AS. * Copyright 2014-2016 ForgeRock AS. */ package org.opends.server.replication.server.changelog.file; @@ -46,6 +46,8 @@ import java.util.concurrent.locks.ReadWriteLock; import java.util.concurrent.locks.ReentrantReadWriteLock; import net.jcip.annotations.GuardedBy; import org.forgerock.i18n.LocalizableMessage; import org.forgerock.i18n.slf4j.LocalizedLogger; import org.forgerock.util.Pair; @@ -777,11 +779,8 @@ } } /** * Abort all cursors opened on the provided log file. * <p> * @GuardedBy("exclusiveLock") */ /** Abort all cursors opened on the provided log file. */ @GuardedBy("exclusiveLock") private void abortCursorsOpenOnLogFile(LogFile<K, V> logFile) { for (AbortableLogCursor<K, V> cursor : openCursors) @@ -985,8 +984,8 @@ * <p> * All cursors opened on this log are temporarily disabled (closing underlying resources) * and then re-open with their previous state. * @GuardedBy("exclusiveLock") */ @GuardedBy("exclusiveLock") private void rotateHeadLogFile() throws ChangelogException { // Temporarily disable cursors opened on head, saving their state @@ -1064,10 +1063,8 @@ + recordParser.encodeKeyToString(highestKey) + LOG_FILE_SUFFIX; } /** * Update the cursors that were pointing to head after a rotation of the head log file. * @GuardedBy("exclusiveLock") */ /** Update the cursors that were pointing to head after a rotation of the head log file. */ @GuardedBy("exclusiveLock") private void updateOpenedCursorsOnHeadAfterRotation(List<Pair<AbortableLogCursor<K, V>, CursorState<K, V>>> cursors) throws ChangelogException { @@ -1086,7 +1083,7 @@ } } /** @GuardedBy("exclusiveLock") */ @GuardedBy("exclusiveLock") private void abortAllOpenCursors() throws ChangelogException { for (AbortableLogCursor<K, V> cursor : openCursors) @@ -1098,12 +1095,12 @@ /** * Disable the cursors opened on the head log file log, by closing their underlying cursor. * Returns the state of each cursor just before the close operation. * @GuardedBy("exclusiveLock") * * @return the pairs (cursor, cursor state) for each cursor pointing to head log file. * @throws ChangelogException * If an error occurs. */ @GuardedBy("exclusiveLock") private List<Pair<AbortableLogCursor<K, V>, CursorState<K, V>>> disableOpenedCursorsOnHead() throws ChangelogException { @@ -1173,7 +1170,7 @@ return Log.HEAD_LOG_FILE_NAME.equals(logFile.getFile().getName()); } /** @GuardedBy("sharedLock") */ @GuardedBy("sharedLock") private LogFile<K, V> findLogFileFor(final K key, KeyMatchingStrategy keyMatchingStrategy) throws ChangelogException { if (key == null || logFiles.lowerKey(key) == null) @@ -1577,35 +1574,35 @@ /** * Aborts this cursor. Once aborted, a cursor throws an * AbortedChangelogCursorException if it is used. * @GuardedBy("exclusiveLock") */ @GuardedBy("exclusiveLock") void abort() { mustAbort = true; } /** @GuardedBy("exclusiveLock") */ @GuardedBy("exclusiveLock") @Override CursorState<K, V> getState() throws ChangelogException { return delegate.getState(); } /** @GuardedBy("exclusiveLock") */ @GuardedBy("exclusiveLock") @Override void closeUnderlyingCursor() { delegate.closeUnderlyingCursor(); } /** @GuardedBy("exclusiveLock") */ @GuardedBy("exclusiveLock") @Override void reinitializeTo(final CursorState<K, V> cursorState) throws ChangelogException { delegate.reinitializeTo(cursorState); } /** @GuardedBy("exclusiveLock") */ @GuardedBy("exclusiveLock") @Override boolean isAccessingLogFile(LogFile<K, V> logFile) { opendj-server-legacy/src/main/java/org/opends/server/replication/server/changelog/file/MultiDomainDBCursor.java
@@ -20,7 +20,7 @@ * * CDDL HEADER END * * Copyright 2014-2015 ForgeRock AS * Copyright 2014-2016 ForgeRock AS */ package org.opends.server.replication.server.changelog.file; @@ -28,6 +28,8 @@ import java.util.Map.Entry; import java.util.concurrent.ConcurrentSkipListMap; import net.jcip.annotations.NotThreadSafe; import org.opends.server.replication.common.ServerState; import org.opends.server.replication.protocol.UpdateMsg; import org.opends.server.replication.server.changelog.api.ChangelogException; @@ -35,11 +37,8 @@ import org.opends.server.replication.server.changelog.api.ReplicationDomainDB; import org.opends.server.types.DN; /** * Cursor iterating over a all the replication domain known to the changelog DB. * * \@NotThreadSafe */ /** Cursor iterating over a all the replication domain known to the changelog DB. */ @NotThreadSafe public class MultiDomainDBCursor extends CompositeDBCursor<DN> { private final ReplicationDomainDB domainDB; opendj-server-legacy/src/main/java/org/opends/server/replication/server/changelog/file/ReplicationEnvironment.java
@@ -21,7 +21,7 @@ * CDDL HEADER END * * * Copyright 2014-2015 ForgeRock AS * Copyright 2014-2016 ForgeRock AS */ package org.opends.server.replication.server.changelog.file; @@ -50,6 +50,8 @@ import java.util.concurrent.CopyOnWriteArrayList; import java.util.concurrent.atomic.AtomicBoolean; import net.jcip.annotations.GuardedBy; import org.forgerock.i18n.LocalizableMessage; import org.forgerock.i18n.slf4j.LocalizedLogger; import org.forgerock.util.time.TimeService; @@ -207,9 +209,8 @@ * The current changelogState. This is in-memory version of what is inside the * on-disk changelogStateDB. It improves performances in case the * changelogState is read often. * * @GuardedBy("domainsLock") */ @GuardedBy("domainsLock") private final ChangelogState changelogState; /** The list of logs that are in use for Replica DBs. */ @@ -222,11 +223,8 @@ */ private List<Log<Long, ChangeNumberIndexRecord>> logsCNIndexDB = new CopyOnWriteArrayList<>(); /** * Maps each domain DN to a domain id that is used to name directory in file system. * * @GuardedBy("domainsLock") */ /** Maps each domain DN to a domain id that is used to name directory in file system. */ @GuardedBy("domainsLock") private final Map<DN, String> domains = new HashMap<>(); /** opendj-server-legacy/src/main/java/org/opends/server/replication/service/ReplicationBroker.java
@@ -22,7 +22,7 @@ * * * Copyright 2006-2010 Sun Microsystems, Inc. * Portions Copyright 2011-2015 ForgeRock AS * Portions Copyright 2011-2016 ForgeRock AS */ package org.opends.server.replication.service; @@ -39,6 +39,9 @@ import java.util.concurrent.atomic.AtomicBoolean; import java.util.concurrent.atomic.AtomicReference; import net.jcip.annotations.GuardedBy; import net.jcip.annotations.Immutable; import org.forgerock.i18n.LocalizableMessage; import org.forgerock.i18n.slf4j.LocalizedLogger; import org.forgerock.util.Utils; @@ -65,7 +68,7 @@ * Immutable class containing information about whether the broker is * connected to an RS and data associated to this connected RS. */ // @Immutable @Immutable private static final class ConnectedRS { @@ -205,7 +208,7 @@ */ /** Contains the last known state of the replication topology. */ private final AtomicReference<Topology> topology = new AtomicReference<>(new Topology()); /** <pre>@GuardedBy("this")</pre>. */ @GuardedBy("this") private volatile int updateDoneCount; private volatile boolean connectRequiresRecovery; opendj-server-legacy/src/main/java/org/opends/server/replication/service/ReplicationDomain.java
@@ -22,7 +22,7 @@ * * * Copyright 2008-2010 Sun Microsystems, Inc. * Portions Copyright 2011-2015 ForgeRock AS * Portions Copyright 2011-2016 ForgeRock AS */ package org.opends.server.replication.service; @@ -36,12 +36,24 @@ import java.io.InputStream; import java.io.OutputStream; import java.net.SocketTimeoutException; import java.util.*; import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; import java.util.Collections; import java.util.Date; import java.util.HashMap; import java.util.HashSet; import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.Set; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.TimeoutException; import java.util.concurrent.atomic.AtomicInteger; import java.util.concurrent.atomic.AtomicReference; import net.jcip.annotations.Immutable; import org.forgerock.i18n.LocalizableMessage; import org.forgerock.i18n.slf4j.LocalizedLogger; import org.forgerock.opendj.config.server.ConfigException; @@ -106,13 +118,10 @@ public abstract class ReplicationDomain { /** * Contains all the attributes included for the ECL (External Changelog). */ // @Immutable /** Contains all the attributes included for the ECL (External Changelog). */ @Immutable private static final class ECLIncludes { final Map<Integer, Set<String>> includedAttrsByServer; final Set<String> includedAttrsAllServers; pom.xml
@@ -21,7 +21,7 @@ ! ! CDDL HEADER END ! ! Copyright 2011-2015 ForgeRock AS. ! Copyright 2011-2016 ForgeRock AS. ! --> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> @@ -57,8 +57,8 @@ <url>https://stash.forgerock.org/projects/OPENDJ/repos/opendj/browse</url> <connection>scm:git:ssh://git@stash.forgerock.org:7999/opendj/opendj.git</connection> <developerConnection>scm:git:ssh://git@stash.forgerock.org:7999/opendj/opendj.git</developerConnection> <tag>HEAD</tag> </scm> <tag>HEAD</tag> </scm> <ciManagement> <system>jenkins</system>