http://git-wip-us.apache.org/repos/asf/nifi-minifi-cpp/blob/48867732/thirdparty/rocksdb/HISTORY.md
----------------------------------------------------------------------
diff --git a/thirdparty/rocksdb/HISTORY.md b/thirdparty/rocksdb/HISTORY.md
new file mode 100644
index 0000000..29f0f3f
--- /dev/null
+++ b/thirdparty/rocksdb/HISTORY.md
@@ -0,0 +1,568 @@
+# Rocksdb Change Log
+## Unreleased
+### New Features
+* Add Iterator::Refresh(), which allows users to update the iterator state so 
that they can avoid some initialization costs of recreating iterators.
+* Replace dynamic_cast<> (except unit test) so people can choose to build with 
RTTI off. With make, release mode is by default built with -fno-rtti and debug 
mode is built without it. Users can override it by setting USE_RTTI=0 or 1.
+* Universal compactions including the bottom level can be executed in a 
dedicated thread pool. This alleviates head-of-line blocking in the compaction 
queue, which cause write stalling, particularly in multi-instance use cases. 
Users can enable this feature via `Env::SetBackgroundThreads(N, 
Env::Priority::BOTTOM)`, where `N > 0`.
+
+### Bug Fixes
+* Fix wrong latencies in `rocksdb.db.get.micros`, `rocksdb.db.write.micros`, 
and `rocksdb.sst.read.micros`.
+* Fix incorrect dropping of deletions during intra-L0 compaction.
+
+## 5.7.0 (07/13/2017)
+### Public API Change
+* DB property "rocksdb.sstables" now prints keys in hex form.
+
+### New Features
+* Measure estimated number of reads per file. The information can be accessed 
through DB::GetColumnFamilyMetaData or "rocksdb.sstables" DB property.
+* RateLimiter support for throttling background reads, or throttling the sum 
of background reads and writes. This can give more predictable I/O usage when 
compaction reads more data than it writes, e.g., due to lots of deletions.
+* [Experimental] FIFO compaction with TTL support. It can be enabled by 
setting CompactionOptionsFIFO.ttl > 0.
+* Introduce `EventListener::OnBackgroundError()` callback. Users can implement 
it to be notified of errors causing the DB to enter read-only mode, and 
optionally override them.
+* Partitioned Index/Filters exiting the experimental mode. To enable 
partitioned indexes set index_type to kTwoLevelIndexSearch and to further 
enable partitioned filters set partition_filters to true. To configure the 
partition size set metadata_block_size.
+
+
+### Bug Fixes
+* Fix discarding empty compaction output files when `DeleteRange()` is used 
together with subcompactions.
+
+## 5.6.0 (06/06/2017)
+### Public API Change
+* Scheduling flushes and compactions in the same thread pool is no longer 
supported by setting `max_background_flushes=0`. Instead, users can achieve 
this by configuring their high-pri thread pool to have zero threads.
+* Replace `Options::max_background_flushes`, 
`Options::max_background_compactions`, and 
`Options::base_background_compactions` all with `Options::max_background_jobs`, 
which automatically decides how many threads to allocate towards 
flush/compaction.
+* options.delayed_write_rate by default take the value of options.rate_limiter 
rate.
+* Replace global variable `IOStatsContext iostats_context` with 
`IOStatsContext* get_iostats_context()`; replace global variable `PerfContext 
perf_context` with `PerfContext* get_perf_context()`.
+
+### New Features
+* Change ticker/histogram statistics implementations to use core-local 
storage. This improves aggregation speed compared to our previous thread-local 
approach, particularly for applications with many threads.
+* Users can pass a cache object to write buffer manager, so that they can cap 
memory usage for memtable and block cache using one single limit.
+* Flush will be triggered when 7/8 of the limit introduced by 
write_buffer_manager or db_write_buffer_size is triggered, so that the hard 
threshold is hard to hit.
+* Introduce WriteOptions.low_pri. If it is true, low priority writes will be 
throttled if the compaction is behind.
+* `DB::IngestExternalFile()` now supports ingesting files into a database 
containing range deletions.
+
+### Bug Fixes
+* Shouldn't ignore return value of fsync() in flush.
+
+## 5.5.0 (05/17/2017)
+### New Features
+* FIFO compaction to support Intra L0 compaction too with 
CompactionOptionsFIFO.allow_compaction=true.
+* DB::ResetStats() to reset internal stats.
+* Statistics::Reset() to reset user stats.
+* ldb add option --try_load_options, which will open DB with its own option 
file.
+* Introduce WriteBatch::PopSavePoint to pop the most recent save point 
explicitly.
+* Support dynamically change `max_open_files` option via SetDBOptions()
+* Added DB::CreateColumnFamilie() and DB::DropColumnFamilies() to bulk 
create/drop column families.
+* Add debugging function `GetAllKeyVersions` to see internal versions of a 
range of keys.
+* Support file ingestion with universal compaction style
+* Support file ingestion behind with option `allow_ingest_behind`
+* New option enable_pipelined_write which may improve write throughput in case 
writing from multiple threads and WAL enabled.
+
+### Bug Fixes
+* Fix the bug that Direct I/O uses direct reads for non-SST file
+
+## 5.4.0 (04/11/2017)
+### Public API Change
+* random_access_max_buffer_size no longer has any effect
+* Removed Env::EnableReadAhead(), Env::ShouldForwardRawRequest()
+* Support dynamically change `stats_dump_period_sec` option via SetDBOptions().
+* Added ReadOptions::max_skippable_internal_keys to set a threshold to fail a 
request as incomplete when too many keys are being skipped when using iterators.
+* DB::Get in place of std::string accepts PinnableSlice, which avoids the 
extra memcpy of value to std::string in most of cases.
+    * PinnableSlice releases the pinned resources that contain the value when 
it is destructed or when ::Reset() is called on it.
+    * The old API that accepts std::string, although discouraged, is still 
supported.
+* Replace Options::use_direct_writes with 
Options::use_direct_io_for_flush_and_compaction. Read Direct IO wiki for 
details.
+* Added CompactionEventListener and EventListener::OnFlushBegin interfaces.
+
+### New Features
+* Memtable flush can be avoided during checkpoint creation if total log file 
size is smaller than a threshold specified by the user.
+* Introduce level-based L0->L0 compactions to reduce file count, so write 
delays are incurred less often.
+* (Experimental) Partitioning filters which creates an index on the 
partitions. The feature can be enabled by setting partition_filters when using 
kFullFilter. Currently the feature also requires two-level indexing to be 
enabled. Number of partitions is the same as the number of partitions for 
indexes, which is controlled by metadata_block_size.
+
+## 5.3.0 (03/08/2017)
+### Public API Change
+* Remove disableDataSync option.
+* Remove timeout_hint_us option from WriteOptions. The option has been 
deprecated and has no effect since 3.13.0.
+* Remove option min_partial_merge_operands. Partial merge operands will always 
be merged in flush or compaction if there are more than one.
+* Remove option verify_checksums_in_compaction. Compaction will always verify 
checksum.
+
+### Bug Fixes
+* Fix the bug that iterator may skip keys
+
+## 5.2.0 (02/08/2017)
+### Public API Change
+* NewLRUCache() will determine number of shard bits automatically based on 
capacity, if the user doesn't pass one. This also impacts the default block 
cache when the user doesn't explict provide one.
+* Change the default of delayed slowdown value to 16MB/s and further increase 
the L0 stop condition to 36 files.
+* Options::use_direct_writes and Options::use_direct_reads are now ready to 
use.
+* (Experimental) Two-level indexing that partition the index and creates a 2nd 
level index on the partitions. The feature can be enabled by setting 
kTwoLevelIndexSearch as IndexType and configuring index_per_partition.
+
+### New Features
+* Added new overloaded function GetApproximateSizes that allows to specify if 
memtable stats should be computed only without computing SST files' stats 
approximations.
+* Added new function GetApproximateMemTableStats that approximates both number 
of records and size of memtables.
+* Add Direct I/O mode for SST file I/O
+
+### Bug Fixes
+* RangeSync() should work if ROCKSDB_FALLOCATE_PRESENT is not set
+* Fix wrong results in a data race case in Get()
+* Some fixes related to 2PC.
+* Fix bugs of data corruption in direct I/O
+
+## 5.1.0 (01/13/2017)
+* Support dynamically change `delete_obsolete_files_period_micros` option via 
SetDBOptions().
+* Added EventListener::OnExternalFileIngested which will be called when 
IngestExternalFile() add a file successfully.
+* BackupEngine::Open and BackupEngineReadOnly::Open now always return error 
statuses matching those of the backup Env.
+
+### Bug Fixes
+* Fix the bug that if 2PC is enabled, checkpoints may loss some recent 
transactions.
+* When file copying is needed when creating checkpoints or bulk loading files, 
fsync the file after the file copying.
+
+## 5.0.0 (11/17/2016)
+### Public API Change
+* Options::max_bytes_for_level_multiplier is now a double along with all 
getters and setters.
+* Support dynamically change `delayed_write_rate` and `max_total_wal_size` 
options via SetDBOptions().
+* Introduce DB::DeleteRange for optimized deletion of large ranges of 
contiguous keys.
+* Support dynamically change `delayed_write_rate` option via SetDBOptions().
+* Options::allow_concurrent_memtable_write and 
Options::enable_write_thread_adaptive_yield are now true by default.
+* Remove Tickers::SEQUENCE_NUMBER to avoid confusion if statistics object is 
shared among RocksDB instance. Alternatively DB::GetLatestSequenceNumber() can 
be used to get the same value.
+* Options.level0_stop_writes_trigger default value changes from 24 to 32.
+* New compaction filter API: CompactionFilter::FilterV2(). Allows to drop 
ranges of keys.
+* Removed flashcache support.
+* DB::AddFile() is deprecated and is replaced with DB::IngestExternalFile(). 
DB::IngestExternalFile() remove all the restrictions that existed for 
DB::AddFile.
+
+### New Features
+* Add avoid_flush_during_shutdown option, which speeds up DB shutdown by not 
flushing unpersisted data (i.e. with disableWAL = true). Unpersisted data will 
be lost. The options is dynamically changeable via SetDBOptions().
+* Add memtable_insert_with_hint_prefix_extractor option. The option is mean to 
reduce CPU usage for inserting keys into memtable, if keys can be group by 
prefix and insert for each prefix are sequential or almost sequential. See 
include/rocksdb/options.h for more details.
+* Add LuaCompactionFilter in utilities.  This allows developers to write 
compaction filters in Lua.  To use this feature, LUA_PATH needs to be set to 
the root directory of Lua.
+* No longer populate "LATEST_BACKUP" file in backup directory, which formerly 
contained the number of the latest backup. The latest backup can be determined 
by finding the highest numbered file in the "meta/" subdirectory.
+
+## 4.13.0 (10/18/2016)
+### Public API Change
+* DB::GetOptions() reflect dynamic changed options (i.e. through 
DB::SetOptions()) and return copy of options instead of reference.
+* Added Statistics::getAndResetTickerCount().
+
+### New Features
+* Add DB::SetDBOptions() to dynamic change base_background_compactions and 
max_background_compactions.
+* Added Iterator::SeekForPrev(). This new API will seek to the last key that 
less than or equal to the target key.
+
+## 4.12.0 (9/12/2016)
+### Public API Change
+* CancelAllBackgroundWork() flushes all memtables for databases containing 
writes that have bypassed the WAL (writes issued with 
WriteOptions::disableWAL=true) before shutting down background threads.
+* Merge options source_compaction_factor, max_grandparent_overlap_bytes and 
expanded_compaction_factor into max_compaction_bytes.
+* Remove ImmutableCFOptions.
+* Add a compression type ZSTD, which can work with ZSTD 0.8.0 or up. Still 
keep ZSTDNotFinal for compatibility reasons.
+
+### New Features
+* Introduce NewClockCache, which is based on CLOCK algorithm with better 
concurrent performance in some cases. It can be used to replace the default 
LRU-based block cache and table cache. To use it, RocksDB need to be linked 
with TBB lib.
+* Change ticker/histogram statistics implementations to accumulate data in 
thread-local storage, which improves CPU performance by reducing cache 
coherency costs. Callers of CreateDBStatistics do not need to change anything 
to use this feature.
+* Block cache mid-point insertion, where index and filter block are inserted 
into LRU block cache with higher priority. The feature can be enabled by 
setting 
BlockBasedTableOptions::cache_index_and_filter_blocks_with_high_priority to 
true and high_pri_pool_ratio > 0 when creating NewLRUCache.
+
+## 4.11.0 (8/1/2016)
+### Public API Change
+* options.memtable_prefix_bloom_huge_page_tlb_size => memtable_huge_page_size. 
When it is set, RocksDB will try to allocate memory from huge page for memtable 
too, rather than just memtable bloom filter.
+
+### New Features
+* A tool to migrate DB after options change. See 
include/rocksdb/utilities/option_change_migration.h.
+* Add ReadOptions.background_purge_on_iterator_cleanup. If true, we avoid file 
deletion when destorying iterators.
+
+## 4.10.0 (7/5/2016)
+### Public API Change
+* options.memtable_prefix_bloom_bits changes to 
options.memtable_prefix_bloom_bits_ratio and deprecate 
options.memtable_prefix_bloom_probes
+* enum type CompressionType and PerfLevel changes from char to unsigned char. 
Value of all PerfLevel shift by one.
+* Deprecate options.filter_deletes.
+
+### New Features
+* Add avoid_flush_during_recovery option.
+* Add a read option background_purge_on_iterator_cleanup to avoid deleting 
files in foreground when destroying iterators. Instead, a job is scheduled in 
high priority queue and would be executed in a separate background thread.
+* RepairDB support for column families. RepairDB now associates data with 
non-default column families using information embedded in the SST/WAL files 
(4.7 or later). For data written by 4.6 or earlier, RepairDB associates it with 
the default column family.
+* Add options.write_buffer_manager which allows users to control total 
memtable sizes across multiple DB instances.
+
+## 4.9.0 (6/9/2016)
+### Public API changes
+* Add bottommost_compression option, This option can be used to set a specific 
compression algorithm for the bottommost level (Last level containing files in 
the DB).
+* Introduce CompactionJobInfo::compression, This field state the compression 
algorithm used to generate the output files of the compaction.
+* Deprecate BlockBaseTableOptions.hash_index_allow_collision=false
+* Deprecate options builder (GetOptions()).
+
+### New Features
+* Introduce NewSimCache() in rocksdb/utilities/sim_cache.h. This function 
creates a block cache that is able to give simulation results (mainly hit rate) 
of simulating block behavior with a configurable cache size.
+
+## 4.8.0 (5/2/2016)
+### Public API Change
+* Allow preset compression dictionary for improved compression of block-based 
tables. This is supported for zlib, zstd, and lz4. The compression dictionary's 
size is configurable via CompressionOptions::max_dict_bytes.
+* Delete deprecated classes for creating backups (BackupableDB) and restoring 
from backups (RestoreBackupableDB). Now, BackupEngine should be used for 
creating backups, and BackupEngineReadOnly should be used for restorations. For 
more details, see 
https://github.com/facebook/rocksdb/wiki/How-to-backup-RocksDB%3F
+* Expose estimate of per-level compression ratio via DB property: 
"rocksdb.compression-ratio-at-levelN".
+* Added EventListener::OnTableFileCreationStarted. 
EventListener::OnTableFileCreated will be called on failure case. User can 
check creation status via TableFileCreationInfo::status.
+
+### New Features
+* Add ReadOptions::readahead_size. If non-zero, NewIterator will create a new 
table reader which performs reads of the given size.
+
+## 4.7.0 (4/8/2016)
+### Public API Change
+* rename options compaction_measure_io_stats to report_bg_io_stats and include 
flush too.
+* Change some default options. Now default options will optimize for 
server-workloads. Also enable slowdown and full stop triggers for pending 
compaction bytes. These changes may cause sub-optimal performance or 
significant increase of resource usage. To avoid these risks, users can open 
existing RocksDB with options extracted from RocksDB option files. See 
https://github.com/facebook/rocksdb/wiki/RocksDB-Options-File for how to use 
RocksDB option files. Or you can call Options.OldDefaults() to recover old 
defaults. DEFAULT_OPTIONS_HISTORY.md will track change history of default 
options.
+
+## 4.6.0 (3/10/2016)
+### Public API Changes
+* Change default of BlockBasedTableOptions.format_version to 2. It means 
default DB created by 4.6 or up cannot be opened by RocksDB version 3.9 or 
earlier.
+* Added strict_capacity_limit option to NewLRUCache. If the flag is set to 
true, insert to cache will fail if no enough capacity can be free. Signature of 
Cache::Insert() is updated accordingly.
+* Tickers [NUMBER_DB_NEXT, NUMBER_DB_PREV, NUMBER_DB_NEXT_FOUND, 
NUMBER_DB_PREV_FOUND, ITER_BYTES_READ] are not updated immediately. The are 
updated when the Iterator is deleted.
+* Add monotonically increasing counter (DB property 
"rocksdb.current-super-version-number") that increments upon any change to the 
LSM tree.
+
+### New Features
+* Add CompactionPri::kMinOverlappingRatio, a compaction picking mode friendly 
to write amplification.
+* Deprecate Iterator::IsKeyPinned() and replace it with 
Iterator::GetProperty() with prop_name="rocksdb.iterator.is.key.pinned"
+
+## 4.5.0 (2/5/2016)
+### Public API Changes
+* Add a new perf context level between kEnableCount and kEnableTime. Level 2 
now does not include timers for mutexes.
+* Statistics of mutex operation durations will not be measured by default. If 
you want to have them enabled, you need to set Statistics::stats_level_ to kAll.
+* DBOptions::delete_scheduler and NewDeleteScheduler() are removed, please use 
DBOptions::sst_file_manager and NewSstFileManager() instead
+
+### New Features
+* ldb tool now supports operations to non-default column families.
+* Add kPersistedTier to ReadTier.  This option allows Get and MultiGet to read 
only the persited data and skip mem-tables if writes were done with disableWAL 
= true.
+* Add DBOptions::sst_file_manager. Use NewSstFileManager() in 
include/rocksdb/sst_file_manager.h to create a SstFileManager that can be used 
to track the total size of SST files and control the SST files deletion rate.
+
+## 4.4.0 (1/14/2016)
+### Public API Changes
+* Change names in CompactionPri and add a new one.
+* Deprecate options.soft_rate_limit and add 
options.soft_pending_compaction_bytes_limit.
+* If options.max_write_buffer_number > 3, writes will be slowed down when 
writing to the last write buffer to delay a full stop.
+* Introduce CompactionJobInfo::compaction_reason, this field include the 
reason to trigger the compaction.
+* After slow down is triggered, if estimated pending compaction bytes keep 
increasing, slowdown more.
+* Increase default options.delayed_write_rate to 2MB/s.
+* Added a new parameter --path to ldb tool. --path accepts the name of either 
MANIFEST, SST or a WAL file. Either --db or --path can be used when calling ldb.
+
+## 4.3.0 (12/8/2015)
+### New Features
+* CompactionFilter has new member function called IgnoreSnapshots which allows 
CompactionFilter to be called even if there are snapshots later than the key.
+* RocksDB will now persist options under the same directory as the RocksDB 
database on successful DB::Open, CreateColumnFamily, DropColumnFamily, and 
SetOptions.
+* Introduce LoadLatestOptions() in rocksdb/utilities/options_util.h.  This 
function can construct the latest DBOptions / ColumnFamilyOptions used by the 
specified RocksDB intance.
+* Introduce CheckOptionsCompatibility() in rocksdb/utilities/options_util.h.  
This function checks whether the input set of options is able to open the 
specified DB successfully.
+
+### Public API Changes
+* When options.db_write_buffer_size triggers, only the column family with the 
largest column family size will be flushed, not all the column families.
+
+## 4.2.0 (11/9/2015)
+### New Features
+* Introduce CreateLoggerFromOptions(), this function create a Logger for 
provided DBOptions.
+* Add GetAggregatedIntProperty(), which returns the sum of the GetIntProperty 
of all the column families.
+* Add MemoryUtil in rocksdb/utilities/memory.h.  It currently offers a way to 
get the memory usage by type from a list rocksdb instances.
+
+### Public API Changes
+* CompactionFilter::Context includes information of Column Family ID
+* The need-compaction hint given by TablePropertiesCollector::NeedCompact() 
will be persistent and recoverable after DB recovery. This introduces a 
breaking format change. If you use this experimental feature, including 
NewCompactOnDeletionCollectorFactory() in the new version, you may not be able 
to directly downgrade the DB back to version 4.0 or lower.
+* TablePropertiesCollectorFactory::CreateTablePropertiesCollector() now takes 
an option Context, containing the information of column family ID for the file 
being written.
+* Remove DefaultCompactionFilterFactory.
+
+
+## 4.1.0 (10/8/2015)
+### New Features
+* Added single delete operation as a more efficient way to delete keys that 
have not been overwritten.
+* Added experimental AddFile() to DB interface that allow users to add files 
created by SstFileWriter into an empty Database, see 
include/rocksdb/sst_file_writer.h and DB::AddFile() for more info.
+* Added support for opening SST files with .ldb suffix which enables opening 
LevelDB databases.
+* CompactionFilter now supports filtering of merge operands and merge results.
+
+### Public API Changes
+* Added SingleDelete() to the DB interface.
+* Added AddFile() to DB interface.
+* Added SstFileWriter class.
+* CompactionFilter has a new method FilterMergeOperand() that RocksDB applies 
to every merge operand during compaction to decide whether to filter the 
operand.
+* We removed CompactionFilterV2 interfaces from 
include/rocksdb/compaction_filter.h. The functionality was deprecated already 
in version 3.13.
+
+## 4.0.0 (9/9/2015)
+### New Features
+* Added support for transactions.  See include/rocksdb/utilities/transaction.h 
for more info.
+* DB::GetProperty() now accepts "rocksdb.aggregated-table-properties" and 
"rocksdb.aggregated-table-properties-at-levelN", in which case it returns 
aggregated table properties of the target column family, or the aggregated 
table properties of the specified level N if the "at-level" version is used.
+* Add compression option kZSTDNotFinalCompression for people to experiment 
ZSTD although its format is not finalized.
+* We removed the need for LATEST_BACKUP file in BackupEngine. We still keep 
writing it when we create new backups (because of backward compatibility), but 
we don't read it anymore.
+
+### Public API Changes
+* Removed class Env::RandomRWFile and Env::NewRandomRWFile().
+* Renamed DBOptions.num_subcompactions to DBOptions.max_subcompactions to make 
the name better match the actual functionality of the option.
+* Added Equal() method to the Comparator interface that can optionally be 
overwritten in cases where equality comparisons can be done more efficiently 
than three-way comparisons.
+* Previous 'experimental' OptimisticTransaction class has been replaced by 
Transaction class.
+
+## 3.13.0 (8/6/2015)
+### New Features
+* RollbackToSavePoint() in WriteBatch/WriteBatchWithIndex
+* Add NewCompactOnDeletionCollectorFactory() in 
utilities/table_properties_collectors, which allows rocksdb to mark a SST file 
as need-compaction when it observes at least D deletion entries in any N 
consecutive entries in that SST file.  Note that this feature depends on an 
experimental NeedCompact() API --- the result of this API will not persist 
after DB restart.
+* Add DBOptions::delete_scheduler. Use NewDeleteScheduler() in 
include/rocksdb/delete_scheduler.h to create a DeleteScheduler that can be 
shared among multiple RocksDB instances to control the file deletion rate of 
SST files that exist in the first db_path.
+
+### Public API Changes
+* Deprecated WriteOptions::timeout_hint_us. We no longer support write 
timeout. If you really need this option, talk to us and we might consider 
returning it.
+* Deprecated purge_redundant_kvs_while_flush option.
+* Removed BackupEngine::NewBackupEngine() and NewReadOnlyBackupEngine() that 
were deprecated in RocksDB 3.8. Please use BackupEngine::Open() instead.
+* Deprecated Compaction Filter V2. We are not aware of any existing use-cases. 
If you use this filter, your compile will break with RocksDB 3.13. Please let 
us know if you use it and we'll put it back in RocksDB 3.14.
+* Env::FileExists now returns a Status instead of a boolean
+* Add statistics::getHistogramString() to print detailed distribution of a 
histogram metric.
+* Add DBOptions::skip_stats_update_on_db_open.  When it is on, DB::Open() will 
run faster as it skips the random reads required for loading necessary stats 
from SST files to optimize compaction.
+
+## 3.12.0 (7/2/2015)
+### New Features
+* Added experimental support for optimistic transactions.  See 
include/rocksdb/utilities/optimistic_transaction.h for more info.
+* Added a new way to report QPS from db_bench (check out --report_file and 
--report_interval_seconds)
+* Added a cache for individual rows. See DBOptions::row_cache for more info.
+* Several new features on EventListener (see include/rocksdb/listener.h):
+ - OnCompationCompleted() now returns per-compaction job statistics, defined 
in include/rocksdb/compaction_job_stats.h.
+ - Added OnTableFileCreated() and OnTableFileDeleted().
+* Add compaction_options_universal.enable_trivial_move to true, to allow 
trivial move while performing universal compaction. Trivial move will happen 
only when all the input files are non overlapping.
+
+### Public API changes
+* EventListener::OnFlushCompleted() now passes FlushJobInfo instead of a list 
of parameters.
+* DB::GetDbIdentity() is now a const function.  If this function is overridden 
in your application, be sure to also make GetDbIdentity() const to avoid 
compile error.
+* Move listeners from ColumnFamilyOptions to DBOptions.
+* Add max_write_buffer_number_to_maintain option
+* DB::CompactRange()'s parameter reduce_level is changed to change_level, to 
allow users to move levels to lower levels if allowed. It can be used to 
migrate a DB from options.level_compaction_dynamic_level_bytes=false to 
options.level_compaction_dynamic_level_bytes.true.
+* Change default value for options.compaction_filter_factory and 
options.compaction_filter_factory_v2 to nullptr instead of 
DefaultCompactionFilterFactory and DefaultCompactionFilterFactoryV2.
+* If CancelAllBackgroundWork is called without doing a flush after doing loads 
with WAL disabled, the changes which haven't been flushed before the call to 
CancelAllBackgroundWork will be lost.
+* WBWIIterator::Entry() now returns WriteEntry instead of `const WriteEntry&`
+* options.hard_rate_limit is deprecated.
+* When options.soft_rate_limit or options.level0_slowdown_writes_trigger is 
triggered, the way to slow down writes is changed to: write rate to DB is 
limited to to options.delayed_write_rate.
+* DB::GetApproximateSizes() adds a parameter to allow the estimation to 
include data in mem table, with default to be not to include. It is now only 
supported in skip list mem table.
+* DB::CompactRange() now accept CompactRangeOptions instead of multiple 
parameters. CompactRangeOptions is defined in include/rocksdb/options.h.
+* CompactRange() will now skip bottommost level compaction for level based 
compaction if there is no compaction filter, bottommost_level_compaction is 
introduced in CompactRangeOptions to control when it's possible to skip 
bottommost level compaction. This mean that if you want the compaction to 
produce a single file you need to set bottommost_level_compaction to 
BottommostLevelCompaction::kForce.
+* Add Cache.GetPinnedUsage() to get the size of memory occupied by entries 
that are in use by the system.
+* DB:Open() will fail if the compression specified in Options is not linked 
with the binary. If you see this failure, recompile RocksDB with compression 
libraries present on your system. Also, previously our default compression was 
snappy. This behavior is now changed. Now, the default compression is snappy 
only if it's available on the system. If it isn't we change the default to 
kNoCompression.
+* We changed how we account for memory used in block cache. Previously, we 
only counted the sum of block sizes currently present in block cache. Now, we 
count the actual memory usage of the blocks. For example, a block of size 4.5KB 
will use 8KB memory with jemalloc. This might decrease your memory usage and 
possibly decrease performance. Increase block cache size if you see this 
happening after an upgrade.
+* Add BackupEngineImpl.options_.max_background_operations to specify the 
maximum number of operations that may be performed in parallel. Add support for 
parallelized backup and restore.
+* Add DB::SyncWAL() that does a WAL sync without blocking writers.
+
+## 3.11.0 (5/19/2015)
+### New Features
+* Added a new API Cache::SetCapacity(size_t capacity) to dynamically change 
the maximum configured capacity of the cache. If the new capacity is less than 
the existing cache usage, the implementation will try to lower the usage by 
evicting the necessary number of elements following a strict LRU policy.
+* Added an experimental API for handling flashcache devices (blacklists 
background threads from caching their reads) -- NewFlashcacheAwareEnv
+* If universal compaction is used and options.num_levels > 1, compact files 
are tried to be stored in none-L0 with smaller files based on 
options.target_file_size_base. The limitation of DB size when using universal 
compaction is greatly mitigated by using more levels. You can set num_levels = 
1 to make universal compaction behave as before. If you set num_levels > 1 and 
want to roll back to a previous version, you need to compact all files to a big 
file in level 0 (by setting target_file_size_base to be large and 
CompactRange(<cf_handle>, nullptr, nullptr, true, 0) and reopen the DB with the 
same version to rewrite the manifest, and then you can open it using previous 
releases.
+* More information about rocksdb background threads are available in 
Env::GetThreadList(), including the number of bytes read / written by a 
compaction job, mem-table size and current number of bytes written by a flush 
job and many more.  Check include/rocksdb/thread_status.h for more detail.
+
+### Public API changes
+* TablePropertiesCollector::AddUserKey() is added to replace 
TablePropertiesCollector::Add(). AddUserKey() exposes key type, sequence number 
and file size up to now to users.
+* DBOptions::bytes_per_sync used to apply to both WAL and table files. As of 
3.11 it applies only to table files. If you want to use this option to sync WAL 
in the background, please use wal_bytes_per_sync
+
+## 3.10.0 (3/24/2015)
+### New Features
+* GetThreadStatus() is now able to report detailed thread status, including:
+ - Thread Operation including flush and compaction.
+ - The stage of the current thread operation.
+ - The elapsed time in micros since the current thread operation started.
+ More information can be found in include/rocksdb/thread_status.h.  In 
addition, when running db_bench with --thread_status_per_interval, db_bench 
will also report thread status periodically.
+* Changed the LRU caching algorithm so that referenced blocks (by iterators) 
are never evicted. This change made parameter removeScanCountLimit obsolete. 
Because of that NewLRUCache doesn't take three arguments anymore. 
table_cache_remove_scan_limit option is also removed
+* By default we now optimize the compilation for the compilation platform 
(using -march=native). If you want to build portable binary, use 'PORTABLE=1' 
before the make command.
+* We now allow level-compaction to place files in different paths by
+  specifying them in db_paths along with the target_size.
+  Lower numbered levels will be placed earlier in the db_paths and higher
+  numbered levels will be placed later in the db_paths vector.
+* Potentially big performance improvements if you're using RocksDB with lots 
of column families (100-1000)
+* Added BlockBasedTableOptions.format_version option, which allows user to 
specify which version of block based table he wants. As a general guideline, 
newer versions have more features, but might not be readable by older versions 
of RocksDB.
+* Added new block based table format (version 2), which you can enable by 
setting BlockBasedTableOptions.format_version = 2. This format changes how we 
encode size information in compressed blocks and should help with memory 
allocations if you're using Zlib or BZip2 compressions.
+* MemEnv (env that stores data in memory) is now available in default library 
build. You can create it by calling NewMemEnv().
+* Add SliceTransform.SameResultWhenAppended() to help users determine it is 
safe to apply prefix bloom/hash.
+* Block based table now makes use of prefix bloom filter if it is a full 
fulter.
+* Block based table remembers whether a whole key or prefix based bloom filter 
is supported in SST files. Do a sanity check when reading the file with users' 
configuration.
+* Fixed a bug in ReadOnlyBackupEngine that deleted corrupted backups in some 
cases, even though the engine was ReadOnly
+* options.level_compaction_dynamic_level_bytes, a feature to allow RocksDB to 
pick dynamic base of bytes for levels. With this feature turned on, we will 
automatically adjust max bytes for each level. The goal of this feature is to 
have lower bound on size amplification. For more details, see comments in 
options.h.
+* Added an abstract base class WriteBatchBase for write batches
+* Fixed a bug where we start deleting files of a dropped column families even 
if there are still live references to it
+
+### Public API changes
+* Deprecated skip_log_error_on_recovery and 
table_cache_remove_scan_count_limit options.
+* Logger method logv with log level parameter is now virtual
+
+### RocksJava
+* Added compression per level API.
+* MemEnv is now available in RocksJava via RocksMemEnv class.
+* lz4 compression is now included in rocksjava static library when running 
`make rocksdbjavastatic`.
+* Overflowing a size_t when setting rocksdb options now throws an 
IllegalArgumentException, which removes the necessity for a developer to catch 
these Exceptions explicitly.
+
+## 3.9.0 (12/8/2014)
+
+### New Features
+* Add rocksdb::GetThreadList(), which in the future will return the current 
status of all
+  rocksdb-related threads.  We will have more code instruments in the 
following RocksDB
+  releases.
+* Change convert function in rocksdb/utilities/convenience.h to return Status 
instead of boolean.
+  Also add support for nested options in convert function
+
+### Public API changes
+* New API to create a checkpoint added. Given a directory name, creates a new
+  database which is an image of the existing database.
+* New API LinkFile added to Env. If you implement your own Env class, an
+  implementation of the API LinkFile will have to be provided.
+* MemTableRep takes MemTableAllocator instead of Arena
+
+### Improvements
+* RocksDBLite library now becomes smaller and will be compiled with 
-fno-exceptions flag.
+
+## 3.8.0 (11/14/2014)
+
+### Public API changes
+* BackupEngine::NewBackupEngine() was deprecated; please use 
BackupEngine::Open() from now on.
+* BackupableDB/RestoreBackupableDB have new GarbageCollect() methods, which 
will clean up files from corrupt and obsolete backups.
+* BackupableDB/RestoreBackupableDB have new GetCorruptedBackups() methods 
which list corrupt backups.
+
+### Cleanup
+* Bunch of code cleanup, some extra warnings turned on (-Wshadow, 
-Wshorten-64-to-32, -Wnon-virtual-dtor)
+
+### New features
+* CompactFiles and EventListener, although they are still in experimental state
+* Full ColumnFamily support in RocksJava.
+
+## 3.7.0 (11/6/2014)
+### Public API changes
+* Introduce SetOptions() API to allow adjusting a subset of options 
dynamically online
+* Introduce 4 new convenient functions for converting Options from string: 
GetColumnFamilyOptionsFromMap(), GetColumnFamilyOptionsFromString(), 
GetDBOptionsFromMap(), GetDBOptionsFromString()
+* Remove WriteBatchWithIndex.Delete() overloads using SliceParts
+* When opening a DB, if options.max_background_compactions is larger than the 
existing low pri pool of options.env, it will enlarge it. Similarly, 
options.max_background_flushes is larger than the existing high pri pool of 
options.env, it will enlarge it.
+
+## 3.6.0 (10/7/2014)
+### Disk format changes
+* If you're using RocksDB on ARM platforms and you're using default bloom 
filter, there is a disk format change you need to be aware of. There are three 
steps you need to do when you convert to new release: 1. turn off filter 
policy, 2. compact the whole database, 3. turn on filter policy
+
+### Behavior changes
+* We have refactored our system of stalling writes.  Any stall-related 
statistics' meanings are changed. Instead of per-write stall counts, we now 
count stalls per-epoch, where epochs are periods between flushes and 
compactions. You'll find more information in our Tuning Perf Guide once we 
release RocksDB 3.6.
+* When disableDataSync=true, we no longer sync the MANIFEST file.
+* Add identity_as_first_hash property to CuckooTable. SST file needs to be 
rebuilt to be opened by reader properly.
+
+### Public API changes
+* Change target_file_size_base type to uint64_t from int.
+* Remove allow_thread_local. This feature was proved to be stable, so we are 
turning it always-on.
+
+## 3.5.0 (9/3/2014)
+### New Features
+* Add include/utilities/write_batch_with_index.h, providing a utility class to 
query data out of WriteBatch when building it.
+* Move BlockBasedTable related options to BlockBasedTableOptions from Options. 
Change corresponding JNI interface. Options affected include:
+  no_block_cache, block_cache, block_cache_compressed, block_size, 
block_size_deviation, block_restart_interval, filter_policy, 
whole_key_filtering. filter_policy is changed to shared_ptr from a raw pointer.
+* Remove deprecated options: disable_seek_compaction and db_stats_log_interval
+* OptimizeForPointLookup() takes one parameter for block cache size. It now 
builds hash index, bloom filter, and block cache.
+
+### Public API changes
+* The Prefix Extractor used with V2 compaction filters is now passed user key 
to SliceTransform::Transform instead of unparsed RocksDB key.
+
+## 3.4.0 (8/18/2014)
+### New Features
+* Support Multiple DB paths in universal style compactions
+* Add feature of storing plain table index and bloom filter in SST file.
+* CompactRange() will never output compacted files to level 0. This used to be 
the case when all the compaction input files were at level 0.
+* Added iterate_upper_bound to define the extent upto which the forward 
iterator will return entries. This will prevent iterating over delete markers 
and overwritten entries for edge cases where you want to break out the iterator 
anyways. This may improve performance in case there are a large number of 
delete markers or overwritten entries.
+
+### Public API changes
+* DBOptions.db_paths now is a vector of a DBPath structure which indicates 
both of path and target size
+* NewPlainTableFactory instead of bunch of parameters now accepts 
PlainTableOptions, which is defined in include/rocksdb/table.h
+* Moved include/utilities/*.h to include/rocksdb/utilities/*.h
+* Statistics APIs now take uint32_t as type instead of Tickers. Also make two 
access functions getTickerCount and histogramData const
+* Add DB property rocksdb.estimate-num-keys, estimated number of live keys in 
DB.
+* Add DB::GetIntProperty(), which returns DB properties that are integer as 
uint64_t.
+* The Prefix Extractor used with V2 compaction filters is now passed user key 
to SliceTransform::Transform instead of unparsed RocksDB key.
+
+## 3.3.0 (7/10/2014)
+### New Features
+* Added JSON API prototype.
+* HashLinklist reduces performance outlier caused by skewed bucket by 
switching data in the bucket from linked list to skip list. Add parameter 
threshold_use_skiplist in NewHashLinkListRepFactory().
+* RocksDB is now able to reclaim storage space more effectively during the 
compaction process.  This is done by compensating the size of each deletion 
entry by the 2X average value size, which makes compaction to be triggered by 
deletion entries more easily.
+* Add TimeOut API to write.  Now WriteOptions have a variable called 
timeout_hint_us.  With timeout_hint_us set to non-zero, any write associated 
with this timeout_hint_us may be aborted when it runs longer than the specified 
timeout_hint_us, and it is guaranteed that any write completes earlier than the 
specified time-out will not be aborted due to the time-out condition.
+* Add a rate_limiter option, which controls total throughput of flush and 
compaction. The throughput is specified in bytes/sec. Flush always has 
precedence over compaction when available bandwidth is constrained.
+
+### Public API changes
+* Removed NewTotalOrderPlainTableFactory because it is not used and 
implemented semantically incorrect.
+
+## 3.2.0 (06/20/2014)
+
+### Public API changes
+* We removed seek compaction as a concept from RocksDB because:
+1) It makes more sense for spinning disk workloads, while RocksDB is primarily 
designed for flash and memory,
+2) It added some complexity to the important code-paths,
+3) None of our internal customers were really using it.
+Because of that, Options::disable_seek_compaction is now obsolete. It is still 
a parameter in Options, so it does not break the build, but it does not have 
any effect. We plan to completely remove it at some point, so we ask users to 
please remove this option from your code base.
+* Add two parameters to NewHashLinkListRepFactory() for logging on too many 
entries in a hash bucket when flushing.
+* Added new option BlockBasedTableOptions::hash_index_allow_collision. When 
enabled, prefix hash index for block-based table will not store prefix and 
allow hash collision, reducing memory consumption.
+
+### New Features
+* PlainTable now supports a new key encoding: for keys of the same prefix, the 
prefix is only written once. It can be enabled through encoding_type parameter 
of NewPlainTableFactory()
+* Add AdaptiveTableFactory, which is used to convert from a DB of PlainTable 
to BlockBasedTabe, or vise versa. It can be created using 
NewAdaptiveTableFactory()
+
+### Performance Improvements
+* Tailing Iterator re-implemeted with ForwardIterator + Cascading Search Hint 
, see ~20% throughput improvement.
+
+## 3.1.0 (05/21/2014)
+
+### Public API changes
+* Replaced ColumnFamilyOptions::table_properties_collectors with 
ColumnFamilyOptions::table_properties_collector_factories
+
+### New Features
+* Hash index for block-based table will be materialized and reconstructed more 
efficiently. Previously hash index is constructed by scanning the whole table 
during every table open.
+* FIFO compaction style
+
+## 3.0.0 (05/05/2014)
+
+### Public API changes
+* Added _LEVEL to all InfoLogLevel enums
+* Deprecated ReadOptions.prefix and ReadOptions.prefix_seek. Seek() defaults 
to prefix-based seek when Options.prefix_extractor is supplied. More detail is 
documented in https://github.com/facebook/rocksdb/wiki/Prefix-Seek-API-Changes
+* MemTableRepFactory::CreateMemTableRep() takes info logger as an extra 
parameter.
+
+### New Features
+* Column family support
+* Added an option to use different checksum functions in BlockBasedTableOptions
+* Added ApplyToAllCacheEntries() function to Cache
+
+## 2.8.0 (04/04/2014)
+
+* Removed arena.h from public header files.
+* By default, checksums are verified on every read from database
+* Change default value of several options, including: paranoid_checks=true, 
max_open_files=5000, level0_slowdown_writes_trigger=20, 
level0_stop_writes_trigger=24, disable_seek_compaction=true, 
max_background_flushes=1 and allow_mmap_writes=false
+* Added is_manual_compaction to CompactionFilter::Context
+* Added "virtual void WaitForJoin()" in class Env. Default operation is no-op.
+* Removed BackupEngine::DeleteBackupsNewerThan() function
+* Added new option -- verify_checksums_in_compaction
+* Changed Options.prefix_extractor from raw pointer to shared_ptr (take 
ownership)
+  Changed HashSkipListRepFactory and HashLinkListRepFactory constructor to not 
take SliceTransform object (use Options.prefix_extractor implicitly)
+* Added Env::GetThreadPoolQueueLen(), which returns the waiting queue length 
of thread pools
+* Added a command "checkconsistency" in ldb tool, which checks
+  if file system state matches DB state (file existence and file sizes)
+* Separate options related to block based table to a new struct 
BlockBasedTableOptions.
+* WriteBatch has a new function Count() to return total size in the batch, and 
Data() now returns a reference instead of a copy
+* Add more counters to perf context.
+* Supports several more DB properties: compaction-pending, background-errors 
and cur-size-active-mem-table.
+
+### New Features
+* If we find one truncated record at the end of the MANIFEST or WAL files,
+  we will ignore it. We assume that writers of these records were interrupted
+  and that we can safely ignore it.
+* A new SST format "PlainTable" is added, which is optimized for memory-only 
workloads. It can be created through NewPlainTableFactory() or 
NewTotalOrderPlainTableFactory().
+* A new mem table implementation hash linked list optimizing for the case that 
there are only few keys for each prefix, which can be created through 
NewHashLinkListRepFactory().
+* Merge operator supports a new function PartialMergeMulti() to allow users to 
do partial merges against multiple operands.
+* Now compaction filter has a V2 interface. It buffers the kv-pairs sharing 
the same key prefix, process them in batches, and return the batched results 
back to DB. The new interface uses a new structure CompactionFilterContext for 
the same purpose as CompactionFilter::Context in V1.
+* Geo-spatial support for locations and radial-search.
+
+## 2.7.0 (01/28/2014)
+
+### Public API changes
+
+* Renamed `StackableDB::GetRawDB()` to `StackableDB::GetBaseDB()`.
+* Renamed `WriteBatch::Data()` `const std::string& Data() const`.
+* Renamed class `TableStats` to `TableProperties`.
+* Deleted class `PrefixHashRepFactory`. Please use 
`NewHashSkipListRepFactory()` instead.
+* Supported multi-threaded `EnableFileDeletions()` and 
`DisableFileDeletions()`.
+* Added `DB::GetOptions()`.
+* Added `DB::GetDbIdentity()`.
+
+### New Features
+
+* Added 
[BackupableDB](https://github.com/facebook/rocksdb/wiki/How-to-backup-RocksDB%3F)
+* Implemented 
[TailingIterator](https://github.com/facebook/rocksdb/wiki/Tailing-Iterator), a 
special type of iterator that
+  doesn't create a snapshot (can be used to read newly inserted data)
+  and is optimized for doing sequential reads.
+* Added property block for table, which allows (1) a table to store
+  its metadata and (2) end user to collect and store properties they
+  are interested in.
+* Enabled caching index and filter block in block cache (turned off by 
default).
+* Supported error report when doing manual compaction.
+* Supported additional Linux platform flavors and Mac OS.
+* Put with `SliceParts` - Variant of `Put()` that gathers output like 
`writev(2)`
+* Bug fixes and code refactor for compatibility with upcoming Column
+  Family feature.
+
+### Performance Improvements
+
+* Huge benchmark performance improvements by multiple efforts. For example, 
increase in readonly QPS from about 530k in 2.6 release to 1.1 million in 2.7 
[1]
+* Speeding up a way RocksDB deleted obsolete files - no longer listing the 
whole directory under a lock -- decrease in p99
+* Use raw pointer instead of shared pointer for statistics: 
[5b825d](https://github.com/facebook/rocksdb/commit/5b825d6964e26ec3b4bb6faa708ebb1787f1d7bd)
 -- huge increase in performance -- shared pointers are slow
+* Optimized locking for `Get()` -- 
[1fdb3f](https://github.com/facebook/rocksdb/commit/1fdb3f7dc60e96394e3e5b69a46ede5d67fb976c)
 -- 1.5x QPS increase for some workloads
+* Cache speedup - 
[e8d40c3](https://github.com/facebook/rocksdb/commit/e8d40c31b3cca0c3e1ae9abe9b9003b1288026a9)
+* Implemented autovector, which allocates first N elements on stack. Most of 
vectors in RocksDB are small. Also, we never want to allocate heap objects 
while holding a mutex. -- 
[c01676e4](https://github.com/facebook/rocksdb/commit/c01676e46d3be08c3c140361ef1f5884f47d3b3c)
+* Lots of efforts to move malloc, memcpy and IO outside of locks

http://git-wip-us.apache.org/repos/asf/nifi-minifi-cpp/blob/48867732/thirdparty/rocksdb/INSTALL.md
----------------------------------------------------------------------
diff --git a/thirdparty/rocksdb/INSTALL.md b/thirdparty/rocksdb/INSTALL.md
new file mode 100644
index 0000000..04f0eb2
--- /dev/null
+++ b/thirdparty/rocksdb/INSTALL.md
@@ -0,0 +1,144 @@
+## Compilation
+
+**Important**: If you plan to run RocksDB in production, don't compile using 
default
+`make` or `make all`. That will compile RocksDB in debug mode, which is much 
slower
+than release mode.
+
+RocksDB's library should be able to compile without any dependency installed,
+although we recommend installing some compression libraries (see below).
+We do depend on newer gcc/clang with C++11 support.
+
+There are few options when compiling RocksDB:
+
+* [recommended] `make static_lib` will compile librocksdb.a, RocksDB static 
library. Compiles static library in release mode.
+
+* `make shared_lib` will compile librocksdb.so, RocksDB shared library. 
Compiles shared library in release mode.
+
+* `make check` will compile and run all the unit tests. `make check` will 
compile RocksDB in debug mode.
+
+* `make all` will compile our static library, and all our tools and unit 
tests. Our tools
+depend on gflags. You will need to have gflags installed to run `make all`. 
This will compile RocksDB in debug mode. Don't
+use binaries compiled by `make all` in production.
+
+* By default the binary we produce is optimized for the platform you're 
compiling on
+(`-march=native` or the equivalent). SSE4.2 will thus be enabled automatically 
if your
+CPU supports it. To print a warning if your CPU does not support SSE4.2, build 
with
+`USE_SSE=1 make static_lib` or, if using CMake, `cmake -DFORCE_SSE42=ON`. If 
you want
+to build a portable binary, add `PORTABLE=1` before your make commands, like 
this:
+`PORTABLE=1 make static_lib`.
+
+## Dependencies
+
+* You can link RocksDB with following compression libraries:
+  - [zlib](http://www.zlib.net/) - a library for data compression.
+  - [bzip2](http://www.bzip.org/) - a library for data compression.
+  - [lz4](https://github.com/lz4/lz4) - a library for extremely fast data 
compression.
+  - [snappy](http://google.github.io/snappy/) - a library for fast
+      data compression.
+  - [zstandard](http://www.zstd.net) - Fast real-time compression
+      algorithm.
+
+* All our tools depend on:
+  - [gflags](https://gflags.github.io/gflags/) - a library that handles
+      command line flags processing. You can compile rocksdb library even
+      if you don't have gflags installed.
+
+## Supported platforms
+
+* **Linux - Ubuntu**
+    * Upgrade your gcc to version at least 4.8 to get C++11 support.
+    * Install gflags. First, try: `sudo apt-get install libgflags-dev`
+      If this doesn't work and you're using Ubuntu, here's a nice tutorial:
+      (http://askubuntu.com/questions/312173/installing-gflags-12-04)
+    * Install snappy. This is usually as easy as:
+      `sudo apt-get install libsnappy-dev`.
+    * Install zlib. Try: `sudo apt-get install zlib1g-dev`.
+    * Install bzip2: `sudo apt-get install libbz2-dev`.
+    * Install lz4: `sudo apt-get install liblz4-dev`.
+    * Install zstandard: `sudo apt-get install libzstd-dev`.
+
+* **Linux - CentOS / RHEL**
+    * Upgrade your gcc to version at least 4.8 to get C++11 support:
+      `yum install gcc48-c++`
+    * Install gflags:
+
+              git clone https://github.com/gflags/gflags.git
+              cd gflags
+              git checkout v2.0
+              ./configure && make && sudo make install
+
+      **Notice**: Once installed, please add the include path for gflags to 
your `CPATH` environment variable and the
+      lib path to `LIBRARY_PATH`. If installed with default settings, the 
include path will be `/usr/local/include`
+      and the lib path will be `/usr/local/lib`.
+
+    * Install snappy:
+
+              sudo yum install snappy snappy-devel
+
+    * Install zlib:
+
+              sudo yum install zlib zlib-devel
+
+    * Install bzip2:
+
+              sudo yum install bzip2 bzip2-devel
+
+    * Install lz4:
+
+              sudo yum install lz4-devel
+
+    * Install ASAN (optional for debugging):
+
+              sudo yum install libasan
+
+    * Install zstandard:
+
+             wget https://github.com/facebook/zstd/archive/v1.1.3.tar.gz
+             mv v1.1.3.tar.gz zstd-1.1.3.tar.gz
+             tar zxvf zstd-1.1.3.tar.gz
+             cd zstd-1.1.3
+             make && sudo make install
+
+* **OS X**:
+    * Install latest C++ compiler that supports C++ 11:
+        * Update XCode:  run `xcode-select --install` (or install it from 
XCode App's settting).
+        * Install via [homebrew](http://brew.sh/).
+            * If you're first time developer in MacOS, you still need to run: 
`xcode-select --install` in your command line.
+            * run `brew tap homebrew/versions; brew install gcc48 --use-llvm` 
to install gcc 4.8 (or higher).
+    * run `brew install rocksdb`
+
+* **iOS**:
+  * Run: `TARGET_OS=IOS make static_lib`. When building the project which uses 
rocksdb iOS library, make sure to define two important pre-processing macros: 
`ROCKSDB_LITE` and `IOS_CROSS_COMPILE`.
+
+* **Windows**:
+  * For building with MS Visual Studio 13 you will need Update 4 installed.
+  * Read and follow the instructions at CMakeLists.txt
+  * Or install via [vcpkg](https://github.com/microsoft/vcpkg) 
+       * run `vcpkg install rocksdb`
+
+* **AIX 6.1**
+    * Install AIX Toolbox rpms with gcc
+    * Use these environment variables:
+  
+             export PORTABLE=1
+             export CC=gcc
+             export AR="ar -X64"
+             export EXTRA_ARFLAGS=-X64
+             export EXTRA_CFLAGS=-maix64
+             export EXTRA_CXXFLAGS=-maix64
+             export PLATFORM_LDFLAGS="-static-libstdc++ -static-libgcc"
+             export LIBPATH=/opt/freeware/lib
+             export JAVA_HOME=/usr/java8_64
+             export PATH=/opt/freeware/bin:$PATH
+  
+* **Solaris Sparc**
+    * Install GCC 4.8.2 and higher.
+    * Use these environment variables:
+
+             export CC=gcc
+             export EXTRA_CFLAGS=-m64
+             export EXTRA_CXXFLAGS=-m64
+             export EXTRA_LDFLAGS=-m64
+             export PORTABLE=1
+             export PLATFORM_LDFLAGS="-static-libstdc++ -static-libgcc"
+

http://git-wip-us.apache.org/repos/asf/nifi-minifi-cpp/blob/48867732/thirdparty/rocksdb/LANGUAGE-BINDINGS.md
----------------------------------------------------------------------
diff --git a/thirdparty/rocksdb/LANGUAGE-BINDINGS.md 
b/thirdparty/rocksdb/LANGUAGE-BINDINGS.md
new file mode 100644
index 0000000..d28035b
--- /dev/null
+++ b/thirdparty/rocksdb/LANGUAGE-BINDINGS.md
@@ -0,0 +1,13 @@
+This is the list of all known third-party language bindings for RocksDB. If 
something is missing, please open a pull request to add it.
+
+* Java - https://github.com/facebook/rocksdb/tree/master/java
+* Python - http://pyrocksdb.readthedocs.org/en/latest/
+* Perl - https://metacpan.org/pod/RocksDB
+* Node.js - https://npmjs.org/package/rocksdb
+* Go - https://github.com/tecbot/gorocksdb
+* Ruby - http://rubygems.org/gems/rocksdb-ruby
+* Haskell - https://hackage.haskell.org/package/rocksdb-haskell
+* PHP - https://github.com/Photonios/rocksdb-php
+* C# - https://github.com/warrenfalk/rocksdb-sharp
+* Rust - https://github.com/spacejam/rust-rocksdb
+* D programming language - https://github.com/b1naryth1ef/rocksdb

http://git-wip-us.apache.org/repos/asf/nifi-minifi-cpp/blob/48867732/thirdparty/rocksdb/LICENSE.Apache
----------------------------------------------------------------------
diff --git a/thirdparty/rocksdb/LICENSE.Apache 
b/thirdparty/rocksdb/LICENSE.Apache
new file mode 100644
index 0000000..d645695
--- /dev/null
+++ b/thirdparty/rocksdb/LICENSE.Apache
@@ -0,0 +1,202 @@
+
+                                 Apache License
+                           Version 2.0, January 2004
+                        http://www.apache.org/licenses/
+
+   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+   1. Definitions.
+
+      "License" shall mean the terms and conditions for use, reproduction,
+      and distribution as defined by Sections 1 through 9 of this document.
+
+      "Licensor" shall mean the copyright owner or entity authorized by
+      the copyright owner that is granting the License.
+
+      "Legal Entity" shall mean the union of the acting entity and all
+      other entities that control, are controlled by, or are under common
+      control with that entity. For the purposes of this definition,
+      "control" means (i) the power, direct or indirect, to cause the
+      direction or management of such entity, whether by contract or
+      otherwise, or (ii) ownership of fifty percent (50%) or more of the
+      outstanding shares, or (iii) beneficial ownership of such entity.
+
+      "You" (or "Your") shall mean an individual or Legal Entity
+      exercising permissions granted by this License.
+
+      "Source" form shall mean the preferred form for making modifications,
+      including but not limited to software source code, documentation
+      source, and configuration files.
+
+      "Object" form shall mean any form resulting from mechanical
+      transformation or translation of a Source form, including but
+      not limited to compiled object code, generated documentation,
+      and conversions to other media types.
+
+      "Work" shall mean the work of authorship, whether in Source or
+      Object form, made available under the License, as indicated by a
+      copyright notice that is included in or attached to the work
+      (an example is provided in the Appendix below).
+
+      "Derivative Works" shall mean any work, whether in Source or Object
+      form, that is based on (or derived from) the Work and for which the
+      editorial revisions, annotations, elaborations, or other modifications
+      represent, as a whole, an original work of authorship. For the purposes
+      of this License, Derivative Works shall not include works that remain
+      separable from, or merely link (or bind by name) to the interfaces of,
+      the Work and Derivative Works thereof.
+
+      "Contribution" shall mean any work of authorship, including
+      the original version of the Work and any modifications or additions
+      to that Work or Derivative Works thereof, that is intentionally
+      submitted to Licensor for inclusion in the Work by the copyright owner
+      or by an individual or Legal Entity authorized to submit on behalf of
+      the copyright owner. For the purposes of this definition, "submitted"
+      means any form of electronic, verbal, or written communication sent
+      to the Licensor or its representatives, including but not limited to
+      communication on electronic mailing lists, source code control systems,
+      and issue tracking systems that are managed by, or on behalf of, the
+      Licensor for the purpose of discussing and improving the Work, but
+      excluding communication that is conspicuously marked or otherwise
+      designated in writing by the copyright owner as "Not a Contribution."
+
+      "Contributor" shall mean Licensor and any individual or Legal Entity
+      on behalf of whom a Contribution has been received by Licensor and
+      subsequently incorporated within the Work.
+
+   2. Grant of Copyright License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      copyright license to reproduce, prepare Derivative Works of,
+      publicly display, publicly perform, sublicense, and distribute the
+      Work and such Derivative Works in Source or Object form.
+
+   3. Grant of Patent License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      (except as stated in this section) patent license to make, have made,
+      use, offer to sell, sell, import, and otherwise transfer the Work,
+      where such license applies only to those patent claims licensable
+      by such Contributor that are necessarily infringed by their
+      Contribution(s) alone or by combination of their Contribution(s)
+      with the Work to which such Contribution(s) was submitted. If You
+      institute patent litigation against any entity (including a
+      cross-claim or counterclaim in a lawsuit) alleging that the Work
+      or a Contribution incorporated within the Work constitutes direct
+      or contributory patent infringement, then any patent licenses
+      granted to You under this License for that Work shall terminate
+      as of the date such litigation is filed.
+
+   4. Redistribution. You may reproduce and distribute copies of the
+      Work or Derivative Works thereof in any medium, with or without
+      modifications, and in Source or Object form, provided that You
+      meet the following conditions:
+
+      (a) You must give any other recipients of the Work or
+          Derivative Works a copy of this License; and
+
+      (b) You must cause any modified files to carry prominent notices
+          stating that You changed the files; and
+
+      (c) You must retain, in the Source form of any Derivative Works
+          that You distribute, all copyright, patent, trademark, and
+          attribution notices from the Source form of the Work,
+          excluding those notices that do not pertain to any part of
+          the Derivative Works; and
+
+      (d) If the Work includes a "NOTICE" text file as part of its
+          distribution, then any Derivative Works that You distribute must
+          include a readable copy of the attribution notices contained
+          within such NOTICE file, excluding those notices that do not
+          pertain to any part of the Derivative Works, in at least one
+          of the following places: within a NOTICE text file distributed
+          as part of the Derivative Works; within the Source form or
+          documentation, if provided along with the Derivative Works; or,
+          within a display generated by the Derivative Works, if and
+          wherever such third-party notices normally appear. The contents
+          of the NOTICE file are for informational purposes only and
+          do not modify the License. You may add Your own attribution
+          notices within Derivative Works that You distribute, alongside
+          or as an addendum to the NOTICE text from the Work, provided
+          that such additional attribution notices cannot be construed
+          as modifying the License.
+
+      You may add Your own copyright statement to Your modifications and
+      may provide additional or different license terms and conditions
+      for use, reproduction, or distribution of Your modifications, or
+      for any such Derivative Works as a whole, provided Your use,
+      reproduction, and distribution of the Work otherwise complies with
+      the conditions stated in this License.
+
+   5. Submission of Contributions. Unless You explicitly state otherwise,
+      any Contribution intentionally submitted for inclusion in the Work
+      by You to the Licensor shall be under the terms and conditions of
+      this License, without any additional terms or conditions.
+      Notwithstanding the above, nothing herein shall supersede or modify
+      the terms of any separate license agreement you may have executed
+      with Licensor regarding such Contributions.
+
+   6. Trademarks. This License does not grant permission to use the trade
+      names, trademarks, service marks, or product names of the Licensor,
+      except as required for reasonable and customary use in describing the
+      origin of the Work and reproducing the content of the NOTICE file.
+
+   7. Disclaimer of Warranty. Unless required by applicable law or
+      agreed to in writing, Licensor provides the Work (and each
+      Contributor provides its Contributions) on an "AS IS" BASIS,
+      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+      implied, including, without limitation, any warranties or conditions
+      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+      PARTICULAR PURPOSE. You are solely responsible for determining the
+      appropriateness of using or redistributing the Work and assume any
+      risks associated with Your exercise of permissions under this License.
+
+   8. Limitation of Liability. In no event and under no legal theory,
+      whether in tort (including negligence), contract, or otherwise,
+      unless required by applicable law (such as deliberate and grossly
+      negligent acts) or agreed to in writing, shall any Contributor be
+      liable to You for damages, including any direct, indirect, special,
+      incidental, or consequential damages of any character arising as a
+      result of this License or out of the use or inability to use the
+      Work (including but not limited to damages for loss of goodwill,
+      work stoppage, computer failure or malfunction, or any and all
+      other commercial damages or losses), even if such Contributor
+      has been advised of the possibility of such damages.
+
+   9. Accepting Warranty or Additional Liability. While redistributing
+      the Work or Derivative Works thereof, You may choose to offer,
+      and charge a fee for, acceptance of support, warranty, indemnity,
+      or other liability obligations and/or rights consistent with this
+      License. However, in accepting such obligations, You may act only
+      on Your own behalf and on Your sole responsibility, not on behalf
+      of any other Contributor, and only if You agree to indemnify,
+      defend, and hold each Contributor harmless for any liability
+      incurred by, or claims asserted against, such Contributor by reason
+      of your accepting any such warranty or additional liability.
+
+   END OF TERMS AND CONDITIONS
+
+   APPENDIX: How to apply the Apache License to your work.
+
+      To apply the Apache License to your work, attach the following
+      boilerplate notice, with the fields enclosed by brackets "[]"
+      replaced with your own identifying information. (Don't include
+      the brackets!)  The text should be enclosed in the appropriate
+      comment syntax for the file format. We also recommend that a
+      file or class name and description of purpose be included on the
+      same "printed page" as the copyright notice for easier
+      identification within third-party archives.
+
+   Copyright [yyyy] [name of copyright owner]
+
+   Licensed under the Apache License, Version 2.0 (the "License");
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.

http://git-wip-us.apache.org/repos/asf/nifi-minifi-cpp/blob/48867732/thirdparty/rocksdb/LICENSE.leveldb
----------------------------------------------------------------------
diff --git a/thirdparty/rocksdb/LICENSE.leveldb 
b/thirdparty/rocksdb/LICENSE.leveldb
new file mode 100644
index 0000000..7108b0b
--- /dev/null
+++ b/thirdparty/rocksdb/LICENSE.leveldb
@@ -0,0 +1,29 @@
+This contains code that is from LevelDB, and that code is under the following 
license:
+
+Copyright (c) 2011 The LevelDB Authors. All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are
+met:
+
+   * Redistributions of source code must retain the above copyright
+notice, this list of conditions and the following disclaimer.
+   * Redistributions in binary form must reproduce the above
+copyright notice, this list of conditions and the following disclaimer
+in the documentation and/or other materials provided with the
+distribution.
+   * Neither the name of Google Inc. nor the names of its
+contributors may be used to endorse or promote products derived from
+this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

http://git-wip-us.apache.org/repos/asf/nifi-minifi-cpp/blob/48867732/thirdparty/rocksdb/README.md
----------------------------------------------------------------------
diff --git a/thirdparty/rocksdb/README.md b/thirdparty/rocksdb/README.md
new file mode 100644
index 0000000..550c352
--- /dev/null
+++ b/thirdparty/rocksdb/README.md
@@ -0,0 +1,27 @@
+## RocksDB: A Persistent Key-Value Store for Flash and RAM Storage
+
+[![Build 
Status](https://travis-ci.org/facebook/rocksdb.svg?branch=master)](https://travis-ci.org/facebook/rocksdb)
+[![Build 
status](https://ci.appveyor.com/api/projects/status/fbgfu0so3afcno78/branch/master?svg=true)](https://ci.appveyor.com/project/Facebook/rocksdb/branch/master)
+
+
+RocksDB is developed and maintained by Facebook Database Engineering Team.
+It is built on earlier work on LevelDB by Sanjay Ghemawat ([email protected])
+and Jeff Dean ([email protected])
+
+This code is a library that forms the core building block for a fast
+key value server, especially suited for storing data on flash drives.
+It has a Log-Structured-Merge-Database (LSM) design with flexible tradeoffs
+between Write-Amplification-Factor (WAF), Read-Amplification-Factor (RAF)
+and Space-Amplification-Factor (SAF). It has multi-threaded compactions,
+making it specially suitable for storing multiple terabytes of data in a
+single database.
+
+Start with example usage here: 
https://github.com/facebook/rocksdb/tree/master/examples
+
+See the [github wiki](https://github.com/facebook/rocksdb/wiki) for more 
explanation.
+
+The public interface is in `include/`.  Callers should not include or
+rely on the details of any other header files in this package.  Those
+internal APIs may be changed without warning.
+
+Design discussions are conducted in 
https://www.facebook.com/groups/rocksdb.dev/

http://git-wip-us.apache.org/repos/asf/nifi-minifi-cpp/blob/48867732/thirdparty/rocksdb/ROCKSDB_LITE.md
----------------------------------------------------------------------
diff --git a/thirdparty/rocksdb/ROCKSDB_LITE.md 
b/thirdparty/rocksdb/ROCKSDB_LITE.md
new file mode 100644
index 0000000..41cfbec
--- /dev/null
+++ b/thirdparty/rocksdb/ROCKSDB_LITE.md
@@ -0,0 +1,21 @@
+# RocksDBLite
+
+RocksDBLite is a project focused on mobile use cases, which don't need a lot 
of fancy things we've built for server workloads and they are very sensitive to 
binary size. For that reason, we added a compile flag ROCKSDB_LITE that 
comments out a lot of the nonessential code and keeps the binary lean.
+
+Some examples of the features disabled by ROCKSDB_LITE:
+* compiled-in support for LDB tool
+* No backupable DB
+* No support for replication (which we provide in form of TrasactionalIterator)
+* No advanced monitoring tools
+* No special-purpose memtables that are highly optimized for specific use cases
+* No Transactions
+
+When adding a new big feature to RocksDB, please add ROCKSDB_LITE compile 
guard if:
+* Nobody from mobile really needs your feature,
+* Your feature is adding a lot of weight to the binary.
+
+Don't add ROCKSDB_LITE compile guard if:
+* It would introduce a lot of code complexity. Compile guards make code harder 
to read. It's a trade-off.
+* Your feature is not adding a lot of weight.
+
+If unsure, ask. :)

Reply via email to