public void BulkStoreManyWithClient() { using (var svc = new ObjectService(ObjectTestHelper.GetConfig())) { var ns = ObjectTestHelper.NameSpace1; var obj = ObjectTestHelper.ObjectName1; svc.CreateNameSpace(new ObjectNameSpaceConfig(ns, "ZeroG Test", "Unit Test", DateTime.Now)); // stores the object's metadata and builds the database tables svc.ProvisionObjectStore( new ObjectMetadata(ns, obj, new ObjectIndexMetadata[] { new ObjectIndexMetadata("IntIndex1", ObjectIndexType.Integer), new ObjectIndexMetadata("StrIndex1", ObjectIndexType.String, 15) })); var client = new LocalObjectServiceClient(svc, ns, obj); var objCount = 50000; var random = new Random(); var buf = new byte[100]; BulkStore bulk = client.BeginBulkStore(); // generate a list of objects to store for (int i = 0; objCount > i; i++) { random.NextBytes(buf); bulk.Add(buf, new ObjectIndex[] { ObjectIndex.Create("IntIndex1", i + 100), ObjectIndex.Create("StrIndex1", "idx_" + i) }); } // Complete the operation and store and index the objects var ids = bulk.Complete(); Assert.AreEqual(objCount, ids.Count()); // query 100 objects from the index var vals = client.Find(@"{""IntIndex1"":10000, ""Op"": "">"", ""And"" : {""IntIndex1"":10101, ""Op"": ""<""}}"); Assert.AreEqual(100, vals.Count()); } }
private void _InitializeObjectService() { var dataPath = Server.MapPath("/App_Data/ObjectService"); var config = new Config(dataPath); ObjectService = new ObjectService(config); // ensure that Object Store namespace exists if (!ObjectService.NameSpaceExists(Globals.ObjectNameSpace)) { ObjectService.CreateNameSpace( new ObjectNameSpaceConfig(Globals.ObjectNameSpace, "Demo Owner", "Demo Location", DateTime.Now)); } // provision ActivityFeed Object Store var metadata = ActivityFeed.GetMetadata(); if (!ObjectService.ObjectNameExists(metadata.NameSpace, metadata.ObjectName)) { ObjectService.ProvisionObjectStore(metadata); // create some test records to query var actService = new ActivityFeed(ObjectService); DateTime dt = DateTime.UtcNow - new TimeSpan(5, 0, 0); for (int i = 0; i < 1000; i++) { var actType = ActivityType.News; // put a few different types of activity types in if (0 != i && (0 == i % 5)) { actType = ActivityType.Article; } actService.Add(new Activity() { ActivityType = actType, Title = "Demo article #" + i, Text = "Demo article text #" + i, Link = "http://www.website" + i + ".com", Image = "image" + i + ".png", CreatedUTC = DateTime.UtcNow, ExpiresUTC = dt.AddSeconds(i) }); } } }
public void BulkStoreWithClient() { using (var svc = new ObjectService(ObjectTestHelper.GetConfig())) { var ns = ObjectTestHelper.NameSpace1; var obj = ObjectTestHelper.ObjectName1; svc.CreateNameSpace(new ObjectNameSpaceConfig(ns, "ZeroG Test", "Unit Test", DateTime.Now)); svc.ProvisionObjectStore(new ObjectMetadata(ns, obj)); var client = new LocalObjectServiceClient(svc, ns, obj); var val1 = new Guid("{D22640F0-7D87-4F1C-8817-119FC036FAC1}"); var val2 = new Guid("{72FC1391-EC51-4826-890B-D02071A9A2DE}"); var val3 = new Guid("{72FC1391-EC51-4826-890B-D02071A9A2DE}"); var val2SecondaryKey = Encoding.UTF8.GetBytes("val2key"); BulkStore bulk = client.BeginBulkStore(); bulk.Add(12, val1.ToByteArray()); bulk.Add(val2SecondaryKey, val2.ToByteArray(), null); bulk.Add(500, val3.ToByteArray()); var ids = bulk.Complete().ToArray(); Assert.AreEqual(3, ids.Length); Assert.AreEqual(12, ids[0].ID); Assert.IsFalse(ids[0].HasSecondaryKey()); Assert.AreEqual(1, ids[1].ID); Assert.IsTrue(ids[1].HasSecondaryKey()); Assert.AreEqual(val2SecondaryKey, ids[1].SecondaryKey); Assert.AreEqual(500, ids[2].ID); Assert.IsFalse(ids[2].HasSecondaryKey()); Assert.AreEqual(val1, new Guid(client.Get(12))); Assert.AreEqual(val2, new Guid(client.Get(1))); Assert.AreEqual(val3, new Guid(client.Get(500))); Assert.AreEqual(val2, new Guid(client.GetBySecondaryKey(val2SecondaryKey))); Assert.AreEqual(3, client.Count()); } }
public void SetAndGetTest() { using (var svc = new ObjectService(ObjectTestHelper.GetConfig())) { var ns = ObjectTestHelper.NameSpace1; var obj = ObjectTestHelper.ObjectName1; svc.CreateNameSpace(new ObjectNameSpaceConfig(ns, "ZeroG Test", "Unit Test", DateTime.Now)); svc.ProvisionObjectStore( new ObjectMetadata(ns, obj)); var client = new LocalObjectServiceClient(svc, ns, obj); var val1 = new Guid("{C8159CCF-9401-404E-A11E-0B5DF8BA6DB1}"); var val2 = new Guid("{F1B3E0E4-0C96-4671-8BBF-A086ED1C96BC}"); var objId1 = client.Store(val1.ToByteArray()); var objId2 = client.Store(val2.ToByteArray()); var getVal = client.Get(objId1.ID); Assert.IsNotNull(getVal); Assert.AreEqual(val1, new Guid(getVal)); getVal = client.Get(objId2.ID); Assert.IsNotNull(getVal); Assert.AreEqual(val2, new Guid(getVal)); } }
public void SetAndFindTest() { using (var svc = new ObjectService(ObjectTestHelper.GetConfig())) { var ns = ObjectTestHelper.NameSpace1; var obj = ObjectTestHelper.ObjectName1; svc.CreateNameSpace(new ObjectNameSpaceConfig(ns, "ZeroG Test", "Unit Test", DateTime.Now)); var indexName1 = "StrIndex1"; var indexName2 = "StrIndex2"; svc.ProvisionObjectStore( new ObjectMetadata(ns, obj, new ObjectIndexMetadata[] { new ObjectIndexMetadata(indexName1, ObjectIndexType.String, 8), new ObjectIndexMetadata(indexName2, ObjectIndexType.String, 1) })); var client = new LocalObjectServiceClient(svc, ns, obj); var val1 = new Guid("{C8159CCF-9401-404E-A11E-0B5DF8BA6DB1}"); var val2 = new Guid("{F1B3E0E4-0C96-4671-8BBF-A086ED1C96BC}"); var indexes1 = new string[] { "AA BB CC", "00 11 22"}; var indexes2 = new string[] { "F", "M" }; var objId1 = client.Store(val1.ToByteArray(), new ObjectIndex[] { ObjectIndex.Create(indexName1, indexes1[0]), ObjectIndex.Create(indexName2, indexes2[0]) }); var objId2 = client.Store(val2.ToByteArray(), new ObjectIndex[] { ObjectIndex.Create(indexName1, indexes1[1]), ObjectIndex.Create(indexName2, indexes2[1]) }); var getVal = client.Get(objId1.ID); Assert.IsNotNull(getVal); Assert.AreEqual(val1, new Guid(getVal)); getVal = client.Get(objId2.ID); Assert.IsNotNull(getVal); Assert.AreEqual(val2, new Guid(getVal)); getVal = client.Find(@"{ ""StrIndex1"" : ""AA BB CC"" }").FirstOrDefault(); Assert.IsNotNull(getVal); Assert.AreEqual(val1, new Guid(getVal)); } }
public void RemoveTest() { using (var svc = new ObjectService(ObjectTestHelper.GetConfig())) { var ns = ObjectTestHelper.NameSpace1; var obj = ObjectTestHelper.ObjectName1; svc.CreateNameSpace(new ObjectNameSpaceConfig(ns, "ZeroG Test", "Unit Test", DateTime.Now)); svc.ProvisionObjectStore( new ObjectMetadata(ns, obj)); var client = new LocalObjectServiceClient(svc, ns, obj); var val1 = new Guid("{C8159CCF-9401-404E-A11E-0B5DF8BA6DB1}"); var val2 = new Guid("{F1B3E0E4-0C96-4671-8BBF-A086ED1C96BC}"); var val3 = new Guid("{46C4CD37-EECA-416C-AD7A-52F4EA1CC999}"); var key1 = Encoding.UTF8.GetBytes("val1"); var key2 = Encoding.UTF8.GetBytes("val2"); var key3 = Encoding.UTF8.GetBytes("val3"); var objId1 = client.Store(val1.ToByteArray()); var objId2 = client.Store(key2, val2.ToByteArray()); var objId3 = client.Store(key3, val3.ToByteArray()); // test that all objects are returned var getVal = client.Get(objId1.ID); Assert.IsNotNull(getVal); Assert.AreEqual(val1, new Guid(getVal)); getVal = client.GetBySecondaryKey(key2); Assert.IsNotNull(getVal); Assert.AreEqual(val2, new Guid(getVal)); getVal = client.GetBySecondaryKey(key3); Assert.IsNotNull(getVal); Assert.AreEqual(val3, new Guid(getVal)); // remove an object and test that it is no longer returned client.Remove(objId1.ID); getVal = client.Get(objId1.ID); Assert.IsNull(getVal); getVal = client.GetBySecondaryKey(key1); Assert.IsNull(getVal); getVal = client.Get(objId2.ID); Assert.IsNotNull(getVal); getVal = client.GetBySecondaryKey(key3); Assert.IsNotNull(getVal); Assert.AreEqual(val3, new Guid(getVal)); // remove a second object client.Remove(objId2.ID); getVal = client.Get(objId2.ID); Assert.IsNull(getVal); getVal = client.GetBySecondaryKey(key2); Assert.IsNull(getVal); getVal = client.GetBySecondaryKey(key3); Assert.IsNotNull(getVal); Assert.AreEqual(val3, new Guid(getVal)); // remove a third object by its secondary key bool removed = client.RemoveBySecondaryKey(key3); Assert.IsTrue(removed); getVal = client.Get(objId2.ID); Assert.IsNull(getVal); getVal = client.GetBySecondaryKey(key2); Assert.IsNull(getVal); getVal = client.GetBySecondaryKey(key3); Assert.IsNull(getVal); } }
public void MultiThreadedObjectStoreGet() { var taskCount = 50; var taskList = new List<Task>(); using (var svc = new ObjectService(ObjectTestHelper.GetConfig())) { var ns = ObjectTestHelper.NameSpace1; var obj = ObjectTestHelper.ObjectName1; for (int i = 0; taskCount > i; i++) { taskList.Add(Task.Factory.StartNew((object state) => { lock (svc) { if (!svc.NameSpaceExists(ns)) { svc.CreateNameSpace(new ObjectNameSpaceConfig(ns, "ZeroG Test", "Unit Test", DateTime.Now)); } if (!svc.ObjectNameExists(ns, obj)) { svc.ProvisionObjectStore( new ObjectMetadata(ns, obj, new ObjectIndexMetadata[] { new ObjectIndexMetadata("IntIndex1", ObjectIndexType.Integer), new ObjectIndexMetadata("StrIndex1", ObjectIndexType.String, 15), new ObjectIndexMetadata("StrNullIndex1", ObjectIndexType.String, 5, true) })); } } var val1 = new Guid("{D22640F0-7D87-4F1C-8817-119FC036FAC1}"); var val2 = new Guid("{72FC1391-EC51-4826-890B-D02071A9A2DE}"); var val3 = new Guid("{72FC1391-EC51-4826-890B-D02071A9A2DE}"); var intIndex1 = 5; var intIndex2 = 12500; var intIndex3 = -100; var strIndex1 = "asdf"; var strIndex2 = "index test val"; var strIndex3 = "zzyyxx"; var strNullIndexVal = "0011"; var objID1 = svc.Store(ns, new PersistentObject() { Name = obj, Value = val1.ToByteArray(), Indexes = new ObjectIndex[] { ObjectIndex.Create("IntIndex1", intIndex1), ObjectIndex.Create("StrIndex1", strIndex1), ObjectIndex.Create("StrNullIndex1", null) } }); var objID2 = svc.Store(ns, new PersistentObject() { Name = obj, Value = val2.ToByteArray(), Indexes = new ObjectIndex[] { ObjectIndex.Create("IntIndex1", intIndex2), ObjectIndex.Create("StrIndex1", strIndex2), ObjectIndex.Create("StrNullIndex1", strNullIndexVal) } }); var objID3 = svc.Store(ns, new PersistentObject() { Name = obj, Value = val3.ToByteArray(), Indexes = new ObjectIndex[] { ObjectIndex.Create("IntIndex1", intIndex3), ObjectIndex.Create("StrIndex1", strIndex3), ObjectIndex.Create("StrNullIndex1", null) } }); var options = new ObjectFindOptions() { Operator = ObjectFindOperator.Equals, Logic = ObjectFindLogic.And }; var findVals = svc.Find(ns, obj, options, new ObjectIndex[] { ObjectIndex.Create("ID", objID3.ID), ObjectIndex.Create("StrIndex1", strIndex3) }).ToArray(); Assert.AreEqual(1, findVals.Length); Assert.AreEqual(val3, new Guid(findVals[0])); }, i, TaskCreationOptions.LongRunning)); } foreach (Task t in taskList) { t.Wait(); } var id = svc.GetNextObjectID(ns, obj); Assert.AreEqual(3 * taskCount + 1, id); Assert.AreEqual(3 * taskCount, svc.Iterate(ns, obj).Count()); // count all index values Assert.AreEqual(3 * taskCount, svc.Count(ns, obj)); } }
public void FindWithCachingTest() { using (var svc = new ObjectService(ObjectTestHelper.GetConfigWithCaching())) { var ns = ObjectTestHelper.NameSpace1; var obj = ObjectTestHelper.ObjectName1; svc.CreateNameSpace(new ObjectNameSpaceConfig(ns, "ZeroG Test", "Unit Test", DateTime.Now)); svc.ProvisionObjectStore( new ObjectMetadata(ns, obj, new ObjectIndexMetadata[] { new ObjectIndexMetadata("IntIndex1", ObjectIndexType.Integer), new ObjectIndexMetadata("StrIndex1", ObjectIndexType.String, 15) })); var val1 = new Guid("{D22640F0-7D87-4F1C-8817-119FC036FAC1}"); var val2 = new Guid("{72FC1391-EC51-4826-890B-D02071A9A2DE}"); var val3 = new Guid("{72FC1391-EC51-4826-890B-D02071A9A2DE}"); var intIndex1 = 5; var intIndex2 = 12500; var intIndex3 = -100; var strIndex1 = "asdf"; var strIndex2 = "index test val"; var strIndex3 = "zzyyxx"; var objID1 = svc.Store(ns, new PersistentObject() { Name = obj, Value = val1.ToByteArray(), Indexes = new ObjectIndex[] { ObjectIndex.Create("IntIndex1", intIndex1), ObjectIndex.Create("StrIndex1", strIndex1) } }); var objID2 = svc.Store(ns, new PersistentObject() { Name = obj, Value = val2.ToByteArray(), Indexes = new ObjectIndex[] { ObjectIndex.Create("IntIndex1", intIndex2), ObjectIndex.Create("StrIndex1", strIndex2) } }); var objID3 = svc.Store(ns, new PersistentObject() { Name = obj, Value = val3.ToByteArray(), Indexes = new ObjectIndex[] { ObjectIndex.Create("IntIndex1", intIndex3), ObjectIndex.Create("StrIndex1", strIndex3) } }); // test a single index lookup using And var options = new ObjectFindOptions() { Operator = ObjectFindOperator.Equals, Logic = ObjectFindLogic.And }; var findVals = svc.Find(ns, obj, options, new ObjectIndex[] { ObjectIndex.Create("IntIndex1", 12500) }).ToArray(); Assert.AreEqual(1, findVals.Length); Assert.AreEqual(val2, new Guid(findVals[0])); // test two index lookups using And options = new ObjectFindOptions() { Operator = ObjectFindOperator.Equals, Logic = ObjectFindLogic.And }; findVals = svc.Find(ns, obj, options, new ObjectIndex[] { ObjectIndex.Create("StrIndex1", "index test val"), ObjectIndex.Create("IntIndex1", 12500) }).ToArray(); Assert.AreEqual(1, findVals.Length); Assert.AreEqual(val2, new Guid(findVals[0])); // test a single lookup using Or options = new ObjectFindOptions() { Operator = ObjectFindOperator.Equals, Logic = ObjectFindLogic.Or }; findVals = svc.Find(ns, obj, options, new ObjectIndex[] { ObjectIndex.Create("IntIndex1", 12500) }).ToArray(); Assert.AreEqual(1, findVals.Length); Assert.AreEqual(val2, new Guid(findVals[0])); // test two index lookups using Or options = new ObjectFindOptions() { Operator = ObjectFindOperator.Equals, Logic = ObjectFindLogic.Or }; findVals = svc.Find(ns, obj, options, new ObjectIndex[] { ObjectIndex.Create("IntIndex1", 12500), ObjectIndex.Create("StrIndex1", "asdf") }).ToArray(); Assert.AreEqual(2, findVals.Length); var findVal1 = new Guid(findVals[0]); var findVal2 = new Guid(findVals[1]); Assert.IsFalse(findVal1 == findVal2); Assert.IsTrue(findVal1 == val1 || findVal1 == val2); Assert.IsTrue(findVal2 == val1 || findVal2 == val2); } }
public void FindByConstraintWithCachingTest() { using (var svc = new ObjectService(ObjectTestHelper.GetConfigWithCaching())) { var ns = ObjectTestHelper.NameSpace1; var obj = ObjectTestHelper.ObjectName1; svc.CreateNameSpace(new ObjectNameSpaceConfig(ns, "ZeroG Test", "Unit Test", DateTime.Now)); svc.ProvisionObjectStore( new ObjectMetadata(ns, obj, new ObjectIndexMetadata[] { new ObjectIndexMetadata("IntIndex1", ObjectIndexType.Integer), new ObjectIndexMetadata("StrIndex1", ObjectIndexType.String, 15) })); var val1 = new Guid("{D22640F0-7D87-4F1C-8817-119FC036FAC1}"); var val2 = new Guid("{72FC1391-EC51-4826-890B-D02071A9A2DE}"); var val3 = new Guid("{72FC1391-EC51-4826-890B-D02071A9A2DE}"); var intIndex1 = 5; var intIndex2 = 12500; var intIndex3 = -100; var strIndex1 = "asdf"; var strIndex2 = "index test val"; var strIndex3 = "zzyyxx"; var objID1 = svc.Store(ns, new PersistentObject() { Name = obj, Value = val1.ToByteArray(), Indexes = new ObjectIndex[] { ObjectIndex.Create("IntIndex1", intIndex1), ObjectIndex.Create("StrIndex1", strIndex1) } }); var objID2 = svc.Store(ns, new PersistentObject() { Name = obj, Value = val2.ToByteArray(), Indexes = new ObjectIndex[] { ObjectIndex.Create("IntIndex1", intIndex2), ObjectIndex.Create("StrIndex1", strIndex2) } }); var objID3 = svc.Store(ns, new PersistentObject() { Name = obj, Value = val3.ToByteArray(), Indexes = new ObjectIndex[] { ObjectIndex.Create("IntIndex1", intIndex3), ObjectIndex.Create("StrIndex1", strIndex3) } }); var findVals = svc.Find(ns, obj, @"{ ""IntIndex1"" : 12500, ""Op"" : ""="" }").ToArray(); Assert.AreEqual(1, findVals.Length); Assert.AreEqual(val2, new Guid(findVals[0])); } }
public void CacheWithObjectRemovedEvent() { Config config = ObjectTestHelper.GetConfigWithCaching(); string ns = ObjectTestHelper.NameSpace1; string obj = ObjectTestHelper.ObjectName1; string objectFullName = ObjectNaming.CreateFullObjectName(ns, obj); ObjectMetadata objectMetadata = new ObjectMetadata(ns, obj, new ObjectIndexMetadata[] { new ObjectIndexMetadata("IntIndex1", ObjectIndexType.Integer), new ObjectIndexMetadata("StrIndex1", ObjectIndexType.String, 15) }); // Temporarily use the ObjectService to provision the Object's Metadata. using (var svc = new ObjectService(config)) { svc.CreateNameSpace(new ObjectNameSpaceConfig(ns, "ZeroG Test", "Unit Test", DateTime.Now)); svc.ProvisionObjectStore(objectMetadata); } ObjectMetadataStore metadata = new ObjectMetadataStore(config); ObjectVersionStore versions = new ObjectVersionStore(config, metadata); ObjectIndexerCache cache = new ObjectIndexerCache(metadata, versions); string intVal1 = ObjectIndex.Create("IntIdx", 5).ToString(); string strVal1 = ObjectIndex.Create("StrIdx", "Val1").ToString(); string strVal2 = ObjectIndex.Create("StrIdx", "Val3").ToString(); object[] cacheParams = new object[] { objectFullName, intVal1, strVal1 }; object[] cacheParams2 = new object[] { objectFullName, intVal1, strVal2 }; int[] objectIds = new int[] { 1000, 2000 }; int[] objectIds2 = new int[] { 3000, 4000 }; try { // add a couple items to cache - they should not be cleared // when the object's metadata is removed cache.Set(objectIds, cacheParams); cache.Set(objectIds2, cacheParams2); Assert.AreEqual(2, cache.EnumerateCache().Count()); CacheTotals totals = cache.Totals; Assert.AreEqual(2, totals.TotalQueries); Assert.AreEqual(4, totals.TotalValues); Assert.IsNotNull(cache.Get(cacheParams)); Assert.IsNotNull(cache.Get(cacheParams2)); metadata.Remove(objectFullName); // NOTE: Dirty cache entries are not removed from cache as soon as // they become dirty. They are removed lazily when Get/Set // are called. // CacheTotals and Enumerate will return Dirty objects and are // only meant to be used by the Cache Cleaner and not directly // by the Object Indexer. Assert.AreEqual(0, cache.EnumerateCache().Count()); totals = cache.Totals; Assert.AreEqual(0, totals.TotalQueries); Assert.AreEqual(0, totals.TotalValues); Assert.IsNull(cache.Get(cacheParams)); Assert.IsNull(cache.Get(cacheParams2)); // The metadata needs to be added back so TestCleanup completes metadata.StoreMetadata(objectMetadata); } finally { cache.Dispose(); versions.Dispose(); metadata.Dispose(); } }
public void CacheWithDependencyVersionChangeEvent() { Config config = ObjectTestHelper.GetConfigWithCaching(); string ns = ObjectTestHelper.NameSpace1; string obj = ObjectTestHelper.ObjectName1; string obj2 = ObjectTestHelper.ObjectName2; string objectFullName = ObjectNaming.CreateFullObjectName(ns, obj); string objectFullName2 = ObjectNaming.CreateFullObjectName(ns, obj2); ObjectMetadata objectMetadata = new ObjectMetadata(ns, obj, new ObjectIndexMetadata[] { new ObjectIndexMetadata("IntIndex1", ObjectIndexType.Integer), new ObjectIndexMetadata("StrIndex1", ObjectIndexType.String, 15) }); ObjectMetadata objectMetadata2 = new ObjectMetadata(ns, obj2, null, new string[] { obj }); // Make Object1 a dependency of Object2. // Now whenever Object2's version changes, Object1's change event will fire as well. // NOTE: Do not supply Full Object Name as objects can only depend on other objects // within their namespace. // Temporarily use the ObjectService to provision the Object's Metadata. using (var svc = new ObjectService(config)) { svc.CreateNameSpace(new ObjectNameSpaceConfig(ns, "ZeroG Test", "Unit Test", DateTime.Now)); svc.ProvisionObjectStore(objectMetadata); svc.ProvisionObjectStore(objectMetadata2); } ObjectMetadataStore metadata = new ObjectMetadataStore(config); ObjectVersionStore versions = new ObjectVersionStore(config, metadata); ObjectIndexerCache cache = new ObjectIndexerCache(metadata, versions); string intVal1 = ObjectIndex.Create("IntIdx", 5).ToString(); string strVal1 = ObjectIndex.Create("StrIdx", "Val1").ToString(); string strVal2 = ObjectIndex.Create("StrIdx", "Val3").ToString(); object[] cacheParams = new object[] { objectFullName, intVal1, strVal1 }; object[] cacheParams2 = new object[] { objectFullName, intVal1, strVal2 }; int[] objectIds = new int[] { 1000, 2000 }; int[] objectIds2 = new int[] { 3000, 4000 }; try { // add a couple items to cache - they should not be returned // once the objects dependency object version changes cache.Set(objectIds, cacheParams); cache.Set(objectIds2, cacheParams2); Assert.AreEqual(2, cache.EnumerateCache().Count()); CacheTotals totals = cache.Totals; Assert.AreEqual(2, totals.TotalQueries); Assert.AreEqual(4, totals.TotalValues); Assert.IsNotNull(cache.Get(cacheParams)); Assert.IsNotNull(cache.Get(cacheParams2)); versions.Update(objectFullName2); Assert.AreEqual(2, cache.EnumerateCache().Count()); totals = cache.Totals; Assert.AreEqual(2, totals.TotalQueries); Assert.AreEqual(4, totals.TotalValues); Assert.IsNull(cache.Get(cacheParams)); Assert.IsNull(cache.Get(cacheParams2)); cache.Set(objectIds, cacheParams); cache.Set(objectIds2, cacheParams2); Assert.AreEqual(2, cache.EnumerateCache().Count()); totals = cache.Totals; Assert.AreEqual(2, totals.TotalQueries); Assert.AreEqual(4, totals.TotalValues); Assert.IsNotNull(cache.Get(cacheParams)); Assert.IsNotNull(cache.Get(cacheParams2)); } finally { cache.Dispose(); versions.Dispose(); metadata.Dispose(); } }
public void CachePerfTest() { var stopWatchUncached = new Stopwatch(); var stopWatchCached = new Stopwatch(); var stopWatchCountUncached = new Stopwatch(); var stopWatchCountCached = new Stopwatch(); var ns = ObjectTestHelper.NameSpace1; var obj = ObjectTestHelper.ObjectName1; var val1 = new Guid("{D22640F0-7D87-4F1C-8817-119FC036FAC1}"); var val2 = new Guid("{72FC1391-EC51-4826-890B-D02071A9A2DE}"); var val3 = new Guid("{72FC1391-EC51-4826-890B-D02071A9A2DE}"); var intIndex1 = 5; var intIndex2 = 12500; var intIndex3 = -100; var strIndex1 = "asdf"; var strIndex2 = "index test val"; var strIndex3 = "zzyyxx"; using (var svc = new ObjectService(ObjectTestHelper.GetConfig())) { svc.CreateNameSpace(new ObjectNameSpaceConfig(ns, "ZeroG Test", "Unit Test", DateTime.Now)); svc.ProvisionObjectStore( new ObjectMetadata(ns, obj, new ObjectIndexMetadata[] { new ObjectIndexMetadata("IntIndex1", ObjectIndexType.Integer), new ObjectIndexMetadata("StrIndex1", ObjectIndexType.String, 15) })); var objID1 = svc.Store(ns, new PersistentObject() { Name = obj, Value = val1.ToByteArray(), Indexes = new ObjectIndex[] { ObjectIndex.Create("IntIndex1", intIndex1), ObjectIndex.Create("StrIndex1", strIndex1) } }); var objID2 = svc.Store(ns, new PersistentObject() { Name = obj, Value = val2.ToByteArray(), Indexes = new ObjectIndex[] { ObjectIndex.Create("IntIndex1", intIndex2), ObjectIndex.Create("StrIndex1", strIndex2) } }); var objID3 = svc.Store(ns, new PersistentObject() { Name = obj, Value = val3.ToByteArray(), Indexes = new ObjectIndex[] { ObjectIndex.Create("IntIndex1", intIndex3), ObjectIndex.Create("StrIndex1", strIndex3) } }); stopWatchUncached.Start(); for (int i = 0; i < 10; i++) { var findVals = svc.Find(ns, obj, @"{ ""IntIndex1"" : 12500 }").ToArray(); Assert.AreEqual(1, findVals.Length); Assert.AreEqual(val2, new Guid(findVals[0])); } stopWatchUncached.Stop(); stopWatchCountUncached.Start(); for (int i = 0; i < 10; i++) { var count = svc.Count(ns, obj, @"{ ""IntIndex1"" : 12500 }"); Assert.AreEqual(1, count); } stopWatchCountUncached.Stop(); } using (var svc = new ObjectService(ObjectTestHelper.GetConfigWithCaching())) { stopWatchCached.Start(); for (int i = 0; i < 10; i++) { var findVals = svc.Find(ns, obj, @"{ ""IntIndex1"" : 12500 }").ToArray(); Assert.AreEqual(1, findVals.Length); Assert.AreEqual(val2, new Guid(findVals[0])); } stopWatchCached.Stop(); stopWatchCountCached.Start(); for (int i = 0; i < 10; i++) { var count = svc.Count(ns, obj, @"{ ""IntIndex1"" : 12500 }"); Assert.AreEqual(1, count); } stopWatchCountCached.Stop(); } Assert.IsTrue(stopWatchUncached.Elapsed > stopWatchCached.Elapsed); Assert.IsTrue(stopWatchCountUncached.Elapsed > stopWatchCountCached.Elapsed); Console.WriteLine("Uncached Find time: {0} -- Cached Find time: {1}", stopWatchUncached.Elapsed, stopWatchCached.Elapsed); Console.WriteLine("Uncached Count time: {0} -- Cached Count time: {1}", stopWatchCountUncached.Elapsed, stopWatchCountCached.Elapsed); }