You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@directory.apache.org by el...@apache.org on 2009/01/09 18:52:41 UTC
svn commit: r733098 - in /directory/apacheds/trunk/mitosis/src:
main/java/org/apache/directory/mitosis/common/
main/java/org/apache/directory/mitosis/configuration/
main/java/org/apache/directory/mitosis/operation/
main/java/org/apache/directory/mitosi...
Author: elecharny
Date: Fri Jan 9 09:52:40 2009
New Revision: 733098
URL: http://svn.apache.org/viewvc?rev=733098&view=rev
Log:
o Removed the useless interfaces and renamed the DefaultCSN/DefaultCSNFactory to CSN/CSNFactory
o Used the CSN factory to create CSN except in the deserializer
o Switching some tests to use Junit 4.4
o Initialized the factory in the interceptor
o Added some javadoc
o Changed the Factory behavior : no more synchronization, as we now use volatile variables, and correct the CSN generation
Added:
directory/apacheds/trunk/mitosis/src/main/java/org/apache/directory/mitosis/common/CSN.java
- copied, changed from r732113, directory/apacheds/trunk/mitosis/src/main/java/org/apache/directory/mitosis/common/DefaultCSN.java
directory/apacheds/trunk/mitosis/src/main/java/org/apache/directory/mitosis/common/CSNFactory.java
- copied, changed from r732113, directory/apacheds/trunk/mitosis/src/main/java/org/apache/directory/mitosis/common/DefaultCSNFactory.java
directory/apacheds/trunk/mitosis/src/test/java/org/apache/directory/mitosis/common/CSNFactoryTest.java
- copied, changed from r732113, directory/apacheds/trunk/mitosis/src/test/java/org/apache/directory/mitosis/common/DefaultCSNFactoryTest.java
directory/apacheds/trunk/mitosis/src/test/java/org/apache/directory/mitosis/common/CSNTest.java
- copied, changed from r732113, directory/apacheds/trunk/mitosis/src/test/java/org/apache/directory/mitosis/common/DefaultCSNTest.java
Removed:
directory/apacheds/trunk/mitosis/src/main/java/org/apache/directory/mitosis/common/DefaultCSN.java
directory/apacheds/trunk/mitosis/src/main/java/org/apache/directory/mitosis/common/DefaultCSNFactory.java
directory/apacheds/trunk/mitosis/src/test/java/org/apache/directory/mitosis/common/DefaultCSNFactoryTest.java
directory/apacheds/trunk/mitosis/src/test/java/org/apache/directory/mitosis/common/DefaultCSNTest.java
Modified:
directory/apacheds/trunk/mitosis/src/main/java/org/apache/directory/mitosis/common/CSNVector.java
directory/apacheds/trunk/mitosis/src/main/java/org/apache/directory/mitosis/configuration/ReplicationConfiguration.java
directory/apacheds/trunk/mitosis/src/main/java/org/apache/directory/mitosis/operation/AddEntryOperation.java
directory/apacheds/trunk/mitosis/src/main/java/org/apache/directory/mitosis/operation/AttributeOperation.java
directory/apacheds/trunk/mitosis/src/main/java/org/apache/directory/mitosis/operation/CompositeOperation.java
directory/apacheds/trunk/mitosis/src/main/java/org/apache/directory/mitosis/operation/Operation.java
directory/apacheds/trunk/mitosis/src/main/java/org/apache/directory/mitosis/operation/OperationFactory.java
directory/apacheds/trunk/mitosis/src/main/java/org/apache/directory/mitosis/operation/support/EntryUtil.java
directory/apacheds/trunk/mitosis/src/main/java/org/apache/directory/mitosis/service/ReplicationInterceptor.java
directory/apacheds/trunk/mitosis/src/main/java/org/apache/directory/mitosis/service/protocol/codec/BeginLogEntriesAckMessageDecoder.java
directory/apacheds/trunk/mitosis/src/main/java/org/apache/directory/mitosis/service/protocol/handler/ReplicationClientContextHandler.java
directory/apacheds/trunk/mitosis/src/main/java/org/apache/directory/mitosis/service/protocol/handler/ReplicationServerContextHandler.java
directory/apacheds/trunk/mitosis/src/main/java/org/apache/directory/mitosis/store/derby/DerbyReplicationLogIterator.java
directory/apacheds/trunk/mitosis/src/main/java/org/apache/directory/mitosis/store/derby/DerbyReplicationStore.java
directory/apacheds/trunk/mitosis/src/test/java/org/apache/directory/mitosis/service/protocol/codec/BeginLogEntriesAckMessageCodecTest.java
directory/apacheds/trunk/mitosis/src/test/java/org/apache/directory/mitosis/service/protocol/codec/LogEntryMessageCodecTest.java
directory/apacheds/trunk/mitosis/src/test/java/org/apache/directory/mitosis/store/derby/DerbyReplicationStoreTest.java
Copied: directory/apacheds/trunk/mitosis/src/main/java/org/apache/directory/mitosis/common/CSN.java (from r732113, directory/apacheds/trunk/mitosis/src/main/java/org/apache/directory/mitosis/common/DefaultCSN.java)
URL: http://svn.apache.org/viewvc/directory/apacheds/trunk/mitosis/src/main/java/org/apache/directory/mitosis/common/CSN.java?p2=directory/apacheds/trunk/mitosis/src/main/java/org/apache/directory/mitosis/common/CSN.java&p1=directory/apacheds/trunk/mitosis/src/main/java/org/apache/directory/mitosis/common/DefaultCSN.java&r1=732113&r2=733098&rev=733098&view=diff
==============================================================================
--- directory/apacheds/trunk/mitosis/src/main/java/org/apache/directory/mitosis/common/DefaultCSN.java (original)
+++ directory/apacheds/trunk/mitosis/src/main/java/org/apache/directory/mitosis/common/CSN.java Fri Jan 9 09:52:40 2009
@@ -24,11 +24,30 @@
/**
- * A default implementation of {@link CSN}.
+ * Represents 'Change Sequence Number' in LDUP specification.
+ *
+ * A CSN is a composition of a timestamp, a replica ID and a
+ * operation sequence number.
+ *
+ * It's described in http://tools.ietf.org/html/draft-sermersheim-ldap-csn-02.
+ *
+ * The ASN.1 syntax is :
+ * <pre>
+ * ChangeSequenceNumber ::= SEQUENCE {
+ * time GeneralizedTime,
+ * timeCount INTEGER (0 .. MaxInt),
+ * replicaID UTF8String,
+ * changeCount INTEGER (0 .. MaxInt)
+ * }
+ * </pre>
+ *
+ * It distinguishes a change made on an object on a server,
+ * and if two operations take place during the same timeStamp,
+ * the operation sequence number makes those operations distinct.
*
* @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
*/
-public class DefaultCSN implements CSN, Serializable, Comparable<CSN>
+public class CSN implements Serializable, Comparable<CSN>
{
/**
* Declares the Serial Version Uid.
@@ -57,12 +76,13 @@
/**
* Creates a new instance.
+ * <b>This method should be used only for deserializing a CSN</b>
*
* @param timestamp GMT timestamp of modification
* @param replicaId Replica ID where modification occurred (<tt>[-_A-Za-z0-9]{1,16}</tt>)
* @param operationSequence Operation sequence
*/
- public DefaultCSN( long timestamp, String replicaId, int operationSequence )
+ public CSN( long timestamp, String replicaId, int operationSequence )
{
this.timestamp = timestamp;
this.replicaId = replicaId;
@@ -78,7 +98,7 @@
*
* @param value The String containing the CSN
*/
- public DefaultCSN( String value ) throws InvalidCSNException
+ public CSN( String value ) throws InvalidCSNException
{
assert value != null;
@@ -127,7 +147,7 @@
*
* @param value The byte array which contains the serialized CSN
*/
- public DefaultCSN( byte[] value )
+ /** Package protected */ CSN( byte[] value )
{
timestamp = ( ( long ) ( value[0] & 0x00FF ) << 56 ) | ( ( long ) ( value[1] & 0x00FF ) << 48 )
| ( ( long ) ( value[2] & 0x00FF ) << 40 ) | ( ( long ) ( value[3] & 0x00FF ) << 32 )
@@ -268,11 +288,6 @@
*/
public boolean equals( Object o )
{
- if ( o == null )
- {
- return false;
- }
-
if ( this == o )
{
return true;
@@ -285,8 +300,8 @@
CSN that = ( CSN ) o;
- return timestamp == that.getTimestamp() && replicaId.equals( that.getReplicaId() )
- && operationSequence == that.getOperationSequence();
+ return ( timestamp == that.getTimestamp() ) && ( replicaId.equals( that.getReplicaId() ) )
+ && ( operationSequence == that.getOperationSequence() );
}
Copied: directory/apacheds/trunk/mitosis/src/main/java/org/apache/directory/mitosis/common/CSNFactory.java (from r732113, directory/apacheds/trunk/mitosis/src/main/java/org/apache/directory/mitosis/common/DefaultCSNFactory.java)
URL: http://svn.apache.org/viewvc/directory/apacheds/trunk/mitosis/src/main/java/org/apache/directory/mitosis/common/CSNFactory.java?p2=directory/apacheds/trunk/mitosis/src/main/java/org/apache/directory/mitosis/common/CSNFactory.java&p1=directory/apacheds/trunk/mitosis/src/main/java/org/apache/directory/mitosis/common/DefaultCSNFactory.java&r1=732113&r2=733098&rev=733098&view=diff
==============================================================================
--- directory/apacheds/trunk/mitosis/src/main/java/org/apache/directory/mitosis/common/DefaultCSNFactory.java (original)
+++ directory/apacheds/trunk/mitosis/src/main/java/org/apache/directory/mitosis/common/CSNFactory.java Fri Jan 9 09:52:40 2009
@@ -21,17 +21,22 @@
/**
- * A default {@link CSNFactory} implementation.
+ * Generates a new {@link CSN}.
*
* @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
*/
-public class DefaultCSNFactory implements CSNFactory
+public class CSNFactory
{
- private static int operationSequence;
+ /** The last timestamp */
+ private static volatile long lastTimestamp;
+
+ /** The integer used to disambiguate CSN generated at the same time */
+ private static volatile int operationSequence;
- public DefaultCSNFactory()
+ public CSNFactory()
{
+ operationSequence = 0;
}
@@ -43,17 +48,49 @@
* @param replicaId Replica ID. ReplicaID must be 1-8 digit alphanumeric
* string.
*/
- public synchronized CSN newInstance( String replicaId )
+ public CSN newInstance( String replicaId )
{
long newTimestamp = System.currentTimeMillis();
- if ( operationSequence == Integer.MAX_VALUE )
+ // We will be able to generate 2 147 483 647 CSNs each 10 ms max
+ if ( lastTimestamp == newTimestamp )
{
- // Roll over when reaching the limit.
+ operationSequence ++;
+ }
+ else
+ {
+ lastTimestamp = newTimestamp;
operationSequence = 0;
}
- CSN newCSN = new DefaultCSN( newTimestamp, replicaId, operationSequence++ );
- return newCSN;
+ return new CSN( lastTimestamp, replicaId, operationSequence );
+ }
+
+
+
+
+ /**
+ * Returns a new {@link CSN} created from the given values.
+ *
+ * This method is <b>not</b> to be used except for test purposes.
+ *
+ * @param timestamp The timestamp to use
+ * @param replicaId Replica ID. ReplicaID must be 1-8 digit alphanumeric
+ * string.
+ * @param operationSequence The operation sequence to use
+ */
+ public CSN newInstance( long timestamp, String replicaId, int operationSequence )
+ {
+ return new CSN( timestamp, replicaId, operationSequence );
+ }
+ /**
+ * Generates a CSN used to purge data. Its replicaID is not associated
+ * to a server.
+ *
+ * @param expirationDate The time up to the first CSN we want to keep
+ */
+ public CSN newInstance( long expirationDate )
+ {
+ return new CSN( expirationDate, "ZZZZZZZZZZZZZZZZ", Integer.MAX_VALUE );
}
}
Modified: directory/apacheds/trunk/mitosis/src/main/java/org/apache/directory/mitosis/common/CSNVector.java
URL: http://svn.apache.org/viewvc/directory/apacheds/trunk/mitosis/src/main/java/org/apache/directory/mitosis/common/CSNVector.java?rev=733098&r1=733097&r2=733098&view=diff
==============================================================================
--- directory/apacheds/trunk/mitosis/src/main/java/org/apache/directory/mitosis/common/CSNVector.java (original)
+++ directory/apacheds/trunk/mitosis/src/main/java/org/apache/directory/mitosis/common/CSNVector.java Fri Jan 9 09:52:40 2009
@@ -83,6 +83,7 @@
public void setAllCSN( CSNVector vector )
{
Iterator<CSN> i = vector.csns.values().iterator();
+
while ( i.hasNext() )
{
setCSN( i.next() );
Modified: directory/apacheds/trunk/mitosis/src/main/java/org/apache/directory/mitosis/configuration/ReplicationConfiguration.java
URL: http://svn.apache.org/viewvc/directory/apacheds/trunk/mitosis/src/main/java/org/apache/directory/mitosis/configuration/ReplicationConfiguration.java?rev=733098&r1=733097&r2=733098&view=diff
==============================================================================
--- directory/apacheds/trunk/mitosis/src/main/java/org/apache/directory/mitosis/configuration/ReplicationConfiguration.java (original)
+++ directory/apacheds/trunk/mitosis/src/main/java/org/apache/directory/mitosis/configuration/ReplicationConfiguration.java Fri Jan 9 09:52:40 2009
@@ -31,7 +31,7 @@
import org.apache.directory.mitosis.common.CSN;
import org.apache.directory.mitosis.common.CSNFactory;
import org.apache.directory.mitosis.common.Replica;
-import org.apache.directory.mitosis.common.DefaultCSNFactory;
+import org.apache.directory.mitosis.common.CSNFactory;
import org.apache.directory.mitosis.service.ReplicationInterceptor;
import org.apache.directory.mitosis.store.ReplicationStore;
import org.apache.directory.mitosis.store.derby.DerbyReplicationStore;
@@ -69,7 +69,7 @@
private final Set<Replica> peerReplicas = new HashSet<Replica>();
/** Factories */
- private CSNFactory csnFactory = new DefaultCSNFactory();
+ private CSNFactory csnFactory = new CSNFactory();
private ReplicationStore store = new DerbyReplicationStore();
/** The longest period of time before a stored entry is removed from storage */
@@ -158,7 +158,7 @@
/**
* Returns the {@link CSNFactory} for generating {@link CSN}s.
- * The default factory is {@link DefaultCSNFactory}.
+ * The default factory is {@link CSNFactory}.
*/
public CSNFactory getCsnFactory()
{
@@ -168,7 +168,7 @@
/** +
* Sets the {@link CSNFactory} for generating {@link CSN}s.
- * The default factory is {@link DefaultCSNFactory}.
+ * The default factory is {@link CSNFactory}.
* @org.apache.xbean.Property hidden="true"
*/
public void setCsnFactory( CSNFactory csnFactory )
Modified: directory/apacheds/trunk/mitosis/src/main/java/org/apache/directory/mitosis/operation/AddEntryOperation.java
URL: http://svn.apache.org/viewvc/directory/apacheds/trunk/mitosis/src/main/java/org/apache/directory/mitosis/operation/AddEntryOperation.java?rev=733098&r1=733097&r2=733098&view=diff
==============================================================================
--- directory/apacheds/trunk/mitosis/src/main/java/org/apache/directory/mitosis/operation/AddEntryOperation.java (original)
+++ directory/apacheds/trunk/mitosis/src/main/java/org/apache/directory/mitosis/operation/AddEntryOperation.java Fri Jan 9 09:52:40 2009
@@ -21,6 +21,7 @@
import org.apache.directory.mitosis.common.CSN;
+import org.apache.directory.mitosis.common.CSNFactory;
import org.apache.directory.mitosis.operation.support.EntryUtil;
import org.apache.directory.mitosis.store.ReplicationStore;
import org.apache.directory.server.core.CoreSession;
@@ -92,10 +93,10 @@
* @param store not used... Just for inheritance sake.
* @param coreSession the current session
*/
- protected void applyOperation( PartitionNexus nexus, ReplicationStore store, CoreSession coreSession )
+ protected void applyOperation( PartitionNexus nexus, ReplicationStore store, CoreSession coreSession, CSNFactory csnFactory )
throws Exception
{
- if ( ! EntryUtil.isEntryUpdatable( coreSession, entry.getDn(), getCSN() ) )
+ if ( ! EntryUtil.isEntryUpdatable( csnFactory, coreSession, entry.getDn(), getCSN() ) )
{
return;
}
Modified: directory/apacheds/trunk/mitosis/src/main/java/org/apache/directory/mitosis/operation/AttributeOperation.java
URL: http://svn.apache.org/viewvc/directory/apacheds/trunk/mitosis/src/main/java/org/apache/directory/mitosis/operation/AttributeOperation.java?rev=733098&r1=733097&r2=733098&view=diff
==============================================================================
--- directory/apacheds/trunk/mitosis/src/main/java/org/apache/directory/mitosis/operation/AttributeOperation.java (original)
+++ directory/apacheds/trunk/mitosis/src/main/java/org/apache/directory/mitosis/operation/AttributeOperation.java Fri Jan 9 09:52:40 2009
@@ -26,6 +26,7 @@
import org.apache.directory.shared.ldap.entry.EntryAttribute;
import org.apache.directory.shared.ldap.name.LdapDN;
import org.apache.directory.mitosis.common.CSN;
+import org.apache.directory.mitosis.common.CSNFactory;
import org.apache.directory.mitosis.operation.support.EntryUtil;
import org.apache.directory.mitosis.store.ReplicationStore;
@@ -96,10 +97,10 @@
* @param store the replication storage
* @param coreSession the current session
*/
- protected final void applyOperation( PartitionNexus nexus, ReplicationStore store, CoreSession coreSession )
+ protected final void applyOperation( PartitionNexus nexus, ReplicationStore store, CoreSession coreSession, CSNFactory csnFactory )
throws Exception
{
- if ( ! EntryUtil.isEntryUpdatable( coreSession, dn, getCSN() ) )
+ if ( ! EntryUtil.isEntryUpdatable( csnFactory, coreSession, dn, getCSN() ) )
{
return;
}
Modified: directory/apacheds/trunk/mitosis/src/main/java/org/apache/directory/mitosis/operation/CompositeOperation.java
URL: http://svn.apache.org/viewvc/directory/apacheds/trunk/mitosis/src/main/java/org/apache/directory/mitosis/operation/CompositeOperation.java?rev=733098&r1=733097&r2=733098&view=diff
==============================================================================
--- directory/apacheds/trunk/mitosis/src/main/java/org/apache/directory/mitosis/operation/CompositeOperation.java (original)
+++ directory/apacheds/trunk/mitosis/src/main/java/org/apache/directory/mitosis/operation/CompositeOperation.java Fri Jan 9 09:52:40 2009
@@ -21,6 +21,7 @@
import org.apache.directory.mitosis.common.CSN;
+import org.apache.directory.mitosis.common.CSNFactory;
import org.apache.directory.mitosis.common.CSNVector;
import org.apache.directory.mitosis.configuration.ReplicationConfiguration;
import org.apache.directory.mitosis.store.ReplicationLogIterator;
@@ -204,13 +205,14 @@
* @param nexus the partition on which the modification will be done
* @param store the replication store
* @param coreSession the current session
+ * @param csnFactory The CSN Factory
*/
- protected void applyOperation( PartitionNexus nexus, ReplicationStore store, CoreSession coreSession )
+ protected void applyOperation( PartitionNexus nexus, ReplicationStore store, CoreSession coreSession, CSNFactory csnFactory )
throws Exception
{
for ( Operation op : children )
{
- op.execute( nexus, DUMMY_STORE, coreSession );
+ op.execute( nexus, DUMMY_STORE, coreSession, csnFactory );
}
}
Modified: directory/apacheds/trunk/mitosis/src/main/java/org/apache/directory/mitosis/operation/Operation.java
URL: http://svn.apache.org/viewvc/directory/apacheds/trunk/mitosis/src/main/java/org/apache/directory/mitosis/operation/Operation.java?rev=733098&r1=733097&r2=733098&view=diff
==============================================================================
--- directory/apacheds/trunk/mitosis/src/main/java/org/apache/directory/mitosis/operation/Operation.java (original)
+++ directory/apacheds/trunk/mitosis/src/main/java/org/apache/directory/mitosis/operation/Operation.java Fri Jan 9 09:52:40 2009
@@ -29,6 +29,7 @@
import javax.naming.OperationNotSupportedException;
import org.apache.directory.mitosis.common.CSN;
+import org.apache.directory.mitosis.common.CSNFactory;
import org.apache.directory.mitosis.common.Constants;
import org.apache.directory.mitosis.store.ReplicationStore;
import org.apache.directory.server.core.CoreSession;
@@ -72,10 +73,10 @@
/** The entry CSN */
protected CSN csn;
-
+
/** The operation type */
protected OperationType operationType;
-
+
/** A reference on the server registries */
protected Registries registries;
@@ -89,13 +90,13 @@
* @param registries the server registries
* @param operationType the operation type
*/
- /* no qualifier */ Operation( Registries registries, OperationType operationType )
+ /* no qualifier */Operation( Registries registries, OperationType operationType )
{
this.registries = registries;
this.operationType = operationType;
}
-
+
/**
* Creates a new instance of Operation, for the entry which
* csn is given as a parameter.
@@ -128,32 +129,34 @@
* @param nexus the partition nexus
* @param store the replication store
* @param coreSession the current session
+ * @param csnFactory The CSN Factory
*/
- public final void execute( PartitionNexus nexus, ReplicationStore store, CoreSession coreSession )
- throws Exception
+ public final void execute( PartitionNexus nexus, ReplicationStore store, CoreSession coreSession, CSNFactory csnFactory ) throws Exception
{
synchronized ( nexus )
{
- applyOperation( nexus, store, coreSession );
+ applyOperation( nexus, store, coreSession, csnFactory );
store.putLog( this );
}
}
+
/**
* Not supported. We should never call this method directly.
*
* @param nexus the partition nexus
* @param store the replication store
* @param coreSession the current session
+ * @param csnFactory The CSN Factory
* @throws Exception
*/
- protected void applyOperation( PartitionNexus nexus, ReplicationStore store, CoreSession coreSession )
- throws Exception
+ protected void applyOperation( PartitionNexus nexus, ReplicationStore store, CoreSession coreSession,
+ CSNFactory csnFactory ) throws Exception
{
throw new OperationNotSupportedException( nexus.getSuffixDn().toString() );
}
-
+
/**
* De-serialize an Attribute Operation
*
@@ -164,38 +167,38 @@
* @throws ClassNotFoundException
* @throws IOException
*/
- private static Operation readAttributeOperation( ObjectInput in, Registries registries,
- Operation operation ) throws ClassNotFoundException, IOException
+ private static Operation readAttributeOperation( ObjectInput in, Registries registries, Operation operation )
+ throws ClassNotFoundException, IOException
{
- AttributeOperation attributeOperation = (AttributeOperation)operation;
+ AttributeOperation attributeOperation = ( AttributeOperation ) operation;
// Read the DN
LdapDN dn = LdapDNSerializer.deserialize( in );
-
+
// Read the Attribute ID
String id = in.readUTF();
-
+
try
{
// Get the AttributeType
AttributeType at = registries.getAttributeTypeRegistry().lookup( id );
-
+
// De-serialize the attribute
DefaultServerAttribute attribute = new DefaultServerAttribute( id, at );
attribute.deserialize( in );
-
+
// Store the read data into the operation
attributeOperation.dn = dn;
- attributeOperation.attribute = attribute;
-
+ attributeOperation.attribute = attribute;
+
return operation;
}
catch ( NamingException ne )
{
- throw new IOException( "Cannot find the '" + id + "' attributeType" );
+ throw new IOException( "Cannot find the '" + id + "' attributeType" );
}
}
-
-
+
+
/**
* De-serialize an operation. This is a recursive method, as we may have
* composite operations.
@@ -206,92 +209,93 @@
* @throws ClassNotFoundException
* @throws IOException
*/
- public static Operation deserialize( Registries registries, ObjectInput in ) throws ClassNotFoundException, IOException
+ public static Operation deserialize( Registries registries, ObjectInput in ) throws ClassNotFoundException,
+ IOException
{
// Read the operation type
int opTypeValue = in.readInt();
OperationType opType = OperationType.get( opTypeValue );
-
+
// Read the CSN
- CSN csn = (CSN)in.readObject();
-
+ CSN csn = ( CSN ) in.readObject();
+
Operation operation = null;
switch ( opType )
{
- case ADD_ATTRIBUTE :
+ case ADD_ATTRIBUTE:
// Create a new AddAttribute operation
operation = new AddAttributeOperation( registries );
-
+
// Set the CSN
operation.csn = csn;
-
+
// Read it
readAttributeOperation( in, registries, operation );
-
+
return operation;
-
- case DELETE_ATTRIBUTE :
+
+ case DELETE_ATTRIBUTE:
// Create a new DeleteAttribute operation
operation = new DeleteAttributeOperation( registries );
-
+
// Set the CSN
operation.csn = csn;
-
+
// Read it
readAttributeOperation( in, registries, operation );
-
+
return operation;
-
- case REPLACE_ATTRIBUTE :
+
+ case REPLACE_ATTRIBUTE:
// Create a new ReplaceAttribute operation
operation = new ReplaceAttributeOperation( registries );
-
+
// Set the CSN
operation.csn = csn;
-
+
// Read it
readAttributeOperation( in, registries, operation );
-
+
return operation;
-
- case ADD_ENTRY :
+
+ case ADD_ENTRY:
// Create a new AddEntry operation
operation = new AddEntryOperation( registries );
-
+
// Set the CSN
operation.csn = csn;
-
+
DefaultServerEntry entry = new DefaultServerEntry( registries );
entry.deserialize( in );
- ((AddEntryOperation)operation).setEntry( entry );
-
+ ( ( AddEntryOperation ) operation ).setEntry( entry );
+
return operation;
-
- case COMPOSITE_OPERATION :
+
+ case COMPOSITE_OPERATION:
// Create a new Composite operation
operation = new CompositeOperation( registries );
-
+
// Set the CSN
operation.csn = csn;
// Read the number of operations to deserialize
int nbOperations = in.readInt();
-
+
for ( int i = 0; i < nbOperations; i++ )
{
Operation child = deserialize( registries, in );
child.csn = csn;
- ((CompositeOperation)operation).add( child );
+ ( ( CompositeOperation ) operation ).add( child );
}
-
+
return operation;
-
- default :
+
+ default:
throw new IOException( "Cannot read the unkown operation" );
}
}
-
+
/**
* Serialize an operation. This is a recursive method, as an operation
@@ -305,49 +309,49 @@
public static void serialize( Operation operation, ObjectOutput out ) throws ClassNotFoundException, IOException
{
OperationType opType = operation.operationType;
-
+
// Write the operation type
out.writeInt( opType.ordinal() );
-
+
// Write the CSN
out.writeObject( operation.csn );
-
+
switch ( opType )
{
- case REPLACE_ATTRIBUTE :
- case DELETE_ATTRIBUTE :
- case ADD_ATTRIBUTE :
- AttributeOperation attrOp = (AttributeOperation)operation;
-
+ case REPLACE_ATTRIBUTE:
+ case DELETE_ATTRIBUTE:
+ case ADD_ATTRIBUTE:
+ AttributeOperation attrOp = ( AttributeOperation ) operation;
+
// Write the DN
LdapDNSerializer.serialize( attrOp.dn, out );
-
+
// Write the attribute ID
- out.writeUTF( ((AttributeOperation)operation).attribute.getId() );
-
+ out.writeUTF( ( ( AttributeOperation ) operation ).attribute.getId() );
+
// Write the attribute
- DefaultServerAttribute attr = (DefaultServerAttribute)(attrOp.attribute);
+ DefaultServerAttribute attr = ( DefaultServerAttribute ) ( attrOp.attribute );
attr.serialize( out );
return;
-
- case ADD_ENTRY :
- ((DefaultServerEntry)((AddEntryOperation)operation).getEntry()).serialize( out );
+
+ case ADD_ENTRY:
+ ( ( DefaultServerEntry ) ( ( AddEntryOperation ) operation ).getEntry() ).serialize( out );
return;
-
- case COMPOSITE_OPERATION :
- out.writeInt( ((CompositeOperation)operation).size() );
-
+
+ case COMPOSITE_OPERATION:
+ out.writeInt( ( ( CompositeOperation ) operation ).size() );
+
// Loop on all the operations
- for ( Operation child:((CompositeOperation)operation).getChildren() )
+ for ( Operation child : ( ( CompositeOperation ) operation ).getChildren() )
{
serialize( child, out );
}
-
+
return;
}
}
-
-
+
+
/**
* Read the CSN from an input stream
*
@@ -357,17 +361,17 @@
*/
public void readExternal( ObjectInput in ) throws ClassNotFoundException, IOException
{
- csn = (CSN)in.readObject();
+ csn = ( CSN ) in.readObject();
}
-
-
+
+
/**
* Write the CSN to an output stream
*
* @param out the output stream in which the CSN is written
* @throws IOException if we can't write to the stream
*/
- public void writeExternal( ObjectOutput out) throws IOException
+ public void writeExternal( ObjectOutput out ) throws IOException
{
out.writeObject( csn );
}
Modified: directory/apacheds/trunk/mitosis/src/main/java/org/apache/directory/mitosis/operation/OperationFactory.java
URL: http://svn.apache.org/viewvc/directory/apacheds/trunk/mitosis/src/main/java/org/apache/directory/mitosis/operation/OperationFactory.java?rev=733098&r1=733097&r2=733098&view=diff
==============================================================================
--- directory/apacheds/trunk/mitosis/src/main/java/org/apache/directory/mitosis/operation/OperationFactory.java (original)
+++ directory/apacheds/trunk/mitosis/src/main/java/org/apache/directory/mitosis/operation/OperationFactory.java Fri Jan 9 09:52:40 2009
@@ -114,6 +114,8 @@
/**
* Creates a new {@link Operation} that performs LDAP "add" operation
* with a newly generated {@link CSN}.
+ *
+ * @param normalizedName The entry DN
*/
public Operation newAdd( LdapDN normalizedName, ServerEntry entry ) throws Exception
{
@@ -134,8 +136,6 @@
// Insert 'entryUUID' and 'entryDeleted'.
ServerEntry cloneEntry = ( ServerEntry ) entry.clone();
- cloneEntry.removeAttributes( ApacheSchemaConstants.ENTRY_UUID_AT );
- cloneEntry.removeAttributes( ApacheSchemaConstants.ENTRY_DELETED_AT );
cloneEntry.put( ApacheSchemaConstants.ENTRY_UUID_AT, UUID.randomUUID().toString() );
cloneEntry.put( ApacheSchemaConstants.ENTRY_DELETED_AT, "FALSE" );
Modified: directory/apacheds/trunk/mitosis/src/main/java/org/apache/directory/mitosis/operation/support/EntryUtil.java
URL: http://svn.apache.org/viewvc/directory/apacheds/trunk/mitosis/src/main/java/org/apache/directory/mitosis/operation/support/EntryUtil.java?rev=733098&r1=733097&r2=733098&view=diff
==============================================================================
--- directory/apacheds/trunk/mitosis/src/main/java/org/apache/directory/mitosis/operation/support/EntryUtil.java (original)
+++ directory/apacheds/trunk/mitosis/src/main/java/org/apache/directory/mitosis/operation/support/EntryUtil.java Fri Jan 9 09:52:40 2009
@@ -36,14 +36,13 @@
import org.apache.directory.shared.ldap.util.NamespaceTools;
import org.apache.directory.shared.ldap.util.StringTools;
import org.apache.directory.mitosis.common.CSN;
-import org.apache.directory.mitosis.common.Constants;
-import org.apache.directory.mitosis.common.DefaultCSN;
+import org.apache.directory.mitosis.common.CSNFactory;
public class EntryUtil
{
@SuppressWarnings("unchecked")
- public static boolean isEntryUpdatable( CoreSession coreSession, LdapDN name, CSN newCSN )
+ public static boolean isEntryUpdatable( CSNFactory csnFactory, CoreSession coreSession, LdapDN name, CSN newCSN )
throws Exception
{
PartitionNexus nexus = coreSession.getDirectoryService().getPartitionNexus();
@@ -71,11 +70,11 @@
if ( val instanceof byte[] )
{
- oldCSN = new DefaultCSN( StringTools.utf8ToString( (byte[])val ) );
+ oldCSN = csnFactory.newInstance( StringTools.utf8ToString( (byte[])val ) );
}
else
{
- oldCSN = new DefaultCSN( (String)val );
+ oldCSN = csnFactory.newInstance( (String)val );
}
}
catch ( IllegalArgumentException e )
Modified: directory/apacheds/trunk/mitosis/src/main/java/org/apache/directory/mitosis/service/ReplicationInterceptor.java
URL: http://svn.apache.org/viewvc/directory/apacheds/trunk/mitosis/src/main/java/org/apache/directory/mitosis/service/ReplicationInterceptor.java?rev=733098&r1=733097&r2=733098&view=diff
==============================================================================
--- directory/apacheds/trunk/mitosis/src/main/java/org/apache/directory/mitosis/service/ReplicationInterceptor.java (original)
+++ directory/apacheds/trunk/mitosis/src/main/java/org/apache/directory/mitosis/service/ReplicationInterceptor.java Fri Jan 9 09:52:40 2009
@@ -21,8 +21,8 @@
import org.apache.directory.mitosis.common.CSN;
+import org.apache.directory.mitosis.common.CSNFactory;
import org.apache.directory.mitosis.common.Constants;
-import org.apache.directory.mitosis.common.DefaultCSN;
import org.apache.directory.mitosis.configuration.ReplicationConfiguration;
import org.apache.directory.mitosis.operation.Operation;
import org.apache.directory.mitosis.operation.OperationFactory;
@@ -158,15 +158,30 @@
*/
private String name = DEFAULT_SERVICE_NAME;
+ /** The Directory service instance */
private DirectoryService directoryService;
- private ReplicationConfiguration configuration;
+
+ /** The registries */
+ private Registries registries;
+
+ /** The directory nexus */
private PartitionNexus nexus;
+
+ /** A reference to the replication configuration */
+ private ReplicationConfiguration configuration;
+
+
private OperationFactory operationFactory;
private ReplicationStore store;
private NioSocketAcceptor registry;
private final ClientConnectionManager clientConnectionManager = new ClientConnectionManager( this );
- private Registries registries;
+ /** A unique CSN factory instance */
+ private CSNFactory csnFactory;
+
+
+ /** Stores the number of milli seconds per day */
+ private static final long MS_PER_DAY = 24L * 60L * 60L * 1000L;
/**
* Creates a new instance of ReplicationInterceptor.
@@ -229,6 +244,10 @@
// Initialize store and service
store.open( directoryService, configuration );
boolean serviceStarted = false;
+
+ // Create the CSN factory
+ csnFactory = new CSNFactory();
+
try
{
startNetworking();
@@ -331,9 +350,9 @@
throw new NamingException( "No namingContexts attributes in rootDSE." );
}
- CSN purgeCSN = new DefaultCSN( System.currentTimeMillis() - configuration.getLogMaxAge() * 1000L * 60L * 60L
- * 24L, // convert days to millis
- "ZZZZZZZZZZZZZZZZ", Integer.MAX_VALUE );
+ long timeout = System.currentTimeMillis() - configuration.getLogMaxAge() * MS_PER_DAY;
+ CSN purgeCSN = csnFactory.newInstance( timeout );
+
ExprNode filter;
try
@@ -418,7 +437,7 @@
{
Operation op = operationFactory.newAdd(
addContext.getDn(), addContext.getEntry() );
- op.execute( nexus, store, addContext.getSession() );
+ op.execute( nexus, store, addContext.getSession(), csnFactory );
}
@@ -426,14 +445,14 @@
public void delete( NextInterceptor next, DeleteOperationContext deleteContext ) throws Exception
{
Operation op = operationFactory.newDelete( deleteContext.getDn() );
- op.execute( nexus, store, deleteContext.getSession() );
+ op.execute( nexus, store, deleteContext.getSession(), csnFactory );
}
public void modify( NextInterceptor next, ModifyOperationContext modifyContext ) throws Exception
{
Operation op = operationFactory.newModify( modifyContext );
- op.execute( nexus, store, modifyContext.getSession() );
+ op.execute( nexus, store, modifyContext.getSession(), csnFactory );
}
@@ -441,7 +460,7 @@
public void move( NextInterceptor next, MoveOperationContext moveOpContext ) throws Exception
{
Operation op = operationFactory.newMove( moveOpContext.getDn(), moveOpContext.getParent() );
- op.execute( nexus, store, moveOpContext.getSession() );
+ op.execute( nexus, store, moveOpContext.getSession(), csnFactory );
}
@@ -451,7 +470,7 @@
Operation op = operationFactory.newMove( moveAndRenameOpContext.getDn(),
moveAndRenameOpContext.getParent(), moveAndRenameOpContext.getNewRdn(),
moveAndRenameOpContext.getDelOldDn() );
- op.execute( nexus, store, moveAndRenameOpContext.getSession() );
+ op.execute( nexus, store, moveAndRenameOpContext.getSession(), csnFactory );
}
@@ -459,7 +478,7 @@
public void rename( NextInterceptor next, RenameOperationContext renameOpContext ) throws Exception
{
Operation op = operationFactory.newModifyRn( renameOpContext.getDn(), renameOpContext.getNewRdn(), renameOpContext.getDelOldDn() );
- op.execute( nexus, store, renameOpContext.getSession() );
+ op.execute( nexus, store, renameOpContext.getSession(), csnFactory );
}
@@ -581,7 +600,16 @@
return entry.contains( ApacheSchemaConstants.ENTRY_DELETED_AT, "TRUE" );
}
+
+ /**
+ * @return The CSNFactory
+ */
+ public CSNFactory getCsnFactory()
+ {
+ return csnFactory;
+ }
+
public DirectoryService getDirectoryService()
{
return directoryService;
Modified: directory/apacheds/trunk/mitosis/src/main/java/org/apache/directory/mitosis/service/protocol/codec/BeginLogEntriesAckMessageDecoder.java
URL: http://svn.apache.org/viewvc/directory/apacheds/trunk/mitosis/src/main/java/org/apache/directory/mitosis/service/protocol/codec/BeginLogEntriesAckMessageDecoder.java?rev=733098&r1=733097&r2=733098&view=diff
==============================================================================
--- directory/apacheds/trunk/mitosis/src/main/java/org/apache/directory/mitosis/service/protocol/codec/BeginLogEntriesAckMessageDecoder.java (original)
+++ directory/apacheds/trunk/mitosis/src/main/java/org/apache/directory/mitosis/service/protocol/codec/BeginLogEntriesAckMessageDecoder.java Fri Jan 9 09:52:40 2009
@@ -25,7 +25,7 @@
import java.nio.charset.CharsetDecoder;
import org.apache.directory.mitosis.common.CSNVector;
-import org.apache.directory.mitosis.common.DefaultCSN;
+import org.apache.directory.mitosis.common.CSN;
import org.apache.directory.mitosis.service.protocol.Constants;
import org.apache.directory.mitosis.service.protocol.message.BaseMessage;
import org.apache.directory.mitosis.service.protocol.message.BeginLogEntriesAckMessage;
@@ -87,7 +87,7 @@
throw new ProtocolDecoderException( "Invalid replicaId", e );
}
- updateVector.setCSN( new DefaultCSN( in.getLong(), replicaId, in.getInt() ) );
+ updateVector.setCSN( new CSN( in.getLong(), replicaId, in.getInt() ) );
}
}
Modified: directory/apacheds/trunk/mitosis/src/main/java/org/apache/directory/mitosis/service/protocol/handler/ReplicationClientContextHandler.java
URL: http://svn.apache.org/viewvc/directory/apacheds/trunk/mitosis/src/main/java/org/apache/directory/mitosis/service/protocol/handler/ReplicationClientContextHandler.java?rev=733098&r1=733097&r2=733098&view=diff
==============================================================================
--- directory/apacheds/trunk/mitosis/src/main/java/org/apache/directory/mitosis/service/protocol/handler/ReplicationClientContextHandler.java (original)
+++ directory/apacheds/trunk/mitosis/src/main/java/org/apache/directory/mitosis/service/protocol/handler/ReplicationClientContextHandler.java Fri Jan 9 09:52:40 2009
@@ -22,7 +22,6 @@
import org.apache.directory.mitosis.common.CSN;
import org.apache.directory.mitosis.common.CSNVector;
-import org.apache.directory.mitosis.common.DefaultCSN;
import org.apache.directory.mitosis.common.Replica;
import org.apache.directory.mitosis.configuration.ReplicationConfiguration;
import org.apache.directory.mitosis.operation.AddEntryOperation;
@@ -422,11 +421,11 @@
if ( val instanceof byte[] )
{
- csn = new DefaultCSN( StringTools.utf8ToString( ( byte[] ) val ) );
+ csn = new CSN( StringTools.utf8ToString( ( byte[] ) val ) );
}
else
{
- csn = new DefaultCSN( ( String ) val );
+ csn = new CSN( ( String ) val );
}
}
catch ( IllegalArgumentException ex )
Modified: directory/apacheds/trunk/mitosis/src/main/java/org/apache/directory/mitosis/service/protocol/handler/ReplicationServerContextHandler.java
URL: http://svn.apache.org/viewvc/directory/apacheds/trunk/mitosis/src/main/java/org/apache/directory/mitosis/service/protocol/handler/ReplicationServerContextHandler.java?rev=733098&r1=733097&r2=733098&view=diff
==============================================================================
--- directory/apacheds/trunk/mitosis/src/main/java/org/apache/directory/mitosis/service/protocol/handler/ReplicationServerContextHandler.java (original)
+++ directory/apacheds/trunk/mitosis/src/main/java/org/apache/directory/mitosis/service/protocol/handler/ReplicationServerContextHandler.java Fri Jan 9 09:52:40 2009
@@ -20,10 +20,12 @@
package org.apache.directory.mitosis.service.protocol.handler;
+import org.apache.directory.mitosis.common.CSNFactory;
import org.apache.directory.mitosis.common.CSNVector;
import org.apache.directory.mitosis.common.Replica;
import org.apache.directory.mitosis.operation.Operation;
import org.apache.directory.mitosis.service.ReplicationContext;
+import org.apache.directory.mitosis.service.ReplicationInterceptor;
import org.apache.directory.mitosis.service.ReplicationContext.State;
import org.apache.directory.mitosis.service.protocol.Constants;
import org.apache.directory.mitosis.service.protocol.message.BeginLogEntriesAckMessage;
@@ -35,6 +37,8 @@
import org.apache.directory.mitosis.service.protocol.message.LoginAckMessage;
import org.apache.directory.mitosis.service.protocol.message.LoginMessage;
import org.apache.directory.mitosis.store.ReplicationStore;
+import org.apache.directory.server.core.DirectoryService;
+import org.apache.directory.server.core.interceptor.Interceptor;
import org.apache.mina.core.session.IdleStatus;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -193,10 +197,14 @@
Operation op = message.getOperation();
LogEntryAckMessage ack = null;
+
try
{
- op.execute( ctx.getDirectoryService().getPartitionNexus(), ctx.getConfiguration().getStore(),
- ctx.getDirectoryService().getSession() );
+ DirectoryService directoryService = ctx.getDirectoryService();
+ Interceptor interceptorInstance = directoryService.getInterceptor( ReplicationInterceptor.class.getName() );
+ CSNFactory csnFactory = ((ReplicationInterceptor)interceptorInstance).getCsnFactory();
+ op.execute( directoryService.getPartitionNexus(), ctx.getConfiguration().getStore(),
+ directoryService.getSession(), csnFactory );
ack = new LogEntryAckMessage( message.getSequence(), Constants.OK );
}
Modified: directory/apacheds/trunk/mitosis/src/main/java/org/apache/directory/mitosis/store/derby/DerbyReplicationLogIterator.java
URL: http://svn.apache.org/viewvc/directory/apacheds/trunk/mitosis/src/main/java/org/apache/directory/mitosis/store/derby/DerbyReplicationLogIterator.java?rev=733098&r1=733097&r2=733098&view=diff
==============================================================================
--- directory/apacheds/trunk/mitosis/src/main/java/org/apache/directory/mitosis/store/derby/DerbyReplicationLogIterator.java (original)
+++ directory/apacheds/trunk/mitosis/src/main/java/org/apache/directory/mitosis/store/derby/DerbyReplicationLogIterator.java Fri Jan 9 09:52:40 2009
@@ -26,7 +26,7 @@
import java.sql.Statement;
import org.apache.directory.mitosis.common.CSN;
-import org.apache.directory.mitosis.common.DefaultCSN;
+import org.apache.directory.mitosis.common.CSN;
import org.apache.directory.mitosis.operation.Operation;
import org.apache.directory.mitosis.operation.OperationCodec;
import org.apache.directory.mitosis.store.ReplicationLogIterator;
@@ -77,7 +77,7 @@
String replicaId = rs.getString( 1 );
long timestamp = rs.getLong( 2 );
int operationSequence = rs.getInt( 3 );
- return new DefaultCSN( timestamp, replicaId, operationSequence );
+ return new CSN( timestamp, replicaId, operationSequence );
}
catch ( Exception e )
{
Modified: directory/apacheds/trunk/mitosis/src/main/java/org/apache/directory/mitosis/store/derby/DerbyReplicationStore.java
URL: http://svn.apache.org/viewvc/directory/apacheds/trunk/mitosis/src/main/java/org/apache/directory/mitosis/store/derby/DerbyReplicationStore.java?rev=733098&r1=733097&r2=733098&view=diff
==============================================================================
--- directory/apacheds/trunk/mitosis/src/main/java/org/apache/directory/mitosis/store/derby/DerbyReplicationStore.java (original)
+++ directory/apacheds/trunk/mitosis/src/main/java/org/apache/directory/mitosis/store/derby/DerbyReplicationStore.java Fri Jan 9 09:52:40 2009
@@ -23,7 +23,6 @@
import org.apache.commons.dbcp.BasicDataSource;
import org.apache.directory.mitosis.common.CSN;
import org.apache.directory.mitosis.common.CSNVector;
-import org.apache.directory.mitosis.common.DefaultCSN;
import org.apache.directory.mitosis.configuration.ReplicationConfiguration;
import org.apache.directory.mitosis.operation.Operation;
import org.apache.directory.mitosis.operation.OperationCodec;
@@ -550,7 +549,7 @@
{
for ( String knownReplicaId : knownReplicaIds )
{
- newUV.setCSN( new DefaultCSN( 0, knownReplicaId, 0 ) );
+ newUV.setCSN( new CSN( 0, knownReplicaId, 0 ) );
}
}
@@ -717,7 +716,7 @@
if ( rs.next() )
{
- result.setCSN( new DefaultCSN( rs.getLong( 1 ), replicaId, rs.getInt( 2 ) ) );
+ result.setCSN( new CSN( rs.getLong( 1 ), replicaId, rs.getInt( 2 ) ) );
}
rs.close();
Copied: directory/apacheds/trunk/mitosis/src/test/java/org/apache/directory/mitosis/common/CSNFactoryTest.java (from r732113, directory/apacheds/trunk/mitosis/src/test/java/org/apache/directory/mitosis/common/DefaultCSNFactoryTest.java)
URL: http://svn.apache.org/viewvc/directory/apacheds/trunk/mitosis/src/test/java/org/apache/directory/mitosis/common/CSNFactoryTest.java?p2=directory/apacheds/trunk/mitosis/src/test/java/org/apache/directory/mitosis/common/CSNFactoryTest.java&p1=directory/apacheds/trunk/mitosis/src/test/java/org/apache/directory/mitosis/common/DefaultCSNFactoryTest.java&r1=732113&r2=733098&rev=733098&view=diff
==============================================================================
--- directory/apacheds/trunk/mitosis/src/test/java/org/apache/directory/mitosis/common/DefaultCSNFactoryTest.java (original)
+++ directory/apacheds/trunk/mitosis/src/test/java/org/apache/directory/mitosis/common/CSNFactoryTest.java Fri Jan 9 09:52:40 2009
@@ -29,7 +29,7 @@
*
* @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
*/
-public class DefaultCSNFactoryTest extends TestCase
+public class CSNFactoryTest extends TestCase
{
private static final int NUM_GENERATES = 10;
@@ -41,7 +41,7 @@
public void testUnique()
{
String replicaID = "test";
- DefaultCSNFactory defaultCSNFactory = new DefaultCSNFactory();
+ CSNFactory defaultCSNFactory = new CSNFactory();
CSN[] csns = new CSN[NUM_GENERATES];
Copied: directory/apacheds/trunk/mitosis/src/test/java/org/apache/directory/mitosis/common/CSNTest.java (from r732113, directory/apacheds/trunk/mitosis/src/test/java/org/apache/directory/mitosis/common/DefaultCSNTest.java)
URL: http://svn.apache.org/viewvc/directory/apacheds/trunk/mitosis/src/test/java/org/apache/directory/mitosis/common/CSNTest.java?p2=directory/apacheds/trunk/mitosis/src/test/java/org/apache/directory/mitosis/common/CSNTest.java&p1=directory/apacheds/trunk/mitosis/src/test/java/org/apache/directory/mitosis/common/DefaultCSNTest.java&r1=732113&r2=733098&rev=733098&view=diff
==============================================================================
--- directory/apacheds/trunk/mitosis/src/test/java/org/apache/directory/mitosis/common/DefaultCSNTest.java (original)
+++ directory/apacheds/trunk/mitosis/src/test/java/org/apache/directory/mitosis/common/CSNTest.java Fri Jan 9 09:52:40 2009
@@ -20,23 +20,28 @@
package org.apache.directory.mitosis.common;
-import junit.framework.TestCase;
+import org.junit.Test;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.fail;
/**
*
- * Test for the SimpleCSN class
+ * Test for the CSN class
*
* @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
*/
-public class DefaultCSNTest extends TestCase
+public class CSNTest
{
+ @Test
public void testCSN()
{
long ts = System.currentTimeMillis();
- CSN csn = new DefaultCSN( Long.toString( ts, 16 ) + ":abcdefghi0123:" + 1 );
+ CSN csn = new CSN( Long.toString( ts, 16 ) + ":abcdefghi0123:" + 1 );
assertEquals( ts, csn.getTimestamp() );
assertEquals( 1, csn.getOperationSequence() );
@@ -44,11 +49,12 @@
}
+ @Test
public void testCSNEmpty()
{
try
{
- new DefaultCSN( "" );
+ new CSN( "" );
fail();
}
catch ( AssertionError ae )
@@ -62,11 +68,12 @@
}
+ @Test
public void testCSNTSOnly()
{
try
{
- new DefaultCSN( "123" );
+ new CSN( "123" );
fail();
}
catch ( AssertionError ae )
@@ -80,11 +87,12 @@
}
+ @Test
public void testCSNInvalidTS()
{
try
{
- new DefaultCSN( "zzz:abc:1" );
+ new CSN( "zzz:abc:1" );
fail();
}
catch ( AssertionError ae )
@@ -98,11 +106,12 @@
}
+ @Test
public void testCSNNoTS()
{
try
{
- new DefaultCSN( ":abc:1" );
+ new CSN( ":abc:1" );
fail();
}
catch ( AssertionError ae )
@@ -116,11 +125,12 @@
}
+ @Test
public void testCSNInavlidReplica()
{
try
{
- new DefaultCSN( "123:*:1" );
+ new CSN( "123:*:1" );
fail();
}
catch ( AssertionError ae )
@@ -134,11 +144,12 @@
}
+ @Test
public void testCSNNoReplica()
{
try
{
- new DefaultCSN( "123::1" );
+ new CSN( "123::1" );
fail();
}
catch ( AssertionError ae )
@@ -152,11 +163,12 @@
}
+ @Test
public void testCSNInavlidOpSeq()
{
try
{
- new DefaultCSN( "123:abc:zzz" );
+ new CSN( "123:abc:zzz" );
fail();
}
catch ( AssertionError ae )
@@ -170,11 +182,12 @@
}
+ @Test
public void testCSNEmptyOpSeq()
{
try
{
- new DefaultCSN( "123:abc:" );
+ new CSN( "123:abc:" );
fail();
}
catch ( AssertionError ae )
@@ -188,11 +201,12 @@
}
+ @Test
public void testCSNNoOpSeq()
{
try
{
- new DefaultCSN( "123:abc" );
+ new CSN( "123:abc" );
fail();
}
catch ( AssertionError ae )
@@ -206,9 +220,10 @@
}
+ @Test
public void testCSNToBytes()
{
- CSN csn = new DefaultCSN( "0123456789abcdef:test:5678cdef" );
+ CSN csn = new CSN( "0123456789abcdef:test:5678cdef" );
byte[] bytes = csn.toBytes();
@@ -227,7 +242,7 @@
assertEquals( "test", new String( bytes, 12, bytes.length - 12 ) );
- CSN deserializedCSN = new DefaultCSN( bytes );
+ CSN deserializedCSN = new CSN( bytes );
assertEquals( csn, deserializedCSN );
}
}
Modified: directory/apacheds/trunk/mitosis/src/test/java/org/apache/directory/mitosis/service/protocol/codec/BeginLogEntriesAckMessageCodecTest.java
URL: http://svn.apache.org/viewvc/directory/apacheds/trunk/mitosis/src/test/java/org/apache/directory/mitosis/service/protocol/codec/BeginLogEntriesAckMessageCodecTest.java?rev=733098&r1=733097&r2=733098&view=diff
==============================================================================
--- directory/apacheds/trunk/mitosis/src/test/java/org/apache/directory/mitosis/service/protocol/codec/BeginLogEntriesAckMessageCodecTest.java (original)
+++ directory/apacheds/trunk/mitosis/src/test/java/org/apache/directory/mitosis/service/protocol/codec/BeginLogEntriesAckMessageCodecTest.java Fri Jan 9 09:52:40 2009
@@ -20,8 +20,8 @@
package org.apache.directory.mitosis.service.protocol.codec;
+import org.apache.directory.mitosis.common.CSNFactory;
import org.apache.directory.mitosis.common.CSNVector;
-import org.apache.directory.mitosis.common.DefaultCSN;
import org.apache.directory.mitosis.service.protocol.Constants;
import org.apache.directory.mitosis.service.protocol.codec.BeginLogEntriesAckMessageDecoder;
import org.apache.directory.mitosis.service.protocol.codec.BeginLogEntriesAckMessageEncoder;
@@ -33,18 +33,19 @@
private static final CSNVector PURGE_VECTOR = new CSNVector();
private static final CSNVector UPDATE_VECTOR = new CSNVector();
+ private static CSNFactory csnFactory = new CSNFactory();
static
{
- PURGE_VECTOR.setCSN( new DefaultCSN( System.currentTimeMillis() - 400, "replica0", 3456 ) );
- PURGE_VECTOR.setCSN( new DefaultCSN( System.currentTimeMillis() - 300, "replica1", 9012 ) );
- PURGE_VECTOR.setCSN( new DefaultCSN( System.currentTimeMillis() - 200, "replica2", 5678 ) );
- PURGE_VECTOR.setCSN( new DefaultCSN( System.currentTimeMillis() - 100, "replica3", 1234 ) );
-
- UPDATE_VECTOR.setCSN( new DefaultCSN( System.currentTimeMillis() + 000, "replica0", 1234 ) );
- UPDATE_VECTOR.setCSN( new DefaultCSN( System.currentTimeMillis() + 100, "replica1", 5678 ) );
- UPDATE_VECTOR.setCSN( new DefaultCSN( System.currentTimeMillis() + 200, "replica2", 9012 ) );
- UPDATE_VECTOR.setCSN( new DefaultCSN( System.currentTimeMillis() + 300, "replica3", 3456 ) );
+ PURGE_VECTOR.setCSN( csnFactory.newInstance( System.currentTimeMillis() - 400, "replica0", 3456 ) );
+ PURGE_VECTOR.setCSN( csnFactory.newInstance( System.currentTimeMillis() - 300, "replica1", 9012 ) );
+ PURGE_VECTOR.setCSN( csnFactory.newInstance( System.currentTimeMillis() - 200, "replica2", 5678 ) );
+ PURGE_VECTOR.setCSN( csnFactory.newInstance( System.currentTimeMillis() - 100, "replica3", 1234 ) );
+
+ UPDATE_VECTOR.setCSN( csnFactory.newInstance( System.currentTimeMillis() + 000, "replica0", 1234 ) );
+ UPDATE_VECTOR.setCSN( csnFactory.newInstance( System.currentTimeMillis() + 100, "replica1", 5678 ) );
+ UPDATE_VECTOR.setCSN( csnFactory.newInstance( System.currentTimeMillis() + 200, "replica2", 9012 ) );
+ UPDATE_VECTOR.setCSN( csnFactory.newInstance( System.currentTimeMillis() + 300, "replica3", 3456 ) );
}
Modified: directory/apacheds/trunk/mitosis/src/test/java/org/apache/directory/mitosis/service/protocol/codec/LogEntryMessageCodecTest.java
URL: http://svn.apache.org/viewvc/directory/apacheds/trunk/mitosis/src/test/java/org/apache/directory/mitosis/service/protocol/codec/LogEntryMessageCodecTest.java?rev=733098&r1=733097&r2=733098&view=diff
==============================================================================
--- directory/apacheds/trunk/mitosis/src/test/java/org/apache/directory/mitosis/service/protocol/codec/LogEntryMessageCodecTest.java (original)
+++ directory/apacheds/trunk/mitosis/src/test/java/org/apache/directory/mitosis/service/protocol/codec/LogEntryMessageCodecTest.java Fri Jan 9 09:52:40 2009
@@ -26,7 +26,7 @@
import javax.naming.InvalidNameException;
import javax.naming.NamingException;
-import org.apache.directory.mitosis.common.DefaultCSN;
+import org.apache.directory.mitosis.common.CSNFactory;
import org.apache.directory.mitosis.operation.AddAttributeOperation;
import org.apache.directory.mitosis.service.protocol.codec.LogEntryMessageDecoder;
import org.apache.directory.mitosis.service.protocol.codec.LogEntryMessageEncoder;
@@ -45,6 +45,8 @@
private static DefaultDirectoryService service;
+ private static CSNFactory csnFactory = new CSNFactory();
+
static
{
oids.put( "ou", new OidNormalizer( "ou", new DeepTrimToLowerNormalizer() ) );
@@ -62,7 +64,7 @@
1234,
new AddAttributeOperation(
service.getRegistries(),
- new DefaultCSN( System.currentTimeMillis(),
+ csnFactory.newInstance( System.currentTimeMillis(),
"testReplica0", 1234 ),
new LdapDN( "ou=system" ).normalize( oids ),
new DefaultServerAttribute( "ou",
Modified: directory/apacheds/trunk/mitosis/src/test/java/org/apache/directory/mitosis/store/derby/DerbyReplicationStoreTest.java
URL: http://svn.apache.org/viewvc/directory/apacheds/trunk/mitosis/src/test/java/org/apache/directory/mitosis/store/derby/DerbyReplicationStoreTest.java?rev=733098&r1=733097&r2=733098&view=diff
==============================================================================
--- directory/apacheds/trunk/mitosis/src/test/java/org/apache/directory/mitosis/store/derby/DerbyReplicationStoreTest.java (original)
+++ directory/apacheds/trunk/mitosis/src/test/java/org/apache/directory/mitosis/store/derby/DerbyReplicationStoreTest.java Fri Jan 9 09:52:40 2009
@@ -50,8 +50,6 @@
import org.apache.directory.mitosis.common.CSN;
import org.apache.directory.mitosis.common.CSNFactory;
import org.apache.directory.mitosis.common.CSNVector;
-import org.apache.directory.mitosis.common.DefaultCSN;
-import org.apache.directory.mitosis.common.DefaultCSNFactory;
import org.apache.directory.mitosis.configuration.ReplicationConfiguration;
import org.apache.directory.mitosis.operation.AddAttributeOperation;
import org.apache.directory.mitosis.operation.AddEntryOperation;
@@ -70,7 +68,7 @@
private static final String OTHER_REPLICA_ID_2 = "OTHER_REPLICA_2";
private static final File DB_PATH = new File( "target/testDB" );
- private final CSNFactory csnFactory = new DefaultCSNFactory();
+ private final CSNFactory csnFactory = new CSNFactory();
private DerbyReplicationStore store;
private int testCount;
private long startTime;
@@ -281,7 +279,7 @@
CSN csn;
ReplicationLogIterator it;
- it = store.getLogs( new DefaultCSN( 0, REPLICA_ID, 0 ), false );
+ it = store.getLogs( csnFactory.newInstance( 0, REPLICA_ID, 0 ), false );
it.next();
csn = it.getOperation( service.getRegistries() ).getCSN();
it.close();
@@ -290,7 +288,7 @@
Assert.assertEquals( 1, store.removeLogs( csn, true ) );
Assert.assertEquals( 0, store.getLogSize( REPLICA_ID ) );
- it = store.getLogs( new DefaultCSN( 0, OTHER_REPLICA_ID, 0 ), false );
+ it = store.getLogs( csnFactory.newInstance( 0, OTHER_REPLICA_ID, 0 ), false );
Assert.assertTrue( it.next() );
csn = it.getOperation( service.getRegistries() ).getCSN();
it.close();
@@ -305,10 +303,10 @@
private void subTestVectors() throws Exception
{
- CSN csnA = new DefaultCSN( 0, REPLICA_ID, 0 );
- CSN csnB = new DefaultCSN( 1, REPLICA_ID, 0 );
- CSN csnC = new DefaultCSN( 0, OTHER_REPLICA_ID_2, 0 );
- CSN csnD = new DefaultCSN( 0, OTHER_REPLICA_ID_2, 1 );
+ CSN csnA = csnFactory.newInstance( 0, REPLICA_ID, 0 );
+ CSN csnB = csnFactory.newInstance( 1, REPLICA_ID, 0 );
+ CSN csnC = csnFactory.newInstance( 0, OTHER_REPLICA_ID_2, 0 );
+ CSN csnD = csnFactory.newInstance( 0, OTHER_REPLICA_ID_2, 1 );
AttributeType at = service.getRegistries().getAttributeTypeRegistry().lookup( "ou" );
EntryAttribute attribute = new DefaultServerAttribute( at, "test" );
store.putLog( new AddAttributeOperation( service.getRegistries(), csnA, LdapDN.EMPTY_LDAPDN, attribute ) );