diff --git a/Bundles/Raven.Bundles.LiveTest/LiveTestDatabaseCleanerStartupTask.cs b/Bundles/Raven.Bundles.LiveTest/LiveTestDatabaseCleanerStartupTask.cs
new file mode 100644
index 000000000000..68df6b56c1ff
--- /dev/null
+++ b/Bundles/Raven.Bundles.LiveTest/LiveTestDatabaseCleanerStartupTask.cs
@@ -0,0 +1,104 @@
+// -----------------------------------------------------------------------
+//
+// Copyright (c) Hibernating Rhinos LTD. All rights reserved.
+//
+// -----------------------------------------------------------------------
+using System;
+using System.Configuration;
+using System.Linq;
+using System.Threading;
+
+using Raven.Abstractions;
+using Raven.Abstractions.Data;
+using Raven.Database.Extensions;
+using Raven.Database.Plugins;
+using Raven.Json.Linq;
+using Raven.Server;
+
+namespace Raven.Bundles.LiveTest
+{
+ public class LiveTestDatabaseCleanerStartupTask : IServerStartupTask
+ {
+ private Timer checkTimer;
+
+ private RavenDbServer server;
+
+ private TimeSpan maxTimeDatabaseCanBeIdle;
+
+ public void Execute(RavenDbServer server)
+ {
+ this.server = server;
+
+ int val;
+ if (int.TryParse(ConfigurationManager.AppSettings["Raven/Bundles/LiveTest/Tenants/MaxIdleTimeForTenantDatabase"], out val) == false)
+ val = 900;
+
+ maxTimeDatabaseCanBeIdle = TimeSpan.FromSeconds(val); ;
+
+ checkTimer = new Timer(ExecuteCleanup, null, TimeSpan.FromMinutes(1), TimeSpan.FromMinutes(10));
+ }
+
+ public void Dispose()
+ {
+ if (checkTimer != null)
+ checkTimer.Dispose();
+ }
+
+ private void ExecuteCleanup(object state)
+ {
+ var databaseLandLord = server.Options.DatabaseLandlord;
+ var systemDatabase = databaseLandLord.SystemDatabase;
+ if (server.Disposed)
+ {
+ Dispose();
+ return;
+ }
+
+ int nextStart = 0;
+ var databaseDocuments = systemDatabase
+ .Documents
+ .GetDocumentsWithIdStartingWith(Constants.RavenDatabasesPrefix, null, null, 0, int.MaxValue, CancellationToken.None, ref nextStart);
+
+ var databaseIds = databaseDocuments
+ .Select(x => ((RavenJObject)x)["@metadata"])
+ .Where(x => x != null)
+ .Select(x => x.Value("@id"))
+ .Where(x => x != null && x != Constants.SystemDatabase)
+ .ToList();
+
+ foreach (var databaseId in databaseIds)
+ {
+ var key = databaseId;
+ if (key.StartsWith(Constants.RavenDatabasesPrefix))
+ key = key.Substring(Constants.RavenDatabasesPrefix.Length);
+
+ var shouldCleanup = false;
+
+ DateTime value;
+ if (databaseLandLord.IsDatabaseLoaded(key) == false)
+ shouldCleanup = true;
+ else if (databaseLandLord.LastRecentlyUsed.TryGetValue(key, out value) && (SystemTime.UtcNow - value) > maxTimeDatabaseCanBeIdle)
+ shouldCleanup = true;
+
+ if (shouldCleanup == false)
+ continue;
+
+ var configuration = databaseLandLord.CreateTenantConfiguration(key, true);
+
+ databaseLandLord.Cleanup(key, maxTimeDatabaseCanBeIdle, database => false);
+
+ var docKey = Constants.RavenDatabasesPrefix + key;
+ systemDatabase.Documents.Delete(docKey, null, null);
+
+ if (configuration == null)
+ continue;
+
+ IOExtensions.DeleteDirectory(configuration.DataDirectory);
+ if (configuration.IndexStoragePath != null)
+ IOExtensions.DeleteDirectory(configuration.IndexStoragePath);
+ if (configuration.JournalsStoragePath != null)
+ IOExtensions.DeleteDirectory(configuration.JournalsStoragePath);
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/Bundles/Raven.Bundles.LiveTest/LiveTestDatabaseDocumentPutTrigger.cs b/Bundles/Raven.Bundles.LiveTest/LiveTestDatabaseDocumentPutTrigger.cs
new file mode 100644
index 000000000000..5e2b72b44c82
--- /dev/null
+++ b/Bundles/Raven.Bundles.LiveTest/LiveTestDatabaseDocumentPutTrigger.cs
@@ -0,0 +1,75 @@
+// -----------------------------------------------------------------------
+//
+// Copyright (c) Hibernating Rhinos LTD. All rights reserved.
+//
+// -----------------------------------------------------------------------
+using System;
+using System.Configuration;
+
+using Raven.Abstractions.Data;
+using Raven.Database.Config;
+using Raven.Database.Extensions;
+using Raven.Database.Plugins;
+using Raven.Json.Linq;
+
+namespace Raven.Bundles.LiveTest
+{
+ public class LiveTestDatabaseDocumentPutTrigger : AbstractPutTrigger
+ {
+ private const int QuotasHardLimitInKb = 512 * 1024;
+
+ private const int QuotasSoftMarginInKb = (int)(0.75 * QuotasHardLimitInKb);
+
+ public override void OnPut(string key, RavenJObject document, RavenJObject metadata, TransactionInformation transactionInformation)
+ {
+ if (string.IsNullOrEmpty(Database.Name) == false && Database.Name != Constants.SystemDatabase)
+ return;
+
+ if (key.StartsWith(Constants.RavenDatabasesPrefix, StringComparison.OrdinalIgnoreCase) == false)
+ return;
+
+ RavenJObject settings;
+ RavenJToken value;
+ if (document.TryGetValue("Settings", out value) == false)
+ document["Settings"] = settings = new RavenJObject();
+ else
+ settings = (RavenJObject)value;
+
+ EnsureQuotasBundleActivated(settings);
+ EnsureVoronIsSetAsStorageEngineAndIsRunningInMemory(settings);
+ }
+
+ private static void EnsureVoronIsSetAsStorageEngineAndIsRunningInMemory(RavenJObject settings)
+ {
+ settings["Raven/StorageEngine"] = InMemoryRavenConfiguration.VoronTypeName;
+ settings["Raven/RunInMemory"] = true;
+ }
+
+ private static void EnsureQuotasBundleActivated(RavenJObject settings)
+ {
+ RavenJToken value;
+ if (settings.TryGetValue(Constants.ActiveBundles, out value) == false)
+ settings[Constants.ActiveBundles] = value = new RavenJValue(string.Empty);
+
+ var activeBundles = value.Value();
+ var bundles = activeBundles.GetSemicolonSeparatedValues();
+
+ if (bundles.Contains("Quotas") == false)
+ bundles.Add("Quotas");
+
+ int hardLimitInKb;
+ if (int.TryParse(ConfigurationManager.AppSettings["Raven/Bundles/LiveTest/Quotas/Size/HardLimitInKB"], out hardLimitInKb) == false)
+ hardLimitInKb = QuotasHardLimitInKb;
+
+ int softMarginInKb;
+ if (int.TryParse(ConfigurationManager.AppSettings["Raven/Bundles/LiveTest/Quotas/Size/SoftLimitInKB"], out softMarginInKb) == false)
+ softMarginInKb = QuotasSoftMarginInKb;
+
+ settings[Constants.ActiveBundles] = string.Join(";", bundles);
+ settings[Constants.SizeHardLimitInKB] = hardLimitInKb;
+ settings[Constants.SizeSoftLimitInKB] = softMarginInKb;
+ settings[Constants.DocsHardLimit] = null;
+ settings[Constants.DocsSoftLimit] = null;
+ }
+ }
+}
\ No newline at end of file
diff --git a/Bundles/Raven.Bundles.LiveTest/Raven.Bundles.LiveTest.csproj b/Bundles/Raven.Bundles.LiveTest/Raven.Bundles.LiveTest.csproj
new file mode 100644
index 000000000000..04706a324594
--- /dev/null
+++ b/Bundles/Raven.Bundles.LiveTest/Raven.Bundles.LiveTest.csproj
@@ -0,0 +1,79 @@
+
+
+
+
+ Debug
+ AnyCPU
+ {108260D1-12ED-4EC5-8C6B-1DED1D73271F}
+ Library
+ Properties
+ Raven.Bundles.LiveTest
+ Raven.Bundles.LiveTest
+ v4.5
+ 512
+
+
+ true
+ full
+ false
+ bin\Debug\
+ DEBUG;TRACE
+ prompt
+ 4
+
+
+ pdbonly
+ true
+ bin\Release\
+ TRACE
+ prompt
+ 4
+
+
+ true
+
+
+ ..\..\Raven.Database\RavenDB.snk
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Properties\CommonAssemblyInfo.cs
+
+
+
+
+
+
+ {41ac479e-1eb2-4d23-aaf2-e4c8df1bc2ba}
+ Raven.Abstractions
+
+
+ {212823cd-25e1-41ac-92d1-d6df4d53fc85}
+ Raven.Database
+
+
+
+
+
+ RavenDB.snk
+
+
+
+
+
\ No newline at end of file
diff --git a/Raven.Abstractions/Data/Constants.cs b/Raven.Abstractions/Data/Constants.cs
index 4fd7badb6155..44bc7e6680e5 100644
--- a/Raven.Abstractions/Data/Constants.cs
+++ b/Raven.Abstractions/Data/Constants.cs
@@ -178,5 +178,9 @@ static Constants()
public const string IncrementalBackupRecurringAlertTimeout = "Raven/IncrementalBackup/RecurringAlertTimeoutDays";
public const string IncrementalBackupState = "IncrementalBackupState.Document";
+
+ // General
+
+ public const string RavenDatabasesPrefix = "Raven/Databases/";
}
}
\ No newline at end of file
diff --git a/Raven.Tests.Bundles/LiveTest/PutTriggerTests.cs b/Raven.Tests.Bundles/LiveTest/PutTriggerTests.cs
new file mode 100644
index 000000000000..e565e1f2ac5a
--- /dev/null
+++ b/Raven.Tests.Bundles/LiveTest/PutTriggerTests.cs
@@ -0,0 +1,85 @@
+// -----------------------------------------------------------------------
+//
+// Copyright (c) Hibernating Rhinos LTD. All rights reserved.
+//
+// -----------------------------------------------------------------------
+using System.ComponentModel.Composition.Hosting;
+using System.Configuration;
+
+using Raven.Abstractions.Data;
+using Raven.Bundles.LiveTest;
+using Raven.Client.Connection;
+using Raven.Database.Config;
+using Raven.Database.Extensions;
+using Raven.Json.Linq;
+using Raven.Tests.Common;
+
+using Xunit;
+
+namespace Raven.Tests.Bundles.LiveTest
+{
+ public class PutTriggerTests : RavenTest
+ {
+ protected override void ModifyConfiguration(InMemoryRavenConfiguration configuration)
+ {
+ configuration.Catalog.Catalogs.Add(new AssemblyCatalog(typeof(LiveTestDatabaseDocumentPutTrigger).Assembly));
+ }
+
+ [Fact]
+ public void PutTriggerShouldEnableQuotasAndVoron()
+ {
+ using (var store = NewDocumentStore())
+ {
+ store
+ .DatabaseCommands
+ .GlobalAdmin
+ .CreateDatabase(new DatabaseDocument
+ {
+ Id = "Northwind",
+ Settings =
+ {
+ { "Raven/ActiveBundles", "Replication" },
+ { "Raven/DataDir", NewDataPath() }
+ }
+ });
+
+ var document = store.DatabaseCommands.Get("Raven/Databases/Northwind");
+ Assert.NotNull(document);
+
+ var databaseDocument = document.DataAsJson.Deserialize(store.Conventions);
+ AsserDatabaseDocument(databaseDocument);
+
+ databaseDocument.Settings[Constants.SizeHardLimitInKB] = "123";
+ databaseDocument.Settings[Constants.SizeSoftLimitInKB] = "321";
+ databaseDocument.Settings[Constants.DocsHardLimit] = "456";
+ databaseDocument.Settings[Constants.DocsSoftLimit] = "654";
+ databaseDocument.Settings["Raven/RunInMemory"] = "false";
+ databaseDocument.Settings["Raven/StorageEngine"] = "esent";
+
+ store.DatabaseCommands.Put("Raven/Databases/Northwind", null, RavenJObject.FromObject(databaseDocument), document.Metadata);
+
+ document = store.DatabaseCommands.Get("Raven/Databases/Northwind");
+ Assert.NotNull(document);
+
+ databaseDocument = document.DataAsJson.Deserialize(store.Conventions);
+ AsserDatabaseDocument(databaseDocument);
+ }
+ }
+
+ private static void AsserDatabaseDocument(DatabaseDocument databaseDocument)
+ {
+ var activeBundles = databaseDocument.Settings[Constants.ActiveBundles].GetSemicolonSeparatedValues();
+
+ Assert.Contains("Replication", activeBundles);
+
+ Assert.Contains("Quotas", activeBundles);
+ Assert.Equal(ConfigurationManager.AppSettings["Raven/Bundles/LiveTest/Quotas/Size/HardLimitInKB"], databaseDocument.Settings[Constants.SizeHardLimitInKB]);
+ Assert.Equal(ConfigurationManager.AppSettings["Raven/Bundles/LiveTest/Quotas/Size/SoftLimitInKB"], databaseDocument.Settings[Constants.SizeSoftLimitInKB]);
+ Assert.Null(databaseDocument.Settings[Constants.DocsHardLimit]);
+ Assert.Null(databaseDocument.Settings[Constants.DocsSoftLimit]);
+
+ Assert.True(bool.Parse(databaseDocument.Settings["Raven/RunInMemory"]));
+ Assert.Equal(InMemoryRavenConfiguration.VoronTypeName, databaseDocument.Settings["Raven/StorageEngine"]);
+ }
+ }
+}
\ No newline at end of file
diff --git a/Raven.Tests.Bundles/LiveTest/StartupTaskTests.cs b/Raven.Tests.Bundles/LiveTest/StartupTaskTests.cs
new file mode 100644
index 000000000000..7529025c8ae1
--- /dev/null
+++ b/Raven.Tests.Bundles/LiveTest/StartupTaskTests.cs
@@ -0,0 +1,72 @@
+// -----------------------------------------------------------------------
+//
+// Copyright (c) Hibernating Rhinos LTD. All rights reserved.
+//
+// -----------------------------------------------------------------------
+using System;
+using System.ComponentModel.Composition.Hosting;
+using System.Threading;
+
+using Raven.Abstractions.Data;
+using Raven.Bundles.LiveTest;
+using Raven.Database.Config;
+using Raven.Tests.Common;
+
+using Xunit;
+
+namespace Raven.Tests.Bundles.LiveTest
+{
+ public class StartupTaskTests : RavenTest
+ {
+ protected override void ModifyConfiguration(InMemoryRavenConfiguration configuration)
+ {
+ configuration.Catalog.Catalogs.Add(new AssemblyCatalog(typeof(LiveTestDatabaseDocumentPutTrigger).Assembly));
+ }
+
+ [Fact]
+ public void CleanerStartupTaskShouldRemoveDatabasesAfterIdleTimeout()
+ {
+ using (var store = NewDocumentStore())
+ {
+ store
+ .DatabaseCommands
+ .GlobalAdmin
+ .CreateDatabase(new DatabaseDocument
+ {
+ Id = "Northwind",
+ Settings =
+ {
+ { "Raven/ActiveBundles", "Replication" },
+ { "Raven/DataDir", NewDataPath() }
+ }
+ });
+
+ store
+ .DatabaseCommands
+ .GlobalAdmin
+ .CreateDatabase(new DatabaseDocument
+ {
+ Id = "Northwind2",
+ Settings =
+ {
+ { "Raven/ActiveBundles", "Replication" },
+ { "Raven/DataDir", NewDataPath() }
+ }
+ });
+
+ store
+ .DatabaseCommands
+ .ForDatabase("Northwind2")
+ .GetStatistics();
+
+ Assert.NotNull(store.DatabaseCommands.Get(Constants.RavenDatabasesPrefix + "Northwind"));
+ Assert.NotNull(store.DatabaseCommands.Get(Constants.RavenDatabasesPrefix + "Northwind2"));
+
+ Thread.Sleep(TimeSpan.FromSeconds(70));
+
+ Assert.Null(store.DatabaseCommands.Get(Constants.RavenDatabasesPrefix + "Northwind"));
+ Assert.Null(store.DatabaseCommands.Get(Constants.RavenDatabasesPrefix + "Northwind2"));
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/Raven.Tests.Bundles/Raven.Tests.Bundles.csproj b/Raven.Tests.Bundles/Raven.Tests.Bundles.csproj
index 5b9e78ba2576..af5ab5c4c60e 100644
--- a/Raven.Tests.Bundles/Raven.Tests.Bundles.csproj
+++ b/Raven.Tests.Bundles/Raven.Tests.Bundles.csproj
@@ -129,6 +129,8 @@
+
+
@@ -210,6 +212,10 @@
{1bb3d982-9675-400d-a247-547c071fbe35}
Raven.Bundles.Encryption.IndexFileCodec
+
+ {108260d1-12ed-4ec5-8c6b-1ded1d73271f}
+ Raven.Bundles.LiveTest
+
{4c026f8a-fb36-4a30-82e9-324d207f6b48}
Raven.Bundles.UniqueConstraints
diff --git a/Raven.Tests.Bundles/app.config b/Raven.Tests.Bundles/app.config
index 375d40bd087c..0062da492fbd 100644
--- a/Raven.Tests.Bundles/app.config
+++ b/Raven.Tests.Bundles/app.config
@@ -2,6 +2,9 @@
+
+
+
diff --git a/RavenDB.sln b/RavenDB.sln
index 29b8e58b0d50..15fa84c1446f 100644
--- a/RavenDB.sln
+++ b/RavenDB.sln
@@ -1,7 +1,7 @@
Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio 2013
-VisualStudioVersion = 12.0.30723.0
+VisualStudioVersion = 12.0.31101.0
MinimumVisualStudioVersion = 10.0.40219.1
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Raven.Database", "Raven.Database\Raven.Database.csproj", "{212823CD-25E1-41AC-92D1-D6DF4D53FC85}"
ProjectSection(ProjectDependencies) = postProject
@@ -85,6 +85,8 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Raven.Xunit.Runner", "Raven
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Raven.Migration", "Raven.Migration\Raven.Migration.csproj", "{E6C2EAA5-B5BC-4BE2-B981-0064E819DBEB}"
EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Raven.Bundles.LiveTest", "Bundles\Raven.Bundles.LiveTest\Raven.Bundles.LiveTest.csproj", "{108260D1-12ED-4EC5-8C6B-1DED1D73271F}"
+EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
@@ -3099,6 +3101,104 @@ Global
{E6C2EAA5-B5BC-4BE2-B981-0064E819DBEB}.winphone_Release|Mixed Platforms.Build.0 = Release|Any CPU
{E6C2EAA5-B5BC-4BE2-B981-0064E819DBEB}.winphone_Release|x64.ActiveCfg = Release|Any CPU
{E6C2EAA5-B5BC-4BE2-B981-0064E819DBEB}.winphone_Release|x86.ActiveCfg = Release|Any CPU
+ {108260D1-12ED-4EC5-8C6B-1DED1D73271F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {108260D1-12ED-4EC5-8C6B-1DED1D73271F}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {108260D1-12ED-4EC5-8C6B-1DED1D73271F}.Debug|ARM.ActiveCfg = Debug|Any CPU
+ {108260D1-12ED-4EC5-8C6B-1DED1D73271F}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
+ {108260D1-12ED-4EC5-8C6B-1DED1D73271F}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
+ {108260D1-12ED-4EC5-8C6B-1DED1D73271F}.Debug|x64.ActiveCfg = Debug|Any CPU
+ {108260D1-12ED-4EC5-8C6B-1DED1D73271F}.Debug|x86.ActiveCfg = Debug|Any CPU
+ {108260D1-12ED-4EC5-8C6B-1DED1D73271F}.net_2_0_Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {108260D1-12ED-4EC5-8C6B-1DED1D73271F}.net_2_0_Debug|Any CPU.Build.0 = Debug|Any CPU
+ {108260D1-12ED-4EC5-8C6B-1DED1D73271F}.net_2_0_Debug|ARM.ActiveCfg = Debug|Any CPU
+ {108260D1-12ED-4EC5-8C6B-1DED1D73271F}.net_2_0_Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
+ {108260D1-12ED-4EC5-8C6B-1DED1D73271F}.net_2_0_Debug|Mixed Platforms.Build.0 = Debug|Any CPU
+ {108260D1-12ED-4EC5-8C6B-1DED1D73271F}.net_2_0_Debug|x64.ActiveCfg = Debug|Any CPU
+ {108260D1-12ED-4EC5-8C6B-1DED1D73271F}.net_2_0_Debug|x86.ActiveCfg = Debug|Any CPU
+ {108260D1-12ED-4EC5-8C6B-1DED1D73271F}.net_2_0_Release|Any CPU.ActiveCfg = Release|Any CPU
+ {108260D1-12ED-4EC5-8C6B-1DED1D73271F}.net_2_0_Release|Any CPU.Build.0 = Release|Any CPU
+ {108260D1-12ED-4EC5-8C6B-1DED1D73271F}.net_2_0_Release|ARM.ActiveCfg = Release|Any CPU
+ {108260D1-12ED-4EC5-8C6B-1DED1D73271F}.net_2_0_Release|Mixed Platforms.ActiveCfg = Release|Any CPU
+ {108260D1-12ED-4EC5-8C6B-1DED1D73271F}.net_2_0_Release|Mixed Platforms.Build.0 = Release|Any CPU
+ {108260D1-12ED-4EC5-8C6B-1DED1D73271F}.net_2_0_Release|x64.ActiveCfg = Release|Any CPU
+ {108260D1-12ED-4EC5-8C6B-1DED1D73271F}.net_2_0_Release|x86.ActiveCfg = Release|Any CPU
+ {108260D1-12ED-4EC5-8C6B-1DED1D73271F}.net_3_5_Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {108260D1-12ED-4EC5-8C6B-1DED1D73271F}.net_3_5_Debug|Any CPU.Build.0 = Debug|Any CPU
+ {108260D1-12ED-4EC5-8C6B-1DED1D73271F}.net_3_5_Debug|ARM.ActiveCfg = Debug|Any CPU
+ {108260D1-12ED-4EC5-8C6B-1DED1D73271F}.net_3_5_Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
+ {108260D1-12ED-4EC5-8C6B-1DED1D73271F}.net_3_5_Debug|Mixed Platforms.Build.0 = Debug|Any CPU
+ {108260D1-12ED-4EC5-8C6B-1DED1D73271F}.net_3_5_Debug|x64.ActiveCfg = Debug|Any CPU
+ {108260D1-12ED-4EC5-8C6B-1DED1D73271F}.net_3_5_Debug|x86.ActiveCfg = Debug|Any CPU
+ {108260D1-12ED-4EC5-8C6B-1DED1D73271F}.net_3_5_Release|Any CPU.ActiveCfg = Release|Any CPU
+ {108260D1-12ED-4EC5-8C6B-1DED1D73271F}.net_3_5_Release|Any CPU.Build.0 = Release|Any CPU
+ {108260D1-12ED-4EC5-8C6B-1DED1D73271F}.net_3_5_Release|ARM.ActiveCfg = Release|Any CPU
+ {108260D1-12ED-4EC5-8C6B-1DED1D73271F}.net_3_5_Release|Mixed Platforms.ActiveCfg = Release|Any CPU
+ {108260D1-12ED-4EC5-8C6B-1DED1D73271F}.net_3_5_Release|Mixed Platforms.Build.0 = Release|Any CPU
+ {108260D1-12ED-4EC5-8C6B-1DED1D73271F}.net_3_5_Release|x64.ActiveCfg = Release|Any CPU
+ {108260D1-12ED-4EC5-8C6B-1DED1D73271F}.net_3_5_Release|x86.ActiveCfg = Release|Any CPU
+ {108260D1-12ED-4EC5-8C6B-1DED1D73271F}.net_4_0_Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {108260D1-12ED-4EC5-8C6B-1DED1D73271F}.net_4_0_Debug|Any CPU.Build.0 = Debug|Any CPU
+ {108260D1-12ED-4EC5-8C6B-1DED1D73271F}.net_4_0_Debug|ARM.ActiveCfg = Debug|Any CPU
+ {108260D1-12ED-4EC5-8C6B-1DED1D73271F}.net_4_0_Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
+ {108260D1-12ED-4EC5-8C6B-1DED1D73271F}.net_4_0_Debug|Mixed Platforms.Build.0 = Debug|Any CPU
+ {108260D1-12ED-4EC5-8C6B-1DED1D73271F}.net_4_0_Debug|x64.ActiveCfg = Debug|Any CPU
+ {108260D1-12ED-4EC5-8C6B-1DED1D73271F}.net_4_0_Debug|x86.ActiveCfg = Debug|Any CPU
+ {108260D1-12ED-4EC5-8C6B-1DED1D73271F}.net_4_0_Release|Any CPU.ActiveCfg = Release|Any CPU
+ {108260D1-12ED-4EC5-8C6B-1DED1D73271F}.net_4_0_Release|Any CPU.Build.0 = Release|Any CPU
+ {108260D1-12ED-4EC5-8C6B-1DED1D73271F}.net_4_0_Release|ARM.ActiveCfg = Release|Any CPU
+ {108260D1-12ED-4EC5-8C6B-1DED1D73271F}.net_4_0_Release|Mixed Platforms.ActiveCfg = Release|Any CPU
+ {108260D1-12ED-4EC5-8C6B-1DED1D73271F}.net_4_0_Release|Mixed Platforms.Build.0 = Release|Any CPU
+ {108260D1-12ED-4EC5-8C6B-1DED1D73271F}.net_4_0_Release|x64.ActiveCfg = Release|Any CPU
+ {108260D1-12ED-4EC5-8C6B-1DED1D73271F}.net_4_0_Release|x86.ActiveCfg = Release|Any CPU
+ {108260D1-12ED-4EC5-8C6B-1DED1D73271F}.net_4_5_Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {108260D1-12ED-4EC5-8C6B-1DED1D73271F}.net_4_5_Debug|Any CPU.Build.0 = Debug|Any CPU
+ {108260D1-12ED-4EC5-8C6B-1DED1D73271F}.net_4_5_Debug|ARM.ActiveCfg = Debug|Any CPU
+ {108260D1-12ED-4EC5-8C6B-1DED1D73271F}.net_4_5_Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
+ {108260D1-12ED-4EC5-8C6B-1DED1D73271F}.net_4_5_Debug|Mixed Platforms.Build.0 = Debug|Any CPU
+ {108260D1-12ED-4EC5-8C6B-1DED1D73271F}.net_4_5_Debug|x64.ActiveCfg = Debug|Any CPU
+ {108260D1-12ED-4EC5-8C6B-1DED1D73271F}.net_4_5_Debug|x86.ActiveCfg = Debug|Any CPU
+ {108260D1-12ED-4EC5-8C6B-1DED1D73271F}.net_4_5_Release|Any CPU.ActiveCfg = Release|Any CPU
+ {108260D1-12ED-4EC5-8C6B-1DED1D73271F}.net_4_5_Release|Any CPU.Build.0 = Release|Any CPU
+ {108260D1-12ED-4EC5-8C6B-1DED1D73271F}.net_4_5_Release|ARM.ActiveCfg = Release|Any CPU
+ {108260D1-12ED-4EC5-8C6B-1DED1D73271F}.net_4_5_Release|Mixed Platforms.ActiveCfg = Release|Any CPU
+ {108260D1-12ED-4EC5-8C6B-1DED1D73271F}.net_4_5_Release|Mixed Platforms.Build.0 = Release|Any CPU
+ {108260D1-12ED-4EC5-8C6B-1DED1D73271F}.net_4_5_Release|x64.ActiveCfg = Release|Any CPU
+ {108260D1-12ED-4EC5-8C6B-1DED1D73271F}.net_4_5_Release|x86.ActiveCfg = Release|Any CPU
+ {108260D1-12ED-4EC5-8C6B-1DED1D73271F}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {108260D1-12ED-4EC5-8C6B-1DED1D73271F}.Release|Any CPU.Build.0 = Release|Any CPU
+ {108260D1-12ED-4EC5-8C6B-1DED1D73271F}.Release|ARM.ActiveCfg = Release|Any CPU
+ {108260D1-12ED-4EC5-8C6B-1DED1D73271F}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
+ {108260D1-12ED-4EC5-8C6B-1DED1D73271F}.Release|Mixed Platforms.Build.0 = Release|Any CPU
+ {108260D1-12ED-4EC5-8C6B-1DED1D73271F}.Release|x64.ActiveCfg = Release|Any CPU
+ {108260D1-12ED-4EC5-8C6B-1DED1D73271F}.Release|x86.ActiveCfg = Release|Any CPU
+ {108260D1-12ED-4EC5-8C6B-1DED1D73271F}.silverlight_Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {108260D1-12ED-4EC5-8C6B-1DED1D73271F}.silverlight_Debug|Any CPU.Build.0 = Debug|Any CPU
+ {108260D1-12ED-4EC5-8C6B-1DED1D73271F}.silverlight_Debug|ARM.ActiveCfg = Debug|Any CPU
+ {108260D1-12ED-4EC5-8C6B-1DED1D73271F}.silverlight_Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
+ {108260D1-12ED-4EC5-8C6B-1DED1D73271F}.silverlight_Debug|Mixed Platforms.Build.0 = Debug|Any CPU
+ {108260D1-12ED-4EC5-8C6B-1DED1D73271F}.silverlight_Debug|x64.ActiveCfg = Debug|Any CPU
+ {108260D1-12ED-4EC5-8C6B-1DED1D73271F}.silverlight_Debug|x86.ActiveCfg = Debug|Any CPU
+ {108260D1-12ED-4EC5-8C6B-1DED1D73271F}.silverlight_Release|Any CPU.ActiveCfg = Release|Any CPU
+ {108260D1-12ED-4EC5-8C6B-1DED1D73271F}.silverlight_Release|Any CPU.Build.0 = Release|Any CPU
+ {108260D1-12ED-4EC5-8C6B-1DED1D73271F}.silverlight_Release|ARM.ActiveCfg = Release|Any CPU
+ {108260D1-12ED-4EC5-8C6B-1DED1D73271F}.silverlight_Release|Mixed Platforms.ActiveCfg = Release|Any CPU
+ {108260D1-12ED-4EC5-8C6B-1DED1D73271F}.silverlight_Release|Mixed Platforms.Build.0 = Release|Any CPU
+ {108260D1-12ED-4EC5-8C6B-1DED1D73271F}.silverlight_Release|x64.ActiveCfg = Release|Any CPU
+ {108260D1-12ED-4EC5-8C6B-1DED1D73271F}.silverlight_Release|x86.ActiveCfg = Release|Any CPU
+ {108260D1-12ED-4EC5-8C6B-1DED1D73271F}.winphone_Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {108260D1-12ED-4EC5-8C6B-1DED1D73271F}.winphone_Debug|Any CPU.Build.0 = Debug|Any CPU
+ {108260D1-12ED-4EC5-8C6B-1DED1D73271F}.winphone_Debug|ARM.ActiveCfg = Debug|Any CPU
+ {108260D1-12ED-4EC5-8C6B-1DED1D73271F}.winphone_Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
+ {108260D1-12ED-4EC5-8C6B-1DED1D73271F}.winphone_Debug|Mixed Platforms.Build.0 = Debug|Any CPU
+ {108260D1-12ED-4EC5-8C6B-1DED1D73271F}.winphone_Debug|x64.ActiveCfg = Debug|Any CPU
+ {108260D1-12ED-4EC5-8C6B-1DED1D73271F}.winphone_Debug|x86.ActiveCfg = Debug|Any CPU
+ {108260D1-12ED-4EC5-8C6B-1DED1D73271F}.winphone_Release|Any CPU.ActiveCfg = Release|Any CPU
+ {108260D1-12ED-4EC5-8C6B-1DED1D73271F}.winphone_Release|Any CPU.Build.0 = Release|Any CPU
+ {108260D1-12ED-4EC5-8C6B-1DED1D73271F}.winphone_Release|ARM.ActiveCfg = Release|Any CPU
+ {108260D1-12ED-4EC5-8C6B-1DED1D73271F}.winphone_Release|Mixed Platforms.ActiveCfg = Release|Any CPU
+ {108260D1-12ED-4EC5-8C6B-1DED1D73271F}.winphone_Release|Mixed Platforms.Build.0 = Release|Any CPU
+ {108260D1-12ED-4EC5-8C6B-1DED1D73271F}.winphone_Release|x64.ActiveCfg = Release|Any CPU
+ {108260D1-12ED-4EC5-8C6B-1DED1D73271F}.winphone_Release|x86.ActiveCfg = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
@@ -3127,6 +3227,7 @@ Global
{14F2D508-8E06-407B-9451-97E99538E26B} = {DB0F0968-FB58-4A29-8BEA-F73E55D92665}
{018485C2-30C2-444E-BF41-95102C215E01} = {DB0F0968-FB58-4A29-8BEA-F73E55D92665}
{E6C2EAA5-B5BC-4BE2-B981-0064E819DBEB} = {702CE58F-C8D5-4C3E-8138-98D20B0E26F9}
+ {108260D1-12ED-4EC5-8C6B-1DED1D73271F} = {B7C4AD28-873C-45D5-8331-5CF9EEB41CC8}
EndGlobalSection
GlobalSection(CodealikeProperties) = postSolution
SolutionGuid = 6944aade-3195-477c-8aed-9ebe2902fc57
diff --git a/zzz_RavenDB_Release.sln b/zzz_RavenDB_Release.sln
index 6792fdb0062d..610dc72c75ac 100644
--- a/zzz_RavenDB_Release.sln
+++ b/zzz_RavenDB_Release.sln
@@ -1,6 +1,6 @@
Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio 2013
-VisualStudioVersion = 12.0.30723.0
+VisualStudioVersion = 12.0.31101.0
MinimumVisualStudioVersion = 10.0.40219.1
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Tests", "Tests", "{3617B75B-4CD6-4420-86B9-CACDC3C00D47}"
EndProject
@@ -86,6 +86,8 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Raven.Migration", "Raven.Mi
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Raven.Tests.FileSystem", "Raven.Tests.FileSystem\Raven.Tests.FileSystem.csproj", "{01CA67F3-1E46-455C-8713-86FCCF2EFBC7}"
EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Raven.Bundles.LiveTest", "Bundles\Raven.Bundles.LiveTest\Raven.Bundles.LiveTest.csproj", "{108260D1-12ED-4EC5-8C6B-1DED1D73271F}"
+EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
@@ -562,6 +564,20 @@ Global
{01CA67F3-1E46-455C-8713-86FCCF2EFBC7}.Release|Mixed Platforms.Build.0 = Release|Any CPU
{01CA67F3-1E46-455C-8713-86FCCF2EFBC7}.Release|x64.ActiveCfg = Release|Any CPU
{01CA67F3-1E46-455C-8713-86FCCF2EFBC7}.Release|x86.ActiveCfg = Release|Any CPU
+ {108260D1-12ED-4EC5-8C6B-1DED1D73271F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {108260D1-12ED-4EC5-8C6B-1DED1D73271F}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {108260D1-12ED-4EC5-8C6B-1DED1D73271F}.Debug|ARM.ActiveCfg = Debug|Any CPU
+ {108260D1-12ED-4EC5-8C6B-1DED1D73271F}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
+ {108260D1-12ED-4EC5-8C6B-1DED1D73271F}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
+ {108260D1-12ED-4EC5-8C6B-1DED1D73271F}.Debug|x64.ActiveCfg = Debug|Any CPU
+ {108260D1-12ED-4EC5-8C6B-1DED1D73271F}.Debug|x86.ActiveCfg = Debug|Any CPU
+ {108260D1-12ED-4EC5-8C6B-1DED1D73271F}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {108260D1-12ED-4EC5-8C6B-1DED1D73271F}.Release|Any CPU.Build.0 = Release|Any CPU
+ {108260D1-12ED-4EC5-8C6B-1DED1D73271F}.Release|ARM.ActiveCfg = Release|Any CPU
+ {108260D1-12ED-4EC5-8C6B-1DED1D73271F}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
+ {108260D1-12ED-4EC5-8C6B-1DED1D73271F}.Release|Mixed Platforms.Build.0 = Release|Any CPU
+ {108260D1-12ED-4EC5-8C6B-1DED1D73271F}.Release|x64.ActiveCfg = Release|Any CPU
+ {108260D1-12ED-4EC5-8C6B-1DED1D73271F}.Release|x86.ActiveCfg = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
@@ -592,5 +608,6 @@ Global
{93287FBA-732A-4603-9BBE-9CFDC82FC8BE} = {3617B75B-4CD6-4420-86B9-CACDC3C00D47}
{E6C2EAA5-B5BC-4BE2-B981-0064E819DBEB} = {34CAACF8-D3EB-4161-931D-C850F076115C}
{01CA67F3-1E46-455C-8713-86FCCF2EFBC7} = {3617B75B-4CD6-4420-86B9-CACDC3C00D47}
+ {108260D1-12ED-4EC5-8C6B-1DED1D73271F} = {F2B14D1C-4B20-4DA0-9CE6-C169773B0493}
EndGlobalSection
EndGlobal