Ignore dropped column families -- don't flush or compact them

This commit is contained in:
Igor Canadi 2014-03-07 18:43:21 -08:00
parent 1e0d47276c
commit d4f2c610d3

View File

@ -279,7 +279,8 @@ DBImpl::~DBImpl() {
if (flush_on_destroy_) { if (flush_on_destroy_) {
autovector<ColumnFamilyData*> to_delete; autovector<ColumnFamilyData*> to_delete;
for (auto cfd : *versions_->GetColumnFamilySet()) { for (auto cfd : *versions_->GetColumnFamilySet()) {
if (cfd->mem()->GetFirstSequenceNumber() != 0) { // TODO(icanadi) do this in ColumnFamilyData destructor
if (!cfd->IsDropped() && cfd->mem()->GetFirstSequenceNumber() != 0) {
cfd->Ref(); cfd->Ref();
mutex_.Unlock(); mutex_.Unlock();
FlushMemTable(cfd, FlushOptions()); FlushMemTable(cfd, FlushOptions());
@ -1792,7 +1793,7 @@ void DBImpl::MaybeScheduleFlushOrCompaction() {
bool is_flush_pending = false; bool is_flush_pending = false;
// no need to refcount since we're under a mutex // no need to refcount since we're under a mutex
for (auto cfd : *versions_->GetColumnFamilySet()) { for (auto cfd : *versions_->GetColumnFamilySet()) {
if (cfd->imm()->IsFlushPending()) { if (!cfd->IsDropped() && cfd->imm()->IsFlushPending()) {
is_flush_pending = true; is_flush_pending = true;
} }
} }
@ -1809,7 +1810,7 @@ void DBImpl::MaybeScheduleFlushOrCompaction() {
bool is_compaction_needed = false; bool is_compaction_needed = false;
// no need to refcount since we're under a mutex // no need to refcount since we're under a mutex
for (auto cfd : *versions_->GetColumnFamilySet()) { for (auto cfd : *versions_->GetColumnFamilySet()) {
if (cfd->current()->NeedsCompaction()) { if (!cfd->IsDropped() && cfd->current()->NeedsCompaction()) {
is_compaction_needed = true; is_compaction_needed = true;
break; break;
} }
@ -3381,6 +3382,9 @@ Status DBImpl::Write(const WriteOptions& options, WriteBatch* my_batch) {
autovector<ColumnFamilyData*> to_delete; autovector<ColumnFamilyData*> to_delete;
// refcounting cfd in iteration // refcounting cfd in iteration
for (auto cfd : *versions_->GetColumnFamilySet()) { for (auto cfd : *versions_->GetColumnFamilySet()) {
if (cfd->IsDropped()) {
continue;
}
cfd->Ref(); cfd->Ref();
// May temporarily unlock and wait. // May temporarily unlock and wait.
status = MakeRoomForWrite(cfd, my_batch == nullptr); status = MakeRoomForWrite(cfd, my_batch == nullptr);