RavenDB 数据库 **** 目前已锁定,因为正在检查是否需要重新创建索引

发布于 2025-01-19 02:52:55 字数 2901 浏览 2 评论 0原文

我正在使用Raventestdriver进行单元测试。 这是我测试的配置:

  ConfigureServer(new TestServerOptions
            {
                CommandLineArgs = new System.Collections.Generic.List<string> { "--RunInMemory=true", },
                FrameworkVersion = null,
            }) ;
            IDocumentStore store = GetDocumentStore();
            try
            {
                store.Maintenance.ForDatabase(ravenTestDatabaseName).Send(new GetStatisticsOperation());
            }
            catch (DatabaseDoesNotExistException)
            {
                    store.Maintenance.Server.Send(new CreateDatabaseOperation(new DatabaseRecord(ravenTestDatabaseName)));
            }
            session = store.OpenAsyncSession(new SessionOptions()
            {
                Database=ravenTestDatabaseName,
            });
             var hostBuilder = easy.api.Program.CreateHostBuilder(new string[0])
         .ConfigureWebHost(webHostBuilder =>
         {
             webHostBuilder.UseTestServer();
         })
        .ConfigureServices(services =>
        {
                services.AddScoped<ICurrentUserService, InitRequest>();
                services.AddScoped<ICacheStorage>(provider=>
                {
                    return new Mock<ICacheStorage>().Object;
                });

            services.AddRavenDbAsyncSession(GetDocumentStore(new GetDocumentStoreOptions()));
                services.AddScoped<IAsyncDocumentSession>((c) =>
            {
                return store.OpenAsyncSession(new SessionOptions()
                {
                    Database=ravenTestDatabaseName,
                });
                });
        });

因此,我的解决方案中有几个测试:

当我运行每个测试个体时,测试通过。但是当我一起运行所有测试时,我会收到此错误:

 Raven.Client.Exceptions.Database.DatabaseDisabledException : Raven.Client.Exceptions.Database.DatabaseDisabledException: The database Test-Server is currently locked because Checking if we need to recreate indexes
   at Raven.Server.Documents.DatabasesLandlord.UnloadAndLockDatabase(String dbName, String reason) in C:\Builds\RavenDB-Stable-5.2\52000\src\Raven.Server\Documents\DatabasesLandlord.cs:line 907
   at Raven.Server.Web.System.AdminDatabasesHandler.Put() in C:\Builds\RavenDB-Stable-5.2\52000\src\Raven.Server\Web\System\AdminDatabasesHandler.cs:line 327
   at Raven.Server.Routing.RequestRouter.HandlePath(RequestHandlerContext reqCtx) in C:\Builds\RavenDB-Stable-5.2\52000\src\Raven.Server\Routing\RequestRouter.cs:line 349
   at Raven.Server.RavenServerStartup.RequestHandler(HttpContext context) in C:\Builds\RavenDB-Stable-5.2\52000\src\Raven.Server\RavenServerStartup.cs:line 174
The server at /admin/databases?name=Test-Server&replicationFactor=1&raft-request-id=d9a39f56-a1ad-44b7-b6e5-b195c1143c4b responded with status code: ServiceUnavailable.

I am using RavenTestDriver for my unit tests .
Here is my configuration of my test :

  ConfigureServer(new TestServerOptions
            {
                CommandLineArgs = new System.Collections.Generic.List<string> { "--RunInMemory=true", },
                FrameworkVersion = null,
            }) ;
            IDocumentStore store = GetDocumentStore();
            try
            {
                store.Maintenance.ForDatabase(ravenTestDatabaseName).Send(new GetStatisticsOperation());
            }
            catch (DatabaseDoesNotExistException)
            {
                    store.Maintenance.Server.Send(new CreateDatabaseOperation(new DatabaseRecord(ravenTestDatabaseName)));
            }
            session = store.OpenAsyncSession(new SessionOptions()
            {
                Database=ravenTestDatabaseName,
            });
             var hostBuilder = easy.api.Program.CreateHostBuilder(new string[0])
         .ConfigureWebHost(webHostBuilder =>
         {
             webHostBuilder.UseTestServer();
         })
        .ConfigureServices(services =>
        {
                services.AddScoped<ICurrentUserService, InitRequest>();
                services.AddScoped<ICacheStorage>(provider=>
                {
                    return new Mock<ICacheStorage>().Object;
                });

            services.AddRavenDbAsyncSession(GetDocumentStore(new GetDocumentStoreOptions()));
                services.AddScoped<IAsyncDocumentSession>((c) =>
            {
                return store.OpenAsyncSession(new SessionOptions()
                {
                    Database=ravenTestDatabaseName,
                });
                });
        });

So I have several test in my solution:

When I run each test individual the test passed .But When I run all tests together I get this error :

 Raven.Client.Exceptions.Database.DatabaseDisabledException : Raven.Client.Exceptions.Database.DatabaseDisabledException: The database Test-Server is currently locked because Checking if we need to recreate indexes
   at Raven.Server.Documents.DatabasesLandlord.UnloadAndLockDatabase(String dbName, String reason) in C:\Builds\RavenDB-Stable-5.2\52000\src\Raven.Server\Documents\DatabasesLandlord.cs:line 907
   at Raven.Server.Web.System.AdminDatabasesHandler.Put() in C:\Builds\RavenDB-Stable-5.2\52000\src\Raven.Server\Web\System\AdminDatabasesHandler.cs:line 327
   at Raven.Server.Routing.RequestRouter.HandlePath(RequestHandlerContext reqCtx) in C:\Builds\RavenDB-Stable-5.2\52000\src\Raven.Server\Routing\RequestRouter.cs:line 349
   at Raven.Server.RavenServerStartup.RequestHandler(HttpContext context) in C:\Builds\RavenDB-Stable-5.2\52000\src\Raven.Server\RavenServerStartup.cs:line 174
The server at /admin/databases?name=Test-Server&replicationFactor=1&raft-request-id=d9a39f56-a1ad-44b7-b6e5-b195c1143c4b responded with status code: ServiceUnavailable.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

尐偏执 2025-01-26 02:52:55

我只是将数据库名称留为空。

public class TestHostBuilder : RavenTestDriver, IAsyncLifetime
    {

        public HttpClient httpClient = null;
        public IDocumentStore documentStore = null;
        public async Task InitializeAsync()
        {
            documentStore = GetDocumentStore();
            var hostBuilder = easy.api.Program.CreateHostBuilder(new string[0])
        .ConfigureWebHost(webHostBuilder =>
        {
            webHostBuilder.UseTestServer();
        })
     
       .ConfigureServices(services =>
       {
           services.AddScoped<ICurrentUserService, InitRequest>();
           services.AddScoped<ICacheStorage>(provider =>
           {
               return new Mock<ICacheStorage>().Object;
           });
           services.AddRavenDbAsyncSession(GetDocumentStore(new GetDocumentStoreOptions()));
           services.AddTransient<IAsyncDocumentSession>((c) =>
            {
                return documentStore.OpenAsyncSession();
            });
           
       });
            var host = hostBuilder.Start();
            httpClient = host.GetTestClient();
        }
        public Task DisposeAsync()=> Task.CompletedTask;
    }

I just leave the database name empty .

public class TestHostBuilder : RavenTestDriver, IAsyncLifetime
    {

        public HttpClient httpClient = null;
        public IDocumentStore documentStore = null;
        public async Task InitializeAsync()
        {
            documentStore = GetDocumentStore();
            var hostBuilder = easy.api.Program.CreateHostBuilder(new string[0])
        .ConfigureWebHost(webHostBuilder =>
        {
            webHostBuilder.UseTestServer();
        })
     
       .ConfigureServices(services =>
       {
           services.AddScoped<ICurrentUserService, InitRequest>();
           services.AddScoped<ICacheStorage>(provider =>
           {
               return new Mock<ICacheStorage>().Object;
           });
           services.AddRavenDbAsyncSession(GetDocumentStore(new GetDocumentStoreOptions()));
           services.AddTransient<IAsyncDocumentSession>((c) =>
            {
                return documentStore.OpenAsyncSession();
            });
           
       });
            var host = hostBuilder.Start();
            httpClient = host.GetTestClient();
        }
        public Task DisposeAsync()=> Task.CompletedTask;
    }
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文