public void LoadResultShoudBeUpToDateEvenIfAggresiveCacheIsEnabled() { using (GetNewServer()) using (var store = new DocumentStore { Url = "http://localhost:8079" }.Initialize()) { store.Conventions.ShouldSaveChangesForceAggresiveCacheCheck = false; using (var session = store.OpenSession()) { session.Store(new User() { Id = "users/1", Name = "John" }); session.SaveChanges(); } using (store.AggressivelyCacheFor(TimeSpan.FromMinutes(5))) { // make sure that object is cached using (var session = store.OpenSession()) { store.Changes().Task.Result.WaitForAllPendingSubscriptions(); var users = session.Load<User>(new[] {"users/1"}); Assert.Equal("John", users[0].Name); } ((DocumentStore)store).GetObserveChangesAndEvictItemsFromCacheTask().Wait(); // change object using (var session = store.OpenSession()) { session.Store(new User() { Id = "users/1", Name = "Adam" }); session.SaveChanges(); } Assert.True(SpinWait.SpinUntil(() =>store.JsonRequestFactory.NumberOfCacheResets > 0, 10000)); using (var session = store.OpenSession()) { var users = session.Load<User>(new[] { "users/1" }); Assert.Equal("Adam", users[0].Name); } } } }
public void ShouldServeFromCacheIfThereWasNoChange() { using (var server = GetNewServer()) using (var store = new DocumentStore {Url = "http://localhost:8079"}.Initialize()) { store.Conventions.ShouldSaveChangesForceAggresiveCacheCheck = false; using (var session = store.OpenSession()) { session.Store(new User() { Id = "users/1", Name = "John" }); session.SaveChanges(); } WaitForIndexing(store); using (store.AggressivelyCacheFor(TimeSpan.FromMinutes(5))) { // make sure that object is cached using (var session = store.OpenSession()) { var user = session.Load<User>(new[] {"users/1"}).First(); Assert.Equal("John", user.Name); } ((DocumentStore)store).GetObserveChangesAndEvictItemsFromCacheTask().Wait(); // change object using (var session = store.OpenSession()) { session.Store(new User() { Id = "users/1", Name = "Adam" }); session.SaveChanges(); } WaitForIndexing(store); WaitForAllRequestsToComplete(server); server.Server.ResetNumberOfRequests(); using (var session = store.OpenSession()) { var user = session.Load<User>(new[] {"users/1"}).First(); // will create a request Assert.Equal("Adam", user.Name); } using (var session = store.OpenSession()) { var user = session.Load<User>(new[] { "users/1" }).First(); // will be taken from a cache Assert.Equal("Adam", user.Name); } WaitForAllRequestsToComplete(server); Assert.Equal(1, server.Server.NumberOfRequests); } } }
public void CacheClearingShouldTakeIntoAccountTenantDatabases() { using (GetNewServer()) using (var store = new DocumentStore { Url = "http://localhost:8079"}.Initialize()) { store.Conventions.ShouldSaveChangesForceAggresiveCacheCheck = false; store.DatabaseCommands.EnsureDatabaseExists("Northwind_1"); store.DatabaseCommands.EnsureDatabaseExists("Northwind_2"); using (var session = store.OpenSession("Northwind_1")) { session.Store(new User() { Id = "users/1", Name = "John" }); session.SaveChanges(); } using (var session = store.OpenSession("Northwind_2")) { session.Store(new User() { Id = "users/1", Name = "John" }); session.SaveChanges(); } using (store.AggressivelyCacheFor(TimeSpan.FromMinutes(5))) { // make sure that object is cached using (var session = store.OpenSession("Northwind_1")) { store.Changes().Task.Result.WaitForAllPendingSubscriptions(); var users = session.Load<User>(new[] { "users/1" }); Assert.Equal("John", users[0].Name); } ((DocumentStore)store).GetObserveChangesAndEvictItemsFromCacheTask().Wait(); using (var session = store.OpenSession("Northwind_2")) { store.Changes().Task.Result.WaitForAllPendingSubscriptions(); var users = session.Load<User>(new[] { "users/1" }); Assert.Equal("John", users[0].Name); } // change object on Northwind_1 ONLY using (var session = store.OpenSession("Northwind_1")) { session.Store(new User() { Id = "users/1", Name = "Adam" }); session.SaveChanges(); } Assert.True(SpinWait.SpinUntil(() => store.JsonRequestFactory.NumberOfCacheResets > 0, 10000)); using (var session = store.OpenSession("Northwind_1")) { var users = session.Load<User>(new[] { "users/1" }); Assert.Equal("Adam", users[0].Name); } using (var session = store.OpenSession("Northwind_2")) { var users = session.Load<User>(new[] { "users/1" }); Assert.Equal("John", users[0].Name); } } } }
public void Can_Aggressively_Cache() { using (var store = new DocumentStore { Url = "http://localhost:8081" }.Initialize()) { var customer = new Customer { Name = "Matt", Age = 32 }; store.JsonRequestFactory.LogRequest += (sender, args) => Console.WriteLine("Http Request: {0} status={1}", args.Url, args.Status); using (var session = store.OpenSession()) { //This is never cached, because it's a "PUT" not a "GET" session.Store(customer); session.SaveChanges(); var sessionVer = session.Load<Customer>(customer.Id); Console.WriteLine("Session Version:\n\t{0}: Name \"{1}\", Age={2}\n", sessionVer.Id, sessionVer.Name, sessionVer.Age); } using (store.AggressivelyCacheFor(TimeSpan.FromMinutes(30))) { var dbaseVer1 = store.DatabaseCommands.Get(customer.Id); Console.WriteLine("Database Version (AggressivelyCacheFor 30 mins):\n\t{0}: Name \"{1}\", Age={2}\n", dbaseVer1.Key, dbaseVer1.ToJson()["Name"], dbaseVer1.ToJson()["Age"]); } store.DatabaseCommands.Put(customer.Id, null, RavenJObject.FromObject(new Customer { Name = "Matt Warren", Age = 99 }), new RavenJObject()); Console.WriteLine("Changed Database Version, Name = \"Matt Warren\", Age = 99\n"); using (var session = store.OpenSession()) { using (store.AggressivelyCacheFor(TimeSpan.FromMinutes(30))) { var newCustomer = session.Load<Customer>(customer.Id); Console.WriteLine("Session Version (Without DisableAggressiveCaching):\n\t{0}: Name \"{1}\", Age={2}\n", newCustomer.Id, newCustomer.Name, newCustomer.Age); } } using (var session = store.OpenSession()) { using (store.DisableAggressiveCaching()) { var newCustomer = session.Load<Customer>(customer.Id); Console.WriteLine("Session Version (DisableAggressiveCaching):\n\t{0}: Name \"{1}\", Age={2}\n", newCustomer.Id, newCustomer.Name, newCustomer.Age); } } using (var session = store.OpenSession()) { using (store.AggressivelyCacheFor(TimeSpan.FromMinutes(30))) { var newCustomer = session.Load<Customer>(customer.Id); Console.WriteLine("Session Version (Without DisableAggressiveCaching):\n\t{0}: Name \"{1}\", Age={2}\n", newCustomer.Id, newCustomer.Name, newCustomer.Age); } } Console.ReadLine(); } }
public void QueryResultShoudBeUpToDateEvenIfAggresiveCacheIsEnabled() { using (GetNewServer()) using (var store = new DocumentStore { Url = "http://localhost:8079" }.Initialize()) { new RavenDocumentsByEntityName().Execute(store); using (var session = store.OpenSession()) { session.Store(new User() { Id = "users/1", Name = "John" }); session.SaveChanges(); } WaitForIndexing(store); using (store.AggressivelyCacheFor(TimeSpan.FromMinutes(5))) { // make sure that object is cached using (var session = store.OpenSession()) { var users = session.Query<User>() .ToList(); Assert.Equal("John", users[0].Name); } // change object using (var session = store.OpenSession()) { session.Store(new User() { Id = "users/1", Name = "Adam" }); session.SaveChanges(); } Assert.True(SpinWait.SpinUntil(() => store.JsonRequestFactory.NumberOfCacheResets > 0, 10000)); using (var session = store.OpenSession()) { var users = session.Query<User>().ToList(); Assert.Equal("Adam", users[0].Name); } } } }
public void ShouldServeFromCacheIfThereWasNoChange() { using (var server = GetNewServer()) using (var store = new DocumentStore {Url = "http://localhost:8079"}.Initialize()) { using (var session = store.OpenSession()) { session.Store(new User() { Id = "users/1", Name = "John" }); session.SaveChanges(); } using (store.AggressivelyCacheFor(TimeSpan.FromMinutes(5))) { // make sure that object is cached using (var session = store.OpenSession()) { var user = session.Load<User>(new[] {"users/1"}).First(); Assert.Equal("John", user.Name); } // change object using (var session = store.OpenSession()) { session.Store(new User() { Id = "users/1", Name = "Adam" }); session.SaveChanges(); } Assert.True(SpinWait.SpinUntil(() => store.JsonRequestFactory.NumberOfCacheResets > 0, 10000)); server.Server.ResetNumberOfRequests(); using (var session = store.OpenSession()) { var user = session.Load<User>(new[] {"users/1"}).First(); // will create a request Assert.Equal("Adam", user.Name); } using (var session = store.OpenSession()) { var user = session.Load<User>(new[] { "users/1" }).First(); // will be taken from a cache Assert.Equal("Adam", user.Name); } WaitForAllRequestsToComplete(server); Assert.Equal(1, server.Server.NumberOfRequests); } } }