예제 #1
0
        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);
        }
예제 #2
0
        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);
        }
예제 #3
0
        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
                });
            });
        }