예제 #1
0
//JAVA TO C# CONVERTER TODO TASK: Most Java annotations will not have direct .NET equivalent attributes:
//ORIGINAL LINE: @Test public void shouldValidateReadReplicaAttrMapNullValues()
        public virtual void ShouldValidateReadReplicaAttrMapNullValues()
        {
            // given
            IDictionary <MemberId, ReadReplicaInfo> mockedRRs = new Dictionary <MemberId, ReadReplicaInfo>();

            MemberId        validMemberId          = new MemberId(System.Guid.randomUUID());
            MemberId        invalidMemberId        = new MemberId(System.Guid.randomUUID());
            ReadReplicaInfo validReadReplicaInfo   = GenerateReadReplicaInfo();
            ReadReplicaInfo invalidReadReplicaInfo = GenerateReadReplicaInfo();

            mockedRRs[validMemberId]   = validReadReplicaInfo;
            mockedRRs[invalidMemberId] = invalidReadReplicaInfo;

            IDictionary <MemberId, ISet <string> > nullAttrValues = singletonMap(invalidMemberId, singleton(READ_REPLICA_TRANSACTION_SERVER_ADDRESS_MAP));

            MockReadReplicaAttributes(mockedRRs, emptySet(), nullAttrValues);

            // when
            AssertableLogProvider logProvider = new AssertableLogProvider();
            Log log = logProvider.getLog(this.GetType());
            IDictionary <MemberId, ReadReplicaInfo> rrMap = HazelcastClusterTopology.ReadReplicas(_hzInstance, log);

            // then
            assertEquals(singletonMap(validMemberId, validReadReplicaInfo), rrMap);

            logProvider.RawMessageMatcher().assertContains(Matchers.allOf(Matchers.containsString("Missing attribute %s for read replica")));
        }
예제 #2
0
        /// <summary>
        /// Given a hazelcast member id and a set of non-null attribute maps, this method builds a discovery representation of a read replica
        /// (i.e. `Pair<MemberId,ReadReplicaInfo>`). Any missing attributes which are missing for a given hazelcast member id are logged and this
        /// method will return null.
        /// </summary>
        private static Pair <MemberId, ReadReplicaInfo> BuildReadReplicaFromAttrMap(string hzId, IDictionary <string, IMap <string, string> > simpleAttrMaps, MultiMap <string, string> serverGroupsMap, Log log)
        {
//JAVA TO C# CONVERTER TODO TASK: Most Java stream collectors are not converted by Java to C# Converter:
            IDictionary <string, string> memberAttrs = simpleAttrMaps.SetOfKeyValuePairs().Select(e => Pair.of(e.Key, e.Value.get(hzId))).Where(p => HasAttribute(p, hzId, log)).collect(CollectorsUtil.pairsToMap());

//JAVA TO C# CONVERTER TODO TASK: There is no .NET equivalent to the java.util.Collection 'containsAll' method:
            if (!memberAttrs.Keys.containsAll(RrAttrKeys))
            {
                return(null);
            }

            ICollection <string> memberServerGroups = serverGroupsMap.get(hzId);

            if (memberServerGroups == null)
            {
                log.Warn("Missing attribute %s for read replica with hz id %s", SERVER_GROUPS_MULTIMAP, hzId);
                return(null);
            }

            ClientConnectorAddresses boltAddresses = ClientConnectorAddresses.FromString(memberAttrs[READ_REPLICA_BOLT_ADDRESS_MAP]);
//JAVA TO C# CONVERTER TODO TASK: Method reference constructor syntax is not converted by Java to C# Converter:
            AdvertisedSocketAddress catchupAddress = socketAddress(memberAttrs[READ_REPLICA_TRANSACTION_SERVER_ADDRESS_MAP], AdvertisedSocketAddress::new);
            MemberId      memberId       = new MemberId(System.Guid.Parse(memberAttrs[READ_REPLICA_MEMBER_ID_MAP]));
            string        memberDbName   = memberAttrs[READ_REPLICAS_DB_NAME_MAP];
            ISet <string> serverGroupSet = asSet(memberServerGroups);

            ReadReplicaInfo rrInfo = new ReadReplicaInfo(boltAddresses, catchupAddress, serverGroupSet, memberDbName);

            return(Pair.of(memberId, rrInfo));
        }
예제 #3
0
        internal SharedDiscoveryReadReplicaClient(SharedDiscoveryService sharedDiscoveryService, Config config, MemberId memberId, LogProvider logProvider)
        {
            this._sharedDiscoveryService = sharedDiscoveryService;
            this._dbName = config.Get(CausalClusteringSettings.database);
//JAVA TO C# CONVERTER TODO TASK: Method reference constructor syntax is not converted by Java to C# Converter:
            this._addresses = new ReadReplicaInfo(ClientConnectorAddresses.ExtractFromConfig(config), socketAddress(config.Get(CausalClusteringSettings.transaction_advertised_address).ToString(), AdvertisedSocketAddress::new), _dbName);
            this._memberId  = memberId;
            this._log       = logProvider.getLog(this.GetType());
        }
예제 #4
0
        internal void RegisterReadReplica(SharedDiscoveryReadReplicaClient client)
        {
            ReadReplicaInfo previousRR = _readReplicas.putIfAbsent(client.MemberId, client.ReadReplicainfo);

            if (previousRR == null)
            {
                NotifyCoreClients();
            }
        }
예제 #5
0
        public override bool Equals(object o)
        {
            if (this == o)
            {
                return(true);
            }
            if (o == null || this.GetType() != o.GetType())
            {
                return(false);
            }
            ReadReplicaInfo that = ( ReadReplicaInfo )o;

            return(Objects.Equals(_catchupServerAddress, that._catchupServerAddress) && Objects.Equals(_clientConnectorAddresses, that._clientConnectorAddresses) && Objects.Equals(_groups, that._groups) && Objects.Equals(_dbName, that._dbName));
        }
예제 #6
0
//JAVA TO C# CONVERTER TODO TASK: Most Java annotations will not have direct .NET equivalent attributes:
//ORIGINAL LINE: @Test public void shouldCollectReadReplicasAsMap()
        public virtual void ShouldCollectReadReplicasAsMap()
        {
            // given
            MemberId        memberId        = new MemberId(System.Guid.randomUUID());
            ReadReplicaInfo readReplicaInfo = GenerateReadReplicaInfo();
            IDictionary <MemberId, ReadReplicaInfo> mockedRRs = singletonMap(memberId, readReplicaInfo);

            MockReadReplicaAttributes(mockedRRs);

            // when
            IDictionary <MemberId, ReadReplicaInfo> rrMap = HazelcastClusterTopology.ReadReplicas(_hzInstance, NullLog.Instance);

            // then
            assertEquals(mockedRRs, rrMap);
        }
예제 #7
0
//JAVA TO C# CONVERTER TODO TASK: Most Java annotations will not have direct .NET equivalent attributes:
//ORIGINAL LINE: @Test public void shouldValidateNullReadReplicaAttrMaps()
        public virtual void ShouldValidateNullReadReplicaAttrMaps()
        {
            // given
            MemberId        memberId        = new MemberId(System.Guid.randomUUID());
            ReadReplicaInfo readReplicaInfo = GenerateReadReplicaInfo();

            MockReadReplicaAttributes(singletonMap(memberId, readReplicaInfo), singleton(READ_REPLICAS_DB_NAME_MAP), emptyMap());

            // when
            AssertableLogProvider logProvider = new AssertableLogProvider();
            Log log = logProvider.getLog(this.GetType());
            IDictionary <MemberId, ReadReplicaInfo> rrMap = HazelcastClusterTopology.ReadReplicas(_hzInstance, log);

            // then
            assertEquals(emptyMap(), rrMap);
            logProvider.FormattedMessageMatcher().assertContains("Some, but not all, of the read replica attribute maps are null");
        }
예제 #8
0
        private void GenerateReadReplicaAttributes(System.Guid hzId, MemberId memberId, ReadReplicaInfo readReplicaInfo, ISet <string> missingAttrsMaps, ISet <string> nullAttrs)
        {
            IDictionary <string, System.Func <MemberId, ReadReplicaInfo, string> > attributeFactories = new Dictionary <string, System.Func <MemberId, ReadReplicaInfo, string> >();

            attributeFactories[READ_REPLICAS_DB_NAME_MAP] = (ignored, rr) => rr.DatabaseName;
            attributeFactories[READ_REPLICA_TRANSACTION_SERVER_ADDRESS_MAP] = (ignored, rr) => rr.CatchupServer.ToString();
            attributeFactories[READ_REPLICA_MEMBER_ID_MAP]    = (mId, ignored) => mId.Uuid.ToString();
            attributeFactories[READ_REPLICA_BOLT_ADDRESS_MAP] = (ignored, rr) => rr.connectors().ToString();

            attributeFactories.SetOfKeyValuePairs().Where(e => !missingAttrsMaps.Contains(e.Key)).ForEach(e =>
            {
                string attrValue = nullAttrs.Contains(e.Key) ? null : e.Value.apply(memberId, readReplicaInfo);
                MockReadReplicaAttribute(e.Key, hzId, attrValue);
            });
        }
예제 #9
0
 public static Config ConfigFor(ReadReplicaInfo readReplicaInfo)
 {
     return(Config.builder().withSetting("dbms.connector.bolt.listen_address", readReplicaInfo.Connectors().boltAddress().ToString()).withSetting("dbms.connector.bolt.enabled", true.ToString()).withSetting(CausalClusteringSettings.transaction_advertised_address, readReplicaInfo.CatchupServer.ToString()).withSetting(CausalClusteringSettings.server_groups, string.join(",", readReplicaInfo.Groups())).withSetting(CausalClusteringSettings.database, readReplicaInfo.DatabaseName).build());
 }