]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
mon/MonitorDBStore: add erase_range() op to transaction
authorSage Weil <sage@redhat.com>
Mon, 23 Sep 2019 15:53:27 +0000 (10:53 -0500)
committerSage Weil <sage@redhat.com>
Mon, 23 Sep 2019 15:53:27 +0000 (10:53 -0500)
Signed-off-by: Sage Weil <sage@redhat.com>
src/mon/MonitorDBStore.h

index b285fff48d0b1dc29715bad95f147d3336429292..4f84654b65c67911ce3cc8928f5bdfa849a82ae5 100644 (file)
@@ -123,6 +123,7 @@ class MonitorDBStore
       OP_PUT   = 1,
       OP_ERASE = 2,
       OP_COMPACT = 3,
+      OP_ERASE_RANGE = 4,
     };
 
     void put(string prefix, string key, bufferlist& bl) {
@@ -156,6 +157,12 @@ class MonitorDBStore
       erase(prefix, os.str());
     }
 
+    void erase_range(string prefix, string begin, string end) {
+      ops.push_back(Op(OP_ERASE_RANGE, prefix, begin, end));
+      ++keys;
+      bytes += prefix.length() + begin.length() + end.length();
+    }
+
     void compact_prefix(string prefix) {
       ops.push_back(Op(OP_COMPACT, prefix, string()));
     }
@@ -189,6 +196,7 @@ class MonitorDBStore
       bl.append("value");
       ls.back()->put("prefix", "key", bl);
       ls.back()->erase("prefix2", "key2");
+      ls.back()->erase_range("prefix3", "key3", "key4");
       ls.back()->compact_prefix("prefix3");
       ls.back()->compact_range("prefix4", "from", "to");
     }
@@ -250,6 +258,14 @@ class MonitorDBStore
            f->dump_string("key", op.key);
          }
          break;
+       case OP_ERASE_RANGE:
+         {
+           f->dump_string("type", "ERASE_RANGE");
+           f->dump_string("prefix", op.prefix);
+           f->dump_string("start", op.key);
+           f->dump_string("end", op.endkey);
+         }
+         break;
        case OP_COMPACT:
          {
            f->dump_string("type", "COMPACT");
@@ -301,6 +317,9 @@ class MonitorDBStore
       case Transaction::OP_ERASE:
        dbt->rmkey(op.prefix, op.key);
        break;
+      case Transaction::OP_ERASE_RANGE:
+       dbt->rm_range_keys(op.prefix, op.key, op.endkey);
+       break;
       case Transaction::OP_COMPACT:
        compact.push_back(make_pair(op.prefix, make_pair(op.key, op.endkey)));
        break;