示例#1
0
//JAVA TO C# CONVERTER TODO TASK: Most Java annotations will not have direct .NET equivalent attributes:
//ORIGINAL LINE: @Test public void shouldBootstrapWhenBootstrappable() throws Throwable
//JAVA TO C# CONVERTER WARNING: Method 'throws' clauses are not available in C#:
        public virtual void ShouldBootstrapWhenBootstrappable()
        {
            // given
//JAVA TO C# CONVERTER TODO TASK: Method reference arbitrary object instance method syntax is not converted by Java to C# Converter:
            IDictionary <MemberId, CoreServerInfo> members = IntStream.range(0, _minCoreHosts).mapToObj(i => Pair.of(new MemberId(System.Guid.randomUUID()), TestTopology.addressesForCore(i, false))).collect(Collectors.toMap(Pair::first, Pair::other));

            CoreTopology bootstrappableTopology = new CoreTopology(null, true, members);

            CoreTopologyService topologyService = mock(typeof(CoreTopologyService));

            when(topologyService.LocalCoreServers()).thenReturn(bootstrappableTopology);
            when(topologyService.SetClusterId(any(), eq("default"))).thenReturn(true);
            CoreSnapshot snapshot = mock(typeof(CoreSnapshot));

            when(_coreBootstrapper.bootstrap(any())).thenReturn(snapshot);

            ClusterBinder binder = ClusterBinder(new StubSimpleStorage <ClusterId>(this), topologyService);

            // when
            BoundState boundState = binder.BindToCluster();

            // then
            verify(_coreBootstrapper).bootstrap(any());
            Optional <ClusterId> clusterId = binder.Get();

            assertTrue(clusterId.Present);
            verify(topologyService).setClusterId(clusterId.get(), "default");
            assertTrue(boundState.Snapshot().Present);
            assertEquals(boundState.Snapshot().get(), snapshot);
        }
示例#2
0
        private IList <Endpoint> RouteEndpoints(string dbName)
        {
            CoreTopology            filtered = _topologyService.allCoreServers().filterTopologyByDb(dbName);
            Stream <CoreServerInfo> filteredCoreMemberInfo = filtered.Members().Values.stream();

            return(filteredCoreMemberInfo.map(extractBoltAddress()).map(Endpoint.route).collect(Collectors.toList()));
        }
示例#3
0
//JAVA TO C# CONVERTER TODO TASK: Most Java annotations will not have direct .NET equivalent attributes:
//ORIGINAL LINE: @Test public void ttlShouldBeInSeconds() throws Exception
//JAVA TO C# CONVERTER WARNING: Method 'throws' clauses are not available in C#:
        public virtual void TtlShouldBeInSeconds()
        {
            // given
//JAVA TO C# CONVERTER WARNING: The original Java variable was marked 'final':
//ORIGINAL LINE: final org.neo4j.causalclustering.discovery.CoreTopologyService coreTopologyService = mock(org.neo4j.causalclustering.discovery.CoreTopologyService.class);
            CoreTopologyService coreTopologyService = mock(typeof(CoreTopologyService));

            LeaderLocator leaderLocator = mock(typeof(LeaderLocator));

//JAVA TO C# CONVERTER WARNING: The original Java variable was marked 'final':
//ORIGINAL LINE: final org.neo4j.causalclustering.discovery.CoreTopology clusterTopology = new org.neo4j.causalclustering.discovery.CoreTopology(clusterId, false, new java.util.HashMap<>());
            CoreTopology clusterTopology = new CoreTopology(_clusterId, false, new Dictionary <MemberId, CoreServerInfo>());

            when(coreTopologyService.LocalCoreServers()).thenReturn(clusterTopology);
            when(coreTopologyService.LocalReadReplicas()).thenReturn(new ReadReplicaTopology(emptyMap()));

            // set the TTL in minutes
            Config.augment(cluster_routing_ttl, "10m");

//JAVA TO C# CONVERTER WARNING: The original Java variable was marked 'final':
//ORIGINAL LINE: final LegacyGetServersProcedure proc = new LegacyGetServersProcedure(coreTopologyService, leaderLocator, config, getInstance());
            LegacyGetServersProcedure proc = new LegacyGetServersProcedure(coreTopologyService, leaderLocator, Config, Instance);

            // when
            IList <object[]> results = new IList <object[]> {
                proc.Apply(null, new object[0], null)
            };

            // then
            object[] rows         = results[0];
            long     ttlInSeconds = ( long )rows[0];

            assertEquals(600, ttlInSeconds);
        }
示例#4
0
//JAVA TO C# CONVERTER TODO TASK: Most Java annotations will not have direct .NET equivalent attributes:
//ORIGINAL LINE: @Test public void shouldProvideReaderAndRouterForSingleCoreSetup() throws Exception
//JAVA TO C# CONVERTER WARNING: Method 'throws' clauses are not available in C#:
        public virtual void ShouldProvideReaderAndRouterForSingleCoreSetup()
        {
            // given
//JAVA TO C# CONVERTER WARNING: The original Java variable was marked 'final':
//ORIGINAL LINE: final org.neo4j.causalclustering.discovery.CoreTopologyService coreTopologyService = mock(org.neo4j.causalclustering.discovery.CoreTopologyService.class);
            CoreTopologyService coreTopologyService = mock(typeof(CoreTopologyService));

            LeaderLocator leaderLocator = mock(typeof(LeaderLocator));

            IDictionary <MemberId, CoreServerInfo> coreMembers = new Dictionary <MemberId, CoreServerInfo>();

            coreMembers[member(0)] = addressesForCore(0, false);

//JAVA TO C# CONVERTER WARNING: The original Java variable was marked 'final':
//ORIGINAL LINE: final org.neo4j.causalclustering.discovery.CoreTopology clusterTopology = new org.neo4j.causalclustering.discovery.CoreTopology(clusterId, false, coreMembers);
            CoreTopology clusterTopology = new CoreTopology(_clusterId, false, coreMembers);

            when(coreTopologyService.LocalCoreServers()).thenReturn(clusterTopology);
            when(coreTopologyService.LocalReadReplicas()).thenReturn(new ReadReplicaTopology(emptyMap()));

//JAVA TO C# CONVERTER WARNING: The original Java variable was marked 'final':
//ORIGINAL LINE: final LegacyGetServersProcedure proc = new LegacyGetServersProcedure(coreTopologyService, leaderLocator, config, getInstance());
            LegacyGetServersProcedure proc = new LegacyGetServersProcedure(coreTopologyService, leaderLocator, Config, Instance);

            // when
            ClusterView clusterView = Run(proc);

            // then
            ClusterView.Builder builder = new ClusterView.Builder();
            builder.ReadAddress(addressesForCore(0, false).connectors().boltAddress());
            builder.RouteAddress(addressesForCore(0, false).connectors().boltAddress());

            assertEquals(builder.Build(), clusterView);
        }
示例#5
0
        private IList <Endpoint> ReadEndpoints(CoreTopology coreTopology, ReadReplicaTopology rrTopology, Policy policy)
        {
//JAVA TO C# CONVERTER TODO TASK: Most Java stream collectors are not converted by Java to C# Converter:
            ISet <ServerInfo> possibleReaders = rrTopology.Members().SetOfKeyValuePairs().Select(entry => new ServerInfo(entry.Value.connectors().boltAddress(), entry.Key, entry.Value.groups())).collect(Collectors.toSet());

            if (_allowReadsOnFollowers || possibleReaders.Count == 0)
            {
                ISet <MemberId> validCores = coreTopology.Members().Keys;
                try
                {
                    MemberId leader = _leaderLocator.Leader;
//JAVA TO C# CONVERTER TODO TASK: Most Java stream collectors are not converted by Java to C# Converter:
                    validCores = validCores.Where(memberId => !memberId.Equals(leader)).collect(Collectors.toSet());
                }
                catch (NoLeaderFoundException)
                {
                    // we might end up using the leader for reading during this ttl, should be fine in general
                }

                foreach (MemberId validCore in validCores)
                {
                    Optional <CoreServerInfo> coreServerInfo = coreTopology.find(validCore);
                    coreServerInfo.ifPresent(coreServerInfo1 => possibleReaders.Add(new ServerInfo(coreServerInfo1.connectors().boltAddress(), validCore, coreServerInfo1.groups())));
                }
            }

            ISet <ServerInfo> readers = policy.Apply(possibleReaders);

            return(readers.Select(r => Endpoint.read(r.boltAddress())).ToList());
        }
示例#6
0
//JAVA TO C# CONVERTER WARNING: Method 'throws' clauses are not available in C#:
//ORIGINAL LINE: public org.neo4j.causalclustering.routing.load_balancing.LoadBalancingProcessor_Result run(java.util.Map<String,String> context) throws org.neo4j.internal.kernel.api.exceptions.ProcedureException
        public override Org.Neo4j.causalclustering.routing.load_balancing.LoadBalancingProcessor_Result Run(IDictionary <string, string> context)
        {
            Policy policy = _policies.selectFor(context);

            CoreTopology        coreTopology = _topologyService.localCoreServers();
            ReadReplicaTopology rrTopology   = _topologyService.localReadReplicas();

            return(new LoadBalancingResult(RouteEndpoints(coreTopology), WriteEndpoints(coreTopology), ReadEndpoints(coreTopology, rrTopology, policy), _timeToLive.Value));
        }
示例#7
0
//JAVA TO C# CONVERTER WARNING: Method 'throws' clauses are not available in C#:
//ORIGINAL LINE: public java.util.Optional<org.neo4j.causalclustering.identity.MemberId> upstreamDatabase() throws org.neo4j.causalclustering.upstream.UpstreamDatabaseSelectionException
        public override Optional <MemberId> UpstreamDatabase()
        {
//JAVA TO C# CONVERTER WARNING: The original Java variable was marked 'final':
//ORIGINAL LINE: final org.neo4j.causalclustering.discovery.CoreTopology coreTopology = topologyService.localCoreServers();
            CoreTopology coreTopology = TopologyService.localCoreServers();

            if (coreTopology.Members().Count == 0)
            {
                throw new UpstreamDatabaseSelectionException("No core servers available");
            }

            int skippedServers = _random.Next(coreTopology.Members().Count);

            return(coreTopology.Members().Keys.Skip(skippedServers).First());
        }
示例#8
0
        private IDictionary <string, IList <Endpoint> > RouteEndpoints()
        {
            CoreTopology            core = _topologyService.allCoreServers();
            Stream <CoreServerInfo> allCoreMemberInfo = _topologyService.allCoreServers().members().Values.stream();

//JAVA TO C# CONVERTER TODO TASK: Method reference arbitrary object instance method syntax is not converted by Java to C# Converter:
            IDictionary <string, IList <CoreServerInfo> > coresByDb = allCoreMemberInfo.collect(Collectors.groupingBy(CoreServerInfo::getDatabaseName));

            System.Func <KeyValuePair <string, IList <CoreServerInfo> >, IList <Endpoint> > extractQualifiedBoltAddresses = entry =>
            {
                IList <CoreServerInfo> cores = entry.Value;
                return(cores.Select(extractBoltAddress()).Select(Endpoint.route).ToList());
            };

            return(coresByDb.SetOfKeyValuePairs().ToDictionary(DictionaryEntry.getKey, extractQualifiedBoltAddresses));
        }
示例#9
0
//JAVA TO C# CONVERTER TODO TASK: Most Java annotations will not have direct .NET equivalent attributes:
//ORIGINAL LINE: @Test public void shouldReturnEndpointsInDifferentOrders() throws Exception
//JAVA TO C# CONVERTER WARNING: Method 'throws' clauses are not available in C#:
        public virtual void ShouldReturnEndpointsInDifferentOrders()
        {
            // given
//JAVA TO C# CONVERTER WARNING: The original Java variable was marked 'final':
//ORIGINAL LINE: final org.neo4j.causalclustering.discovery.CoreTopologyService coreTopologyService = mock(org.neo4j.causalclustering.discovery.CoreTopologyService.class);
            CoreTopologyService coreTopologyService = mock(typeof(CoreTopologyService));

            LeaderLocator leaderLocator = mock(typeof(LeaderLocator));

            when(leaderLocator.Leader).thenReturn(member(0));

            IDictionary <MemberId, CoreServerInfo> coreMembers = new Dictionary <MemberId, CoreServerInfo>();

            coreMembers[member(0)] = addressesForCore(0, false);
            coreMembers[member(1)] = addressesForCore(1, false);
            coreMembers[member(2)] = addressesForCore(2, false);

//JAVA TO C# CONVERTER WARNING: The original Java variable was marked 'final':
//ORIGINAL LINE: final org.neo4j.causalclustering.discovery.CoreTopology clusterTopology = new org.neo4j.causalclustering.discovery.CoreTopology(clusterId, false, coreMembers);
            CoreTopology clusterTopology = new CoreTopology(_clusterId, false, coreMembers);

            when(coreTopologyService.LocalCoreServers()).thenReturn(clusterTopology);
            when(coreTopologyService.LocalReadReplicas()).thenReturn(new ReadReplicaTopology(emptyMap()));

//JAVA TO C# CONVERTER WARNING: The original Java variable was marked 'final':
//ORIGINAL LINE: final LegacyGetServersProcedure proc = new LegacyGetServersProcedure(coreTopologyService, leaderLocator, config, getInstance());
            LegacyGetServersProcedure proc = new LegacyGetServersProcedure(coreTopologyService, leaderLocator, _config, Instance);

            // when
            object[] endpoints = GetEndpoints(proc);

            //then
            object[] endpointsInDifferentOrder = GetEndpoints(proc);
            for (int i = 0; i < 100; i++)
            {
                if (Arrays.deepEquals(endpointsInDifferentOrder, endpoints))
                {
                    endpointsInDifferentOrder = GetEndpoints(proc);
                }
                else
                {
                    //Different order of servers, no need to retry.
                    break;
                }
            }
            assertFalse(Arrays.deepEquals(endpoints, endpointsInDifferentOrder));
        }
示例#10
0
//JAVA TO C# CONVERTER TODO TASK: Most Java annotations will not have direct .NET equivalent attributes:
//ORIGINAL LINE: @Test(expected = java.util.concurrent.TimeoutException.class) public void shouldTimeoutIfPublishContinuallyFailsWithTransientErrors() throws Throwable
//JAVA TO C# CONVERTER WARNING: Method 'throws' clauses are not available in C#:
        public virtual void ShouldTimeoutIfPublishContinuallyFailsWithTransientErrors()
        {
            // given
//JAVA TO C# CONVERTER TODO TASK: Method reference arbitrary object instance method syntax is not converted by Java to C# Converter:
            IDictionary <MemberId, CoreServerInfo> members = IntStream.range(0, _minCoreHosts).mapToObj(i => Pair.of(new MemberId(System.Guid.randomUUID()), TestTopology.addressesForCore(i, false))).collect(Collectors.toMap(Pair::first, Pair::other));

            CoreTopology        bootstrappableTopology = new CoreTopology(null, true, members);
            CoreTopologyService topologyService        = mock(typeof(CoreTopologyService));

            when(topologyService.SetClusterId(any(), anyString())).thenThrow(typeof(OperationTimeoutException));                   // Causes a retry
            when(topologyService.LocalCoreServers()).thenReturn(bootstrappableTopology);

            ClusterBinder binder = ClusterBinder(new StubSimpleStorage <ClusterId>(this), topologyService);

            // when
            binder.BindToCluster();
        }
示例#11
0
        private IList <Endpoint> WriteEndpoints(CoreTopology cores)
        {
            MemberId leader;

            try
            {
                leader = _leaderLocator.Leader;
            }
            catch (NoLeaderFoundException)
            {
                return(emptyList());
            }

            Optional <Endpoint> endPoint = cores.find(leader).map(extractBoltAddress()).map(Endpoint.write);

            return(new IList <Endpoint> {
                endPoint
            });
        }
示例#12
0
//JAVA TO C# CONVERTER TODO TASK: Most Java annotations will not have direct .NET equivalent attributes:
//ORIGINAL LINE: @Test public void shouldBindToClusterIdPublishedByAnotherMember() throws Throwable
//JAVA TO C# CONVERTER WARNING: Method 'throws' clauses are not available in C#:
        public virtual void ShouldBindToClusterIdPublishedByAnotherMember()
        {
            // given
            ClusterId    publishedClusterId = new ClusterId(System.Guid.randomUUID());
            CoreTopology unboundTopology    = new CoreTopology(null, false, emptyMap());
            CoreTopology boundTopology      = new CoreTopology(publishedClusterId, false, emptyMap());

            CoreTopologyService topologyService = mock(typeof(CoreTopologyService));

            when(topologyService.LocalCoreServers()).thenReturn(unboundTopology).thenReturn(boundTopology);

            ClusterBinder binder = ClusterBinder(new StubSimpleStorage <ClusterId>(this), topologyService);

            // when
            binder.BindToCluster();

            // then
            Optional <ClusterId> clusterId = binder.Get();

            assertTrue(clusterId.Present);
            assertEquals(publishedClusterId, clusterId.get());
            verify(topologyService, atLeast(2)).localCoreServers();
        }
示例#13
0
        public override RawIterator <object[], ProcedureException> Apply(Context ctx, object[] input, ResourceTracker resourceTracker)
        {
            IDictionary <MemberId, RoleInfo> roleMap   = _topologyService.allCoreRoles();
            IList <ReadWriteEndPoint>        endpoints = new List <ReadWriteEndPoint>();

            CoreTopology    coreTopology = _topologyService.allCoreServers();
            ISet <MemberId> coreMembers  = coreTopology.Members().Keys;

            foreach (MemberId memberId in coreMembers)
            {
                Optional <CoreServerInfo> coreServerInfo = coreTopology.find(memberId);
                if (coreServerInfo.Present)
                {
                    CoreServerInfo info = coreServerInfo.get();
                    RoleInfo       role = roleMap.getOrDefault(memberId, RoleInfo.UNKNOWN);
                    endpoints.Add(new ReadWriteEndPoint(info.Connectors(), role, memberId.Uuid, new IList <string> {
                        info.Groups()
                    }, info.DatabaseName));
                }
                else
                {
                    _log.debug("No Address found for " + memberId);
                }
            }

            foreach (KeyValuePair <MemberId, ReadReplicaInfo> readReplica in _topologyService.allReadReplicas().members().SetOfKeyValuePairs())
            {
                ReadReplicaInfo readReplicaInfo = readReplica.Value;
                endpoints.Add(new ReadWriteEndPoint(readReplicaInfo.Connectors(), RoleInfo.READ_REPLICA, readReplica.Key.Uuid, new IList <string> {
                    readReplicaInfo.Groups()
                }, readReplicaInfo.DatabaseName));
            }

            endpoints.sort(comparing(o => o.addresses().ToString()));

            return(map(endpoint => new object[] { endpoint.memberId().ToString(), endpoint.addresses().uriList().Select(URI.toString).ToList(), endpoint.role().name(), endpoint.groups(), endpoint.dbName() }, asRawIterator(endpoints.GetEnumerator())));
        }
示例#14
0
//JAVA TO C# CONVERTER TODO TASK: Most Java annotations will not have direct .NET equivalent attributes:
//ORIGINAL LINE: @Test public void shouldTimeoutWhenNotBootstrappableAndNobodyElsePublishesClusterId() throws Throwable
//JAVA TO C# CONVERTER WARNING: Method 'throws' clauses are not available in C#:
        public virtual void ShouldTimeoutWhenNotBootstrappableAndNobodyElsePublishesClusterId()
        {
            // given
            CoreTopology        unboundTopology = new CoreTopology(null, false, emptyMap());
            CoreTopologyService topologyService = mock(typeof(CoreTopologyService));

            when(topologyService.LocalCoreServers()).thenReturn(unboundTopology);

            ClusterBinder binder = ClusterBinder(new StubSimpleStorage <ClusterId>(this), topologyService);

            try
            {
                // when
                binder.BindToCluster();
                fail("Should have timed out");
            }
            catch (TimeoutException)
            {
                // expected
            }

            // then
            verify(topologyService, atLeast(2)).localCoreServers();
        }
示例#15
0
 private IList <Endpoint> RouteEndpoints(CoreTopology cores)
 {
     return(cores.Members().Values.Select(extractBoltAddress()).Select(Endpoint.route).ToList());
 }
示例#16
0
 public TopologyServiceAnonymousInnerClass(CoreTopology coreTopology, ReadReplicaTopology readReplicaTopology)
 {
     this._coreTopology        = coreTopology;
     this._readReplicaTopology = readReplicaTopology;
 }
示例#17
0
            public override Optional <MemberId> UpstreamDatabase()
            {
                CoreTopology coreTopology = TopologyService.allCoreServers();

                return(Optional.ofNullable(coreTopology.Members().Keys.GetEnumerator().next()));
            }
示例#18
0
 internal static TopologyService FakeTopologyService(CoreTopology coreTopology, ReadReplicaTopology readReplicaTopology)
 {
     return(new TopologyServiceAnonymousInnerClass(coreTopology, readReplicaTopology));
 }