Ejemplo n.º 1
0
 public void Set(string key, CachedRequest val)
 {
     if (Interlocked.Increment(ref memoryPressureCounterOnSet) % 25 == 0)             // check every 25 sets
     {
         TryClearMemory();
     }
     actualCache.AddOrUpdate(key, val, (s, o) => val);
     lruKeys.Push(key);
 }
Ejemplo n.º 2
0
        public async Task CacheReqestAsync(CachedRequest cachedRequest)
        {
            if (cachedRequest == null ||
                string.IsNullOrEmpty(cachedRequest.Request) ||
                string.IsNullOrEmpty(cachedRequest.Request))
            {
                return;
            }

            await database.InsertOrReplaceAsync(cachedRequest);
        }
Ejemplo n.º 3
0
        public void Set(string key, CachedRequest val)
        {
            if (Interlocked.Increment(ref memoryPressureCounterOnSet) % 25 == 0) // check every 25 sets
            {
                TryClearMemory();
            }
            int lastWrite;

            if (lastWritePerDb.TryGetValue(val.Database, out lastWrite))
            {
                val.ReadTime = lastWrite;
            }
            actualCache.AddOrUpdate(key, val, (s, o) => val);
            lruKeys.Push(key);
        }
Ejemplo n.º 4
0
 private void AddNewEntry(string operationKey, OperationRequest operationRequest)
 {
     if (!_cachedRequests.ContainsKey(operationKey))
     {
         lock (_sync)
         {
             if (!_cachedRequests.ContainsKey(operationKey))
             {
                 ClearSpaceForNewEntry();
                 LinkedListNode <string> rank  = _requestRanking.AddFirst(operationKey);
                 CachedRequest           entry = new CachedRequest(rank, operationRequest);
                 _cachedRequests = _cachedRequests.SetItem(operationKey, entry);
                 _first          = rank;
             }
         }
     }
 }
Ejemplo n.º 5
0
        public async Task CachedServiceClient_does_return_cached_ToOptimizedResults_Async()
        {
            var client = GetCachedServiceClient();

            var request = new CachedRequest { Age = TimeSpan.FromHours(1) };
            var response = await client.GetAsync(request);
            Assert.That(client.NotModifiedHits, Is.EqualTo(0));
            Assert.That(response, Is.EqualTo(request));

            response = await client.GetAsync(request);
            Assert.That(client.NotModifiedHits, Is.EqualTo(1));
            Assert.That(response, Is.EqualTo(request));
        }
Ejemplo n.º 6
0
    public List<CachedRequest> RequestsInCache(Carrot.AuthStatus authStatus)
    {
        List<CachedRequest> cachedRequests = new List<CachedRequest>();
#if CACHE_ENABLED
        IntPtr sqlStatement = IntPtr.Zero;
        lock(this)
        {
            string sql = string.Format(kCacheReadSQL, (int)authStatus);
            if(sqlite3_prepare_v2(mDBPtr, sql, -1, out sqlStatement, IntPtr.Zero) == SQLITE_OK)
            {
                while(sqlite3_step(sqlStatement) == SQLITE_ROW)
                {
                    CachedRequest request = new CachedRequest();
                    request.CacheId = sqlite3_column_int64(sqlStatement, 0);
                    request.ServiceType = (Carrot.ServiceType)sqlite3_column_int(sqlStatement, 1);
                    request.Endpoint = sqlite3_column_text(sqlStatement, 2);
                    request.Parameters = Json.Deserialize(sqlite3_column_text(sqlStatement, 3)) as Dictionary<string, object>;
                    request.RequestId = sqlite3_column_text(sqlStatement, 4);
                    request.RequestDate = (long)sqlite3_column_double(sqlStatement, 5);
                    request.Retries = sqlite3_column_int(sqlStatement, 6);
                    request.Cache = this;
                    cachedRequests.Add(request);
                }
            }
            else
            {
                Debug.Log("Failed to load requests from Carrot cache. Error: " + sqlite3_errmsg(mDBPtr));
            }
        }
        sqlite3_finalize(sqlStatement);
#else
        lock(this)
        {
            foreach(CarrotCache.CachedRequest crequest in mCachedRequests)
            {
                if((int)crequest.ServiceType <= (int)authStatus)
                {
                    //Debug.Log("Somethingsomething: " + crequest);
                    cachedRequests.Add(crequest);
                }
            }
        }
#endif
        return cachedRequests;
    }
Ejemplo n.º 7
0
    public CachedRequest CacheRequest(Carrot.ServiceType serviceType, string endpoint, Dictionary<string, object> parameters)
    {
        CachedRequest ret = new CachedRequest();
        ret.ServiceType = serviceType;
        ret.Endpoint = endpoint;
        ret.Parameters = parameters;
        ret.RequestDate = (long)((DateTime.Now.ToUniversalTime().Ticks - 621355968000000000) / 10000000);
        ret.RequestId = System.Guid.NewGuid().ToString();
        ret.Retries = 0;

#if CACHE_ENABLED
        IntPtr sqlStatement = IntPtr.Zero;
        string sql = string.Format(kCacheInsertSQL, ret.ServiceType, ret.Endpoint, Json.Serialize(ret.Parameters),
                                   ret.RequestId, ret.RequestDate, ret.Retries);
        lock(this)
        {
            if(sqlite3_prepare_v2(mDBPtr, sql, -1, out sqlStatement, IntPtr.Zero) == SQLITE_OK)
            {
                if(sqlite3_step(sqlStatement) == SQLITE_DONE)
                {
                    ret.Cache = this;
                    ret.CacheId = sqlite3_last_insert_rowid(mDBPtr);
                }
                else
                {
                    Debug.Log("Failed to write request to Carrot cache. Error: " + sqlite3_errmsg(mDBPtr));
                }
            }
            else
            {
                Debug.Log("Failed to write request to Carrot cache. Error: " + sqlite3_errmsg(mDBPtr));
            }
        }
        sqlite3_finalize(sqlStatement);
#else
        lock(this)
        {
            ret.Cache = this;
            mCachedRequests.Add(ret);
        }
#endif
        return ret;
    }