本文整理汇总了C#中ClusterDescription.WithServerDescription方法的典型用法代码示例。如果您正苦于以下问题:C# ClusterDescription.WithServerDescription方法的具体用法?C# ClusterDescription.WithServerDescription怎么用?C# ClusterDescription.WithServerDescription使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类ClusterDescription
的用法示例。
在下文中一共展示了ClusterDescription.WithServerDescription方法的6个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。
示例1: EnsureServer
private ClusterDescription EnsureServer(ClusterDescription clusterDescription, EndPoint endPoint)
{
if (_state.Value == State.Disposed)
{
return clusterDescription;
}
IClusterableServer server;
Stopwatch stopwatch = new Stopwatch();
lock (_serversLock)
{
if (_servers.Any(n => EndPointHelper.Equals(n.EndPoint, endPoint)))
{
return clusterDescription;
}
if (_addingServerEventHandler != null)
{
_addingServerEventHandler(new ClusterAddingServerEvent(ClusterId, endPoint));
}
stopwatch.Start();
server = CreateServer(endPoint);
server.DescriptionChanged += ServerDescriptionChangedHandler;
_servers.Add(server);
}
clusterDescription = clusterDescription.WithServerDescription(server.Description);
server.Initialize();
stopwatch.Stop();
if (_addedServerEventHandler != null)
{
_addedServerEventHandler(new ClusterAddedServerEvent(server.ServerId, stopwatch.Elapsed));
}
return clusterDescription;
}
示例2: ProcessShardedChange
private ClusterDescription ProcessShardedChange(ClusterDescription clusterDescription, ServerDescriptionChangedEventArgs args)
{
if (args.NewServerDescription.Type != ServerType.ShardRouter)
{
return RemoveServer(clusterDescription, args.NewServerDescription.EndPoint, "Server is not a shard router.");
}
return clusterDescription.WithServerDescription(args.NewServerDescription);
}
示例3: ProcessReplicaSetChange
private ClusterDescription ProcessReplicaSetChange(ClusterDescription clusterDescription, ServerDescriptionChangedEventArgs args)
{
if (!args.NewServerDescription.Type.IsReplicaSetMember())
{
return RemoveServer(clusterDescription, args.NewServerDescription.EndPoint, string.Format("Server is a {0}, not a replica set member.", args.NewServerDescription.Type));
}
if (args.NewServerDescription.Type == ServerType.ReplicaSetGhost)
{
return clusterDescription.WithServerDescription(args.NewServerDescription);
}
if (_replicaSetName == null)
{
_replicaSetName = args.NewServerDescription.ReplicaSetConfig.Name;
}
if (_replicaSetName != args.NewServerDescription.ReplicaSetConfig.Name)
{
return RemoveServer(clusterDescription, args.NewServerDescription.EndPoint, string.Format("Server was a member of the '{0}' replica set, but should be '{1}'.", args.NewServerDescription.ReplicaSetConfig.Name, _replicaSetName));
}
clusterDescription = clusterDescription.WithServerDescription(args.NewServerDescription);
clusterDescription = EnsureServers(clusterDescription, args.NewServerDescription);
if (args.NewServerDescription.CanonicalEndPoint != null &&
!EndPointHelper.Equals(args.NewServerDescription.CanonicalEndPoint, args.NewServerDescription.EndPoint))
{
return RemoveServer(clusterDescription, args.NewServerDescription.EndPoint, "CanonicalEndPoint is different than seed list EndPoint.");
}
if (args.NewServerDescription.Type == ServerType.ReplicaSetPrimary)
{
if (args.NewServerDescription.ElectionId != null)
{
if (_maxElectionId != null && _maxElectionId.CompareTo(args.NewServerDescription.ElectionId) > 0)
{
// ignore this change because we've already seen this election id
lock (_serversLock)
{
var server = _servers.SingleOrDefault(x => EndPointHelper.Equals(args.NewServerDescription.EndPoint, x.EndPoint));
server.Invalidate();
return clusterDescription.WithServerDescription(
new ServerDescription(server.ServerId, server.EndPoint));
}
}
_maxElectionId = args.NewServerDescription.ElectionId;
}
var currentPrimaryEndPoints = clusterDescription.Servers
.Where(x => x.Type == ServerType.ReplicaSetPrimary)
.Where(x => !EndPointHelper.Equals(x.EndPoint, args.NewServerDescription.EndPoint))
.Select(x => x.EndPoint)
.ToList();
if (currentPrimaryEndPoints.Count > 0)
{
lock (_serversLock)
{
var currentPrimaries = _servers.Where(x => EndPointHelper.Contains(currentPrimaryEndPoints, x.EndPoint));
foreach (var currentPrimary in currentPrimaries)
{
// kick off the server to invalidate itself
currentPrimary.Invalidate();
// set it to disconnected in the cluster
clusterDescription = clusterDescription.WithServerDescription(
new ServerDescription(currentPrimary.ServerId, currentPrimary.EndPoint));
}
}
}
}
return clusterDescription;
}
示例4: ProcessStandaloneChange
private ClusterDescription ProcessStandaloneChange(ClusterDescription clusterDescription, ServerDescriptionChangedEventArgs args)
{
if (Settings.EndPoints.Count > 1)
{
return RemoveServer(clusterDescription, args.NewServerDescription.EndPoint, "Cluster was provided with multiple endpoints, one of which is a standalone.");
}
if (args.NewServerDescription.Type != ServerType.Standalone)
{
return clusterDescription.WithServerDescription(
new ServerDescription(args.NewServerDescription.ServerId, args.NewServerDescription.EndPoint));
}
else
{
return clusterDescription.WithServerDescription(args.NewServerDescription);
}
}
示例5: ProcessReplicaSetChange
private ClusterDescription ProcessReplicaSetChange(ClusterDescription clusterDescription, ServerDescriptionChangedEventArgs args)
{
if (!args.NewServerDescription.Type.IsReplicaSetMember())
{
return RemoveServer(clusterDescription, args.NewServerDescription.EndPoint, string.Format("Server is a {0}, not a replica set member.", args.NewServerDescription.Type));
}
if (args.NewServerDescription.Type == ServerType.ReplicaSetGhost)
{
return clusterDescription.WithServerDescription(args.NewServerDescription);
}
if (_replicaSetName == null)
{
_replicaSetName = args.NewServerDescription.ReplicaSetConfig.Name;
}
if (_replicaSetName != args.NewServerDescription.ReplicaSetConfig.Name)
{
return RemoveServer(clusterDescription, args.NewServerDescription.EndPoint, string.Format("Server was a member of the '{0}' replica set, but should be '{1}'.", args.NewServerDescription.ReplicaSetConfig.Name, _replicaSetName));
}
clusterDescription = clusterDescription.WithServerDescription(args.NewServerDescription);
clusterDescription = EnsureServers(clusterDescription, args.NewServerDescription);
if (args.NewServerDescription.Type == ServerType.ReplicaSetPrimary &&
args.OldServerDescription.Type != ServerType.ReplicaSetPrimary)
{
var currentPrimaryEndPoints = clusterDescription.Servers
.Where(x => x.Type == ServerType.ReplicaSetPrimary)
.Where(x => !x.EndPoint.Equals(args.NewServerDescription.EndPoint))
.Select(x => x.EndPoint)
.ToList();
if (currentPrimaryEndPoints.Count > 0)
{
lock (_serversLock)
{
var currentPrimaries = _servers.Where(x => currentPrimaryEndPoints.Contains(x.EndPoint));
foreach (var currentPrimary in currentPrimaries)
{
// kick off the server to invalidate itself
currentPrimary.Invalidate();
// set it to disconnected in the cluster
clusterDescription = clusterDescription.WithServerDescription(
new ServerDescription(currentPrimary.ServerId, currentPrimary.EndPoint));
}
}
}
}
return clusterDescription;
}
示例6: ProcessReplicaSetChange
private ClusterDescription ProcessReplicaSetChange(ClusterDescription clusterDescription, ServerDescriptionChangedEventArgs args, List<IClusterableServer> newServers)
{
if (!args.NewServerDescription.Type.IsReplicaSetMember())
{
return RemoveServer(clusterDescription, args.NewServerDescription.EndPoint, string.Format("Server is a {0}, not a replica set member.", args.NewServerDescription.Type));
}
if (args.NewServerDescription.Type == ServerType.ReplicaSetGhost)
{
return clusterDescription.WithServerDescription(args.NewServerDescription);
}
if (_replicaSetName == null)
{
_replicaSetName = args.NewServerDescription.ReplicaSetConfig.Name;
}
if (_replicaSetName != args.NewServerDescription.ReplicaSetConfig.Name)
{
return RemoveServer(clusterDescription, args.NewServerDescription.EndPoint, string.Format("Server was a member of the '{0}' replica set, but should be '{1}'.", args.NewServerDescription.ReplicaSetConfig.Name, _replicaSetName));
}
clusterDescription = clusterDescription.WithServerDescription(args.NewServerDescription);
clusterDescription = EnsureServers(clusterDescription, args.NewServerDescription, newServers);
if (args.NewServerDescription.CanonicalEndPoint != null &&
!EndPointHelper.Equals(args.NewServerDescription.CanonicalEndPoint, args.NewServerDescription.EndPoint))
{
return RemoveServer(clusterDescription, args.NewServerDescription.EndPoint, "CanonicalEndPoint is different than seed list EndPoint.");
}
if (args.NewServerDescription.Type == ServerType.ReplicaSetPrimary)
{
if (args.NewServerDescription.ReplicaSetConfig.Version != null)
{
bool isCurrentPrimaryStale = true;
if (_maxElectionInfo != null)
{
isCurrentPrimaryStale = _maxElectionInfo.IsStale(args.NewServerDescription.ReplicaSetConfig.Version.Value, args.NewServerDescription.ElectionId);
var isReportedPrimaryStale = !isCurrentPrimaryStale;
if (isReportedPrimaryStale && args.NewServerDescription.ElectionId != null)
{
// we only invalidate the "newly" reported stale primary if electionId was used.
lock (_serversLock)
{
var server = _servers.SingleOrDefault(x => EndPointHelper.Equals(args.NewServerDescription.EndPoint, x.EndPoint));
server.Invalidate();
return clusterDescription.WithServerDescription(
new ServerDescription(server.ServerId, server.EndPoint));
}
}
}
if (isCurrentPrimaryStale)
{
_maxElectionInfo = new ElectionInfo(
args.NewServerDescription.ReplicaSetConfig.Version.Value,
args.NewServerDescription.ElectionId);
}
}
var currentPrimaryEndPoints = clusterDescription.Servers
.Where(x => x.Type == ServerType.ReplicaSetPrimary)
.Where(x => !EndPointHelper.Equals(x.EndPoint, args.NewServerDescription.EndPoint))
.Select(x => x.EndPoint)
.ToList();
if (currentPrimaryEndPoints.Count > 0)
{
lock (_serversLock)
{
var currentPrimaries = _servers.Where(x => EndPointHelper.Contains(currentPrimaryEndPoints, x.EndPoint));
foreach (var currentPrimary in currentPrimaries)
{
// kick off the server to invalidate itself
currentPrimary.Invalidate();
// set it to disconnected in the cluster
clusterDescription = clusterDescription.WithServerDescription(
new ServerDescription(currentPrimary.ServerId, currentPrimary.EndPoint));
}
}
}
}
return clusterDescription;
}