Skip to content

Commit

Permalink
RavenDB-1716 StartRestore/StartBackup location in Client API
Browse files Browse the repository at this point in the history
  • Loading branch information
ml054 committed Feb 14, 2014
1 parent 4058b37 commit 8489881
Show file tree
Hide file tree
Showing 13 changed files with 84 additions and 64 deletions.
2 changes: 1 addition & 1 deletion Raven.Client.Embedded/EmbeddedAsyncServerClient.cs
Expand Up @@ -304,7 +304,7 @@ public Task<BuildNumber> GetBuildNumberAsync()
return new CompletedTask<BuildNumber>(databaseCommands.GetBuildNumber());
}

public Task StartBackupAsync(string backupLocation, DatabaseDocument databaseDocument)
public Task StartBackupAsync(string backupLocation, DatabaseDocument databaseDocument, string databaseName)
{
// No sync equivalent on IDatabaseCommands.
throw new NotSupportedException();
Expand Down
9 changes: 7 additions & 2 deletions Raven.Client.Lightweight/Connection/AdminRequestCreator.cs
Expand Up @@ -67,15 +67,20 @@ public HttpJsonRequest AdminStats()
return createRequestForSystemDatabase("/admin/stats", "GET");
}

public HttpJsonRequest StartBackup(string backupLocation, DatabaseDocument databaseDocument, out RavenJObject backupSettings)
public HttpJsonRequest StartBackup(string backupLocation, DatabaseDocument databaseDocument, string databaseName, out RavenJObject backupSettings)
{
backupSettings = new RavenJObject
{
{"BackupLocation", backupLocation},
{"DatabaseDocument", RavenJObject.FromObject(databaseDocument)}
};

return createRequest("/admin/backup", "POST");
if (databaseName == Constants.SystemDatabase)
{
return createRequestForSystemDatabase("/admin/backup", "POST");
}
return createRequestForSystemDatabase("/databases/" + databaseName + "/admin/backup", "POST");

}

public HttpJsonRequest StartRestore(string restoreLocation, string databaseLocation, string databaseName, bool defrag, out RavenJObject restoreSettings)
Expand Down
4 changes: 2 additions & 2 deletions Raven.Client.Lightweight/Connection/AdminServerClient.cs
Expand Up @@ -49,9 +49,9 @@ public void StartIndexing()
asyncAdminServerClient.StartIndexingAsync().WaitUnwrap();
}

public void StartBackup(string backupLocation, DatabaseDocument databaseDocument)
public void StartBackup(string backupLocation, DatabaseDocument databaseDocument, string databaseName)
{
asyncAdminServerClient.StartBackupAsync(backupLocation, databaseDocument).WaitUnwrap();
asyncAdminServerClient.StartBackupAsync(backupLocation, databaseDocument, databaseName).WaitUnwrap();
}

public void StartRestore(string restoreLocation, string databaseLocation, string databaseName = null, bool defrag = false)
Expand Down
Expand Up @@ -59,10 +59,10 @@ public async Task<AdminStatistics> GetStatisticsAsync()
return json.Deserialize<AdminStatistics>(innerAsyncServerClient.convention);
}

public Task StartBackupAsync(string backupLocation, DatabaseDocument databaseDocument)
public Task StartBackupAsync(string backupLocation, DatabaseDocument databaseDocument, string databaseName)
{
RavenJObject backupSettings;
var request = adminRequest.StartBackup(backupLocation, databaseDocument, out backupSettings);
var request = adminRequest.StartBackup(backupLocation, databaseDocument, databaseName, out backupSettings);

return request.WriteAsync(backupSettings.ToString(Formatting.None));
}
Expand Down
Expand Up @@ -1132,9 +1132,9 @@ public Task StartIndexingAsync()
});
}

public Task StartBackupAsync(string backupLocation, DatabaseDocument databaseDocument)
public Task StartBackupAsync(string backupLocation, DatabaseDocument databaseDocument, string databaseName)
{
var request = jsonRequestFactory.CreateHttpJsonRequest(new CreateHttpJsonRequestParams(this, (url + "/admin/backup").NoCache(), "POST", credentialsThatShouldBeUsedOnlyInOperationsWithoutReplication, convention));
var request = jsonRequestFactory.CreateHttpJsonRequest(new CreateHttpJsonRequestParams(this, (MultiDatabase.GetDatabaseUrl(url, databaseName) + "/admin/backup").NoCache(), "POST", credentialsThatShouldBeUsedOnlyInOperationsWithoutReplication, convention));
request.AddOperationHeaders(OperationsHeaders);
return request.WriteAsync(new RavenJObject
{
Expand Down
Expand Up @@ -492,6 +492,11 @@ public interface IAsyncGlobalAdminDatabaseCommands
/// Begins an async restore operation
/// </summary>
Task StartRestoreAsync(string restoreLocation, string databaseLocation, string databaseName = null, bool defrag = false);

/// <summary>
/// Begins an async backup operation
/// </summary>
Task StartBackupAsync(string backupLocation, DatabaseDocument databaseDocument, string databaseName);
}

public interface IAsyncAdminDatabaseCommands
Expand All @@ -506,11 +511,6 @@ public interface IAsyncAdminDatabaseCommands
/// </summary>
Task StartIndexingAsync();

/// <summary>
/// Begins an async backup operation
/// </summary>
Task StartBackupAsync(string backupLocation, DatabaseDocument databaseDocument);

/// <summary>
/// Get the indexing status
/// </summary>
Expand Down
10 changes: 5 additions & 5 deletions Raven.Client.Lightweight/Connection/IDatabaseCommands.cs
Expand Up @@ -509,6 +509,11 @@ public interface IGlobalAdminDatabaseCommands
/// </summary>
void StartRestore(string restoreLocation, string databaseLocation, string databaseName = null, bool defrag = false);

/// <summary>
/// Begins a backup operation
/// </summary>
void StartBackup(string backupLocation, DatabaseDocument databaseDocument, string databaseName);

IDatabaseCommands Commands { get; }
}

Expand All @@ -524,11 +529,6 @@ public interface IAdminDatabaseCommands
/// </summary>
void StartIndexing();

/// <summary>
/// Begins a backup operation
/// </summary>
void StartBackup(string backupLocation, DatabaseDocument databaseDocument);

/// <summary>
/// Get the indexing status
/// </summary>
Expand Down
14 changes: 14 additions & 0 deletions Raven.Client.Lightweight/Extensions/MultiDatabase.cs
Expand Up @@ -44,6 +44,20 @@ internal static void AssertValidName(string name)
}
}

/// <summary>
/// Returns database url (system or non-system) based on system or non-system DB url.
/// </summary>
/// <param name="url"></param>
/// <returns></returns>
public static string GetDatabaseUrl(string url, string database)
{
if (database == Constants.SystemDatabase)
{
return GetRootDatabaseUrl(url);
}
return GetRootDatabaseUrl(url) + "/databases/" + database + "/";
}

public static string GetRootDatabaseUrl(string url)
{
var databaseUrl = url;
Expand Down
2 changes: 1 addition & 1 deletion Raven.Studio/Features/Tasks/BackupDatabaseTask.cs
Expand Up @@ -50,7 +50,7 @@ protected override async Task<DatabaseTaskOutcome> RunImplementation()
var databaseDocument = ApplicationModel.Current.Server.Value.DocumentStore.Conventions.CreateSerializer()
.Deserialize<DatabaseDocument>(new RavenJTokenReader(doc));

await DatabaseCommands.Admin.StartBackupAsync(backupLocation, databaseDocument);
await DatabaseCommands.GlobalAdmin.StartBackupAsync(backupLocation, databaseDocument, databaseName);

var hasCompleted = false;
var lastMessageTimeStamp = DateTime.MinValue;
Expand Down
Expand Up @@ -51,7 +51,7 @@ public async Task CanRestoreAnEncryptedDatabase(string storageEngineTypeName)
}

var backupFolderDb1 = NewDataPath("BackupFolderDb1");
await store.AsyncDatabaseCommands.ForDatabase("Db1").Admin.StartBackupAsync(backupFolderDb1, db1);
await store.AsyncDatabaseCommands.ForDatabase("Db1").GlobalAdmin.StartBackupAsync(backupFolderDb1, db1, "Db1");
WaitForBackup(store.DatabaseCommands.ForDatabase("Db1"), true);

await store.AsyncDatabaseCommands.GlobalAdmin.StartRestoreAsync(backupFolderDb1, @"~\Databases\Db2", "Db2");
Expand Down
43 changes: 43 additions & 0 deletions Raven.Tests/Issues/RavenDB_1716.cs
@@ -0,0 +1,43 @@
// -----------------------------------------------------------------------
// <copyright file="RavenDB_1716.cs" company="Hibernating Rhinos LTD">
// Copyright (c) Hibernating Rhinos LTD. All rights reserved.
// </copyright>
// -----------------------------------------------------------------------
using System.Threading.Tasks;
using Raven.Abstractions.Data;
using Raven.Json.Linq;
using Xunit;
using Xunit.Extensions;

namespace Raven.Tests.Issues
{
public class RavenDB_1716 : RavenTest
{
[Theory]
[InlineData("esent")]
[InlineData("voron")]
public async Task Restore_operation_works_async(string storage)
{
var backupDir = NewDataPath("BackupDatabase");
var restoreDir = NewDataPath("RestoredDatabase");

using (var store = NewRemoteDocumentStore(runInMemory: false, requestedStorage: storage, databaseName: Constants.SystemDatabase))
{
store.DatabaseCommands.Put("keys/1", null, new RavenJObject { { "Key", 1 } }, new RavenJObject());

await store.AsyncDatabaseCommands.GlobalAdmin.StartBackupAsync(backupDir, new DatabaseDocument(), Constants.SystemDatabase);

WaitForBackup(store.DatabaseCommands, true);

// restore as a new database
await store.AsyncDatabaseCommands.GlobalAdmin.StartRestoreAsync(backupDir, restoreDir, "db1");

// get restore status and wait for finish
WaitForRestore(store.DatabaseCommands);
WaitForDocument(store.DatabaseCommands, "Raven/Databases/db1");

Assert.Equal(1, store.DatabaseCommands.ForDatabase("db1").Get("keys/1").DataAsJson.Value<int>("Key"));
}
}
}
}
42 changes: 0 additions & 42 deletions Raven.Tests/Issues/RavenDB_865.cs

This file was deleted.

2 changes: 1 addition & 1 deletion Raven.Tests/Raven.Tests.csproj
Expand Up @@ -296,6 +296,7 @@
<Compile Include="Issues\RavenDB_1610.cs" />
<Compile Include="Issues\RavenDB_1650.cs" />
<Compile Include="Issues\RavenDB_1666.cs" />
<Compile Include="Issues\RavenDB_1716.cs" />
<Compile Include="Issues\RDBQA_4.cs" />
<Compile Include="Issues\RavenDB_1553.cs" />
<Compile Include="Issues\RavenDB_1555.cs" />
Expand Down Expand Up @@ -732,7 +733,6 @@
<Compile Include="Issues\RavenDB_851.cs" />
<Compile Include="Issues\RavenDB_863.cs" />
<Compile Include="Issues\RavenDB_863_2.cs" />
<Compile Include="Issues\RavenDB_865.cs" />
<Compile Include="Issues\RavenDB_868.cs" />
<Compile Include="Issues\RavenDB_895.cs" />
<Compile Include="Issues\RavenDB_967.cs" />
Expand Down

0 comments on commit 8489881

Please sign in to comment.