]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
os/bluestore: Remove ExtentFreeListManager. 14772/head
authorJianpeng Ma <jianpeng.ma@intel.com>
Tue, 25 Apr 2017 20:25:47 +0000 (04:25 +0800)
committerJianpeng Ma <jianpeng.ma@intel.com>
Tue, 25 Apr 2017 20:25:47 +0000 (04:25 +0800)
Signed-off-by: Jianpeng Ma <jianpeng.ma@intel.com>
src/common/config_opts.h
src/os/CMakeLists.txt
src/os/bluestore/BitmapFreelistManager.h
src/os/bluestore/BlueStore.cc
src/os/bluestore/ExtentFreelistManager.cc [deleted file]
src/os/bluestore/ExtentFreelistManager.h [deleted file]
src/os/bluestore/FreelistManager.cc
src/os/bluestore/FreelistManager.h

index 0f88ad3339d4a13c302f4e98f483a4671772ece9..cb7ed27908db350008371d95bddc976efe87c71a 100644 (file)
@@ -1113,7 +1113,6 @@ OPTION(bluestore_cache_size, OPT_U64, 1024*1024*1024)
 OPTION(bluestore_cache_meta_ratio, OPT_DOUBLE, .9)
 OPTION(bluestore_kvbackend, OPT_STR, "rocksdb")
 OPTION(bluestore_allocator, OPT_STR, "bitmap")     // stupid | bitmap
-OPTION(bluestore_freelist_type, OPT_STR, "bitmap") // extent | bitmap
 OPTION(bluestore_freelist_blocks_per_key, OPT_INT, 128)
 OPTION(bluestore_bitmapallocator_blocks_per_zone, OPT_INT, 1024) // must be power of 2 aligned, e.g., 512, 1024, 2048...
 OPTION(bluestore_bitmapallocator_span_size, OPT_INT, 1024) // must be power of 2 aligned, e.g., 512, 1024, 2048...
index 1194c3f57c83da32bab385b9b87d594f6d9b6e9c..0fe5a8048d2d2df66aecbe277e99e2ed409282cd 100644 (file)
@@ -36,7 +36,6 @@ if(HAVE_LIBAIO)
     bluestore/BlueRocksEnv.cc
     bluestore/BlueStore.cc
     bluestore/bluestore_types.cc
-    bluestore/ExtentFreelistManager.cc
     bluestore/FreelistManager.cc
     bluestore/KernelDevice.cc
     bluestore/StupidAllocator.cc
index 5b5042be290d3a13a1d4d46912dc1cf397d50228..9ed39ff56534fd0658ae7305b996be133ddd6a42 100644 (file)
@@ -67,10 +67,6 @@ public:
   void release(
     uint64_t offset, uint64_t length,
     KeyValueDB::Transaction txn) override;
-
-  bool supports_parallel_transactions() override {
-    return true;
-  }
 };
 
 #endif
index 6f35698d98a957773f28f186bf0dea6854ba456d..c41037c20a7765a4dab2b9f27d894b4087963319 100644 (file)
@@ -4649,7 +4649,7 @@ int BlueStore::mkfs()
     }
   }
 
-  freelist_type = cct->_conf->bluestore_freelist_type;
+  freelist_type = "bitmap";
 
   r = _open_path();
   if (r < 0)
@@ -7121,9 +7121,7 @@ int BlueStore::_open_super_meta()
       freelist_type = std::string(bl.c_str(), bl.length());
       dout(10) << __func__ << " freelist_type " << freelist_type << dendl;
     } else {
-      freelist_type = "extent";
-      dout(10) << __func__ << " freelist_type " << freelist_type
-              << " (legacy bluestore instance)" << dendl;
+      assert("Not Support extent freelist manager" == 0);
     }
   }
 
@@ -7357,8 +7355,7 @@ void BlueStore::_txc_state_proc(TransContext *txc)
       }
       txc->log_state_latency(logger, l_bluestore_state_io_done_lat);
       txc->state = TransContext::STATE_KV_QUEUED;
-      if (cct->_conf->bluestore_sync_submit_transaction &&
-         fm->supports_parallel_transactions()) {
+      if (cct->_conf->bluestore_sync_submit_transaction) {
        if (txc->last_nid >= nid_max ||
            txc->last_blobid >= blobid_max) {
          dout(20) << __func__
diff --git a/src/os/bluestore/ExtentFreelistManager.cc b/src/os/bluestore/ExtentFreelistManager.cc
deleted file mode 100644 (file)
index f211e5b..0000000
+++ /dev/null
@@ -1,284 +0,0 @@
-// -*- mode:C++; tab-width:8; c-basic-offset:2; indent-tabs-mode:t -*-
-// vim: ts=8 sw=2 smarttab
-
-#include "ExtentFreelistManager.h"
-#include "kv/KeyValueDB.h"
-#include "os/kv.h"
-
-#include "common/debug.h"
-
-#define dout_context cct
-#define dout_subsys ceph_subsys_bluestore
-#undef dout_prefix
-#define dout_prefix *_dout << "freelist "
-
-int ExtentFreelistManager::create(uint64_t size, KeyValueDB::Transaction txn)
-{
-  release(0, size, txn);
-  return 0;
-}
-
-int ExtentFreelistManager::init()
-{
-  dout(1) << __func__ << dendl;
-
-  // load state from kvstore
-  KeyValueDB::Transaction txn = kvdb->get_transaction();
-  int fixed = 0;
-
-  KeyValueDB::Iterator it = kvdb->get_iterator(prefix);
-  it->lower_bound(string());
-  uint64_t last_offset = 0;
-  uint64_t last_length = 0;
-  while (it->valid()) {
-    uint64_t offset, length;
-    string k = it->key();
-    const char *p = _key_decode_u64(k.c_str(), &offset);
-    assert(p);
-    bufferlist bl = it->value();
-    bufferlist::iterator bp = bl.begin();
-    ::decode(length, bp);
-
-    total_free += length;
-
-    if (offset < last_offset + last_length) {
-      derr << __func__ << " detected overlapping extent on load, had "
-          << last_offset << "~" << last_length
-          << " and got "
-          << offset << "~" << length
-          << dendl;
-      return -EIO;
-    }
-    if (offset && offset == last_offset + last_length) {
-      derr << __func__ << " detected contiguous extent on load, merging "
-          << last_offset << "~" << last_length << " with "
-          << offset << "~" << length
-          << dendl;
-      kv_free.erase(last_offset);
-      string key;
-      _key_encode_u64(last_offset, &key);
-      txn->rmkey(prefix, key);
-      offset -= last_length;
-      length += last_length;
-      bufferlist value;
-      ::encode(length, value);
-      txn->set(prefix, key, value);
-      fixed++;
-    }
-
-    kv_free[offset] = length;
-    dout(20) << __func__ << "  " << offset << "~" << length << dendl;
-
-    last_offset = offset;
-    last_length = length;
-    it->next();
-  }
-
-  if (fixed) {
-    kvdb->submit_transaction_sync(txn);
-    derr << " fixed " << fixed << " extents" << dendl;
-  }
-
-  dout(10) << __func__ << " loaded " << kv_free.size() << " extents" << dendl;
-  return 0;
-}
-
-void ExtentFreelistManager::shutdown()
-{
-  dout(1) << __func__ << dendl;
-}
-
-void ExtentFreelistManager::dump()
-{
-  std::lock_guard<std::mutex> l(lock);
-  _dump();
-}
-
-void ExtentFreelistManager::enumerate_reset()
-{
-  std::lock_guard<std::mutex> l(lock);
-  enumerate_p = kv_free.begin();
-}
-
-bool ExtentFreelistManager::enumerate_next(uint64_t *offset, uint64_t *length)
-{
-  std::lock_guard<std::mutex> l(lock);
-  if (enumerate_p == kv_free.end())
-    return false;
-  *offset = enumerate_p->first;
-  *length = enumerate_p->second;
-  ++enumerate_p;
-  return true;
-}
-
-void ExtentFreelistManager::_dump()
-{
-  dout(30) << __func__ << " " << total_free
-          << " in " << kv_free.size() << " extents" << dendl;
-  for (auto p = kv_free.begin();
-       p != kv_free.end();
-       ++p) {
-    dout(30) << __func__ << "  " << p->first << "~" << p->second << dendl;
-  }
-}
-
-void ExtentFreelistManager::_audit()
-{
-  uint64_t sum = 0;
-  for (auto& p : kv_free) {
-    sum += p.second;
-  }
-  if (total_free != sum) {
-    derr << __func__ << " sum " << sum << " != total_free " << total_free
-        << dendl;
-    derr << kv_free << dendl;
-    assert(0 == "freelistmanager bug");
-  }
-}
-
-void ExtentFreelistManager::allocate(
-  uint64_t offset, uint64_t length,
-  KeyValueDB::Transaction txn)
-{
-  std::lock_guard<std::mutex> l(lock);
-  dout(10) << __func__ << " " << offset << "~" << length << dendl;
-  total_free -= length;
-  auto p = kv_free.lower_bound(offset);
-  if ((p == kv_free.end() || p->first > offset) &&
-      p != kv_free.begin()) {
-    --p;
-  }
-  if (p == kv_free.end() ||
-      p->first > offset ||
-      p->first + p->second < offset + length) {
-    derr << " bad allocate " << offset << "~" << length << " - dne" << dendl;
-    if (p != kv_free.end()) {
-      derr << " existing extent " << p->first << "~" << p->second << dendl;
-    }
-    _dump();
-    assert(0 == "bad allocate");
-  }
-
-  if (p->first == offset) {
-    string key;
-    _key_encode_u64(offset, &key);
-    txn->rmkey(prefix, key);
-    dout(20) << __func__ << "  rm " << p->first << "~" << p->second << dendl;
-    if (p->second > length) {
-      uint64_t newoff = offset + length;
-      uint64_t newlen = p->second - length;
-      string newkey;
-      _key_encode_u64(newoff, &newkey);
-      bufferlist newvalue;
-      ::encode(newlen, newvalue);
-      txn->set(prefix, newkey, newvalue);
-      dout(20) << __func__ << "  set " << newoff << "~" << newlen
-              << " (remaining tail)" << dendl;
-      kv_free.erase(p);
-      kv_free[newoff] = newlen;
-    } else {
-      kv_free.erase(p);
-    }
-  } else {
-    assert(p->first < offset);
-    // shorten
-    uint64_t newlen = offset - p->first;
-    string key;
-    _key_encode_u64(p->first, &key);
-    bufferlist newvalue;
-    ::encode(newlen, newvalue);
-    txn->set(prefix, key, newvalue);
-    dout(30) << __func__ << "  set " << p->first << "~" << newlen
-            << " (remaining head from " << p->second << ")" << dendl;
-    if (p->first + p->second > offset + length) {
-      // new trailing piece, too
-      uint64_t tailoff = offset + length;
-      uint64_t taillen = p->first + p->second - (offset + length);
-      string tailkey;
-      _key_encode_u64(tailoff, &tailkey);
-      bufferlist tailvalue;
-      ::encode(taillen, tailvalue);
-      txn->set(prefix, tailkey, tailvalue);
-      dout(20) << __func__ << "  set " << tailoff << "~" << taillen
-              << " (remaining tail from " << p->first << "~" << p->second << ")"
-              << dendl;
-      p->second = newlen;
-      kv_free[tailoff] = taillen;
-    } else {
-      p->second = newlen;
-    }
-  }
-  if (cct->_conf->bluestore_debug_freelist)
-    _audit();
-}
-
-void ExtentFreelistManager::release(
-  uint64_t offset, uint64_t length,
-  KeyValueDB::Transaction txn)
-{
-  std::lock_guard<std::mutex> l(lock);
-  dout(10) << __func__ << " " << offset << "~" << length << dendl;
-  total_free += length;
-  auto p = kv_free.lower_bound(offset);
-
-  // contiguous with previous extent?
-  if (p != kv_free.begin()) {
-    --p;
-    if (p->first + p->second == offset) {
-      string prevkey;
-      _key_encode_u64(p->first, &prevkey);
-      txn->rmkey(prefix, prevkey);
-      dout(20) << __func__ << "  rm " << p->first << "~" << p->second
-              << " (merge with previous)" << dendl;
-      length += p->second;
-      offset = p->first;
-      if (map_t_has_stable_iterators) {
-       kv_free.erase(p++);
-      } else {
-       p = kv_free.erase(p);
-      }
-    } else if (p->first + p->second > offset) {
-      derr << __func__ << " bad release " << offset << "~" << length
-          << " overlaps with " << p->first << "~" << p->second << dendl;
-      _dump();
-      assert(0 == "bad release overlap");
-    } else {
-      dout(30) << __func__ << " previous extent " << p->first << "~" << p->second
-              << " is not contiguous" << dendl;
-      ++p;
-    }
-  }
-
-  // contiguous with next extent?
-  if (p != kv_free.end()) {
-    if (p->first == offset + length) {
-      string tailkey;
-      _key_encode_u64(p->first, &tailkey);
-      txn->rmkey(prefix, tailkey);
-      dout(20) << __func__ << "  rm " << p->first << "~" << p->second
-              << " (merge with next)" << dendl;
-      length += p->second;
-      kv_free.erase(p);
-    } else if (p->first < offset + length) {
-      derr << __func__ << " bad release " << offset << "~" << length
-          << " overlaps with " << p->first << "~" << p->second << dendl;
-      _dump();
-      assert(0 == "bad release overlap");
-    } else {
-      dout(30) << __func__ << " next extent " << p->first << "~" << p->second
-              << " is not contiguous" << dendl;
-    }
-  }
-
-  string key;
-  _key_encode_u64(offset, &key);
-  bufferlist value;
-  ::encode(length, value);
-  txn->set(prefix, key, value);
-  dout(20) << __func__ << "  set " << offset << "~" << length << dendl;
-
-  kv_free[offset] = length;
-
-  if (cct->_conf->bluestore_debug_freelist)
-    _audit();
-}
diff --git a/src/os/bluestore/ExtentFreelistManager.h b/src/os/bluestore/ExtentFreelistManager.h
deleted file mode 100644 (file)
index 3567a8e..0000000
+++ /dev/null
@@ -1,59 +0,0 @@
-// -*- mode:C++; tab-width:8; c-basic-offset:2; indent-tabs-mode:t -*-
-// vim: ts=8 sw=2 smarttab
-
-#ifndef CEPH_OS_BLUESTORE_EXTENTFREELISTMANAGER_H
-#define CEPH_OS_BLUESTORE_EXTENTFREELISTMANAGER_H
-
-#include <string>
-#include <map>
-#include <mutex>
-#include <ostream>
-#include "FreelistManager.h"
-
-#include "include/cpp-btree/btree_map.h"
-
-class ExtentFreelistManager : public FreelistManager {
-  KeyValueDB *kvdb;
-  std::string prefix;
-  std::mutex lock;
-  uint64_t total_free;
-
-  typedef btree::btree_map<uint64_t,uint64_t> map_t;
-  static const bool map_t_has_stable_iterators = false;
-
-  map_t kv_free;    ///< mirrors our kv values in the db
-
-  map_t::const_iterator enumerate_p;
-
-  void _audit();
-  void _dump();
-
-public:
-  ExtentFreelistManager(CephContext* cct, KeyValueDB *kvdb,
-                       std::string prefix) :
-    FreelistManager(cct),
-    kvdb(kvdb),
-    prefix(prefix),
-    total_free(0) {
-  }
-
-  int create(uint64_t size, KeyValueDB::Transaction txn) override;
-
-  int init() override;
-  void shutdown() override;
-
-  void dump() override;
-
-  void enumerate_reset() override;
-  bool enumerate_next(uint64_t *offset, uint64_t *length) override;
-
-  void allocate(
-    uint64_t offset, uint64_t length,
-    KeyValueDB::Transaction txn) override;
-  void release(
-    uint64_t offset, uint64_t length,
-    KeyValueDB::Transaction txn) override;
-};
-
-
-#endif
index ad803e85872bd72a42e1972b5ad7f580356a75f7..9b91cc09437ca0af76b853885cca89ea9d04e3a3 100644 (file)
@@ -2,7 +2,6 @@
 // vim: ts=8 sw=2 smarttab
 
 #include "FreelistManager.h"
-#include "ExtentFreelistManager.h"
 #include "BitmapFreelistManager.h"
 
 FreelistManager *FreelistManager::create(
@@ -16,8 +15,6 @@ FreelistManager *FreelistManager::create(
   // op is per prefix, has to done pre-db-open, and we don't know the
   // freelist type until after we open the db.
   assert(prefix == "B");
-  if (type == "extent")
-    return new ExtentFreelistManager(cct, kvdb, "B");
   if (type == "bitmap")
     return new BitmapFreelistManager(cct, kvdb, "B", "b");
   return NULL;
index 1d0bb5c2a5cc7217c78fbe508d343d5d11f53487..7f5ad4d79f9b7ab95540d60150ce96f3ff0e9cf6 100644 (file)
@@ -40,10 +40,6 @@ public:
   virtual void release(
     uint64_t offset, uint64_t length,
     KeyValueDB::Transaction txn) = 0;
-
-  virtual bool supports_parallel_transactions() {
-    return false;
-  }
 };