Page Speed Optimization Libraries  1.3.25.1
net/instaweb/util/public/write_through_cache.h
Go to the documentation of this file.
00001 /*
00002  * Copyright 2010 Google Inc.
00003  *
00004  * Licensed under the Apache License, Version 2.0 (the "License");
00005  * you may not use this file except in compliance with the License.
00006  * You may obtain a copy of the License at
00007  *
00008  *      http:///www.apache.org/licenses/LICENSE-2.0
00009  *
00010  * Unless required by applicable law or agreed to in writing, software
00011  * distributed under the License is distributed on an "AS IS" BASIS,
00012  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
00013  * See the License for the specific language governing permissions and
00014  * limitations under the License.
00015  */
00016 
00018 
00019 #ifndef NET_INSTAWEB_UTIL_PUBLIC_WRITE_THROUGH_CACHE_H_
00020 #define NET_INSTAWEB_UTIL_PUBLIC_WRITE_THROUGH_CACHE_H_
00021 
00022 #include <cstddef>
00023 #include "net/instaweb/util/public/basictypes.h"
00024 #include "net/instaweb/util/public/cache_interface.h"
00025 #include "net/instaweb/util/public/string.h"
00026 #include "net/instaweb/util/public/string_util.h"
00027 
00028 namespace net_instaweb {
00029 
00030 class SharedString;
00031 
00033 class WriteThroughCache : public CacheInterface {
00034  public:
00035   static const size_t kUnlimited;
00036 
00038   WriteThroughCache(CacheInterface* cache1, CacheInterface* cache2)
00039       : cache1_(cache1),
00040         cache2_(cache2),
00041         cache1_size_limit_(kUnlimited),
00042         name_(StrCat("WriteThroughCache using backend 1 : ", cache1->Name(),
00043                      " and backend 2 : ", cache2->Name())) {}
00044 
00045   virtual ~WriteThroughCache();
00046 
00047   virtual void Get(const GoogleString& key, Callback* callback);
00048   virtual void Put(const GoogleString& key, SharedString* value);
00049   virtual void Delete(const GoogleString& key);
00050 
00055   void set_cache1_limit(size_t limit) { cache1_size_limit_ = limit; }
00056 
00057   CacheInterface* cache1() { return cache1_; }
00058   CacheInterface* cache2() { return cache2_; }
00059   virtual const char* Name() const { return name_.c_str(); }
00060   virtual bool IsBlocking() const {
00062     return cache1_->IsBlocking() && cache2_->IsBlocking();
00063   }
00064 
00065   virtual bool IsHealthy() const {
00066     return cache1_->IsHealthy() && cache2_->IsHealthy();
00067   }
00068 
00069   virtual void ShutDown() {
00070     cache1_->ShutDown();
00071     cache2_->ShutDown();
00072   }
00073 
00074  private:
00075   void PutInCache1(const GoogleString& key, SharedString* value);
00076   friend class WriteThroughCallback;
00077 
00078   CacheInterface* cache1_;
00079   CacheInterface* cache2_;
00080   size_t cache1_size_limit_;
00081   GoogleString name_;
00082 
00083   DISALLOW_COPY_AND_ASSIGN(WriteThroughCache);
00084 };
00085 
00086 }  
00087 
00088 #endif  ///< NET_INSTAWEB_UTIL_PUBLIC_WRITE_THROUGH_CACHE_H_
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines