rocksdb/db
Dhruba Borthakur ebf16f57c9 Prevent segfault because SizeUnderCompaction was called without any locks.
Summary:
SizeBeingCompacted was called without any lock protection. This causes
crashes, especially when running db_bench with value_size=128K.
The fix is to compute SizeUnderCompaction while holding the mutex and
passing in these values into the call to Finalize.

(gdb) where
#4  leveldb::VersionSet::SizeBeingCompacted (this=this@entry=0x7f0b490931c0, level=level@entry=4) at db/version_set.cc:1827
#5  0x000000000043a3c8 in leveldb::VersionSet::Finalize (this=this@entry=0x7f0b490931c0, v=v@entry=0x7f0b3b86b480) at db/version_set.cc:1420
#6  0x00000000004418d1 in leveldb::VersionSet::LogAndApply (this=0x7f0b490931c0, edit=0x7f0b3dc8c200, mu=0x7f0b490835b0, new_descriptor_log=<optimized out>) at db/version_set.cc:1016
#7  0x00000000004222b2 in leveldb::DBImpl::InstallCompactionResults (this=this@entry=0x7f0b49083400, compact=compact@entry=0x7f0b2b8330f0) at db/db_impl.cc:1473
#8  0x0000000000426027 in leveldb::DBImpl::DoCompactionWork (this=this@entry=0x7f0b49083400, compact=compact@entry=0x7f0b2b8330f0) at db/db_impl.cc:1757
#9  0x0000000000426690 in leveldb::DBImpl::BackgroundCompaction (this=this@entry=0x7f0b49083400, madeProgress=madeProgress@entry=0x7f0b41bf2d1e, deletion_state=...) at db/db_impl.cc:1268
#10 0x0000000000428f42 in leveldb::DBImpl::BackgroundCall (this=0x7f0b49083400) at db/db_impl.cc:1170
#11 0x000000000045348e in BGThread (this=0x7f0b49023100) at util/env_posix.cc:941
#12 leveldb::(anonymous namespace)::PosixEnv::BGThreadWrapper (arg=0x7f0b49023100) at util/env_posix.cc:874
#13 0x00007f0b4a7cf10d in start_thread (arg=0x7f0b41bf3700) at pthread_create.c:301
#14 0x00007f0b49b4b11d in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:115

Test Plan:
make check

I am running db_bench with a value size of 128K to see if the segfault is fixed.

Reviewers: MarkCallaghan, sheki, emayanke

Reviewed By: sheki

CC: leveldb

Differential Revision: https://reviews.facebook.net/D9279
2013-03-11 14:09:01 -07:00
..
builder.cc Ability for rocksdb to compact when flushing the in-memory memtable to a file in L0. 2013-03-04 00:01:47 -08:00
builder.h Ability for rocksdb to compact when flushing the in-memory memtable to a file in L0. 2013-03-04 00:01:47 -08:00
c_test.c Fix poor error on num_levels mismatch and few other minor improvements 2013-01-25 15:37:26 -08:00
c.cc Fix poor error on num_levels mismatch and few other minor improvements 2013-01-25 15:37:26 -08:00
corruption_test.cc Codemod NULL to nullptr 2013-02-28 18:04:58 -08:00
db_bench.cc Add rate_delay_limit_milliseconds 2013-03-04 07:41:15 -08:00
db_filesnapshot.cc Fix all the lint errors. 2012-11-28 17:18:41 -08:00
db_impl_readonly.cc Fix for the weird behaviour encountered by ldb Get where it could read only the second-latest value 2013-02-20 10:45:52 -08:00
db_impl_readonly.h Add a readonly db 2012-11-07 14:19:48 -08:00
db_impl.cc A mechanism to detect manifest file write errors and put db in readonly mode. 2013-03-07 09:45:49 -08:00
db_impl.h Do not allow Transaction Log Iterator to fall ahead when writer is writing the same file 2013-03-06 14:05:53 -08:00
db_iter.cc A number of fixes: 2011-10-31 17:22:06 +00:00
db_iter.h A number of fixes: 2011-10-31 17:22:06 +00:00
db_statistics.h Refactor statistics. Remove individual functions like incNumFileOpens 2013-02-25 13:58:34 -08:00
db_stats_logger.cc remove boost 2012-09-16 19:33:43 -07:00
db_test.cc Do not allow Transaction Log Iterator to fall ahead when writer is writing the same file 2013-03-06 14:05:53 -08:00
dbformat_test.cc Fix all warnings generated by -Wall option to the compiler. 2012-11-06 14:07:31 -08:00
dbformat.cc manifest_dump: Add --hex=1 option 2012-12-16 08:58:28 -08:00
dbformat.h Fox db_stress crash by copying keys before changing sequencenum to zero. 2013-03-06 10:52:08 -08:00
filename_test.cc Added meta-database support. 2012-12-17 11:26:59 -08:00
filename.cc Allow the logs to be purged by TTL. 2013-02-04 19:42:40 -08:00
filename.h Added meta-database support. 2012-12-17 11:26:59 -08:00
log_file.h GetUpdatesSince API to enable replication. 2012-12-07 11:42:13 -08:00
log_format.h A number of fixes: 2011-10-31 17:22:06 +00:00
log_reader.cc Codemod NULL to nullptr 2013-02-28 18:04:58 -08:00
log_reader.h Codemod NULL to nullptr 2013-02-28 18:04:58 -08:00
log_test.cc Fix a number of object lifetime/ownership issues 2013-01-23 16:54:11 -08:00
log_writer.cc Fix a number of object lifetime/ownership issues 2013-01-23 16:54:11 -08:00
log_writer.h Fix a number of object lifetime/ownership issues 2013-01-23 16:54:11 -08:00
memtable.cc Ability for rocksdb to compact when flushing the in-memory memtable to a file in L0. 2013-03-04 00:01:47 -08:00
memtable.h Ability for rocksdb to compact when flushing the in-memory memtable to a file in L0. 2013-03-04 00:01:47 -08:00
memtablelist.cc Codemod NULL to nullptr 2013-02-28 18:04:58 -08:00
memtablelist.h Codemod NULL to nullptr 2013-02-28 18:04:58 -08:00
repair.cc Ability for rocksdb to compact when flushing the in-memory memtable to a file in L0. 2013-03-04 00:01:47 -08:00
skiplist_test.cc Codemod NULL to nullptr 2013-02-28 18:04:58 -08:00
skiplist.h Codemod NULL to nullptr 2013-02-28 18:04:58 -08:00
snapshot.h Ability for rocksdb to compact when flushing the in-memory memtable to a file in L0. 2013-03-04 00:01:47 -08:00
table_cache.cc Removed unnecesary file object in table_cache. 2013-03-04 13:56:23 -08:00
table_cache.h Codemod NULL to nullptr 2013-02-28 18:04:58 -08:00
transaction_log_iterator_impl.cc Do not allow Transaction Log Iterator to fall ahead when writer is writing the same file 2013-03-06 14:05:53 -08:00
transaction_log_iterator_impl.h Do not allow Transaction Log Iterator to fall ahead when writer is writing the same file 2013-03-06 14:05:53 -08:00
version_edit_test.cc Make some variables configurable for each db instance 2012-06-27 14:36:31 -07:00
version_edit.cc Codemod NULL to nullptr 2013-02-28 18:04:58 -08:00
version_edit.h Fix poor error on num_levels mismatch and few other minor improvements 2013-01-25 15:37:26 -08:00
version_set_reduce_num_levels.cc disable size compaction in ldb reduce_levels and added compression and file size parameter to it 2012-11-09 10:14:47 -08:00
version_set_test.cc Codemod NULL to nullptr 2013-02-28 18:04:58 -08:00
version_set.cc Prevent segfault because SizeUnderCompaction was called without any locks. 2013-03-11 14:09:01 -07:00
version_set.h Prevent segfault because SizeUnderCompaction was called without any locks. 2013-03-11 14:09:01 -07:00
write_batch_internal.h GetUpdatesSince API to enable replication. 2012-12-07 11:42:13 -08:00
write_batch_test.cc Fix all warnings generated by -Wall option to the compiler. 2012-11-06 14:07:31 -08:00
write_batch.cc added group commit; drastically speeds up mult-threaded synchronous write workloads 2012-03-08 16:23:21 -08:00