Skip to content

Commit

Permalink
Revert "Static marshal for member ID"
Browse files Browse the repository at this point in the history
This reverts commit 54889b5.
  • Loading branch information
martinfurmanski committed Jun 14, 2018
1 parent 6236468 commit 032b183
Show file tree
Hide file tree
Showing 20 changed files with 39 additions and 40 deletions.
Expand Up @@ -62,7 +62,7 @@ public ReplicationModule( MemberId myself, PlatformModule platformModule, Config


DurableStateStorage<GlobalSessionTrackerState> sessionTrackerStorage; DurableStateStorage<GlobalSessionTrackerState> sessionTrackerStorage;
sessionTrackerStorage = life.add( new DurableStateStorage<>( fileSystem, clusterStateDirectory, sessionTrackerStorage = life.add( new DurableStateStorage<>( fileSystem, clusterStateDirectory,
SESSION_TRACKER_NAME, new GlobalSessionTrackerState.Marshal( MemberId.MARSHAL ), SESSION_TRACKER_NAME, new GlobalSessionTrackerState.Marshal( new MemberId.Marshal() ),
config.get( CausalClusteringSettings.global_session_tracker_state_size ), logProvider ) ); config.get( CausalClusteringSettings.global_session_tracker_state_size ), logProvider ) );


sessionTracker = new SessionTracker( sessionTrackerStorage ); sessionTracker = new SessionTracker( sessionTrackerStorage );
Expand Down
Expand Up @@ -48,7 +48,7 @@ public class IdentityModule
Log log = logProvider.getLog( getClass() ); Log log = logProvider.getLog( getClass() );


SimpleStorage<MemberId> memberIdStorage = new SimpleFileStorage<>( fileSystem, clusterStateDirectory, SimpleStorage<MemberId> memberIdStorage = new SimpleFileStorage<>( fileSystem, clusterStateDirectory,
CORE_MEMBER_ID_NAME, MemberId.MARSHAL, logProvider ); CORE_MEMBER_ID_NAME, new MemberId.Marshal(), logProvider );


try try
{ {
Expand Down
Expand Up @@ -110,7 +110,7 @@ public ConsensusModule( MemberId myself, final PlatformModule platformModule,
termState = new MonitoredTermStateStorage( durableTermState, platformModule.monitors ); termState = new MonitoredTermStateStorage( durableTermState, platformModule.monitors );


voteState = life.add( new DurableStateStorage<>( fileSystem, clusterStateDirectory, RAFT_VOTE_NAME, voteState = life.add( new DurableStateStorage<>( fileSystem, clusterStateDirectory, RAFT_VOTE_NAME,
new VoteState.Marshal( MemberId.MARSHAL ), config.get( CausalClusteringSettings.vote_state_size ), new VoteState.Marshal( new MemberId.Marshal() ), config.get( CausalClusteringSettings.vote_state_size ),
logProvider ) ); logProvider ) );


raftMembershipStorage = life.add( raftMembershipStorage = life.add(
Expand Down
Expand Up @@ -57,7 +57,7 @@ public static void marshal( MemberIdSet memberSet, WritableChannel channel ) thr
Set<MemberId> members = memberSet.getMembers(); Set<MemberId> members = memberSet.getMembers();
channel.putInt( members.size() ); channel.putInt( members.size() );


MemberId.Marshal memberIdMarshal = MemberId.MARSHAL; MemberId.Marshal memberIdMarshal = new MemberId.Marshal();


for ( MemberId member : members ) for ( MemberId member : members )
{ {
Expand All @@ -70,7 +70,7 @@ public static MemberIdSet unmarshal( ReadableChannel channel ) throws IOExceptio
HashSet<MemberId> members = new HashSet<>(); HashSet<MemberId> members = new HashSet<>();
int memberCount = channel.getInt(); int memberCount = channel.getInt();


MemberId.Marshal memberIdMarshal = MemberId.MARSHAL; MemberId.Marshal memberIdMarshal = new MemberId.Marshal();


for ( int i = 0; i < memberCount; i++ ) for ( int i = 0; i < memberCount; i++ )
{ {
Expand Down
Expand Up @@ -89,7 +89,7 @@ public String toString()


public static class Marshal extends SafeStateMarshal<MembershipEntry> public static class Marshal extends SafeStateMarshal<MembershipEntry>
{ {
MemberId.Marshal memberMarshal = MemberId.MARSHAL; MemberId.Marshal memberMarshal = new MemberId.Marshal();


@Override @Override
public MembershipEntry startState() public MembershipEntry startState()
Expand Down
Expand Up @@ -88,7 +88,7 @@ public ByteBufAwareMarshal serialize()
{ {
channel1.putLong( globalSession().sessionId().getMostSignificantBits() ); channel1.putLong( globalSession().sessionId().getMostSignificantBits() );
channel1.putLong( globalSession().sessionId().getLeastSignificantBits() ); channel1.putLong( globalSession().sessionId().getLeastSignificantBits() );
MemberId.MARSHAL.marshal( globalSession().owner(), channel1 ); new MemberId.Marshal().marshal( globalSession().owner(), channel1 );


channel1.putLong( operationId.localSessionId() ); channel1.putLong( operationId.localSessionId() );
channel1.putLong( operationId.sequenceNumber() ); channel1.putLong( operationId.sequenceNumber() );
Expand All @@ -99,7 +99,7 @@ public static ContentBuilder<ReplicatedContent> deserialize( ReadableChannel cha
{ {
long mostSigBits = channel.getLong(); long mostSigBits = channel.getLong();
long leastSigBits = channel.getLong(); long leastSigBits = channel.getLong();
MemberId owner = MemberId.MARSHAL.unmarshal( channel ); MemberId owner = new MemberId.Marshal().unmarshal( channel );
GlobalSession globalSession = new GlobalSession( new UUID( mostSigBits, leastSigBits ), owner ); GlobalSession globalSession = new GlobalSession( new UUID( mostSigBits, leastSigBits ), owner );


long localSessionId = channel.getLong(); long localSessionId = channel.getLong();
Expand Down
Expand Up @@ -38,6 +38,7 @@
import org.neo4j.causalclustering.core.state.storage.SimpleStorage; import org.neo4j.causalclustering.core.state.storage.SimpleStorage;
import org.neo4j.causalclustering.core.state.storage.StateMarshal; import org.neo4j.causalclustering.core.state.storage.StateMarshal;
import org.neo4j.causalclustering.identity.MemberId; import org.neo4j.causalclustering.identity.MemberId;
import org.neo4j.causalclustering.identity.MemberId.Marshal;
import org.neo4j.io.fs.DefaultFileSystemAbstraction; import org.neo4j.io.fs.DefaultFileSystemAbstraction;
import org.neo4j.io.fs.FileSystemAbstraction; import org.neo4j.io.fs.FileSystemAbstraction;
import org.neo4j.kernel.configuration.Config; import org.neo4j.kernel.configuration.Config;
Expand Down Expand Up @@ -90,22 +91,22 @@ public static void main( String[] args ) throws IOException, ClusterStateExcepti
void dump() throws IOException void dump() throws IOException
{ {
SimpleStorage<MemberId> memberIdStorage = new SimpleFileStorage<>( fs, clusterStateDirectory, CORE_MEMBER_ID_NAME, SimpleStorage<MemberId> memberIdStorage = new SimpleFileStorage<>( fs, clusterStateDirectory, CORE_MEMBER_ID_NAME,
MemberId.MARSHAL, NullLogProvider.getInstance() ); new Marshal(), NullLogProvider.getInstance() );
if ( memberIdStorage.exists() ) if ( memberIdStorage.exists() )
{ {
MemberId memberId = memberIdStorage.readState(); MemberId memberId = memberIdStorage.readState();
out.println( CORE_MEMBER_ID_NAME + ": " + memberId ); out.println( CORE_MEMBER_ID_NAME + ": " + memberId );
} }


dumpState( LAST_FLUSHED_NAME, new LongIndexMarshal() ); dumpState( LAST_FLUSHED_NAME, new LongIndexMarshal() );
dumpState( LOCK_TOKEN_NAME, new ReplicatedLockTokenState.Marshal( MemberId.MARSHAL ) ); dumpState( LOCK_TOKEN_NAME, new ReplicatedLockTokenState.Marshal( new Marshal() ) );
dumpState( ID_ALLOCATION_NAME, new IdAllocationState.Marshal() ); dumpState( ID_ALLOCATION_NAME, new IdAllocationState.Marshal() );
dumpState( SESSION_TRACKER_NAME, new GlobalSessionTrackerState.Marshal( MemberId.MARSHAL ) ); dumpState( SESSION_TRACKER_NAME, new GlobalSessionTrackerState.Marshal( new Marshal() ) );


/* raft state */ /* raft state */
dumpState( RAFT_MEMBERSHIP_NAME, new RaftMembershipState.Marshal() ); dumpState( RAFT_MEMBERSHIP_NAME, new RaftMembershipState.Marshal() );
dumpState( RAFT_TERM_NAME, new TermState.Marshal() ); dumpState( RAFT_TERM_NAME, new TermState.Marshal() );
dumpState( RAFT_VOTE_NAME, new VoteState.Marshal( MemberId.MARSHAL ) ); dumpState( RAFT_VOTE_NAME, new VoteState.Marshal( new Marshal() ) );
} }


private void dumpState( String name, StateMarshal<?> marshal ) private void dumpState( String name, StateMarshal<?> marshal )
Expand Down
Expand Up @@ -125,7 +125,7 @@ public CoreStateMachinesModule( MemberId myself, PlatformModule platformModule,


lockTokenState = life.add( lockTokenState = life.add(
new DurableStateStorage<>( fileSystem, clusterStateDirectory, LOCK_TOKEN_NAME, new DurableStateStorage<>( fileSystem, clusterStateDirectory, LOCK_TOKEN_NAME,
new ReplicatedLockTokenState.Marshal( MemberId.MARSHAL ), new ReplicatedLockTokenState.Marshal( new MemberId.Marshal() ),
config.get( replicated_lock_token_state_size ), logProvider ) ); config.get( replicated_lock_token_state_size ), logProvider ) );


idAllocationState = life.add( idAllocationState = life.add(
Expand Down
Expand Up @@ -40,15 +40,15 @@ private ReplicatedIdAllocationRequestSerializer()
public static void marshal( ReplicatedIdAllocationRequest idRangeRequest, WritableChannel channel ) public static void marshal( ReplicatedIdAllocationRequest idRangeRequest, WritableChannel channel )
throws IOException throws IOException
{ {
MemberId.MARSHAL.marshal( idRangeRequest.owner(), channel ); new MemberId.Marshal().marshal( idRangeRequest.owner(), channel );
channel.putInt( idRangeRequest.idType().ordinal() ); channel.putInt( idRangeRequest.idType().ordinal() );
channel.putLong( idRangeRequest.idRangeStart() ); channel.putLong( idRangeRequest.idRangeStart() );
channel.putInt( idRangeRequest.idRangeLength() ); channel.putInt( idRangeRequest.idRangeLength() );
} }


public static ReplicatedIdAllocationRequest unmarshal( ReadableChannel channel ) throws IOException, EndOfStreamException public static ReplicatedIdAllocationRequest unmarshal( ReadableChannel channel ) throws IOException, EndOfStreamException
{ {
MemberId owner = MemberId.MARSHAL.unmarshal( channel ); MemberId owner = new MemberId.Marshal().unmarshal( channel );
IdType idType = IdType.values()[ channel.getInt() ]; IdType idType = IdType.values()[ channel.getInt() ];
long idRangeStart = channel.getLong(); long idRangeStart = channel.getLong();
int idRangeLength = channel.getInt(); int idRangeLength = channel.getInt();
Expand Down
Expand Up @@ -39,13 +39,13 @@ private ReplicatedLockTokenSerializer()
public static void marshal( ReplicatedLockTokenRequest tokenRequest, WritableChannel channel ) throws IOException public static void marshal( ReplicatedLockTokenRequest tokenRequest, WritableChannel channel ) throws IOException
{ {
channel.putInt( tokenRequest.id() ); channel.putInt( tokenRequest.id() );
MemberId.MARSHAL.marshal( tokenRequest.owner(), channel ); new MemberId.Marshal().marshal( tokenRequest.owner(), channel );
} }


public static ReplicatedLockTokenRequest unmarshal( ReadableChannel channel ) throws IOException, EndOfStreamException public static ReplicatedLockTokenRequest unmarshal( ReadableChannel channel ) throws IOException, EndOfStreamException
{ {
int candidateId = channel.getInt(); int candidateId = channel.getInt();
MemberId owner = MemberId.MARSHAL.unmarshal( channel ); MemberId owner = new MemberId.Marshal().unmarshal( channel );


return new ReplicatedLockTokenRequest( owner, candidateId ); return new ReplicatedLockTokenRequest( owner, candidateId );
} }
Expand Down
Expand Up @@ -30,8 +30,8 @@


public enum CoreStateType public enum CoreStateType
{ {
LOCK_TOKEN( new ReplicatedLockTokenState.Marshal( MemberId.MARSHAL ) ), LOCK_TOKEN( new ReplicatedLockTokenState.Marshal( new MemberId.Marshal() ) ),
SESSION_TRACKER( new GlobalSessionTrackerState.Marshal( MemberId.MARSHAL ) ), SESSION_TRACKER( new GlobalSessionTrackerState.Marshal( new MemberId.Marshal() ) ),
ID_ALLOCATION( new IdAllocationState.Marshal() ), ID_ALLOCATION( new IdAllocationState.Marshal() ),
RAFT_CORE_STATE( new RaftCoreState.Marshal() ); RAFT_CORE_STATE( new RaftCoreState.Marshal() );


Expand Down
Expand Up @@ -24,6 +24,7 @@


import java.io.IOException; import java.io.IOException;
import java.io.Serializable; import java.io.Serializable;
import java.nio.charset.Charset;
import java.util.Objects; import java.util.Objects;
import java.util.UUID; import java.util.UUID;


Expand All @@ -36,8 +37,6 @@
// TODO: basics for Serializable // TODO: basics for Serializable
public class MemberId implements Serializable public class MemberId implements Serializable
{ {
public static final Marshal MARSHAL = new Marshal();

private final UUID uuid; private final UUID uuid;
private final String shortName; private final String shortName;


Expand Down Expand Up @@ -90,9 +89,7 @@ public int hashCode()
*/ */
public static class Marshal extends SafeStateMarshal<MemberId> public static class Marshal extends SafeStateMarshal<MemberId>
{ {
private Marshal() private static final Charset UTF8 = Charset.forName("UTF-8");
{
}


@Override @Override
public void marshal( MemberId memberId, WritableChannel channel ) throws IOException public void marshal( MemberId memberId, WritableChannel channel ) throws IOException
Expand Down
Expand Up @@ -174,7 +174,7 @@ else if ( messageType.equals( LOG_COMPACTION_INFO ) )


private MemberId retrieveMember( ReadableChannel buffer ) throws IOException, EndOfStreamException private MemberId retrieveMember( ReadableChannel buffer ) throws IOException, EndOfStreamException
{ {
MemberId.Marshal memberIdMarshal = MemberId.MARSHAL; MemberId.Marshal memberIdMarshal = new MemberId.Marshal();
return memberIdMarshal.unmarshal( buffer ); return memberIdMarshal.unmarshal( buffer );
} }
} }
Expand Up @@ -50,7 +50,7 @@ public synchronized void encode( ChannelHandlerContext ctx,
{ {
RaftMessages.RaftMessage message = decoratedMessage.message(); RaftMessages.RaftMessage message = decoratedMessage.message();
ClusterId clusterId = decoratedMessage.clusterId(); ClusterId clusterId = decoratedMessage.clusterId();
MemberId.Marshal memberMarshal = MemberId.MARSHAL; MemberId.Marshal memberMarshal = new MemberId.Marshal();


NetworkFlushableByteBuf channel = new NetworkFlushableByteBuf( out ); NetworkFlushableByteBuf channel = new NetworkFlushableByteBuf( out );
ClusterId.Marshal.INSTANCE.marshal( clusterId, channel ); ClusterId.Marshal.INSTANCE.marshal( clusterId, channel );
Expand Down
Expand Up @@ -183,7 +183,8 @@ Optional<RaftMessages.ClusterIdAwareMessage> maybeCompose( Clock clock, Queue<Lo


private MemberId retrieveMember( ReadableChannel buffer ) throws IOException, EndOfStreamException private MemberId retrieveMember( ReadableChannel buffer ) throws IOException, EndOfStreamException
{ {
return MemberId.MARSHAL.unmarshal( buffer ); MemberId.Marshal memberIdMarshal = new MemberId.Marshal();
return memberIdMarshal.unmarshal( buffer );
} }


interface LazyComposer interface LazyComposer
Expand Down
Expand Up @@ -38,7 +38,7 @@ protected void encode( ChannelHandlerContext ctx, RaftMessages.ClusterIdAwareMes
{ {
RaftMessages.RaftMessage message = decoratedMessage.message(); RaftMessages.RaftMessage message = decoratedMessage.message();
ClusterId clusterId = decoratedMessage.clusterId(); ClusterId clusterId = decoratedMessage.clusterId();
MemberId.Marshal memberMarshal = MemberId.MARSHAL; MemberId.Marshal memberMarshal = new MemberId.Marshal();


NetworkFlushableByteBuf channel = new NetworkFlushableByteBuf( out ); NetworkFlushableByteBuf channel = new NetworkFlushableByteBuf( out );
ClusterId.Marshal.INSTANCE.marshal( clusterId, channel ); ClusterId.Marshal.INSTANCE.marshal( clusterId, channel );
Expand Down
Expand Up @@ -42,7 +42,7 @@ public class MemberIdMarshalTest
public void shouldSerializeAndDeserialize() throws Exception public void shouldSerializeAndDeserialize() throws Exception
{ {
// given // given
MemberId.Marshal marshal = MemberId.MARSHAL; MemberId.Marshal marshal = new MemberId.Marshal();


final MemberId member = new MemberId( UUID.randomUUID() ); final MemberId member = new MemberId( UUID.randomUUID() );


Expand All @@ -60,7 +60,7 @@ public void shouldThrowExceptionForHalfWrittenInstance() throws Exception
{ {
// given // given
// a CoreMember and a ByteBuffer to write it to // a CoreMember and a ByteBuffer to write it to
MemberId.Marshal marshal = MemberId.MARSHAL; MemberId.Marshal marshal = new MemberId.Marshal();
final MemberId aRealMember = new MemberId( UUID.randomUUID() ); final MemberId aRealMember = new MemberId( UUID.randomUUID() );


ByteBuf buffer = Unpooled.buffer( 1000 ); ByteBuf buffer = Unpooled.buffer( 1000 );
Expand Down
Expand Up @@ -89,18 +89,18 @@ public void shouldDumpClusterState() throws Exception
private void createStates() throws IOException private void createStates() throws IOException
{ {
SimpleStorage<MemberId> memberIdStorage = new SimpleFileStorage<>( fsa.get(), clusterStateDirectory.get(), SimpleStorage<MemberId> memberIdStorage = new SimpleFileStorage<>( fsa.get(), clusterStateDirectory.get(),
CORE_MEMBER_ID_NAME, MemberId.MARSHAL, NullLogProvider.getInstance() ); CORE_MEMBER_ID_NAME, new MemberId.Marshal(), NullLogProvider.getInstance() );
memberIdStorage.writeState( new MemberId( UUID.randomUUID() ) ); memberIdStorage.writeState( new MemberId( UUID.randomUUID() ) );


createDurableState( LAST_FLUSHED_NAME, new LongIndexMarshal() ); createDurableState( LAST_FLUSHED_NAME, new LongIndexMarshal() );
createDurableState( LOCK_TOKEN_NAME, new ReplicatedLockTokenState.Marshal( MemberId.MARSHAL ) ); createDurableState( LOCK_TOKEN_NAME, new ReplicatedLockTokenState.Marshal( new MemberId.Marshal() ) );
createDurableState( ID_ALLOCATION_NAME, new IdAllocationState.Marshal() ); createDurableState( ID_ALLOCATION_NAME, new IdAllocationState.Marshal() );
createDurableState( SESSION_TRACKER_NAME, new GlobalSessionTrackerState.Marshal( MemberId.MARSHAL ) ); createDurableState( SESSION_TRACKER_NAME, new GlobalSessionTrackerState.Marshal( new MemberId.Marshal() ) );


/* raft state */ /* raft state */
createDurableState( RAFT_MEMBERSHIP_NAME, new RaftMembershipState.Marshal() ); createDurableState( RAFT_MEMBERSHIP_NAME, new RaftMembershipState.Marshal() );
createDurableState( RAFT_TERM_NAME, new TermState.Marshal() ); createDurableState( RAFT_TERM_NAME, new TermState.Marshal() );
createDurableState( RAFT_VOTE_NAME, new VoteState.Marshal( MemberId.MARSHAL ) ); createDurableState( RAFT_VOTE_NAME, new VoteState.Marshal( new MemberId.Marshal() ) );
} }


private <T> void createDurableState( String name, StateMarshal<T> marshal ) private <T> void createDurableState( String name, StateMarshal<T> marshal )
Expand Down
Expand Up @@ -192,15 +192,15 @@ public void shouldPersistAndRecoverState() throws Exception
fsa.mkdir( testDir.directory() ); fsa.mkdir( testDir.directory() );


StateMarshal<ReplicatedLockTokenState> marshal = StateMarshal<ReplicatedLockTokenState> marshal =
new ReplicatedLockTokenState.Marshal( MemberId.MARSHAL ); new ReplicatedLockTokenState.Marshal( new MemberId.Marshal() );


MemberId memberA = member( 0 ); MemberId memberA = member( 0 );
MemberId memberB = member( 1 ); MemberId memberB = member( 1 );
int candidateId; int candidateId;


DurableStateStorage<ReplicatedLockTokenState> storage = new DurableStateStorage<>( fsa, testDir.directory(), DurableStateStorage<ReplicatedLockTokenState> storage = new DurableStateStorage<>( fsa, testDir.directory(),
"state", marshal, 100, NullLogProvider.getInstance() ); "state", marshal, 100, NullLogProvider.getInstance() );
try ( Lifespan ignored = new Lifespan( storage ) ) try ( Lifespan lifespan = new Lifespan( storage ) )
{ {
ReplicatedLockTokenStateMachine stateMachine = new ReplicatedLockTokenStateMachine( storage ); ReplicatedLockTokenStateMachine stateMachine = new ReplicatedLockTokenStateMachine( storage );


Expand All @@ -217,7 +217,7 @@ public void shouldPersistAndRecoverState() throws Exception
// then // then
DurableStateStorage<ReplicatedLockTokenState> storage2 = new DurableStateStorage<>( DurableStateStorage<ReplicatedLockTokenState> storage2 = new DurableStateStorage<>(
fsa, testDir.directory(), "state", marshal, 100, NullLogProvider.getInstance() ); fsa, testDir.directory(), "state", marshal, 100, NullLogProvider.getInstance() );
try ( Lifespan ignored = new Lifespan( storage2 ) ) try ( Lifespan lifespan = new Lifespan( storage2 ) )
{ {
ReplicatedLockTokenState initialState = storage2.getInitialState(); ReplicatedLockTokenState initialState = storage2.getInitialState();


Expand All @@ -234,12 +234,12 @@ public void shouldBeIdempotent()
fsa.mkdir( testDir.directory() ); fsa.mkdir( testDir.directory() );


StateMarshal<ReplicatedLockTokenState> marshal = StateMarshal<ReplicatedLockTokenState> marshal =
new ReplicatedLockTokenState.Marshal( MemberId.MARSHAL ); new ReplicatedLockTokenState.Marshal( new MemberId.Marshal() );


DurableStateStorage<ReplicatedLockTokenState> storage = new DurableStateStorage<>( fsa, testDir.directory(), DurableStateStorage<ReplicatedLockTokenState> storage = new DurableStateStorage<>( fsa, testDir.directory(),
"state", marshal, 100, NullLogProvider.getInstance() ); "state", marshal, 100, NullLogProvider.getInstance() );


try ( Lifespan ignored = new Lifespan( storage ) ) try ( Lifespan lifespan = new Lifespan( storage ) )
{ {
ReplicatedLockTokenStateMachine stateMachine = new ReplicatedLockTokenStateMachine( storage ); ReplicatedLockTokenStateMachine stateMachine = new ReplicatedLockTokenStateMachine( storage );


Expand Down
Expand Up @@ -44,7 +44,7 @@ public void shouldWriteAndReadState() throws Exception
{ {
// given // given
SimpleStorage<MemberId> storage = new SimpleFileStorage<>( fsa.get(), new File( "state-dir" ), SimpleStorage<MemberId> storage = new SimpleFileStorage<>( fsa.get(), new File( "state-dir" ),
"member-id-a", MemberId.MARSHAL, NullLogProvider.getInstance() ); "member-id-a", new MemberId.Marshal(), NullLogProvider.getInstance() );


// when // when
MemberId idA = new MemberId( UUID.randomUUID() ); MemberId idA = new MemberId( UUID.randomUUID() );
Expand Down

0 comments on commit 032b183

Please sign in to comment.