rocksdb/tools
Sagar Vemuri 1cd45cd1b3 FIFO Compaction with TTL
Summary:
Introducing FIFO compactions with TTL.

FIFO compaction is based on size only which makes it tricky to enable in production as use cases can have organic growth. A user requested an option to drop files based on the time of their creation instead of the total size.

To address that request:
- Added a new TTL option to FIFO compaction options.
- Updated FIFO compaction score to take TTL into consideration.
- Added a new table property, creation_time, to keep track of when the SST file is created.
- Creation_time is set as below:
  - On Flush: Set to the time of flush.
  - On Compaction: Set to the max creation_time of all the files involved in the compaction.
  - On Repair and Recovery: Set to the time of repair/recovery.
  - Old files created prior to this code change will have a creation_time of 0.
- FIFO compaction with TTL is enabled when ttl > 0. All files older than ttl will be deleted during compaction. i.e. `if (file.creation_time < (current_time - ttl)) then delete(file)`. This will enable cases where you might want to delete all files older than, say, 1 day.
- FIFO compaction will fall back to the prior way of deleting files based on size if:
  - the creation_time of all files involved in compaction is 0.
  - the total size (of all SST files combined) does not drop below `compaction_options_fifo.max_table_files_size` even if the files older than ttl are deleted.

This feature is not supported if max_open_files != -1 or with table formats other than Block-based.

**Test Plan:**
Added tests.

**Benchmark results:**
Base: FIFO with max size: 100MB ::
```
svemuri@dev15905 ~/rocksdb (fifo-compaction) $ TEST_TMPDIR=/dev/shm ./db_bench --benchmarks=readwhilewriting --num=5000000 --threads=16 --compaction_style=2 --fifo_compaction_max_table_files_size_mb=100

readwhilewriting :       1.924 micros/op 519858 ops/sec;   13.6 MB/s (1176277 of 5000000 found)
```

With TTL (a low one for testing) ::
```
svemuri@dev15905 ~/rocksdb (fifo-compaction) $ TEST_TMPDIR=/dev/shm ./db_bench --benchmarks=readwhilewriting --num=5000000 --threads=16 --compaction_style=2 --fifo_compaction_max_table_files_size_mb=100 --fifo_compaction_ttl=20

readwhilewriting :       1.902 micros/op 525817 ops/sec;   13.7 MB/s (1185057 of 5000000 found)
```
Example Log lines:
```
2017/06/26-15:17:24.609249 7fd5a45ff700 (Original Log Time 2017/06/26-15:17:24.609177) [db/compaction_picker.cc:1471] [default] FIFO compaction: picking file 40 with creation time 1498515423 for deletion
2017/06/26-15:17:24.609255 7fd5a45ff700 (Original Log Time 2017/06/26-15:17:24.609234) [db/db_impl_compaction_flush.cc:1541] [default] Deleted 1 files
...
2017/06/26-15:17:25.553185 7fd5a61a5800 [DEBUG] [db/db_impl_files.cc:309] [JOB 0] Delete /dev/shm/dbbench/000040.sst type=2 #40 -- OK
2017/06/26-15:17:25.553205 7fd5a61a5800 EVENT_LOG_v1 {"time_micros": 1498515445553199, "job": 0, "event": "table_file_deletion", "file_number": 40}
```

SST Files remaining in the dbbench dir, after db_bench execution completed:
```
svemuri@dev15905 ~/rocksdb (fifo-compaction)  $ ls -l /dev/shm//dbbench/*.sst
-rw-r--r--. 1 svemuri users 30749887 Jun 26 15:17 /dev/shm//dbbench/000042.sst
-rw-r--r--. 1 svemuri users 30768779 Jun 26 15:17 /dev/shm//dbbench/000044.sst
-rw-r--r--. 1 svemuri users 30757481 Jun 26 15:17 /dev/shm//dbbench/000046.sst
```
Closes https://github.com/facebook/rocksdb/pull/2480

Differential Revision: D5305116

Pulled By: sagar0

fbshipit-source-id: 3e5cfcf5dd07ed2211b5b37492eb235b45139174
2017-06-27 17:11:48 -07:00
..
dump Add GPLv2 as an alternative license. 2017-04-27 18:06:12 -07:00
rdb fixed typo 2017-06-05 11:27:34 -07:00
CMakeLists.txt cmake support for linux and osx (#1358) 2016-09-28 11:53:15 -07:00
Dockerfile adding docker build script and dockerfile 2015-05-22 16:03:39 -07:00
auto_sanity_test.sh AIX and Solaris Sparc Support 2017-04-21 20:48:04 -07:00
benchmark.sh remove deleted option from benchmark.sh 2017-03-21 12:54:13 -07:00
benchmark_leveldb.sh Add scripts to run leveldb benchmark 2015-04-27 19:32:56 -07:00
blob_dump.cc Simple blob file dumper 2017-05-23 10:42:59 -07:00
check_format_compatible.sh update compatible test 2017-06-27 11:00:59 -07:00
db_bench.cc Add GPLv2 as an alternative license. 2017-04-27 18:06:12 -07:00
db_bench_tool.cc FIFO Compaction with TTL 2017-06-27 17:11:48 -07:00
db_bench_tool_test.cc Introduce max_background_jobs mutable option 2017-05-24 11:29:08 -07:00
db_crashtest.py fix db_stress crash caused by buggy kernel warning 2017-04-11 16:56:59 -07:00
db_repl_stress.cc Add GPLv2 as an alternative license. 2017-04-27 18:06:12 -07:00
db_sanity_test.cc Add GPLv2 as an alternative license. 2017-04-27 18:06:12 -07:00
db_stress.cc Call RateLimiter for compaction reads 2017-06-13 14:56:46 -07:00
dbench_monitor Added simple monitoring script to monitor overusage of memory in db_bench 2015-02-11 18:40:11 -08:00
generate_random_db.sh Script to check whether RocksDB can read DB generated by previous releases and vice versa 2015-04-08 16:04:59 -07:00
ldb.cc Add GPLv2 as an alternative license. 2017-04-27 18:06:12 -07:00
ldb_cmd.cc Allow ignoring unknown options when loading options from a file 2017-06-13 16:58:01 -07:00
ldb_cmd_impl.h Add GPLv2 as an alternative license. 2017-04-27 18:06:12 -07:00
ldb_cmd_test.cc Add GPLv2 as an alternative license. 2017-04-27 18:06:12 -07:00
ldb_test.py Add GetAllKeyVersions API 2017-05-12 15:54:06 -07:00
ldb_tool.cc Allow ignoring unknown options when loading options from a file 2017-06-13 16:58:01 -07:00
pflag Added simple monitoring script to monitor overusage of memory in db_bench 2015-02-11 18:40:11 -08:00
reduce_levels_test.cc Add GPLv2 as an alternative license. 2017-04-27 18:06:12 -07:00
regression_test.sh remove test dir before exit when current regression is running 2017-06-02 17:26:19 -07:00
rocksdb_dump_test.sh AIX and Solaris Sparc Support 2017-04-21 20:48:04 -07:00
run_flash_bench.sh AIX and Solaris Sparc Support 2017-04-21 20:48:04 -07:00
run_leveldb.sh AIX and Solaris Sparc Support 2017-04-21 20:48:04 -07:00
sample-dump.dmp First version of rocksdb_dump and rocksdb_undump. 2015-06-19 16:24:36 -07:00
sst_dump.cc Add GPLv2 as an alternative license. 2017-04-27 18:06:12 -07:00
sst_dump_test.cc Add GPLv2 as an alternative license. 2017-04-27 18:06:12 -07:00
sst_dump_tool.cc Add GPLv2 as an alternative license. 2017-04-27 18:06:12 -07:00
sst_dump_tool_imp.h Move some files under util/ to separate dirs 2017-04-05 19:09:16 -07:00
verify_random_db.sh tools/check_format_compatible.sh to cover option file loading too 2017-04-20 10:26:37 -07:00
write_stress.cc fixed typo 2017-05-16 11:07:58 -07:00
write_stress_runner.py Write stress test 2015-10-28 16:15:07 -07:00