From 736fa229b6617251356baebaf7cd7a966d0df448 Mon Sep 17 00:00:00 2001 From: Martin Furmanski Date: Tue, 16 Aug 2016 15:33:58 +0200 Subject: [PATCH] core-edge: introduce a few more modules Identity is now encapsulated behind the IdentityModule. Discovery is now encapsulated behind the ClusteringModule. MemberIdStorage now works slightly different as well and the simple functionality is now even further simplified and extracted to SimpleStorage. --- .../core/EnterpriseCoreEditionModule.java | 43 ++++------- .../neo4j/coreedge/core/IdentityModule.java | 77 +++++++++++++++++++ .../coreedge/core/state/ClusteringModule.java | 52 +++++++++++++ .../coreedge/core/state/DumpClusterState.java | 6 +- ...emberIdStorage.java => SimpleStorage.java} | 42 ++++------ .../discovery/DiscoveryServiceFactory.java | 2 +- .../HazelcastDiscoveryServiceFactory.java | 2 +- .../org/neo4j/coreedge/identity/MemberId.java | 2 +- .../core/state/DumpClusterStateTest.java | 9 ++- ...torageTest.java => SimpleStorageTest.java} | 32 +++----- .../discovery/SharedDiscoveryService.java | 2 +- 11 files changed, 181 insertions(+), 88 deletions(-) create mode 100644 enterprise/core-edge/src/main/java/org/neo4j/coreedge/core/IdentityModule.java create mode 100644 enterprise/core-edge/src/main/java/org/neo4j/coreedge/core/state/ClusteringModule.java rename enterprise/core-edge/src/main/java/org/neo4j/coreedge/core/state/storage/{MemberIdStorage.java => SimpleStorage.java} (64%) rename enterprise/core-edge/src/test/java/org/neo4j/coreedge/core/state/storage/{MemberIdStorageTest.java => SimpleStorageTest.java} (52%) diff --git a/enterprise/core-edge/src/main/java/org/neo4j/coreedge/core/EnterpriseCoreEditionModule.java b/enterprise/core-edge/src/main/java/org/neo4j/coreedge/core/EnterpriseCoreEditionModule.java index afe987ebe7ebb..663db6950ca39 100644 --- a/enterprise/core-edge/src/main/java/org/neo4j/coreedge/core/EnterpriseCoreEditionModule.java +++ b/enterprise/core-edge/src/main/java/org/neo4j/coreedge/core/EnterpriseCoreEditionModule.java @@ -35,8 +35,8 @@ import org.neo4j.coreedge.core.consensus.RaftMessages; import org.neo4j.coreedge.core.consensus.roles.Role; import org.neo4j.coreedge.core.server.CoreServerModule; +import org.neo4j.coreedge.core.state.ClusteringModule; import org.neo4j.coreedge.core.state.machines.CoreStateMachinesModule; -import org.neo4j.coreedge.core.state.storage.MemberIdStorage; import org.neo4j.coreedge.discovery.CoreTopologyService; import org.neo4j.coreedge.discovery.DiscoveryServiceFactory; import org.neo4j.coreedge.discovery.procedures.AcquireEndpointsProcedure; @@ -95,10 +95,9 @@ public class EnterpriseCoreEditionModule extends EditionModule { public static final String CLUSTER_STATE_DIRECTORY_NAME = "cluster-state"; - public static final String CORE_MEMBER_ID_NAME = "core-member-id"; private final ConsensusModule consensusModule; - private final CoreTopologyService discoveryService; + private final CoreTopologyService topologyService; private final LogProvider logProvider; public enum RaftLogImplementation @@ -111,9 +110,9 @@ public void registerProcedures( Procedures procedures ) { try { - procedures.register( new DiscoverEndpointAcquisitionServersProcedure( discoveryService, logProvider ) ); - procedures.register( new AcquireEndpointsProcedure( discoveryService, consensusModule.raftMachine(), logProvider ) ); - procedures.register( new ClusterOverviewProcedure( discoveryService, consensusModule.raftMachine(), logProvider ) ); + procedures.register( new DiscoverEndpointAcquisitionServersProcedure( topologyService, logProvider ) ); + procedures.register( new AcquireEndpointsProcedure( topologyService, consensusModule.raftMachine(), logProvider ) ); + procedures.register( new ClusterOverviewProcedure( topologyService, consensusModule.raftMachine(), logProvider ) ); procedures.register( new CoreRoleProcedure( consensusModule.raftMachine()) ); } catch ( ProcedureException e ) @@ -147,20 +146,10 @@ public void registerProcedures( Procedures procedures ) life.add( localDatabase ); - MemberIdStorage memberIdStorage = new MemberIdStorage( fileSystem, clusterStateDirectory, CORE_MEMBER_ID_NAME, new MemberId.Marshal(), logProvider ); - MemberId myself; - try - { - myself = memberIdStorage.readState(); - } - catch ( IOException e ) - { - throw new RuntimeException( e ); - } - - discoveryService = discoveryServiceFactory.coreDiscoveryService( config, myself, logProvider ); + IdentityModule identityModule = new IdentityModule( platformModule, clusterStateDirectory ); - life.add( dependencies.satisfyDependency( discoveryService ) ); + ClusteringModule clusteringModule = new ClusteringModule( discoveryServiceFactory, identityModule.myself(), platformModule ); + topologyService = clusteringModule.topologyService(); long logThresholdMillis = config.get( CoreEdgeClusterSettings.unknown_address_logging_throttle ); int maxQueueSize = config.get( CoreEdgeClusterSettings.outgoing_queue_size ); @@ -170,20 +159,20 @@ public void registerProcedures( Procedures procedures ) logProvider, platformModule.monitors, maxQueueSize ); life.add( raftSender ); - final MessageLogger messageLogger = createMessageLogger( config, life, myself ); + final MessageLogger messageLogger = createMessageLogger( config, life, identityModule.myself() ); Outbound raftOutbound = new LoggingOutbound<>( - new RaftOutbound( discoveryService, raftSender, localDatabase, logProvider, logThresholdMillis ), - myself, messageLogger ); + new RaftOutbound( topologyService, raftSender, localDatabase, logProvider, logThresholdMillis ), + identityModule.myself(), messageLogger ); - consensusModule = new ConsensusModule( myself, platformModule, raftOutbound, clusterStateDirectory, discoveryService ); + consensusModule = new ConsensusModule( identityModule.myself(), platformModule, raftOutbound, clusterStateDirectory, topologyService ); dependencies.satisfyDependency( consensusModule.raftMachine() ); - ReplicationModule replicationModule = new ReplicationModule( myself, platformModule, config, consensusModule, + ReplicationModule replicationModule = new ReplicationModule( identityModule.myself(), platformModule, config, consensusModule, raftOutbound, clusterStateDirectory, fileSystem, logProvider ); - CoreStateMachinesModule coreStateMachinesModule = new CoreStateMachinesModule( myself, platformModule, clusterStateDirectory, config, + CoreStateMachinesModule coreStateMachinesModule = new CoreStateMachinesModule( identityModule.myself(), platformModule, clusterStateDirectory, config, replicationModule.getReplicator(), consensusModule.raftMachine(), dependencies, localDatabase ); this.idGeneratorFactory = coreStateMachinesModule.idGeneratorFactory; @@ -194,8 +183,8 @@ public void registerProcedures( Procedures procedures ) this.lockManager = coreStateMachinesModule.lockManager; this.commitProcessFactory = coreStateMachinesModule.commitProcessFactory; - CoreServerModule coreServerModule = new CoreServerModule( myself, platformModule, consensusModule, - coreStateMachinesModule, replicationModule, clusterStateDirectory, discoveryService, localDatabase, + CoreServerModule coreServerModule = new CoreServerModule( identityModule.myself(), platformModule, consensusModule, + coreStateMachinesModule, replicationModule, clusterStateDirectory, topologyService, localDatabase, messageLogger ); editionInvariants( platformModule, dependencies, config, logging, life ); diff --git a/enterprise/core-edge/src/main/java/org/neo4j/coreedge/core/IdentityModule.java b/enterprise/core-edge/src/main/java/org/neo4j/coreedge/core/IdentityModule.java new file mode 100644 index 0000000000000..2292c97aa912c --- /dev/null +++ b/enterprise/core-edge/src/main/java/org/neo4j/coreedge/core/IdentityModule.java @@ -0,0 +1,77 @@ +/* + * Copyright (c) 2002-2016 "Neo Technology," + * Network Engine for Objects in Lund AB [http://neotechnology.com] + * + * This file is part of Neo4j. + * + * Neo4j is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + */ +package org.neo4j.coreedge.core; + +import java.io.File; +import java.io.IOException; +import java.util.UUID; + +import org.neo4j.coreedge.core.state.storage.SimpleStorage; +import org.neo4j.coreedge.identity.MemberId; +import org.neo4j.io.fs.FileSystemAbstraction; +import org.neo4j.kernel.impl.factory.PlatformModule; +import org.neo4j.logging.Log; +import org.neo4j.logging.LogProvider; + +public class IdentityModule +{ + public static final String CORE_MEMBER_ID_NAME = "core-member-id"; + private MemberId myself; + + IdentityModule( PlatformModule platformModule, File clusterStateDirectory ) + { + FileSystemAbstraction fileSystem = platformModule.fileSystem; + LogProvider logProvider = platformModule.logging.getInternalLogProvider(); + + Log log = logProvider.getLog( getClass() ); + + SimpleStorage memberIdStorage = new SimpleStorage<>( fileSystem, clusterStateDirectory, + CORE_MEMBER_ID_NAME, new MemberId.Marshal(), logProvider ); + + try + { + if ( memberIdStorage.exists() ) + { + myself = memberIdStorage.readState(); + if ( myself == null ) + { + throw new RuntimeException( "I was null" ); + } + } + else + { + UUID uuid = UUID.randomUUID(); + myself = new MemberId( uuid ); + memberIdStorage.writeState( myself ); + + log.info( String.format( "Generated new id: %s (%s)", myself, uuid ) ); + } + } + catch ( IOException e ) + { + throw new RuntimeException( e ); + } + } + + MemberId myself() + { + return myself; + } +} diff --git a/enterprise/core-edge/src/main/java/org/neo4j/coreedge/core/state/ClusteringModule.java b/enterprise/core-edge/src/main/java/org/neo4j/coreedge/core/state/ClusteringModule.java new file mode 100644 index 0000000000000..58487cf1a77ee --- /dev/null +++ b/enterprise/core-edge/src/main/java/org/neo4j/coreedge/core/state/ClusteringModule.java @@ -0,0 +1,52 @@ +/* + * Copyright (c) 2002-2016 "Neo Technology," + * Network Engine for Objects in Lund AB [http://neotechnology.com] + * + * This file is part of Neo4j. + * + * Neo4j is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + */ +package org.neo4j.coreedge.core.state; + +import org.neo4j.coreedge.discovery.CoreTopologyService; +import org.neo4j.coreedge.discovery.DiscoveryServiceFactory; +import org.neo4j.coreedge.identity.MemberId; +import org.neo4j.kernel.configuration.Config; +import org.neo4j.kernel.impl.factory.PlatformModule; +import org.neo4j.kernel.impl.util.Dependencies; +import org.neo4j.kernel.lifecycle.LifeSupport; +import org.neo4j.logging.LogProvider; + +public class ClusteringModule +{ + private final CoreTopologyService topologyService; + + public ClusteringModule( DiscoveryServiceFactory discoveryServiceFactory, MemberId myself, PlatformModule platformModule ) + { + LifeSupport life = platformModule.life; + Config config = platformModule.config; + LogProvider logProvider = platformModule.logging.getInternalLogProvider(); + Dependencies dependencies = platformModule.dependencies; + + topologyService = discoveryServiceFactory.coreTopologyService( config, myself, logProvider ); + life.add( topologyService ); + + dependencies.satisfyDependency( topologyService ); // for tests + } + + public CoreTopologyService topologyService() + { + return topologyService; + } +} diff --git a/enterprise/core-edge/src/main/java/org/neo4j/coreedge/core/state/DumpClusterState.java b/enterprise/core-edge/src/main/java/org/neo4j/coreedge/core/state/DumpClusterState.java index eec70f62e3812..eff53fce52e40 100644 --- a/enterprise/core-edge/src/main/java/org/neo4j/coreedge/core/state/DumpClusterState.java +++ b/enterprise/core-edge/src/main/java/org/neo4j/coreedge/core/state/DumpClusterState.java @@ -30,7 +30,7 @@ import org.neo4j.coreedge.core.state.machines.id.IdAllocationState; import org.neo4j.coreedge.core.state.machines.locks.ReplicatedLockTokenState; import org.neo4j.coreedge.core.state.storage.DurableStateStorage; -import org.neo4j.coreedge.core.state.storage.MemberIdStorage; +import org.neo4j.coreedge.core.state.storage.SimpleStorage; import org.neo4j.coreedge.core.state.storage.StateMarshal; import org.neo4j.coreedge.identity.MemberId; import org.neo4j.coreedge.identity.MemberId.Marshal; @@ -42,7 +42,7 @@ import static org.neo4j.coreedge.ReplicationModule.LAST_FLUSHED_NAME; import static org.neo4j.coreedge.ReplicationModule.SESSION_TRACKER_NAME; import static org.neo4j.coreedge.core.EnterpriseCoreEditionModule.CLUSTER_STATE_DIRECTORY_NAME; -import static org.neo4j.coreedge.core.EnterpriseCoreEditionModule.CORE_MEMBER_ID_NAME; +import static org.neo4j.coreedge.core.IdentityModule.CORE_MEMBER_ID_NAME; import static org.neo4j.coreedge.core.consensus.ConsensusModule.RAFT_MEMBERSHIP_NAME; import static org.neo4j.coreedge.core.consensus.ConsensusModule.RAFT_TERM_NAME; import static org.neo4j.coreedge.core.consensus.ConsensusModule.RAFT_VOTE_NAME; @@ -84,7 +84,7 @@ public static void main( String[] args ) throws IOException void dump() throws IOException { - MemberIdStorage memberIdStorage = new MemberIdStorage( fs, clusterStateDirectory, CORE_MEMBER_ID_NAME, + SimpleStorage memberIdStorage = new SimpleStorage<>( fs, clusterStateDirectory, CORE_MEMBER_ID_NAME, new Marshal(), NullLogProvider.getInstance() ); if ( memberIdStorage.exists() ) { diff --git a/enterprise/core-edge/src/main/java/org/neo4j/coreedge/core/state/storage/MemberIdStorage.java b/enterprise/core-edge/src/main/java/org/neo4j/coreedge/core/state/storage/SimpleStorage.java similarity index 64% rename from enterprise/core-edge/src/main/java/org/neo4j/coreedge/core/state/storage/MemberIdStorage.java rename to enterprise/core-edge/src/main/java/org/neo4j/coreedge/core/state/storage/SimpleStorage.java index 3fb7ee27fe56a..c194cbd835045 100644 --- a/enterprise/core-edge/src/main/java/org/neo4j/coreedge/core/state/storage/MemberIdStorage.java +++ b/enterprise/core-edge/src/main/java/org/neo4j/coreedge/core/state/storage/SimpleStorage.java @@ -21,10 +21,9 @@ import java.io.File; import java.io.IOException; -import java.util.UUID; -import org.neo4j.coreedge.identity.MemberId; import org.neo4j.coreedge.messaging.EndOfStreamException; +import org.neo4j.coreedge.messaging.marshalling.ChannelMarshal; import org.neo4j.io.fs.FileSystemAbstraction; import org.neo4j.kernel.impl.transaction.log.FlushableChannel; import org.neo4j.kernel.impl.transaction.log.PhysicalFlushableChannel; @@ -33,15 +32,15 @@ import org.neo4j.logging.Log; import org.neo4j.logging.LogProvider; -public class MemberIdStorage +public class SimpleStorage { private final FileSystemAbstraction fileSystem; - private final MemberId.Marshal marshal; + private final ChannelMarshal marshal; private final File file; private Log log; - public MemberIdStorage( FileSystemAbstraction fileSystem, File directory, String name, - MemberId.Marshal marshal, LogProvider logProvider ) + public SimpleStorage( FileSystemAbstraction fileSystem, File directory, String name, + ChannelMarshal marshal, LogProvider logProvider ) { this.fileSystem = fileSystem; this.log = logProvider.getLog( getClass() ); @@ -54,38 +53,27 @@ public boolean exists() return fileSystem.fileExists( file ); } - public MemberId readState() throws IOException + public T readState() throws IOException { - if ( exists() ) + try ( ReadableClosableChannel channel = new ReadAheadChannel<>( fileSystem.open( file, "r" ) ) ) { - try ( ReadableClosableChannel channel = new ReadAheadChannel<>( fileSystem.open( file, "r" ) ) ) - { - MemberId memberId = marshal.unmarshal( channel ); - if ( memberId != null ) - { - return memberId; - } - } - catch ( EndOfStreamException e ) - { - log.error( "End of stream reached" ); - } + return marshal.unmarshal( channel ); } - else + catch ( EndOfStreamException e ) { - log.warn( "File does not exist" ); + log.error( "End of stream reached: " + file ); + throw new IOException( e ); } + } + public void writeState( T state ) throws IOException + { fileSystem.mkdirs( file.getParentFile() ); fileSystem.deleteFile( file ); - UUID uuid = UUID.randomUUID(); - MemberId memberId = new MemberId( uuid ); - log.info( String.format( "Generated new id: %s (%s)", memberId, uuid ) ); try ( FlushableChannel channel = new PhysicalFlushableChannel( fileSystem.create( file ) ) ) { - marshal.marshal( memberId, channel ); + marshal.marshal( state, channel ); } - return memberId; } } diff --git a/enterprise/core-edge/src/main/java/org/neo4j/coreedge/discovery/DiscoveryServiceFactory.java b/enterprise/core-edge/src/main/java/org/neo4j/coreedge/discovery/DiscoveryServiceFactory.java index 57d3223477235..b98b008631f41 100644 --- a/enterprise/core-edge/src/main/java/org/neo4j/coreedge/discovery/DiscoveryServiceFactory.java +++ b/enterprise/core-edge/src/main/java/org/neo4j/coreedge/discovery/DiscoveryServiceFactory.java @@ -27,7 +27,7 @@ public interface DiscoveryServiceFactory { - CoreTopologyService coreDiscoveryService( Config config, MemberId myself, LogProvider logProvider ); + CoreTopologyService coreTopologyService( Config config, MemberId myself, LogProvider logProvider ); TopologyService edgeDiscoveryService( Config config, AdvertisedSocketAddress boltAddress, LogProvider logProvider, DelayedRenewableTimeoutService timeoutService, long edgeTimeToLiveTimeout, long edgeRefreshRate ); } diff --git a/enterprise/core-edge/src/main/java/org/neo4j/coreedge/discovery/HazelcastDiscoveryServiceFactory.java b/enterprise/core-edge/src/main/java/org/neo4j/coreedge/discovery/HazelcastDiscoveryServiceFactory.java index 8b1b2429c76ed..bd17ca4080a93 100644 --- a/enterprise/core-edge/src/main/java/org/neo4j/coreedge/discovery/HazelcastDiscoveryServiceFactory.java +++ b/enterprise/core-edge/src/main/java/org/neo4j/coreedge/discovery/HazelcastDiscoveryServiceFactory.java @@ -29,7 +29,7 @@ public class HazelcastDiscoveryServiceFactory implements DiscoveryServiceFactory { @Override - public CoreTopologyService coreDiscoveryService( Config config, MemberId myself, LogProvider logProvider ) + public CoreTopologyService coreTopologyService( Config config, MemberId myself, LogProvider logProvider ) { makeHazelcastSilent( config ); hazelcastShouldNotPhoneHome(); diff --git a/enterprise/core-edge/src/main/java/org/neo4j/coreedge/identity/MemberId.java b/enterprise/core-edge/src/main/java/org/neo4j/coreedge/identity/MemberId.java index ea8502c126f62..8da2f9e947d64 100644 --- a/enterprise/core-edge/src/main/java/org/neo4j/coreedge/identity/MemberId.java +++ b/enterprise/core-edge/src/main/java/org/neo4j/coreedge/identity/MemberId.java @@ -81,7 +81,7 @@ public int hashCode() * │leastSignificantBits 8 bytes│ * └──────────────────────────────┘ */ - public static class MemberIdMarshal extends SafeStateMarshal + public static class Marshal extends SafeStateMarshal { @Override public void marshal( MemberId memberId, WritableChannel channel ) throws IOException diff --git a/enterprise/core-edge/src/test/java/org/neo4j/coreedge/core/state/DumpClusterStateTest.java b/enterprise/core-edge/src/test/java/org/neo4j/coreedge/core/state/DumpClusterStateTest.java index 72b5b0ae8fe3f..1ee9f2dede2c9 100644 --- a/enterprise/core-edge/src/test/java/org/neo4j/coreedge/core/state/DumpClusterStateTest.java +++ b/enterprise/core-edge/src/test/java/org/neo4j/coreedge/core/state/DumpClusterStateTest.java @@ -26,6 +26,7 @@ import java.io.File; import java.io.IOException; import java.io.PrintStream; +import java.util.UUID; import org.neo4j.coreedge.core.consensus.membership.RaftMembershipState; import org.neo4j.coreedge.core.consensus.term.TermState; @@ -34,7 +35,7 @@ import org.neo4j.coreedge.core.state.machines.id.IdAllocationState; import org.neo4j.coreedge.core.state.machines.locks.ReplicatedLockTokenState; import org.neo4j.coreedge.core.state.storage.DurableStateStorage; -import org.neo4j.coreedge.core.state.storage.MemberIdStorage; +import org.neo4j.coreedge.core.state.storage.SimpleStorage; import org.neo4j.coreedge.core.state.storage.StateMarshal; import org.neo4j.coreedge.identity.MemberId; import org.neo4j.kernel.lifecycle.Lifespan; @@ -44,7 +45,7 @@ import static org.junit.Assert.assertEquals; import static org.neo4j.coreedge.ReplicationModule.LAST_FLUSHED_NAME; import static org.neo4j.coreedge.ReplicationModule.SESSION_TRACKER_NAME; -import static org.neo4j.coreedge.core.EnterpriseCoreEditionModule.CORE_MEMBER_ID_NAME; +import static org.neo4j.coreedge.core.IdentityModule.CORE_MEMBER_ID_NAME; import static org.neo4j.coreedge.core.consensus.ConsensusModule.RAFT_MEMBERSHIP_NAME; import static org.neo4j.coreedge.core.consensus.ConsensusModule.RAFT_TERM_NAME; import static org.neo4j.coreedge.core.consensus.ConsensusModule.RAFT_VOTE_NAME; @@ -75,8 +76,8 @@ public void shouldDumpClusterState() throws Exception private void createStates() throws IOException { - MemberIdStorage memberIdStorage = new MemberIdStorage( fsa.get(), clusterStateDirectory, CORE_MEMBER_ID_NAME, new MemberId.Marshal(), NullLogProvider.getInstance() ); - memberIdStorage.readState(); + SimpleStorage memberIdStorage = new SimpleStorage<>( fsa.get(), clusterStateDirectory, CORE_MEMBER_ID_NAME, new MemberId.Marshal(), NullLogProvider.getInstance() ); + memberIdStorage.writeState( new MemberId( UUID.randomUUID() ) ); createDurableState( LAST_FLUSHED_NAME, new LongIndexMarshal() ); createDurableState( LOCK_TOKEN_NAME, new ReplicatedLockTokenState.Marshal( new MemberId.Marshal() ) ); diff --git a/enterprise/core-edge/src/test/java/org/neo4j/coreedge/core/state/storage/MemberIdStorageTest.java b/enterprise/core-edge/src/test/java/org/neo4j/coreedge/core/state/storage/SimpleStorageTest.java similarity index 52% rename from enterprise/core-edge/src/test/java/org/neo4j/coreedge/core/state/storage/MemberIdStorageTest.java rename to enterprise/core-edge/src/test/java/org/neo4j/coreedge/core/state/storage/SimpleStorageTest.java index d59a9d074bf67..84a11d5d16db8 100644 --- a/enterprise/core-edge/src/test/java/org/neo4j/coreedge/core/state/storage/MemberIdStorageTest.java +++ b/enterprise/core-edge/src/test/java/org/neo4j/coreedge/core/state/storage/SimpleStorageTest.java @@ -23,6 +23,7 @@ import org.junit.Test; import java.io.File; +import java.util.UUID; import org.neo4j.coreedge.identity.MemberId; import org.neo4j.logging.NullLogProvider; @@ -30,39 +31,24 @@ import static org.junit.Assert.*; -public class MemberIdStorageTest +public class SimpleStorageTest { @Rule public EphemeralFileSystemRule fsa = new EphemeralFileSystemRule(); @Test - public void shouldInitializeWithUniqueMemberId() throws Exception + public void shouldWriteAndReadState() throws Exception { // given - MemberIdStorage storageA = new MemberIdStorage( fsa.get(), new File( "state-dir" ), "member-id-a", new MemberId.Marshal(), NullLogProvider.getInstance() ); - MemberIdStorage storageB = new MemberIdStorage( fsa.get(), new File( "state-dir" ), "member-id-b", new MemberId.Marshal(), NullLogProvider.getInstance() ); + SimpleStorage storage = new SimpleStorage<>( fsa.get(), new File( "state-dir" ), "member-id-a", new MemberId.Marshal(), NullLogProvider.getInstance() ); // when - MemberId idA = storageA.readState(); - MemberId idB = storageB.readState(); + MemberId idA = new MemberId( UUID.randomUUID() ); + storage.writeState( idA ); + MemberId idB = storage.readState(); // then - assertNotEquals( idA.getUuid(), idB.getUuid() ); - assertNotEquals( idA, idB ); - } - - @Test - public void shouldReadInitializedStateOnSubsequentInvocation() throws Exception - { - // given - MemberIdStorage storage = new MemberIdStorage( fsa.get(), new File( "state-dir" ), "member-id", new MemberId.Marshal(), NullLogProvider.getInstance() ); - MemberId memberIdA = storage.readState(); - - // when - MemberId memberIdB = storage.readState(); - - // then - assertEquals( memberIdA, memberIdB ); - assertEquals( memberIdA.getUuid(), memberIdB.getUuid() ); + assertEquals( idA.getUuid(), idB.getUuid() ); + assertEquals( idA, idB ); } } diff --git a/enterprise/core-edge/src/test/java/org/neo4j/coreedge/discovery/SharedDiscoveryService.java b/enterprise/core-edge/src/test/java/org/neo4j/coreedge/discovery/SharedDiscoveryService.java index bc4a7d3490448..67b9332c3c247 100644 --- a/enterprise/core-edge/src/test/java/org/neo4j/coreedge/discovery/SharedDiscoveryService.java +++ b/enterprise/core-edge/src/test/java/org/neo4j/coreedge/discovery/SharedDiscoveryService.java @@ -49,7 +49,7 @@ public class SharedDiscoveryService implements DiscoveryServiceFactory private final Condition enoughMembers = lock.newCondition(); @Override - public CoreTopologyService coreDiscoveryService( Config config, MemberId myself, LogProvider logProvider ) + public CoreTopologyService coreTopologyService( Config config, MemberId myself, LogProvider logProvider ) { return new SharedDiscoveryCoreClient( this, myself, logProvider, config ); }