]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
rgw: fix lc process only schdule the first item of lc objects 17061/head
authorlu.shasha <lu.shasha@eisoo.com>
Thu, 17 Aug 2017 08:02:02 +0000 (16:02 +0800)
committerlu.shasha <lu.shasha@eisoo.com>
Thu, 17 Aug 2017 09:38:25 +0000 (17:38 +0800)
If more than two bucket hash to the same lc object, only the first bucket will do lifecycle operation. Other buckets lifecycle will never be schduled.

Fixes: http://tracker.ceph.com/issues/21022
Signed-off-by: Shasha Lu <lu.shasha@eisoo.com>
src/rgw/rgw_lc.cc

index 2990bff1e816c1fd5269659db91dc08f3f0ea64c..996e6b2766ca41da4d19f51b0ae80b374baca20b 100644 (file)
@@ -195,8 +195,10 @@ bool RGWLC::if_already_run_today(time_t& start_date)
   localtime_r(&start_date, &bdt);
 
   if (cct->_conf->rgw_lc_debug_interval > 0) {
-         /* We're debugging, so say we can run */
-         return false;
+    if (now - start_date < cct->_conf->rgw_lc_debug_interval)
+      return true;
+    else
+      return false;
   }
 
   bdt.tm_hour = 0;
@@ -667,13 +669,11 @@ int RGWLC::process(int index, int max_lock_secs)
     l.unlock(&store->lc_pool_ctx, obj_names[index]);
     ret = bucket_lc_process(entry.first);
     bucket_lc_post(index, max_lock_secs, entry, ret);
-    return 0;
+  }while(1);
+
 exit:
     l.unlock(&store->lc_pool_ctx, obj_names[index]);
     return 0;
-
-  }while(1);
-
 }
 
 void RGWLC::start_processor()