public async void Should_be_possible_to_apply_conflict() { var canonicalFilename = FileHeader.Canonize("test.bin"); var content = new RandomStream(10); var client = NewAsyncClient(1); await client.UploadAsync(canonicalFilename, content); var guid = Guid.NewGuid().ToString(); var history = new List <HistoryItem> { new HistoryItem { ServerId = guid, Version = 3 } }; var remoteMetadata = new RavenJObject(); remoteMetadata[SynchronizationConstants.RavenSynchronizationHistory] = Historian.SerializeHistory(history); await client.Synchronization.ApplyConflictAsync(canonicalFilename, 8, guid, remoteMetadata, "http://localhost:12345"); var resultFileMetadata = await client.GetMetadataForAsync(canonicalFilename); var conflict = await client.Configuration.GetKeyAsync <ConflictItem>(RavenFileNameHelper.ConflictConfigNameForFile(canonicalFilename)); Assert.Equal(true.ToString(), resultFileMetadata[SynchronizationConstants.RavenSynchronizationConflict]); Assert.Equal(guid, conflict.RemoteHistory.Last().ServerId); Assert.Equal(8, conflict.RemoteHistory.Last().Version); Assert.Equal(1, conflict.CurrentHistory.Last().Version); Assert.Equal(2, conflict.RemoteHistory.Count); Assert.Equal(guid, conflict.RemoteHistory[0].ServerId); Assert.Equal(3, conflict.RemoteHistory[0].Version); }
public void ApplyCurrentStrategy(string fileName, ConflictItem conflict, RavenJObject localMetadata) { var localHistory = Historian.DeserializeHistory(localMetadata); // incorporate remote version history into local foreach (var remoteHistoryItem in conflict.RemoteHistory.Where(remoteHistoryItem => !localHistory.Contains(remoteHistoryItem))) { localHistory.Add(remoteHistoryItem); } localMetadata[SynchronizationConstants.RavenSynchronizationHistory] = Historian.SerializeHistory(localHistory); }
private void StrategyAsGetCurrent(string fileName) { Storage.Batch(accessor => { var conflict = accessor.GetConfigurationValue <ConflictItem>(RavenFileNameHelper.ConflictConfigNameForFile(fileName)); var localMetadata = accessor.GetFile(fileName, 0, 0).Metadata; var localHistory = Historian.DeserializeHistory(localMetadata); // incorporate remote version history into local foreach (var remoteHistoryItem in conflict.RemoteHistory.Where(remoteHistoryItem => !localHistory.Contains(remoteHistoryItem))) { localHistory.Add(remoteHistoryItem); } localMetadata[SynchronizationConstants.RavenSynchronizationHistory] = Historian.SerializeHistory(localHistory); accessor.UpdateFileMetadata(fileName, localMetadata); ConflictArtifactManager.Delete(fileName, accessor); Publisher.Publish(new ConflictNotification { FileName = fileName, Status = ConflictStatus.Resolved }); }); }