private void GetSubscriptionInternal(SubscriptionGeneralDataAndStats subscriptionData, bool history) { if (_subscriptionConnectionStates.TryGetValue(subscriptionData.SubscriptionId, out SubscriptionConnectionState subscriptionConnectionState)) { subscriptionData.Connection = subscriptionConnectionState.Connection; if (history)//Only valid if this is my subscription { SetSubscriptionHistory(subscriptionConnectionState, subscriptionData); } } }
public SubscriptionGeneralDataAndStats GetSubscriptionFromServerStore(TransactionOperationContext context, string name) { var subscriptionBlittable = _serverStore.Cluster.Read(context, SubscriptionState.GenerateSubscriptionItemKeyName(_db.Name, name)); if (subscriptionBlittable == null) { throw new SubscriptionDoesNotExistException($"Subscription with name {name} was not found in server store"); } var subscriptionState = JsonDeserializationClient.SubscriptionState(subscriptionBlittable); var subscriptionJsonValue = new SubscriptionGeneralDataAndStats(subscriptionState); return(subscriptionJsonValue); }
public IEnumerable <SubscriptionGeneralDataAndStats> GetAllSubscriptions(TransactionOperationContext serverStoreContext, bool history, int start, int take) { foreach (var keyValue in ClusterStateMachine.ReadValuesStartingWith(serverStoreContext, SubscriptionState.SubscriptionPrefix(_db.Name))) { if (start > 0) { start--; continue; } if (take-- <= 0) { yield break; } var subscriptionState = JsonDeserializationClient.SubscriptionState(keyValue.Value); var subscriptionGeneralData = new SubscriptionGeneralDataAndStats(subscriptionState); GetSubscriptionInternal(subscriptionGeneralData, history); yield return(subscriptionGeneralData); } }
static void FillNodesAvailabilityReportForState(SubscriptionGeneralDataAndStats subscription, DatabaseTopology topology, Dictionary <string, string> databaseTopologyAvailabilityExplenation, List <string> stateGroup, string stateName) { foreach (var nodeInGroup in stateGroup) { var rehabMessage = string.Empty; if (subscription.MentorNode == nodeInGroup) { rehabMessage = $"Although this node is a mentor, it's state is {stateName} and can't run the subscription"; } else { rehabMessage = $"Node's state is {stateName}, can't run subscription"; } if (topology.DemotionReasons.TryGetValue(nodeInGroup, out var demotionReason)) { rehabMessage = rehabMessage + ". Reason:" + demotionReason; } databaseTopologyAvailabilityExplenation[nodeInGroup] = rehabMessage; } }
private static void SetSubscriptionHistory(SubscriptionConnectionState subscriptionConnectionState, SubscriptionGeneralDataAndStats subscriptionData) { subscriptionData.RecentConnections = subscriptionConnectionState.RecentConnections; subscriptionData.RecentRejectedConnections = subscriptionConnectionState.RecentRejectedConnections; }