Page Speed Optimization Libraries  1.5.27.2
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   }
00043 
00044   virtual ~WriteThroughCache();
00045 
00046   virtual void Get(const GoogleString& key, Callback* callback);
00047   virtual void Put(const GoogleString& key, SharedString* value);
00048   virtual void Delete(const GoogleString& key);
00049 
00054   void set_cache1_limit(size_t limit) { cache1_size_limit_ = limit; }
00055   size_t cache1_limit() const { return cache1_size_limit_; }
00056 
00057   CacheInterface* cache1() { return cache1_; }
00058   CacheInterface* cache2() { return cache2_; }
00059   virtual bool IsBlocking() const {
00061     return cache1_->IsBlocking() && cache2_->IsBlocking();
00062   }
00063 
00064   virtual bool IsHealthy() const {
00065     return cache1_->IsHealthy() && cache2_->IsHealthy();
00066   }
00067 
00068   virtual void ShutDown() {
00069     cache1_->ShutDown();
00070     cache2_->ShutDown();
00071   }
00072 
00073   virtual GoogleString Name() const {
00074     return FormatName(cache1_->Name(), cache2_->Name());
00075   }
00076   static GoogleString FormatName(StringPiece l1, StringPiece l2);
00077 
00078  private:
00079   void PutInCache1(const GoogleString& key, SharedString* value);
00080   friend class WriteThroughCallback;
00081 
00082   CacheInterface* cache1_;
00083   CacheInterface* cache2_;
00084   size_t cache1_size_limit_;
00085 
00086   DISALLOW_COPY_AND_ASSIGN(WriteThroughCache);
00087 };
00088 
00089 }  
00090 
00091 #endif  ///< NET_INSTAWEB_UTIL_PUBLIC_WRITE_THROUGH_CACHE_H_
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines