]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
rgw: limit num of buckets in data changes log
authorYehuda Sadeh <yehuda@inktank.com>
Thu, 2 May 2013 01:10:54 +0000 (18:10 -0700)
committerYehuda Sadeh <yehuda@inktank.com>
Wed, 8 May 2013 18:22:08 +0000 (11:22 -0700)
Signed-off-by: Yehuda Sadeh <yehuda@inktank.com>
src/rgw/rgw_bucket.cc
src/rgw/rgw_bucket.h

index 646176e1147ed3c3c678d9833a9644a9a190ab9c..b256ceb93f46c0bdf349929f0e5d4d8869127150 100644 (file)
@@ -1057,9 +1057,11 @@ int RGWDataChangesLog::choose_oid(rgw_bucket& bucket) {
 
 int RGWDataChangesLog::add_entry(rgw_bucket& bucket) {
   lock.Lock();
-  ChangeStatusPtr& status = changes[bucket.name];
-  if (!status) {
+
+  ChangeStatusPtr status;
+  if (!changes.find(bucket.name, status)) {
     status = ChangeStatusPtr(new ChangeStatus);
+    changes.add(bucket.name, status);
   }
 
   lock.Unlock();
index b8492b54a3df5c46c0b82a773510ba4ac126ca7d..ff4992a84554e806a617418ef5f2b4ecf343d436 100644 (file)
@@ -13,6 +13,7 @@
 #include "rgw_string.h"
 
 #include "common/Formatter.h"
+#include "common/lru_map.h"
 #include "rgw_formats.h"
 
 
@@ -277,11 +278,12 @@ class RGWDataChangesLog {
 
   typedef std::tr1::shared_ptr<ChangeStatus> ChangeStatusPtr;
 
-  map<string, ChangeStatusPtr> changes;
+  lru_map<string, ChangeStatusPtr> changes;
 
 public:
 
-  RGWDataChangesLog(CephContext *_cct, RGWRados *_store) : cct(_cct), store(_store), lock("RGWDataChangesLog") {
+  RGWDataChangesLog(CephContext *_cct, RGWRados *_store) : cct(_cct), store(_store), lock("RGWDataChangesLog"),
+                                                          changes(1000) /* FIXME */ {
     num_shards = 128; /* FIXME */
     oids = new string[num_shards];