Exemple #1
0
        public void MembershipQueryWithCachedResultAndHealthyStatus()
        {
            SetStoreTimestamp(UnixMillisecondTime.Now);

            var expectedMembership = NewMembershipFromSegmentRefs(new string[] { "key1" }, new string[] { "key2 " });
            var userKey            = "userkey";

            SetStoreMembership(userKey, expectedMembership);

            var bsConfig = Components.BigSegments(_storeFactory)
                           .StaleAfter(TimeSpan.FromDays(1))
                           .CreateBigSegmentsConfiguration(BasicContext);

            using (var sw = new BigSegmentStoreWrapper(bsConfig, BasicTaskExecutor, TestLogger))
            {
                var result1 = sw.GetUserMembership(userKey);
                Assert.Equal(expectedMembership, result1.Membership);
                Assert.Equal(BigSegmentsStatus.Healthy, result1.Status);

                var result2 = sw.GetUserMembership(userKey);
                Assert.Equal(expectedMembership, result2.Membership);
                Assert.Equal(BigSegmentsStatus.Healthy, result2.Status);

                ShouldHaveQueriedMembershipTimes(userKey, 1);
            }
        }
Exemple #2
0
        public void LeastRecentUserIsEvictedFromCache()
        {
            SetStoreTimestamp(UnixMillisecondTime.Now);

            const string userKey1 = "userkey1", userKey2 = "userkey2", userKey3 = "userkey3";
            IMembership  expectedMembership1 = NewMembershipFromSegmentRefs(new string[] { "seg1" }, null),
                         expectedMembership2 = NewMembershipFromSegmentRefs(new string[] { "seg2" }, null),
                         expectedMembership3 = NewMembershipFromSegmentRefs(new string[] { "seg3" }, null);

            SetStoreMembership(userKey1, expectedMembership1);
            SetStoreMembership(userKey2, expectedMembership2);
            SetStoreMembership(userKey3, expectedMembership3);

            var bsConfig = Components.BigSegments(_storeFactory)
                           .UserCacheSize(2)
                           .StaleAfter(TimeSpan.FromDays(1))
                           .CreateBigSegmentsConfiguration(BasicContext);

            using (var sw = new BigSegmentStoreWrapper(bsConfig, BasicTaskExecutor, TestLogger))
            {
                var result1 = sw.GetUserMembership(userKey1);
                Assert.Equal(expectedMembership1, result1.Membership);
                Assert.Equal(BigSegmentsStatus.Healthy, result1.Status);

                var result2 = sw.GetUserMembership(userKey2);
                Assert.Equal(expectedMembership2, result2.Membership);
                Assert.Equal(BigSegmentsStatus.Healthy, result2.Status);

                var result3 = sw.GetUserMembership(userKey3);
                Assert.Equal(expectedMembership3, result3.Membership);
                Assert.Equal(BigSegmentsStatus.Healthy, result3.Status);

                ShouldHaveQueriedMembershipTimes(userKey1, 1);
                ShouldHaveQueriedMembershipTimes(userKey2, 1);
                ShouldHaveQueriedMembershipTimes(userKey3, 1);

                // Since the capacity is only 2 and userKey1 was the least recently used, that key should be
                // evicted by the userKey3 query. Now only userKey2 and userKey3 are in the cache, and
                // querying them again should not cause a new query to the store.

                var result2a = sw.GetUserMembership(userKey2);
                Assert.Equal(expectedMembership2, result2a.Membership);
                var result3a = sw.GetUserMembership(userKey3);
                Assert.Equal(expectedMembership3, result3a.Membership);

                ShouldHaveQueriedMembershipTimes(userKey1, 1);
                ShouldHaveQueriedMembershipTimes(userKey2, 1);
                ShouldHaveQueriedMembershipTimes(userKey3, 1);

                var result1a = sw.GetUserMembership(userKey1);
                Assert.Equal(expectedMembership1, result1a.Membership);

                ShouldHaveQueriedMembershipTimes(userKey1, 2);
                ShouldHaveQueriedMembershipTimes(userKey2, 1);
                ShouldHaveQueriedMembershipTimes(userKey3, 1);
            }
        }
Exemple #3
0
        public void MembershipQueryWithStaleStatus()
        {
            SetStoreTimestamp(UnixMillisecondTime.Now.PlusMillis(-1000));

            var expectedMembership = NewMembershipFromSegmentRefs(new string[] { "key1" }, new string[] { "key2 " });
            var userKey            = "userkey";

            SetStoreMembership(userKey, expectedMembership);

            var bsConfig = Components.BigSegments(_storeFactory)
                           .StaleAfter(TimeSpan.FromMilliseconds(500))
                           .CreateBigSegmentsConfiguration(BasicContext);

            using (var sw = new BigSegmentStoreWrapper(bsConfig, BasicTaskExecutor, TestLogger))
            {
                var result = sw.GetUserMembership(userKey);
                Assert.Equal(expectedMembership, result.Membership);
                Assert.Equal(BigSegmentsStatus.Stale, result.Status);
            }
        }