private void HeartbeatVersion41200(TransactionOperationContext ctx, Dictionary <string, DatabaseStatusReport> nodeReport) { using (var writer = new BlittableJsonTextWriter(ctx, _tcp.Stream)) { ctx.Write(writer, DynamicJsonValue.Convert(nodeReport)); } }
public DynamicJsonValue ToJson() { return(new DynamicJsonValue { [nameof(NodeLicenseDetails)] = DynamicJsonValue.Convert(NodeLicenseDetails) }); }
public DynamicJsonValue ToJson() { return(new DynamicJsonValue { [nameof(Name)] = Name, [nameof(Disabled)] = Disabled, [nameof(TotalSize)] = new DynamicJsonValue { [nameof(Size.HumaneSize)] = TotalSize.HumaneSize, [nameof(Size.SizeInBytes)] = TotalSize.SizeInBytes }, [nameof(IsAdmin)] = IsAdmin, [nameof(IsEncrypted)] = IsEncrypted, [nameof(UpTime)] = UpTime?.ToString(), [nameof(BackupInfo)] = BackupInfo?.ToJson(), [nameof(Alerts)] = Alerts, [nameof(RejectClients)] = false, [nameof(IndexingErrors)] = IndexingErrors, [nameof(DocumentsCount)] = DocumentsCount, [nameof(HasRevisionsConfiguration)] = HasRevisionsConfiguration, [nameof(HasExpirationConfiguration)] = HasExpirationConfiguration, [nameof(IndexesCount)] = IndexesCount, [nameof(IndexingStatus)] = IndexingStatus.ToString(), [nameof(NodesTopology)] = NodesTopology?.ToJson(), [nameof(ReplicationFactor)] = ReplicationFactor, [nameof(DynamicNodesDistribution)] = DynamicNodesDistribution, [nameof(DeletionInProgress)] = DynamicJsonValue.Convert(DeletionInProgress) }); }
public long EnvironmentsHash; // this is local, so we don't serialize it public DynamicJsonValue ToJson() { var dynamicJsonValue = new DynamicJsonValue { [nameof(Name)] = Name, [nameof(NodeName)] = NodeName, [nameof(Status)] = Status, [nameof(LastEtag)] = LastEtag, [nameof(LastTombstoneEtag)] = LastTombstoneEtag, [nameof(NumberOfConflicts)] = NumberOfConflicts, [nameof(NumberOfDocuments)] = NumberOfDocuments, [nameof(DatabaseChangeVector)] = DatabaseChangeVector, [nameof(LastCompletedClusterTransaction)] = LastCompletedClusterTransaction, [nameof(LastSentEtag)] = DynamicJsonValue.Convert(LastSentEtag), [nameof(Error)] = Error, [nameof(UpTime)] = UpTime }; var indexStats = new DynamicJsonValue(); foreach (var stat in LastIndexStats) { indexStats[stat.Key] = new DynamicJsonValue { [nameof(stat.Value.LastIndexedEtag)] = stat.Value.LastIndexedEtag, [nameof(stat.Value.LastQueried)] = stat.Value.LastQueried, [nameof(stat.Value.IsSideBySide)] = stat.Value.IsSideBySide, [nameof(stat.Value.IsStale)] = stat.Value.IsStale, [nameof(stat.Value.State)] = stat.Value.State }; } dynamicJsonValue[nameof(LastIndexStats)] = indexStats; return(dynamicJsonValue); }
public Task GetClusterTopology() { using (ServerStore.ContextPool.AllocateOperationContext(out TransactionOperationContext context)) using (context.OpenReadTransaction()) { var topology = ServerStore.GetClusterTopology(context); var nodeTag = ServerStore.NodeTag; if (topology.Members.Count == 0) { var tag = ServerStore.NodeTag ?? "A"; var serverUrl = ServerStore.NodeHttpServerUrl; topology = new ClusterTopology( "dummy", new Dictionary <string, string> { [tag] = serverUrl }, new Dictionary <string, string>(), new Dictionary <string, string>(), tag ); nodeTag = tag; } HttpContext.Response.StatusCode = (int)HttpStatusCode.OK; using (var writer = new BlittableJsonTextWriter(context, ResponseBodyStream())) { var loadLicenseLimits = ServerStore.LoadLicenseLimits(); var nodeLicenseDetails = loadLicenseLimits == null ? null : DynamicJsonValue.Convert(loadLicenseLimits.NodeLicenseDetails); var json = new DynamicJsonValue { ["Topology"] = topology.ToSortedJson(), ["Leader"] = ServerStore.LeaderTag, ["CurrentState"] = ServerStore.CurrentRachisState, ["NodeTag"] = nodeTag, ["CurrentTerm"] = ServerStore.Engine.CurrentTerm, ["NodeLicenseDetails"] = nodeLicenseDetails, [nameof(ServerStore.Engine.LastStateChangeReason)] = ServerStore.LastStateChangeReason() }; var clusterErrors = ServerStore.GetClusterErrors(); if (clusterErrors.Count > 0) { json["Errors"] = clusterErrors; } var nodesStatues = ServerStore.GetNodesStatuses(); json["Status"] = DynamicJsonValue.Convert(nodesStatues); context.Write(writer, json); writer.Flush(); } } return(Task.CompletedTask); }
public DynamicJsonValue ToJson() { return(new DynamicJsonValue(GetType()) { [nameof(Message)] = Message, [nameof(MigrationResult.PerCollectionCount)] = DynamicJsonValue.Convert(_result.PerCollectionCount) }); }
public DynamicJsonValue ToJson() { return(new DynamicJsonValue { [nameof(Email)] = Email, [nameof(Domains)] = DynamicJsonValue.Convert(Domains) }); }
public DynamicJsonValue ToJson() { return(new DynamicJsonValue { [nameof(ServerReport)] = ServerReport, [nameof(DatabasesReport)] = DynamicJsonValue.Convert(DatabasesReport) }); }
public DynamicJsonValue ToJson() { return(new DynamicJsonValue { [nameof(Unmergables)] = DynamicJsonValue.Convert(Unmergables), [nameof(Suggestions)] = new DynamicJsonArray(Suggestions.Select(x => x.ToJson())) }); }
public override DynamicJsonValue ToJson(JsonOperationContext context) { var djv = base.ToJson(context); djv[nameof(ClusterTransactionsCleanup)] = DynamicJsonValue.Convert(ClusterTransactionsCleanup); return(djv); }
public DynamicJsonValue ToJson() { return(new DynamicJsonValue { [nameof(ActiveDeployments)] = DynamicJsonValue.Convert(ActiveDeployments), [nameof(RaftCommandIndex)] = RaftCommandIndex }); }
public DynamicJsonValue ToJson() { return(new DynamicJsonValue { [nameof(Members)] = new DynamicJsonArray(Members.Select(x => x.ToJson())), [nameof(Promotables)] = new DynamicJsonArray(Promotables.Select(x => x.ToJson())), [nameof(Rehabs)] = new DynamicJsonArray(Rehabs.Select(x => x.ToJson())), [nameof(Status)] = DynamicJsonValue.Convert(Status) }); }
public virtual DynamicJsonValue ToJson() { return(new DynamicJsonValue { [nameof(Message)] = Message, [nameof(ScannedRevisions)] = ScannedRevisions, [nameof(ScannedDocuments)] = ScannedDocuments, [nameof(Warnings)] = DynamicJsonValue.Convert(Warnings) }); }
public DynamicJsonValue ToJson() { return(new DynamicJsonValue { [nameof(TopologyId)] = TopologyId, [nameof(Members)] = DynamicJsonValue.Convert(Members), [nameof(Promotables)] = DynamicJsonValue.Convert(Promotables), [nameof(Watchers)] = DynamicJsonValue.Convert(Watchers), [nameof(LastNodeId)] = LastNodeId }); }
public DynamicJsonValue ToJson() { _sw.Stop(); return(new DynamicJsonValue(GetType()) { [nameof(PerCollectionCount)] = DynamicJsonValue.Convert(PerCollectionCount), [nameof(Messages)] = Messages, [nameof(Elapsed)] = Elapsed }); }
public DynamicJsonValue ToSortedJson() { return(new DynamicJsonValue { [nameof(TopologyId)] = TopologyId, [nameof(AllNodes)] = DynamicJsonValue.Convert(new SortedDictionary <string, string>(AllNodes)), [nameof(Members)] = DynamicJsonValue.Convert(new SortedDictionary <string, string>(Members)), [nameof(Promotables)] = DynamicJsonValue.Convert(new SortedDictionary <string, string>(Promotables)), [nameof(Watchers)] = DynamicJsonValue.Convert(new SortedDictionary <string, string>(Watchers)), [nameof(LastNodeId)] = LastNodeId }); }
public override DynamicJsonValue ToJson() { var json = base.ToJson(); json[nameof(Topology)] = Topology.ToJson(); json[nameof(Leader)] = Leader; json[nameof(NodeTag)] = NodeTag; json[nameof(Status)] = DynamicJsonValue.Convert(Status); json[nameof(CurrentTerm)] = CurrentTerm; return(json); }
public DynamicJsonValue ToJson() { return(new DynamicJsonValue { [nameof(Report)] = DynamicJsonValue.Convert(Report), [nameof(LastGoodDatabaseStatus)] = DynamicJsonValue.Convert(LastGoodDatabaseStatus), [nameof(Status)] = Status, [nameof(Error)] = Error?.ToString(), [nameof(UpdateDateTime)] = UpdateDateTime, [nameof(LastSuccessfulUpdateDateTime)] = LastSuccessfulUpdateDateTime }); }
public override DynamicJsonValue ToJson(JsonOperationContext context) { return(new DynamicJsonValue { ["Type"] = nameof(AddDatabaseCommand), [nameof(Name)] = Name, [nameof(Record)] = EntityToBlittable.ConvertCommandToBlittable(Record, context), [nameof(RaftCommandIndex)] = RaftCommandIndex, [nameof(Encrypted)] = Encrypted, [nameof(DatabaseValues)] = DynamicJsonValue.Convert(DatabaseValues), [nameof(IsRestore)] = IsRestore }); }
public DynamicJsonValue ToJson() { return(new DynamicJsonValue { [nameof(Members)] = new DynamicJsonArray(Members), [nameof(Promotables)] = new DynamicJsonArray(Promotables), [nameof(Rehabs)] = new DynamicJsonArray(Rehabs), [nameof(Stamp)] = Stamp.ToJson(), [nameof(PromotablesStatus)] = DynamicJsonValue.Convert(PromotablesStatus), [nameof(DemotionReasons)] = DynamicJsonValue.Convert(DemotionReasons), [nameof(DynamicNodesDistribution)] = DynamicNodesDistribution, [nameof(ReplicationFactor)] = ReplicationFactor }); }
public override void FillJson(DynamicJsonValue json) { json[nameof(HardDelete)] = HardDelete; json[nameof(RaftCommandIndex)] = RaftCommandIndex; json[nameof(UpdateReplicationFactor)] = UpdateReplicationFactor; if (FromNodes != null) { json[nameof(FromNodes)] = new DynamicJsonArray(FromNodes); } if (MentorChangeVector != null) { json[nameof(MentorChangeVector)] = DynamicJsonValue.Convert(MentorChangeVector); } }
public DynamicJsonValue ToJson() { return(new DynamicJsonValue { [nameof(License)] = License.ToJson(), [nameof(Email)] = Email, [nameof(Domain)] = Domain, [nameof(ModifyLocalServer)] = ModifyLocalServer, [nameof(RegisterClientCert)] = RegisterClientCert, [nameof(Certificate)] = Certificate, [nameof(Password)] = Password, [nameof(NodeSetupInfos)] = DynamicJsonValue.Convert(NodeSetupInfos) }); }
public virtual DynamicJsonValue ToJson() { DynamicJsonValue certs = null; if (Certificates != null) { certs = DynamicJsonValue.Convert(Certificates); } return(new DynamicJsonValue { [nameof(Name)] = Name, [nameof(Certificates)] = certs, [nameof(TaskId)] = TaskId, [nameof(Disabled)] = Disabled }); }
public DynamicJsonValue ToJson() { return(new DynamicJsonValue { [nameof(Name)] = Name, #pragma warning disable CS0618 // Type or member is obsolete [nameof(Certificates)] = DynamicJsonValue.Convert(Certificates), #pragma warning restore CS0618 // Type or member is obsolete [nameof(TaskId)] = TaskId, [nameof(Disabled)] = Disabled, [nameof(MentorNode)] = MentorNode, [nameof(DelayReplicationFor)] = DelayReplicationFor, [nameof(Mode)] = Mode, [nameof(WithFiltering)] = WithFiltering }); }
public DynamicJsonValue ToJson() { return(new DynamicJsonValue { [nameof(Members)] = new DynamicJsonArray(Members), [nameof(Promotables)] = new DynamicJsonArray(Promotables), [nameof(Rehabs)] = new DynamicJsonArray(Rehabs), [nameof(Stamp)] = Stamp?.ToJson(), [nameof(PromotablesStatus)] = DynamicJsonValue.Convert(PromotablesStatus), [nameof(DemotionReasons)] = DynamicJsonValue.Convert(DemotionReasons), [nameof(DynamicNodesDistribution)] = DynamicNodesDistribution, [nameof(ReplicationFactor)] = ReplicationFactor, [nameof(DatabaseTopologyIdBase64)] = DatabaseTopologyIdBase64, [nameof(PriorityOrder)] = PriorityOrder != null ? new DynamicJsonArray(PriorityOrder) : null }); }
public void CollectDatabasesStatusReport() { var lastNodeReport = new Dictionary <string, DatabaseStatusReport>(); while (_token.IsCancellationRequested == false) { try { using (_server.ContextPool.AllocateOperationContext(out TransactionOperationContext ctx)) { Dictionary <string, DatabaseStatusReport> nodeReport; using (ctx.OpenReadTransaction()) { nodeReport = CollectDatabaseInformation(ctx, lastNodeReport); } using (var writer = new BlittableJsonTextWriter(ctx, _tcp.Stream)) { ctx.Write(writer, DynamicJsonValue.Convert(nodeReport)); } lastNodeReport = nodeReport; } } catch (Exception e) { if (_tcp.TcpClient?.Connected != true) { if (_logger.IsInfoEnabled) { _logger.Info("The tcp connection was closed, so we exit the maintenance work."); } return; } if (_logger.IsInfoEnabled) { _logger.Info($"Exception occurred while collecting info from {_server.NodeTag}", e); } } finally { _token.WaitHandle.WaitOne(WorkerSamplePeriod); } } }
public DynamicJsonValue ToJson() { return(new DynamicJsonValue { [nameof(EnableExperimentalFeatures)] = EnableExperimentalFeatures, [nameof(Environment)] = Environment, [nameof(License)] = License.ToJson(), [nameof(Email)] = Email, [nameof(Domain)] = Domain, [nameof(RootDomain)] = RootDomain, [nameof(ModifyLocalServer)] = ModifyLocalServer, [nameof(RegisterClientCert)] = RegisterClientCert, [nameof(ClientCertNotAfter)] = ClientCertNotAfter, [nameof(Certificate)] = Certificate, [nameof(Password)] = Password, [nameof(NodeSetupInfos)] = DynamicJsonValue.Convert(NodeSetupInfos) }); }
public Task ClusterMaintenanceStats() { if (ServerStore.LeaderTag == null) { return(Task.CompletedTask); } using (ServerStore.ContextPool.AllocateOperationContext(out TransactionOperationContext context)) using (var writer = new BlittableJsonTextWriter(context, ResponseBodyStream())) { if (ServerStore.IsLeader()) { context.Write(writer, DynamicJsonValue.Convert(ServerStore.ClusterMaintenanceSupervisor?.GetStats())); writer.Flush(); return(Task.CompletedTask); } RedirectToLeader(); } return(Task.CompletedTask); }
public DynamicJsonValue ToJson() { var json = new DynamicJsonValue { [nameof(Collections)] = DynamicJsonValue.Convert(Collections), [nameof(PolicyCheckFrequency)] = PolicyCheckFrequency, }; if (NamedValues != null) { var djv = new DynamicJsonValue(); foreach (var collection in NamedValues) { djv[collection.Key] = DynamicJsonValue.Convert(collection.Value); } json[nameof(NamedValues)] = djv; } return(json); }
private void WriteDatabaseInfo(string databaseName, BlittableJsonReaderObject dbRecordBlittable, TransactionOperationContext context, AbstractBlittableJsonTextWriter writer) { try { var online = ServerStore.DatabasesLandlord.DatabasesCache.TryGetValue(databaseName, out Task <DocumentDatabase> dbTask) && dbTask != null && dbTask.IsCompleted; // Check for exceptions if (dbTask != null && dbTask.IsFaulted) { var exception = dbTask.Exception.ExtractSingleInnerException(); WriteFaultedDatabaseInfo(databaseName, exception, context, writer); return; } var dbRecord = JsonDeserializationCluster.DatabaseRecord(dbRecordBlittable); var db = online ? dbTask.Result : null; var indexingStatus = db?.IndexStore?.Status ?? IndexRunningStatus.Running; // Looking for disabled indexing flag inside the database settings for offline database status if (dbRecord.Settings.TryGetValue(RavenConfiguration.GetKey(x => x.Indexing.Disabled), out var val) && bool.TryParse(val, out var indexingDisabled) && indexingDisabled) { indexingStatus = IndexRunningStatus.Disabled; } var disabled = dbRecord.Disabled; var topology = dbRecord.Topology; var clusterTopology = ServerStore.GetClusterTopology(context); clusterTopology.ReplaceCurrentNodeUrlWithClientRequestedNodeUrlIfNecessary(ServerStore, HttpContext); var studioEnvironment = StudioConfiguration.StudioEnvironment.None; if (dbRecord.Studio != null && !dbRecord.Studio.Disabled) { studioEnvironment = dbRecord.Studio.Environment; } var nodesTopology = new NodesTopology(); var statuses = ServerStore.GetNodesStatuses(); if (topology != null) { foreach (var member in topology.Members) { var url = clusterTopology.GetUrlFromTag(member); var node = new InternalReplication { Database = databaseName, NodeTag = member, Url = url }; nodesTopology.Members.Add(GetNodeId(node)); SetNodeStatus(topology, member, nodesTopology, statuses); } foreach (var promotable in topology.Promotables) { topology.PredefinedMentors.TryGetValue(promotable, out var mentorCandidate); var node = GetNode(databaseName, clusterTopology, promotable, mentorCandidate, out var promotableTask); var mentor = topology.WhoseTaskIsIt(ServerStore.Engine.CurrentState, promotableTask, null); nodesTopology.Promotables.Add(GetNodeId(node, mentor)); SetNodeStatus(topology, promotable, nodesTopology, statuses); } foreach (var rehab in topology.Rehabs) { var node = GetNode(databaseName, clusterTopology, rehab, null, out var promotableTask); var mentor = topology.WhoseTaskIsIt(ServerStore.Engine.CurrentState, promotableTask, null); nodesTopology.Rehabs.Add(GetNodeId(node, mentor)); SetNodeStatus(topology, rehab, nodesTopology, statuses); } } if (online == false) { // if state of database is found in the cache we can continue if (ServerStore.DatabaseInfoCache.TryGet(databaseName, databaseInfoJson => { databaseInfoJson.Modifications = new DynamicJsonValue(databaseInfoJson) { [nameof(DatabaseInfo.Disabled)] = disabled, [nameof(DatabaseInfo.IndexingStatus)] = indexingStatus.ToString(), [nameof(DatabaseInfo.NodesTopology)] = nodesTopology.ToJson(), [nameof(DatabaseInfo.DeletionInProgress)] = DynamicJsonValue.Convert(dbRecord.DeletionInProgress), [nameof(DatabaseInfo.Environment)] = studioEnvironment }; context.Write(writer, databaseInfoJson); })) { return; } // we won't find it if it is a new database or after a dirty shutdown, // so just report empty values then } var size = db?.GetSizeOnDisk() ?? (new Size(0), new Size(0)); var databaseInfo = new DatabaseInfo { Name = databaseName, Disabled = disabled, TotalSize = size.Data, TempBuffersSize = size.TempBuffers, IsAdmin = true, IsEncrypted = dbRecord.Encrypted, UpTime = online ? (TimeSpan?)GetUptime(db) : null, BackupInfo = GetBackupInfo(db), Alerts = db?.NotificationCenter.GetAlertCount() ?? 0, RejectClients = false, LoadError = null, IndexingErrors = db?.IndexStore?.GetIndexes()?.Sum(index => index.GetErrorCount()) ?? 0, DocumentsCount = db?.DocumentsStorage.GetNumberOfDocuments() ?? 0, HasRevisionsConfiguration = db?.DocumentsStorage.RevisionsStorage.Configuration != null, HasExpirationConfiguration = db?.ExpiredDocumentsCleaner != null, IndexesCount = db?.IndexStore?.GetIndexes()?.Count() ?? 0, IndexingStatus = indexingStatus, Environment = studioEnvironment, NodesTopology = nodesTopology, ReplicationFactor = topology?.ReplicationFactor ?? -1, DynamicNodesDistribution = topology?.DynamicNodesDistribution ?? false, DeletionInProgress = dbRecord.DeletionInProgress }; var doc = databaseInfo.ToJson(); context.Write(writer, doc); } catch (Exception e) { if (Logger.IsInfoEnabled) { Logger.Info($"Failed to get database info for: {databaseName}", e); } WriteFaultedDatabaseInfo(databaseName, e, context, writer); } }