19 Jan, 2015
2 commits
-
git-svn-id: https://svn.forgerock.org/opendj/trunk@11595 41b1ffd8-f28e-4786-ab96-9950f0a78031
-
git-svn-id: https://svn.forgerock.org/opendj/trunk@11593 41b1ffd8-f28e-4786-ab96-9950f0a78031
03 Dec, 2014
1 commit
-
git-svn-id: https://svn.forgerock.org/opendj/trunk@11381 41b1ffd8-f28e-4786-ab96-9950f0a78031
08 Oct, 2014
1 commit
-
git-svn-id: https://svn.forgerock.org/opendj/trunk@11099 41b1ffd8-f28e-4786-ab96-9950f0a78031
04 Sep, 2014
1 commit
-
…should not return the base changelog entry I did the following changes: - Persistent searches on cn=changelog with changesOnly=true no longer return the base changelog entry - Fixed a functional bug with setting hasSubordinates on the base changelog entry: -- hasSubordinates must be computed regardless of the search parameters, result can also be cached in memory once and for all - As a consequence, it means we can immediately return the base changelog entry for initial searches without even looking for any subordinate changelog entries. - Fixed a race condition when registering persistent searches: first set the cookie in the attachments then register the persistent searches - implementing numSubordinates() was not required and it might be buggy, so returned -1 instead. ChangelogBackend.java: In notifyEntryAdded() (a.k.a. persistent search phase), never return the base changelog entry. Removed EntrySender and moved all its methods back into ChangelogBackend + stored the MultiDomainServerState cookie as an attachment of the SearchOperation. Renamed search*() to internalSearch*(). In hasSubordinates(), reimplemented it in a more efficient way + added baseChangelogHasSubordinates() and baseEntryHasSubordinates field to memoize its result. In numSubordinates(), is not required, so just returned -1 + removed NumSubordinatesSearchOperation. In registerPersistentSearch(), register the persistent searches after setting the cookie attachment on the search operation Completed javadocs. In registerPersistentSearch(), forced changesOnly=true persistent searches to never return the changelog base entry. Renamed Entry.hasReturnedBaseEntry field to mustReturnBaseEntry to fit the fact the changelog base entry might never be returned + inverted all the boolean expressions related to this field. git-svn-id: https://svn.forgerock.org/opendj/trunk@10990 41b1ffd8-f28e-4786-ab96-9950f0a78031
21 Aug, 2014
1 commit
-
to support cn=changelog CR-4083 Implementation of core features of the changelog backend: * Initialization and finalization of the backend * Search of the changelog, in cookie mode (with a cookie control) and draft compat mode (by change number) Note that : * The support for persistent searches is not implemented yet. * The changelog backend is currently not branched into code, i.e the directory server still uses the ECL workflow for "cn=changelog", because it is not possible to enable both changelog backend and ECL workflow at the same time (waiting for psearches implementation before branching the new code) Code changes: * ChangelogBackend.java: - implementation of search(), hasSubordinates(), numSubordinates(), and getEntryCount() methods * ReplicationServer.java: - new dependency on ChangelogBackend and ECLEnabledDomainPredicate - new constructor with ECLEnabledDomainPredicate argument - new methods enableExternalChangeLog() and shutdownExternalChangelog() as future replacement of enabledECL() and shutdownECL() - new method getDomainDNs(Set<DN>) for retrieval of domain DNs but an excluded set of dns - new method validateServerState(MultiDomainServerState, Set<DN>) for checking coherency of given state with the replication server * ReplicationDomainDB.java: - new method getCursorFrom(MultiDomainServerState, PositionStrategy, Set<DN>) that exclude a given set of domain DNs from the cursor obtained * FileChangelogDB.java, JEChangelogDB.java: - implementation of new method getCursorFrom(MultiDomainServerState, PositionStrategy, Set<DN>) * ECLEnabledDomainPredicate.java, ECLMultiDomainDBCursor.java: - update visibility to public in order to use these classes in ChangelogBackend * ChangelogBackedTestCase.java: - test of ChangelogBackend class, built from ExternalChangeLogTest.java, with lots of renaming, refactoring, cleaning compared to original class - majority of tests are disabled until the changelog backend is branched into code (as these tests require a running server) * MonitorTest.java: - update creation of ReplicationServer class to use a custom ECLEnabledDomainPredicate * replication.properties: - add messages for changelog backend git-svn-id: https://svn.forgerock.org/opendj/trunk@10970 41b1ffd8-f28e-4786-ab96-9950f0a78031
22 Jul, 2014
1 commit
-
…kend to support cn=changelog Merged + corrected backend error messages by passing in the backendID into the error messages + fixed translations (!?!) Started implementing ChangelogBackend by adding error messages. Used Collections.emptySet() for supported controls and / or features, where applicable. Generecized Backend class with the type of the configuration object + applied specific types to sub-classes of Backend. Code cleanups + factorized code by extracting methods + ran AutoRefactor. git-svn-id: https://svn.forgerock.org/opendj/trunk@10923 41b1ffd8-f28e-4786-ab96-9950f0a78031
21 Jul, 2014
2 commits
-
to support cn=changelog CR-4052 Revert previous changes corresponding to CR-4052 as a better approach is to implement the processing of "Changelog Exchange Control" directly in the changelog backend. git-svn-id: https://svn.forgerock.org/opendj/trunk@10921 41b1ffd8-f28e-4786-ab96-9950f0a78031
-
to support cn=changelog CR-4052 Preparatory work for the changelog backend: make the "Changelog Exchange Control" available to the backend when search(SearchOperation) method is called * LocalBackendSearchOperation#handleRequestControls() method: handle the "Changelog Exchange Control" : add it to the SearchOperation if provided in the request * SearchOperation, SearchOperationBasis and SearchOperationWrapper classes: add getter and setter for the "Changelog Exchange Control" (ECLRequestControl class) * core.properties : add new message for case when "Changelog Exchange Control" is requested but not supported by a backend git-svn-id: https://svn.forgerock.org/opendj/trunk@10917 41b1ffd8-f28e-4786-ab96-9950f0a78031
07 Jul, 2014
1 commit
-
In r10840, the change to JE/FileChangelogDB.getCursorFrom(DN, ServerState) unnecessarily triggers a lot of calls to the underlying DB (JE or file based) to retrieve the ChangelogState. As an optimization, keeping an in-memory version of the ChangelogState in synch with the on-disk version will help. ChangelogState.java: Now thread safe. Added removeOfflineReplica(), isEqualTo(). Changed domainToServerIds from Map<DN, List<Integer>> to Map<DN, Set<Integer>>. In getOfflineReplicas(), now return a MultiDomainServerState. ChangeNumberIndexer.java: Consequence of the changes to ChangelogState. ReplicationDbEnv.java: Added changelogState field, updated at the same time as the on-disk changelogstate DB Added getChangelogState(), called by client code instead of readChangelogState(). Renamed readChangelogState() to private readOnDiskChangelogState(). Added stateLock field to sync updates to in-memory and on-disk changelog state. ReplicationEnvironment.java: Added changelogState field, updated at the same time as the on-disk changelogstate DB Added getChangelogState(), called by client code instead of readChangelogState(). Renamed readChangelogState() to private readOnDiskChangelogState(). Renamed domainLock field to domainsLock. replication.properties: Removed now unused error message. FileChangelogDB.java, JEChangelogDB.java: Consequence of the changes to ChangelogState and ReplicationEnvironment/ReplicationDbEnv. MultiDomainServerState.java, ServerState.java: Added getSnapshot() for unit tests. ReplicationEnvironmentTest.java, ReplicationDbEnvTest.java: Consequence of the changes to ReplicationEnvironment and ChangelogState. Used the fake server. git-svn-id: https://svn.forgerock.org/opendj/trunk@10868 41b1ffd8-f28e-4786-ab96-9950f0a78031
26 Jun, 2014
1 commit
-
Added a new ReplicaOfflineMsg to communicate that a replica is offline. ReplicaOfflineMsg extends UpdateMsg. It is possible that OPENDJ-1260 will piggy back on this new message type. This patch makes a DS send a ReplicaOfflineMsg to its preferred RS on shutdown. This works when we have split DS-RS, but works only 50% (guesstimate) of the time with combined DS-RS. There is a race condition between shutdown and the ReplicaOfflineMsg being forwarded by the collocated RS. Last but not least, RSs can communicate such ReplicaOfflineMsg to other RSs via ServerWriter / ServerReader. Another last item: Due to current change, replication is querying the changelogstate a lot more often. This is not playing nice with ExternalChangeLogTest and GenerationIdTest and required changing the File-based changelog ReplicationEnvironment class. It might be necessary to reduce I/O to maintain an in memory copy of the changelogstate. I might do this in a subsequent commit. ReplicaOfflineMsg.java: ADDED ReplicationMsg.java: Added support for ReplicaOfflineMsg. ProtocolVersion.java: Updated javadoc for REPLICATION_PROTOCOL_V8. LDAPReplicationDomain.java, ReplicationDomain.java: Added publishReplicaOfflineMsg(). ReplicationBroker.java: In stop(), called ReplicationDomain.publishReplicaOfflineMsg(). ReplicationServerDomain.java: In publishUpdateMsg(UpdateMsg), handled ReplicaOfflineMsg. PendingChange.java: Changed msg field + getMsg() return type from LDAPUpdateMsg to UpdateMsg. Added getLDAPUpdateMsg(). PendingChanges.java: Added putReplicaOfflineMsg(). In pushCommittedChanges(), changed the code as a consequence of the change to PendingChange.getMsg(). RemotePendingChanges.java: Changed the code as a consequence of the change to PendingChange.getMsg(). JEChangelogDB.java: Added ReplicaOfflineCursor inner class, decorator for a DBCursor + used it in getCursorFrom() to return ReplicaOfflineMsg to ServerWriter thread. JEChangelogDBTest.java: ADDED Tested ReplicaOfflineCursor. ECLServerHandler.java: In getNextMessage(), ignore ReplicaOfflineMsg which are useless to searches on cn=changelog. SynchronizationMsgTest.java: Added a test for ReplicaOfflineMsg (de)serialization. FakeUpdateMsg.java: ADDED, extracted from CompositeDBCursorTest CompositeDBCursorTest.java: Replaced call to newUpdateMsg() by calling FakeUpdateMsg ctor. ReplicationEnvironment.java: Fixes to make ExternalChangeLogTest and GenerationIdTest work. replication.properties: Removed now useless messages. git-svn-id: https://svn.forgerock.org/opendj/trunk@10840 41b1ffd8-f28e-4786-ab96-9950f0a78031
23 Jun, 2014
3 commits
-
* tools.properties ** Remove a superfluous '0' from the message number git-svn-id: https://svn.forgerock.org/opendj/trunk@10828 41b1ffd8-f28e-4786-ab96-9950f0a78031
-
* replication_fr.properties ** Replace the 'changelog insufficient privileges' error message number to match with the replication.properties file (285 will replace 283 old value) git-svn-id: https://svn.forgerock.org/opendj/trunk@10827 41b1ffd8-f28e-4786-ab96-9950f0a78031
-
* tools.properties ** Adding the description message of the upgrade task * Upgrade.java ** Upgrade task n° 2.7.0.10820 which add the 'changelog-read' value to the Root DNs default privilege list * ExternalChangeLogTest.java ** ChangeLog privilege unit test code refactoring to make it more compact ant more meaningful git-svn-id: https://svn.forgerock.org/opendj/trunk@10823 41b1ffd8-f28e-4786-ab96-9950f0a78031
20 Jun, 2014
1 commit
-
* config.ldiff ** Add the 'changelog-read' value to the 'ds-default-root-privilege-name' multi-valued attribute * GlobalConfiguration.xml RootDNConfiguration.xml ADSContext.java Privilege.java RootPrivilegeChangeListener.java ** Add the 'changelog-read' privilege where is was needed * GlobalCfgDefn.properties RootDNCfgDefn.properties ** Add 'changelog-read' privilege definition * replication.properties replication_fr.properties ** Add messages to prevent user that he needs to have the 'changelog-read' privilege if he wants to search on changelog * ECLSearchOperation.java ** Add a check to verify that the current connection has the 'changelog-read' privilege before starting the changelog search * ExternalChangeLogTest.java ** Unit test which ensure that is not possible to perform a changelog search without the 'changelog-read' privilege git-svn-id: https://svn.forgerock.org/opendj/trunk@10820 41b1ffd8-f28e-4786-ab96-9950f0a78031
17 Jun, 2014
1 commit
-
…ver from a previous failure CR-3768 * LogFile.java ** Add a check of file validity in constructor when log file is write-enabled ** Recover the file if it is corrupted (partially written record) by truncating it * BlockLogReader.java ** Add method checkLogIsValid() to check validity of file * replication.properties ** Add new messages related to check and recovery * LogFileTest.java ** Add tests for recovery after log file corruption * Minor changes in other files git-svn-id: https://svn.forgerock.org/opendj/trunk@10816 41b1ffd8-f28e-4786-ab96-9950f0a78031
12 Jun, 2014
1 commit
-
CR-3727 Implements read and write with blocks, to enable binary search. * New BlockLogReader class: read records sequentially or using binary search provided a key * New BlockLogWriter class: write records by blocks * New BlockLogReaderWriterTest class : tests read/write with blocks * Update LogFile : delegate responsibility for read/write to BlockLogXXX * Add method ByteStringBuilder#append(DataInput, int) to avoid byte array copy * Minor changes in other files git-svn-id: https://svn.forgerock.org/opendj/trunk@10805 41b1ffd8-f28e-4786-ab96-9950f0a78031
11 Jun, 2014
1 commit
-
…ing ReplicationBackend class Added upgrade tasks for: - Removing 'dc=replicationchanges' backend - Removing ACI for 'dc=replicationchanges' Upgrade.java: Registered upgrade tasks. UpgradeTasks.java: Added deleteConfigEntry(). Factorized code by extracting method perform0(). Fixed javadocs. UpgradeUtils.java: In updateConfigFile(), renamed lines parameter to ldifLines + changed String dn local variable to DN ldifDN + added support for deleting entries. tools.properties: Added messages for upgrade tasks. Fixed typos. admin_tool.properties: Fixed typos. SaltedMD5PasswordStorageSchemeTestCase.java: Removed unused import. git-svn-id: https://svn.forgerock.org/opendj/trunk@10800 41b1ffd8-f28e-4786-ab96-9950f0a78031
04 Jun, 2014
1 commit
-
replication topology with file-based changelog OPENDJ-1487 : File based changelog : cursors opened when clearing the log Log.java : * Ensure cursors opened on log are temporarily disabled before rotating the head (to avoid renaming the file while reader are opened on it) * Allow cursors to be opened on log when performing a clear on the log, turning them into empty cursors. git-svn-id: https://svn.forgerock.org/opendj/trunk@10778 41b1ffd8-f28e-4786-ab96-9950f0a78031
03 Jun, 2014
2 commits
-
git-svn-id: https://svn.forgerock.org/opendj/trunk@10774 41b1ffd8-f28e-4786-ab96-9950f0a78031
-
* File-based changelog Store the offline CSN when a replica goes offline Read the offline CSN if present to build the changelog state at startup Update ReplicationEnvironment.java to manage read and write from/to storage Update ReplicationEnvironmentTest.java with more unit tests Update replication.properties with new messages * File and JE based changelog Remove the offline CSN if present when receiving an heartbeat or an update message Update FileChangelogDB.java, JEChangelogDB.java, ReplicationDBEnv.java to manage online replica notification * Other minor updates : renaming, comments git-svn-id: https://svn.forgerock.org/opendj/trunk@10773 41b1ffd8-f28e-4786-ab96-9950f0a78031
21 May, 2014
1 commit
-
Implemented a log based on multiple log files * Add Log class that manage a log as a set of log files: ** it contains at least one log file, the head log file, where new records are appended ** it contains from zero to multiple read-only log files, issued from rotation of the head log file when it reaches a given size * Update LogFile class to act as part of a Log. * Add purging feature * Update other classes from file package with minor changes * Add unit tests for new Log class and purging feature * Update MeteredStream class to use it in changelog * Add new interface RotatableLogFile (to be used later by changelog) * Update Policy classes to use this new interface git-svn-id: https://svn.forgerock.org/opendj/trunk@10746 41b1ffd8-f28e-4786-ab96-9950f0a78031
14 May, 2014
1 commit
-
LDAPReplicationDomain.java: Changed numReplayedPostOpCalled field from int to AtomicInteger. Extracted methods newSet(), newList(), exists(), canRemoveAttribute(). Inlined getPendingUpdatesCount(), getNumReplayedPostOpCalled(), getNumResolvedModifyConflicts(), getNumResolvedNamingConflicts() and getNumUnresolvedNamingConflicts(). In contains(), changed parameter names. Added javadocs to instance variables. Reduced visibilities to default or private. Added braces to if statements. Used static imports. Fixed Eclipse warnings. Replaced unnecessary use of MessageBuilder by adding arguments to replication messages. replication*.properties: Modified messages to include arguments. PendingChanges.java: Updated copyright year after r10722. git-svn-id: https://svn.forgerock.org/opendj/trunk@10723 41b1ffd8-f28e-4786-ab96-9950f0a78031
07 May, 2014
1 commit
-
* Add new package org.opends.server.replication.server.changelog.file containing the log file implementation * The new package contains the following classes : ** Classes implementing the log - independant from changelog and built from scratch - LogFile : implementation of log based on a single file - LogWriter : writer for the log - LogReaderPool : pool of readers for the log - Record : a (key, value) log record - RecordParser : interface for the convertion from record to bytes and bytes to record - DecodingException : exception thrown when record decoding fails ** Classes implementing the changelog API, based on the log implementation. - FileChangelogDB - FileChangeNumberIndexDB - FileChangeNumberIndexDBCursor - FileReplicaDB - FileReplicaDBCursor - ReplicationEnvironment * Add unit tests for org.opends.server.replication.server.changelog.file package * Add new attribute 'ds-cfg-replication-db-implementation' in ds-cfg-replication-server (ServerReplicationConfig class), allowing to choose the db implementation to use for changelog in directory server: either je or log file. Default is 'je'. * Add new option 'org.opends.test.replicationDbImpl' for test target in build.xml to choose the db implementation to for changelog when running the tests. Default is 'log' (log file). * Update all replication unit tests to allow the selection of changelog db implementation to use in tests. * Fix the ReferentialIntegerityPluginTestCase to do better cleanup at end of test in order to avoid side-effect on other tests. git-svn-id: https://svn.forgerock.org/opendj/trunk@10713 41b1ffd8-f28e-4786-ab96-9950f0a78031
30 Apr, 2014
1 commit
-
Done. Removed a lot of code. Noticeable changes: ReplicationCliMain.java: Extracted a few methods to factorize code. GenerationIdTest.java: Please note the strange case of checkChangelogSize(). git-svn-id: https://svn.forgerock.org/opendj/trunk@10703 41b1ffd8-f28e-4786-ab96-9950f0a78031
28 Mar, 2014
1 commit
-
In JEReplicaDB, simplified the logic that handled the internal queue that is used before actually persisting UpdateMsg changes to the underlying Berkeley JE DB. Simplified the publisher/consumer model (msgQueue.add() / msgQueue.remove()) by relying on a LinkedBlockingQueue and a semaphore, instead of many synchronized blocks and fields that cluttered this code. JEReplicaDB.java: Changed msgQueue from LinkedList to LinkedBlockingQueue. Removed fields queueMaxSize, queueLowmark, queueHimark, queueLowmarkBytes, queueHimarkBytes, queueByteSize and replaced them all with queueSizeBytes Semaphore. Removed clearQueue() and getChanges(). Added collectAllPermits(). Added immutable CSNLimits class to remove the need for synchronizing on oldest and newest CSNs. ReplicationDB.java: In addEntries(), now return the total size of the persisted messages (return type was void). JEReplicaDBTest.java: In testTrim(), allowed the test to finish + made the code clearer. replication.properties: Added an error message for adding a change to the JEReplicaDB. git-svn-id: https://svn.forgerock.org/opendj/trunk@10601 41b1ffd8-f28e-4786-ab96-9950f0a78031
14 Mar, 2014
1 commit
-
git-svn-id: https://svn.forgerock.org/opendj/trunk@10540 41b1ffd8-f28e-4786-ab96-9950f0a78031
10 Mar, 2014
1 commit
-
(Changes review manually by Matthew Swift) git-svn-id: https://svn.forgerock.org/opendj/trunk@10515 41b1ffd8-f28e-4786-ab96-9950f0a78031
04 Mar, 2014
1 commit
-
git-svn-id: https://svn.forgerock.org/opendj/trunk@10471 41b1ffd8-f28e-4786-ab96-9950f0a78031
19 Feb, 2014
2 commits
-
Improved design for Replication Topology ReplicationBroker.java + *Test.java: Extracted the Topology class to encapsulate the dsList and replicationServerInfos fields + atomically set it via an AtomicReference + moved setLocallyConfiguredFlag(), isSameReplicationServerUrl(), computeConnectedDSs() to Topology class. Created methods computeNewTopology() and topologyChange() to compute and set the new topology. Removed generationID instance variable duplicated with the one from ReplicationDomain + updated ctor and setGenerationID(). Improved debugging messages. Renamed getDsList() to getReplicaInfos() + changed return type from List<DSInfo> to Map<Integer, DSInfo>. Renamed getRsList() to getRsInfos(). Extracted method toRSInfos(). ReplicationBrokerTest.java: ADDED Added to test new ReplicationBroker.Topology class. DSInfo.java: Changed equals(Set<String>, Set<String>) to equals(Object, Object). In toString(), hid the assured fields if assured replication is off. RSInfo.java: Renamed fields id and serverUrl to rsServerId and rsServerURL. In toString(), relied on the compiler to generate the String. TopologyMsg.java: Renamed fields dsList and rsList to replicaInfos and rsInfos. Renamed getDsList() to getReplicaInfos() + changed return type from List<DSInfo> to Map<Integer, DSInfo>. Renamed getRsList() to getRsInfos(). Extracted methods readStrings() and writeStrings(). Code cleanup Used javadocs ReplicationDomain.java, replication*.properties: Extracted class ECLIncludes to replace eclIncludesLock, eclIncludesByServer, eclIncludesAllServers, eclIncludesForDeletesByServer, eclIncludesForDeletesAllServers + moved setEclIncludes() implementation to this class + removed synchronized blocks from all the getters. Added baseDN to ERR_INIT_NO_SUCCESS_START_FROM_SERVERS. Inlined initializeRemote(). Removed unused initializeFromRemote(). Reduced methods visibility. Renamed getReplicaList() to getReplicaInfos() + changed return type from List<DSInfo> to Map<Integer, DSInfo>. Renamed getRsList() to getRsInfos(). In initializeRemote(), waitForRemoteEndOfInit(), isRemoteDSConnected() and getProtocolVersion(), simplified code. *.java: Consequence of the changes above. Simplified code in a number of places, particularly in the tests. git-svn-id: https://svn.forgerock.org/opendj/trunk@10405 41b1ffd8-f28e-4786-ab96-9950f0a78031
-
git-svn-id: https://svn.forgerock.org/opendj/trunk@10402 41b1ffd8-f28e-4786-ab96-9950f0a78031
31 Jan, 2014
1 commit
-
git-svn-id: https://svn.forgerock.org/opendj/trunk@10240 41b1ffd8-f28e-4786-ab96-9950f0a78031
30 Jan, 2014
1 commit
-
To do so, one will need to add an auxiliary objectclass in the password policy subentry and the mandatory ds-cfg-password-validator attribute (value is the DN of the validator in cn=config DIT). git-svn-id: https://svn.forgerock.org/opendj/trunk@10215 41b1ffd8-f28e-4786-ab96-9950f0a78031
28 Jan, 2014
1 commit
-
replication*.properties: Added exception stacktraces to NOTICE_READER_EXCEPTION_53. ServerReader.java: In run(), logged the stacktrace when calling logError(). Removed redundant call to logException() which logged to debug logger. Session.java: Extracted method read(). StaticUtils.java: In stackTraceToSingleLineString(), when this is not a debug build, added the exception type at the start of the message. StaticUtilsTest.java: ADDED git-svn-id: https://svn.forgerock.org/opendj/trunk@10202 41b1ffd8-f28e-4786-ab96-9950f0a78031
23 Jan, 2014
1 commit
-
git-svn-id: https://svn.forgerock.org/opendj/trunk@10174 41b1ffd8-f28e-4786-ab96-9950f0a78031
13 Jan, 2014
1 commit
-
git-svn-id: https://svn.forgerock.org/opendj/trunk@10133 41b1ffd8-f28e-4786-ab96-9950f0a78031
02 Jan, 2014
1 commit
-
git-svn-id: https://svn.forgerock.org/opendj/trunk@10068 41b1ffd8-f28e-4786-ab96-9950f0a78031
17 Dec, 2013
3 commits
-
Review of the approach: Matthew Swift Problem is caused by code deep into method calls that calls ReplicationServer.shutdown(). Thread 1 holds a lock on MessageHandler.msgQueue, an exception happens during processing and it then it calls ReplicationServer.shutdown() which then goes and tries to grab JEReplicaDB.msgQueue. Thread 2 holds a lock on JEReplicaDB.msgQueue and then tries to grab MessageHandler.msgQueue. The proper fix is to let the exceptions bubble up to the Thread.run() method, releasing all locks in the process, and call ReplicationServer.shutdown() from there. replication.properties Added stack traces to error messages. ReplicationServerDomain.java: Consequence of the change to the error messages, removed the use of MessageBuilder. JEUtils.java: ADDED Factorized all the code closing JE Transactions. DraftCNDB.java, JEChangeNumberIndexDB.java, ReplicationDB.java: Let ChangelogExceptions propagate up. Used JEUtils.abort(). Consequence of the change to the error messages, removed the use of MessageBuilder. JEReplicaDB.java: Handled ChangelogException bubbling up here. Extracted stop(Exception) method. ReplicationDbEnv.java removed one shutdownOnException() method. Inlined innerShutdownOnException(). Consequence of the change to the error messages, removed the use of MessageBuilder. git-svn-id: https://svn.forgerock.org/opendj/trunk@10018 41b1ffd8-f28e-4786-ab96-9950f0a78031
-
git-svn-id: https://svn.forgerock.org/opendj/trunk@10014 41b1ffd8-f28e-4786-ab96-9950f0a78031
-
Checkpoint commit that: - adds i18n - improves comments and javadocs - improved ServerState class to internally use a lock free implementation replication.properties: Added 2 error messages. ServerState.java: Made the implementation use ConcurrentMap + removed all synchronized blocks + significantly change the code in update(), removeCSN() and toString(). Removed getMaxCSN() (never used). ServerStateTest.java: Added asserts to testRemoveCSN(). git-svn-id: https://svn.forgerock.org/opendj/trunk@10007 41b1ffd8-f28e-4786-ab96-9950f0a78031