Skip to content

Commit

Permalink
fixed failing test -> in case of incremental smuggler "between" opera…
Browse files Browse the repository at this point in the history
…tion, it should not skip changes (RavenDB-4379)
  • Loading branch information
myarichuk committed Feb 29, 2016
1 parent ac75448 commit 79f25cf
Show file tree
Hide file tree
Showing 3 changed files with 59 additions and 50 deletions.
11 changes: 6 additions & 5 deletions Raven.Smuggler/SmugglerDatabaseBetweenOperation.cs
Original file line number Diff line number Diff line change
Expand Up @@ -300,6 +300,7 @@ private static async Task<Etag> ExportDocuments(DocumentStore exportStore, Docum
bulkInsertOperation.Report += text => ShowProgress(text);
var jintHelper = new SmugglerJintHelper();
jintHelper.Initialize(databaseOptions);
var isLastLoop = false;
try
{
while (true)
Expand Down Expand Up @@ -383,15 +384,15 @@ private static async Task<Etag> ExportDocuments(DocumentStore exportStore, Docum
var databaseStatistics = await exportStore.AsyncDatabaseCommands.GetStatisticsAsync();

var lastEtagComparable = new ComparableByteArray(lastEtag);
if (lastEtagComparable.CompareTo(databaseStatistics.LastDocEtag) <= 0)
if (lastEtagComparable.CompareTo(databaseStatistics.LastDocEtag) <= 0 && !isLastLoop)
{
if (totalCount == beforeCount)
{
lastEtag = EtagUtil.Increment(lastEtag, exportBatchSize);
ShowProgress("Got no results but didn't get to the last doc etag, trying from: {0}", lastEtag);
{
isLastLoop = true;
ShowProgress("Got no new results , trying one more loop from: {0}", lastEtag);
}
else
ShowProgress("Finished streaming batch, but haven't reached an end (last etag = {0})", lastEtag);
ShowProgress("Finished streaming batch, but haven't reached an end (last reached etag = {0})", lastEtag);
continue;
}

Expand Down
4 changes: 2 additions & 2 deletions Raven.Tests.Issues/RavenDB-4379.cs
Original file line number Diff line number Diff line change
Expand Up @@ -64,9 +64,9 @@ public async Task Using_smuggler_between_servers_should_take_into_accound_files_
}
}

private IEnumerable<User> AddDocuments(IDocumentStore store, int docCount = 10000)
private IEnumerable<User> AddDocuments(IDocumentStore store, int docCount = 5000)
{
using (var bulkInsert = store.BulkInsert())
using (var bulkInsert = store.BulkInsert(options:new BulkInsertOptions {BatchSize = 16}))
{
for (int i = 0; i < docCount; i++)
{
Expand Down
94 changes: 51 additions & 43 deletions Raven.Tests/Smuggler/SmugglerBetweenTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -71,7 +71,7 @@ await smugglerApi.Between(new SmugglerBetweenOptions<RavenConnectionStringOption
[Fact]
public async Task ShouldSupportIncremental()
{
using (var server1 = GetNewServer(port: 8079))
using (var server1 = GetNewServer())
using (var store1 = NewRemoteDocumentStore(ravenDbServer: server1, databaseName: "Database1"))
{
using (var session = store1.OpenAsyncSession("Database1"))
Expand All @@ -84,55 +84,63 @@ public async Task ShouldSupportIncremental()
await store1.AsyncDatabaseCommands.PutAttachmentAsync("fitzchak", null, new MemoryStream(new byte[] {2}), new RavenJObject());

using (var server2 = GetNewServer(port: 8078))
using (var store2 = NewRemoteDocumentStore(ravenDbServer: server2, databaseName: "Database2"))
{
using (var store2 = NewRemoteDocumentStore(ravenDbServer: server2, databaseName: "Database2"))
var smugglerApi = new SmugglerDatabaseApi(new SmugglerDatabaseOptions
{
var smugglerApi = new SmugglerDatabaseApi(new SmugglerDatabaseOptions
{
Incremental = true,
});

await smugglerApi.Between(new SmugglerBetweenOptions<RavenConnectionStringOptions>
{
From = new RavenConnectionStringOptions { Url = "http://localhost:8079", DefaultDatabase = "Database1" },
To = new RavenConnectionStringOptions { Url = "http://localhost:8078", DefaultDatabase = "Database2" }
});
Incremental = true,
});

using (var session = store1.OpenAsyncSession("Database1"))
{
var oren = await session.LoadAsync<User>("users/1");
oren.Name += " Changed";
await session.StoreAsync(new User {Name = "Daniel Dar"});
await session.SaveChangesAsync();
}
await store1.AsyncDatabaseCommands.PutAttachmentAsync("ayende", null, new MemoryStream(new byte[] {4}), new RavenJObject());
await store1.AsyncDatabaseCommands.PutAttachmentAsync("daniel", null, new MemoryStream(new byte[] {5}), new RavenJObject());
await smugglerApi.Between(new SmugglerBetweenOptions<RavenConnectionStringOptions>
{
From = new RavenConnectionStringOptions {Url = server1.Configuration.ServerUrl, DefaultDatabase = "Database1"},
To = new RavenConnectionStringOptions {Url = server2.Configuration.ServerUrl, DefaultDatabase = "Database2"}
});

using (var session2 = store2.OpenAsyncSession("Database2"))
{
var oren = await session2.LoadAsync<User>("users/2");
oren.Name += " Not Changed";
await session2.SaveChangesAsync();
}
await store2.AsyncDatabaseCommands.PutAttachmentAsync("fitzchak", null, new MemoryStream(new byte[] { 6 }), new RavenJObject());

await smugglerApi.Between(new SmugglerBetweenOptions<RavenConnectionStringOptions>
{
From = new RavenConnectionStringOptions { Url = "http://localhost:8079", DefaultDatabase = "Database1" },
To = new RavenConnectionStringOptions { Url = "http://localhost:8078", DefaultDatabase = "Database2" }
});
WaitForIndexing(store2);
using (var session2 = store2.OpenAsyncSession("Database2"))
{
Assert.Equal(3, await session2.Query<User>().CountAsync());
Assert.Equal("Oren Eini Changed", (await session2.LoadAsync<User>("users/1")).Name);
Assert.Equal("Fitzchak Yitzchaki Not Changed", (await session2.LoadAsync<User>("users/2")).Name); // Test that this value won't be overwritten by the export server
}
using (var session = store1.OpenAsyncSession("Database1"))
{
var oren = await session.LoadAsync<User>("users/1");
oren.Name += " Changed";
await session.StoreAsync(new User {Name = "Daniel Dar"});
await session.SaveChangesAsync();
}
await store1.AsyncDatabaseCommands.PutAttachmentAsync("ayende", null, new MemoryStream(new byte[] {4}), new RavenJObject());
await store1.AsyncDatabaseCommands.PutAttachmentAsync("daniel", null, new MemoryStream(new byte[] {5}), new RavenJObject());

Assert.Equal(3, (await store2.AsyncDatabaseCommands.GetAttachmentsAsync(0, Etag.Empty, 25)).Length);
await AssertAttachmentContent(store2, "ayende", new byte[] {4});
await AssertAttachmentContent(store2, "fitzchak", new byte[] {6}); // Test that this value won't be overwritten by the export server
using (var session2 = store2.OpenAsyncSession("Database2"))
{
var oren = await session2.LoadAsync<User>("users/2");
oren.Name += " Not Changed";
await session2.SaveChangesAsync();
}
await store2.AsyncDatabaseCommands.PutAttachmentAsync("fitzchak", null, new MemoryStream(new byte[] {6}), new RavenJObject());

await smugglerApi.Between(new SmugglerBetweenOptions<RavenConnectionStringOptions>
{
From = new RavenConnectionStringOptions {Url = server1.Configuration.ServerUrl, DefaultDatabase = "Database1"},
To = new RavenConnectionStringOptions {Url = server2.Configuration.ServerUrl, DefaultDatabase = "Database2"}
});

using (var session1 = store1.OpenAsyncSession("Database1"))
using (var session2 = store2.OpenAsyncSession("Database2"))
{
var xxx1 = await session1.Query<User>().Select(x => x.Name).ToListAsync();
var xxx2 = await session2.Query<User>().Select(x => x.Name).ToListAsync();
}

WaitForIndexing(store2);

using (var session2 = store2.OpenAsyncSession("Database2"))
{
Assert.Equal(3, await session2.Query<User>().CountAsync());
Assert.Equal("Oren Eini Changed", (await session2.LoadAsync<User>("users/1")).Name);
Assert.Equal("Fitzchak Yitzchaki Not Changed", (await session2.LoadAsync<User>("users/2")).Name); // Test that this value won't be overwritten by the export server
}

Assert.Equal(3, (await store2.AsyncDatabaseCommands.GetAttachmentsAsync(0, Etag.Empty, 25)).Length);
await AssertAttachmentContent(store2, "ayende", new byte[] {4});
await AssertAttachmentContent(store2, "fitzchak", new byte[] {6}); // Test that this value won't be overwritten by the export server
}
}
}
Expand Down

0 comments on commit 79f25cf

Please sign in to comment.