You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@kudu.apache.org by to...@apache.org on 2016/02/23 00:53:07 UTC
[2/3] incubator-kudu git commit: Remove use of boost::ptr_vector in
non-test code
Remove use of boost::ptr_vector in non-test code
We no longer need this class, since a vector<unique_ptr<>> works fine
in C++11.
Change-Id: Ifb9b704cb3e65b8d1dc2605767c1eb29847b366d
Reviewed-on: http://gerrit.cloudera.org:8080/2243
Tested-by: Kudu Jenkins
Reviewed-by: Dan Burkert <da...@cloudera.com>
Project: http://git-wip-us.apache.org/repos/asf/incubator-kudu/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-kudu/commit/6737d78e
Tree: http://git-wip-us.apache.org/repos/asf/incubator-kudu/tree/6737d78e
Diff: http://git-wip-us.apache.org/repos/asf/incubator-kudu/diff/6737d78e
Branch: refs/heads/master
Commit: 6737d78e8e8d294af21d31ab46e92e91d7466dd8
Parents: 6a6a9c2
Author: Todd Lipcon <to...@apache.org>
Authored: Thu Feb 18 21:11:04 2016 -0800
Committer: Todd Lipcon <to...@apache.org>
Committed: Mon Feb 22 23:52:09 2016 +0000
----------------------------------------------------------------------
src/kudu/cfile/bloomfile.cc | 15 ++++++-------
src/kudu/cfile/bloomfile.h | 4 ++--
src/kudu/cfile/index_btree.cc | 44 +++++++++++++++++++-------------------
src/kudu/cfile/index_btree.h | 8 +++----
4 files changed, 34 insertions(+), 37 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-kudu/blob/6737d78e/src/kudu/cfile/bloomfile.cc
----------------------------------------------------------------------
diff --git a/src/kudu/cfile/bloomfile.cc b/src/kudu/cfile/bloomfile.cc
index b3059bc..f7a9af2 100644
--- a/src/kudu/cfile/bloomfile.cc
+++ b/src/kudu/cfile/bloomfile.cc
@@ -196,7 +196,7 @@ Status BloomFileReader::InitOnce() {
// stack-allocate these things more smartly!
int n_cpus = base::MaxCPUIndex() + 1;
for (int i = 0; i < n_cpus; i++) {
- index_iters_.push_back(
+ index_iters_.emplace_back(
IndexTreeIterator::Create(reader_.get(), validx_root));
}
iter_locks_.reset(new padded_spinlock[n_cpus]);
@@ -258,7 +258,7 @@ Status BloomFileReader::CheckKeyPresent(const BloomKeyProbe &probe,
cpu = (cpu + 1) % index_iters_.size();
}
- cfile::IndexTreeIterator *index_iter = &index_iters_[cpu];
+ cfile::IndexTreeIterator *index_iter = index_iters_[cpu].get();
Status s = index_iter->SeekAtOrBefore(probe.key());
if (PREDICT_FALSE(s.IsNotFound())) {
@@ -291,14 +291,13 @@ size_t BloomFileReader::memory_footprint_excluding_reader() const {
size += init_once_.memory_footprint_excluding_this();
- // This seems to be the easiest way to get a heap pointer to the ptr_vector.
- //
// TODO: Track the iterators' memory footprint? May change with every seek;
// not clear if it's worth doing.
- size += kudu_malloc_usable_size(
- const_cast<BloomFileReader*>(this)->index_iters_.c_array());
- for (int i = 0; i < index_iters_.size(); i++) {
- size += kudu_malloc_usable_size(&index_iters_[i]);
+ if (!index_iters_.empty()) {
+ size += kudu_malloc_usable_size(index_iters_.data());
+ for (int i = 0; i < index_iters_.size(); i++) {
+ size += kudu_malloc_usable_size(index_iters_[i].get());
+ }
}
if (iter_locks_) {
http://git-wip-us.apache.org/repos/asf/incubator-kudu/blob/6737d78e/src/kudu/cfile/bloomfile.h
----------------------------------------------------------------------
diff --git a/src/kudu/cfile/bloomfile.h b/src/kudu/cfile/bloomfile.h
index 540ad55..7040b03 100644
--- a/src/kudu/cfile/bloomfile.h
+++ b/src/kudu/cfile/bloomfile.h
@@ -17,7 +17,7 @@
#ifndef KUDU_CFILE_BLOOMFILE_H
#define KUDU_CFILE_BLOOMFILE_H
-#include <boost/ptr_container/ptr_vector.hpp>
+#include <memory>
#include <string>
#include <vector>
@@ -128,7 +128,7 @@ class BloomFileReader {
// We need a big per-thread object which gets passed around so as
// to avoid this... Instead we'll use a per-CPU iterator as a
// lame hack.
- boost::ptr_vector<cfile::IndexTreeIterator> index_iters_;
+ std::vector<std::unique_ptr<cfile::IndexTreeIterator>> index_iters_;
gscoped_ptr<padded_spinlock[]> iter_locks_;
KuduOnceDynamic init_once_;
http://git-wip-us.apache.org/repos/asf/incubator-kudu/blob/6737d78e/src/kudu/cfile/index_btree.cc
----------------------------------------------------------------------
diff --git a/src/kudu/cfile/index_btree.cc b/src/kudu/cfile/index_btree.cc
index 1265695..f9065eb 100644
--- a/src/kudu/cfile/index_btree.cc
+++ b/src/kudu/cfile/index_btree.cc
@@ -32,7 +32,7 @@ IndexTreeBuilder::IndexTreeBuilder(
CFileWriter *writer) :
options_(options),
writer_(writer) {
- idx_blocks_.push_back(CreateBlockBuilder(true));
+ idx_blocks_.emplace_back(CreateBlockBuilder(true));
}
@@ -54,15 +54,15 @@ Status IndexTreeBuilder::Append(
"trying to create level " << level << " but size is only "
<< idx_blocks_.size();
VLOG(1) << "Creating level-" << level << " in index b-tree";
- idx_blocks_.push_back(CreateBlockBuilder(false));
+ idx_blocks_.emplace_back(CreateBlockBuilder(false));
}
- IndexBlockBuilder &idx_block = idx_blocks_[level];
- idx_block.Add(key, block_ptr);
+ IndexBlockBuilder* idx_block = idx_blocks_[level].get();
+ idx_block->Add(key, block_ptr);
- size_t est_size = idx_block.EstimateEncodedSize();
+ size_t est_size = idx_block->EstimateEncodedSize();
if (est_size > options_->index_block_size) {
- DCHECK(idx_block.Count() > 1)
+ DCHECK(idx_block->Count() > 1)
<< "Index block full with only one entry - this would create "
<< "an infinite loop";
// This index block is full, flush it.
@@ -101,7 +101,7 @@ Status IndexTreeBuilder::Finish(BTreeInfoPB *info) {
}
Status IndexTreeBuilder::FinishBlockAndPropagate(size_t level) {
- IndexBlockBuilder &idx_block = idx_blocks_[level];
+ IndexBlockBuilder* idx_block = idx_blocks_[level].get();
// If the block doesn't have any data in it, we don't need to
// write it out.
@@ -109,7 +109,7 @@ Status IndexTreeBuilder::FinishBlockAndPropagate(size_t level) {
// and then the file completes.
//
// TODO: add a test case which exercises this explicitly.
- if (idx_block.Count() == 0) {
+ if (idx_block->Count() == 0) {
return Status::OK();
}
@@ -119,7 +119,7 @@ Status IndexTreeBuilder::FinishBlockAndPropagate(size_t level) {
// Get the first key of the finished block.
Slice first_in_idx_block;
- Status s = idx_block.GetFirstKey(&first_in_idx_block);
+ Status s = idx_block->GetFirstKey(&first_in_idx_block);
if (!s.ok()) {
LOG(ERROR) << "Unable to get first key of level-" << level
@@ -135,7 +135,7 @@ Status IndexTreeBuilder::FinishBlockAndPropagate(size_t level) {
// Finally, reset the block we just wrote. It's important to wait until
// here to do this, since the first_in_idx_block data may point to internal
// storage of the index block.
- idx_block.Reset();
+ idx_block->Reset();
return Status::OK();
}
@@ -144,8 +144,8 @@ Status IndexTreeBuilder::FinishBlockAndPropagate(size_t level) {
// to the file. Return the location of the written block
// in 'written'.
Status IndexTreeBuilder::FinishAndWriteBlock(size_t level, BlockPointer *written) {
- IndexBlockBuilder &idx_block = idx_blocks_[level];
- Slice data = idx_block.Finish();
+ IndexBlockBuilder* idx_block = idx_blocks_[level].get();
+ Slice data = idx_block->Finish();
vector<Slice> v;
v.push_back(data);
@@ -178,7 +178,7 @@ Status IndexTreeIterator::SeekToFirst() {
bool IndexTreeIterator::HasNext() {
for (int i = seeked_indexes_.size() - 1; i >= 0; i--) {
- if (seeked_indexes_[i].iter.HasNext())
+ if (seeked_indexes_[i]->iter.HasNext())
return true;
}
return false;
@@ -221,27 +221,27 @@ Status IndexTreeIterator::Next() {
}
const Slice IndexTreeIterator::GetCurrentKey() const {
- return seeked_indexes_.back().iter.GetCurrentKey();
+ return seeked_indexes_.back()->iter.GetCurrentKey();
}
const BlockPointer &IndexTreeIterator::GetCurrentBlockPointer() const {
- return seeked_indexes_.back().iter.GetCurrentBlockPointer();
+ return seeked_indexes_.back()->iter.GetCurrentBlockPointer();
}
IndexBlockIterator *IndexTreeIterator::BottomIter() {
- return &seeked_indexes_.back().iter;
+ return &seeked_indexes_.back()->iter;
}
IndexBlockReader *IndexTreeIterator::BottomReader() {
- return &seeked_indexes_.back().reader;
+ return &seeked_indexes_.back()->reader;
}
IndexBlockIterator *IndexTreeIterator::seeked_iter(int depth) {
- return &seeked_indexes_[depth].iter;
+ return &seeked_indexes_[depth]->iter;
}
IndexBlockReader *IndexTreeIterator::seeked_reader(int depth) {
- return &seeked_indexes_[depth].reader;
+ return &seeked_indexes_[depth]->reader;
}
Status IndexTreeIterator::LoadBlock(const BlockPointer &block, int depth) {
@@ -249,7 +249,7 @@ Status IndexTreeIterator::LoadBlock(const BlockPointer &block, int depth) {
SeekedIndex *seeked;
if (depth < seeked_indexes_.size()) {
// We have a cached instance from previous seek.
- seeked = &seeked_indexes_[depth];
+ seeked = seeked_indexes_[depth].get();
if (seeked->block_ptr.offset() == block.offset()) {
// We're already seeked to this block - no need to re-parse it.
@@ -264,8 +264,8 @@ Status IndexTreeIterator::LoadBlock(const BlockPointer &block, int depth) {
seeked->iter.Reset();
} else {
// No cached instance, make a new one.
- seeked_indexes_.push_back(new SeekedIndex());
- seeked = &seeked_indexes_.back();
+ seeked_indexes_.emplace_back(new SeekedIndex());
+ seeked = seeked_indexes_.back().get();
}
RETURN_NOT_OK(reader_->ReadBlock(block, CFileReader::CACHE_BLOCK, &seeked->data));
http://git-wip-us.apache.org/repos/asf/incubator-kudu/blob/6737d78e/src/kudu/cfile/index_btree.h
----------------------------------------------------------------------
diff --git a/src/kudu/cfile/index_btree.h b/src/kudu/cfile/index_btree.h
index fbe48fb..ecd4c9b 100644
--- a/src/kudu/cfile/index_btree.h
+++ b/src/kudu/cfile/index_btree.h
@@ -18,8 +18,8 @@
#ifndef KUDU_CFILE_INDEX_BTREE_H
#define KUDU_CFILE_INDEX_BTREE_H
-#include <boost/ptr_container/ptr_vector.hpp>
#include <memory>
+#include <vector>
#include "kudu/cfile/block_handle.h"
#include "kudu/cfile/cfile.pb.h"
@@ -29,8 +29,6 @@
namespace kudu {
namespace cfile {
-using boost::ptr_vector;
-
class CFileReader;
class CFileWriter;
@@ -63,7 +61,7 @@ class IndexTreeBuilder {
const WriterOptions *options_;
CFileWriter *writer_;
- ptr_vector<IndexBlockBuilder> idx_blocks_;
+ std::vector<std::unique_ptr<IndexBlockBuilder>> idx_blocks_;
DISALLOW_COPY_AND_ASSIGN(IndexTreeBuilder);
};
@@ -116,7 +114,7 @@ class IndexTreeIterator {
BlockPointer root_block_;
- ptr_vector<SeekedIndex> seeked_indexes_;
+ std::vector<std::unique_ptr<SeekedIndex>> seeked_indexes_;
DISALLOW_COPY_AND_ASSIGN(IndexTreeIterator);
};