From 94fcbc20ba426e6c5a7bb86e468bb37fb3fb438e Mon Sep 17 00:00:00 2001 From: Pawel Pekrol Date: Thu, 20 Nov 2014 10:44:02 +0100 Subject: [PATCH] RavenDB-2945 Live test plugin --- .../LiveTestDatabaseCleanerStartupTask.cs | 104 ++++++++++++++++++ .../LiveTestDatabaseDocumentPutTrigger.cs | 75 +++++++++++++ .../Raven.Bundles.LiveTest.csproj | 79 +++++++++++++ Raven.Abstractions/Data/Constants.cs | 4 + .../LiveTest/PutTriggerTests.cs | 85 ++++++++++++++ .../LiveTest/StartupTaskTests.cs | 72 ++++++++++++ .../Raven.Tests.Bundles.csproj | 6 + Raven.Tests.Bundles/app.config | 3 + RavenDB.sln | 103 ++++++++++++++++- zzz_RavenDB_Release.sln | 19 +++- 10 files changed, 548 insertions(+), 2 deletions(-) create mode 100644 Bundles/Raven.Bundles.LiveTest/LiveTestDatabaseCleanerStartupTask.cs create mode 100644 Bundles/Raven.Bundles.LiveTest/LiveTestDatabaseDocumentPutTrigger.cs create mode 100644 Bundles/Raven.Bundles.LiveTest/Raven.Bundles.LiveTest.csproj create mode 100644 Raven.Tests.Bundles/LiveTest/PutTriggerTests.cs create mode 100644 Raven.Tests.Bundles/LiveTest/StartupTaskTests.cs 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