public CountersReplicationTopologyRootNode Discover() { var root = new CountersReplicationTopologyRootNode(counterStorage.CounterStorageUrl, counterStorage.ServerId); if (ttl <= 0) { return(root); } CountersReplicationDocument replicationData; IEnumerable <CounterStorage.ReplicationSourceInfo> serverSources; using (var reader = counterStorage.CreateReader()) { replicationData = reader.GetReplicationData(); serverSources = reader.GetReplicationSources().ToList(); } if (@from.Contains(counterStorage.CounterStorageUrl) == false) { @from.Add(counterStorage.CounterStorageUrl); } if (replicationData != null) { root.Destinations = HandleDestinations(replicationData.Destinations); } root.Sources = HandleSources(serverSources, root); return(root); }
public SynchronizationTopologyRootNode Discover() { var root = new SynchronizationTopologyRootNode(filesystem.SynchronizationTask.FileSystemUrl, filesystem.Storage.Id); if (ttl <= 0) { return(root); } var syncDestinations = filesystem.SynchronizationTask.GetSynchronizationDestinations().ToList(); IList <string> sourceNames = null; filesystem.Storage.Batch(accessor => { int totalResults; sourceNames = accessor.GetConfigNamesStartingWithPrefix(SynchronizationConstants.RavenSynchronizationSourcesBasePath, 0, int.MaxValue, out totalResults); }); if (@from.Contains(filesystem.SynchronizationTask.FileSystemUrl) == false) { @from.Add(filesystem.SynchronizationTask.FileSystemUrl); } root.Destinations = HandleDestinations(syncDestinations); root.Sources = HandleSources(sourceNames, root); return(root); }
protected override CreatedConflict AppendToCurrentItemConflicts(string id, string newConflictId, RavenJObject existingMetadata, Attachment existingItem) { var existingConflict = existingItem.Data().ToJObject(); // just update the current attachment with the new conflict document RavenJArray conflictArray; existingConflict["Conflicts"] = conflictArray = new RavenJArray(existingConflict.Value <RavenJArray>("Conflicts")); var conflictEtag = existingItem.Etag; if (conflictArray.Contains(newConflictId) == false) { conflictArray.Add(newConflictId); var memoryStream = new MemoryStream(); existingConflict.WriteTo(memoryStream); memoryStream.Position = 0; var newETag = Actions.Attachments.AddAttachment(id, existingItem.Etag, memoryStream, existingItem.Metadata); conflictEtag = newETag; } return(new CreatedConflict { Etag = conflictEtag, ConflictedIds = conflictArray.Select(x => x.Value <string>()).ToArray() }); }
public ReplicationTopologyRootNode Discover() { var nextStart = 0; var root = new ReplicationTopologyRootNode(database.ServerUrl, database.TransactionalStorage.Id); if (ttl <= 0) { return(root); } ConfigurationDocument <ReplicationDocument <ReplicationDestination.ReplicationDestinationWithConfigurationOrigin> > configurationDocument = null; try { configurationDocument = database.ConfigurationRetriever.GetConfigurationDocument <ReplicationDocument <ReplicationDestination.ReplicationDestinationWithConfigurationOrigin> >(Constants.RavenReplicationDestinations); } catch (Exception) { root.Errors.Add(string.Format("Could not deserialize '{0}'.", Constants.RavenReplicationDestinations)); } var sources = database.Documents.GetDocumentsWithIdStartingWith(Constants.RavenReplicationSourcesBasePath, null, null, 0, int.MaxValue, database.WorkContext.CancellationToken, ref nextStart); if (@from.Contains(database.ServerUrl) == false) { @from.Add(database.ServerUrl); } if (configurationDocument != null) { root.Destinations = HandleDestinations(configurationDocument.MergedDocument); } root.Sources = HandleSources(sources, root); return(root); }
public ReplicationTopologyRootNode Discover() { var nextStart = 0; var root = new ReplicationTopologyRootNode(database.ServerUrl, database.TransactionalStorage.Id); if (ttl <= 0) { return(root); } var destinations = database.Documents.Get(Constants.RavenReplicationDestinations, null); var sources = database.Documents.GetDocumentsWithIdStartingWith(Constants.RavenReplicationSourcesBasePath, null, null, 0, int.MaxValue, database.WorkContext.CancellationToken, ref nextStart); if (@from.Contains(database.ServerUrl) == false) { @from.Add(database.ServerUrl); } root.Destinations = HandleDestinations(destinations, root); root.Sources = HandleSources(sources, root); return(root); }
public override void OnPut(string key, RavenJObject document, RavenJObject metadata, TransactionInformation transactionInformation) { if (key.StartsWith("Raven/", StringComparison.OrdinalIgnoreCase) && // we don't deal with system documents key.StartsWith("Raven/Hilo/", StringComparison.OrdinalIgnoreCase) == false) // except for hilos { return; } using (Database.DisableAllTriggersForCurrentThread()) { var documentMetadata = GetDocumentMetadata(key); if (documentMetadata != null) { var history = new RavenJArray(ReplicationData.GetHistory(documentMetadata)); metadata[Constants.RavenReplicationHistory] = history; if (documentMetadata.ContainsKey(Constants.RavenReplicationVersion) && documentMetadata.ContainsKey(Constants.RavenReplicationSource)) { var historyEntry = new RavenJObject { { Constants.RavenReplicationVersion, documentMetadata[Constants.RavenReplicationVersion] }, { Constants.RavenReplicationSource, documentMetadata[Constants.RavenReplicationSource] } }; if (history.Contains(historyEntry, RavenJTokenEqualityComparer.Default) == false) { history.Add(historyEntry); } } else { history.Add(new RavenJObject { { Constants.RavenReplicationVersion, 0 }, { Constants.RavenReplicationSource, RavenJToken.FromObject(Database.TransactionalStorage.Id) } }); } while (history.Length > Constants.ChangeHistoryLength) { history.RemoveAt(0); } } metadata[Constants.RavenReplicationVersion] = RavenJToken.FromObject(ReplicationHiLo.NextId(Database)); metadata[Constants.RavenReplicationSource] = RavenJToken.FromObject(Database.TransactionalStorage.Id); } }
public override void OnPut(string key, RavenJObject document, RavenJObject metadata, TransactionInformation transactionInformation) { if (key.StartsWith("Raven/", StringComparison.OrdinalIgnoreCase) && // we don't deal with system documents key.StartsWith("Raven/Hilo/", StringComparison.OrdinalIgnoreCase) == false) // except for hilos return; using (Database.DisableAllTriggersForCurrentThread()) { var documentMetadata = GetDocumentMetadata(key); if (documentMetadata != null) { var history = new RavenJArray(ReplicationData.GetHistory(documentMetadata)); metadata[Constants.RavenReplicationHistory] = history; if (documentMetadata.ContainsKey(Constants.RavenReplicationVersion) && documentMetadata.ContainsKey(Constants.RavenReplicationSource)) { var historyEntry = new RavenJObject { {Constants.RavenReplicationVersion, documentMetadata[Constants.RavenReplicationVersion]}, {Constants.RavenReplicationSource, documentMetadata[Constants.RavenReplicationSource]} }; if (history.Contains(historyEntry, RavenJTokenEqualityComparer.Default) == false) history.Add(historyEntry); } else { history.Add(new RavenJObject { {Constants.RavenReplicationVersion, 0}, {Constants.RavenReplicationSource, RavenJToken.FromObject(Database.TransactionalStorage.Id)} }); } while (history.Length > Constants.ChangeHistoryLength) { history.RemoveAt(0); } } metadata[Constants.RavenReplicationVersion] = RavenJToken.FromObject(ReplicationHiLo.NextId(Database)); metadata[Constants.RavenReplicationSource] = RavenJToken.FromObject(Database.TransactionalStorage.Id); } }
protected override CreatedConflict AppendToCurrentItemConflicts(string id, string newConflictId, RavenJObject existingMetadata, JsonDocument existingItem) { // just update the current doc with the new conflict document RavenJArray ravenJArray; existingItem.DataAsJson["Conflicts"] = ravenJArray = new RavenJArray(existingItem.DataAsJson.Value <RavenJArray>("Conflicts")); var conflictEtag = existingItem.Etag; if (ravenJArray.Contains(newConflictId) == false) { ravenJArray.Add(newConflictId); var addResult = Actions.Documents.AddDocument(id, existingItem.Etag, existingItem.DataAsJson, existingItem.Metadata); conflictEtag = addResult.Etag; } return(new CreatedConflict { Etag = conflictEtag, ConflictedIds = ravenJArray.Select(x => x.Value <string>()).ToArray() }); }