Ejemplo n.º 1
0
		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);
					}
				}
			}
		}
Ejemplo n.º 2
0
		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);
				}
			}
		}
Ejemplo n.º 3
0
		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();
            }
        }
Ejemplo n.º 5
0
		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);
					}
				}
			}
		}
Ejemplo n.º 6
0
		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);
				}
			}
		}