1 // Copyright (c) 2011-present, Facebook, Inc. All rights reserved.
2 // This source code is licensed under both the GPLv2 (found in the
3 // COPYING file in the root directory) and Apache 2.0 License
4 // (found in the LICENSE.Apache file in the root directory).
9 * The class that controls the get behavior.
11 * Note that dispose() must be called before an Options instance
12 * become out-of-scope to release the allocated memory in c++.
14 public class ReadOptions
extends RocksObject
{
15 public ReadOptions() {
16 super(newReadOptions());
20 * @param verifyChecksums verification will be performed on every read
22 * @param fillCache if true, then fill-cache behavior will be performed.
24 public ReadOptions(final boolean verifyChecksums
, final boolean fillCache
) {
25 super(newReadOptions(verifyChecksums
, fillCache
));
31 * NOTE: This does a shallow copy, which means snapshot, iterate_upper_bound
32 * and other pointers will be cloned!
34 * @param other The ReadOptions to copy.
36 public ReadOptions(ReadOptions other
) {
37 super(copyReadOptions(other
.nativeHandle_
));
38 this.iterateLowerBoundSlice_
= other
.iterateLowerBoundSlice_
;
39 this.iterateUpperBoundSlice_
= other
.iterateUpperBoundSlice_
;
40 this.timestampSlice_
= other
.timestampSlice_
;
41 this.iterStartTs_
= other
.iterStartTs_
;
45 * If true, all data read from underlying storage will be
46 * verified against corresponding checksums.
49 * @return true if checksum verification is on.
51 public boolean verifyChecksums() {
52 assert(isOwningHandle());
53 return verifyChecksums(nativeHandle_
);
57 * If true, all data read from underlying storage will be
58 * verified against corresponding checksums.
61 * @param verifyChecksums if true, then checksum verification
62 * will be performed on every read.
63 * @return the reference to the current ReadOptions.
65 public ReadOptions
setVerifyChecksums(
66 final boolean verifyChecksums
) {
67 assert(isOwningHandle());
68 setVerifyChecksums(nativeHandle_
, verifyChecksums
);
72 // TODO(yhchiang): this option seems to be block-based table only.
73 // move this to a better place?
75 * Fill the cache when loading the block-based sst formated db.
76 * Callers may wish to set this field to false for bulk scans.
79 * @return true if the fill-cache behavior is on.
81 public boolean fillCache() {
82 assert(isOwningHandle());
83 return fillCache(nativeHandle_
);
87 * Fill the cache when loading the block-based sst formatted db.
88 * Callers may wish to set this field to false for bulk scans.
91 * @param fillCache if true, then fill-cache behavior will be
93 * @return the reference to the current ReadOptions.
95 public ReadOptions
setFillCache(final boolean fillCache
) {
96 assert(isOwningHandle());
97 setFillCache(nativeHandle_
, fillCache
);
102 * Returns the currently assigned Snapshot instance.
104 * @return the Snapshot assigned to this instance. If no Snapshot
107 public Snapshot
snapshot() {
108 assert(isOwningHandle());
109 long snapshotHandle
= snapshot(nativeHandle_
);
110 if (snapshotHandle
!= 0) {
111 return new Snapshot(snapshotHandle
);
117 * <p>If "snapshot" is non-nullptr, read as of the supplied snapshot
118 * (which must belong to the DB that is being read and which must
119 * not have been released). If "snapshot" is nullptr, use an implicit
120 * snapshot of the state at the beginning of this read operation.</p>
121 * <p>Default: null</p>
123 * @param snapshot {@link Snapshot} instance
124 * @return the reference to the current ReadOptions.
126 public ReadOptions
setSnapshot(final Snapshot snapshot
) {
127 assert(isOwningHandle());
128 if (snapshot
!= null) {
129 setSnapshot(nativeHandle_
, snapshot
.nativeHandle_
);
131 setSnapshot(nativeHandle_
, 0l);
137 * Returns the current read tier.
139 * @return the read tier in use, by default {@link ReadTier#READ_ALL_TIER}
141 public ReadTier
readTier() {
142 assert(isOwningHandle());
143 return ReadTier
.getReadTier(readTier(nativeHandle_
));
147 * Specify if this read request should process data that ALREADY
148 * resides on a particular cache. If the required data is not
149 * found at the specified cache, then {@link RocksDBException} is thrown.
151 * @param readTier {@link ReadTier} instance
152 * @return the reference to the current ReadOptions.
154 public ReadOptions
setReadTier(final ReadTier readTier
) {
155 assert(isOwningHandle());
156 setReadTier(nativeHandle_
, readTier
.getValue());
161 * Specify to create a tailing iterator -- a special iterator that has a
162 * view of the complete database (i.e. it can also be used to read newly
163 * added data) and is optimized for sequential reads. It will return records
164 * that were inserted into the database after the creation of the iterator.
167 * Not supported in {@code ROCKSDB_LITE} mode!
169 * @return true if tailing iterator is enabled.
171 public boolean tailing() {
172 assert(isOwningHandle());
173 return tailing(nativeHandle_
);
177 * Specify to create a tailing iterator -- a special iterator that has a
178 * view of the complete database (i.e. it can also be used to read newly
179 * added data) and is optimized for sequential reads. It will return records
180 * that were inserted into the database after the creation of the iterator.
182 * Not supported in ROCKSDB_LITE mode!
184 * @param tailing if true, then tailing iterator will be enabled.
185 * @return the reference to the current ReadOptions.
187 public ReadOptions
setTailing(final boolean tailing
) {
188 assert(isOwningHandle());
189 setTailing(nativeHandle_
, tailing
);
194 * Returns whether managed iterators will be used.
196 * @return the setting of whether managed iterators will be used,
199 * @deprecated This options is not used anymore.
202 public boolean managed() {
203 assert(isOwningHandle());
204 return managed(nativeHandle_
);
208 * Specify to create a managed iterator -- a special iterator that
209 * uses less resources by having the ability to free its underlying
210 * resources on request.
212 * @param managed if true, then managed iterators will be enabled.
213 * @return the reference to the current ReadOptions.
215 * @deprecated This options is not used anymore.
218 public ReadOptions
setManaged(final boolean managed
) {
219 assert(isOwningHandle());
220 setManaged(nativeHandle_
, managed
);
225 * Returns whether a total seek order will be used
227 * @return the setting of whether a total seek order will be used
229 public boolean totalOrderSeek() {
230 assert(isOwningHandle());
231 return totalOrderSeek(nativeHandle_
);
235 * Enable a total order seek regardless of index format (e.g. hash index)
236 * used in the table. Some table format (e.g. plain table) may not support
239 * @param totalOrderSeek if true, then total order seek will be enabled.
240 * @return the reference to the current ReadOptions.
242 public ReadOptions
setTotalOrderSeek(final boolean totalOrderSeek
) {
243 assert(isOwningHandle());
244 setTotalOrderSeek(nativeHandle_
, totalOrderSeek
);
249 * Returns whether the iterator only iterates over the same prefix as the seek
251 * @return the setting of whether the iterator only iterates over the same
252 * prefix as the seek, default is false
254 public boolean prefixSameAsStart() {
255 assert(isOwningHandle());
256 return prefixSameAsStart(nativeHandle_
);
260 * Enforce that the iterator only iterates over the same prefix as the seek.
261 * This option is effective only for prefix seeks, i.e. prefix_extractor is
262 * non-null for the column family and {@link #totalOrderSeek()} is false.
263 * Unlike iterate_upper_bound, {@link #setPrefixSameAsStart(boolean)} only
264 * works within a prefix but in both directions.
266 * @param prefixSameAsStart if true, then the iterator only iterates over the
267 * same prefix as the seek
268 * @return the reference to the current ReadOptions.
270 public ReadOptions
setPrefixSameAsStart(final boolean prefixSameAsStart
) {
271 assert(isOwningHandle());
272 setPrefixSameAsStart(nativeHandle_
, prefixSameAsStart
);
277 * Returns whether the blocks loaded by the iterator will be pinned in memory
279 * @return the setting of whether the blocks loaded by the iterator will be
282 public boolean pinData() {
283 assert(isOwningHandle());
284 return pinData(nativeHandle_
);
288 * Keep the blocks loaded by the iterator pinned in memory as long as the
289 * iterator is not deleted, If used when reading from tables created with
290 * BlockBasedTableOptions::use_delta_encoding = false,
291 * Iterator's property "rocksdb.iterator.is-key-pinned" is guaranteed to
294 * @param pinData if true, the blocks loaded by the iterator will be pinned
295 * @return the reference to the current ReadOptions.
297 public ReadOptions
setPinData(final boolean pinData
) {
298 assert(isOwningHandle());
299 setPinData(nativeHandle_
, pinData
);
304 * If true, when PurgeObsoleteFile is called in CleanupIteratorState, we
305 * schedule a background job in the flush job queue and delete obsolete files
310 * @return true when PurgeObsoleteFile is called in CleanupIteratorState
312 public boolean backgroundPurgeOnIteratorCleanup() {
313 assert(isOwningHandle());
314 return backgroundPurgeOnIteratorCleanup(nativeHandle_
);
318 * If true, when PurgeObsoleteFile is called in CleanupIteratorState, we
319 * schedule a background job in the flush job queue and delete obsolete files
324 * @param backgroundPurgeOnIteratorCleanup true when PurgeObsoleteFile is
325 * called in CleanupIteratorState
326 * @return the reference to the current ReadOptions.
328 public ReadOptions
setBackgroundPurgeOnIteratorCleanup(
329 final boolean backgroundPurgeOnIteratorCleanup
) {
330 assert(isOwningHandle());
331 setBackgroundPurgeOnIteratorCleanup(nativeHandle_
,
332 backgroundPurgeOnIteratorCleanup
);
337 * If non-zero, NewIterator will create a new table reader which
338 * performs reads of the given size. Using a large size (> 2MB) can
339 * improve the performance of forward iteration on spinning disks.
343 * @return The readahead size is bytes
345 public long readaheadSize() {
346 assert(isOwningHandle());
347 return readaheadSize(nativeHandle_
);
351 * If non-zero, NewIterator will create a new table reader which
352 * performs reads of the given size. Using a large size (> 2MB) can
353 * improve the performance of forward iteration on spinning disks.
357 * @param readaheadSize The readahead size is bytes
358 * @return the reference to the current ReadOptions.
360 public ReadOptions
setReadaheadSize(final long readaheadSize
) {
361 assert(isOwningHandle());
362 setReadaheadSize(nativeHandle_
, readaheadSize
);
367 * A threshold for the number of keys that can be skipped before failing an
368 * iterator seek as incomplete.
370 * @return the number of keys that can be skipped
371 * before failing an iterator seek as incomplete.
373 public long maxSkippableInternalKeys() {
374 assert(isOwningHandle());
375 return maxSkippableInternalKeys(nativeHandle_
);
379 * A threshold for the number of keys that can be skipped before failing an
380 * iterator seek as incomplete. The default value of 0 should be used to
381 * never fail a request as incomplete, even on skipping too many keys.
385 * @param maxSkippableInternalKeys the number of keys that can be skipped
386 * before failing an iterator seek as incomplete.
388 * @return the reference to the current ReadOptions.
390 public ReadOptions
setMaxSkippableInternalKeys(
391 final long maxSkippableInternalKeys
) {
392 assert(isOwningHandle());
393 setMaxSkippableInternalKeys(nativeHandle_
, maxSkippableInternalKeys
);
398 * If true, keys deleted using the DeleteRange() API will be visible to
399 * readers until they are naturally deleted during compaction. This improves
400 * read performance in DBs with many range deletions.
404 * @return true if keys deleted using the DeleteRange() API will be visible
406 public boolean ignoreRangeDeletions() {
407 assert(isOwningHandle());
408 return ignoreRangeDeletions(nativeHandle_
);
412 * If true, keys deleted using the DeleteRange() API will be visible to
413 * readers until they are naturally deleted during compaction. This improves
414 * read performance in DBs with many range deletions.
418 * @param ignoreRangeDeletions true if keys deleted using the DeleteRange()
419 * API should be visible
420 * @return the reference to the current ReadOptions.
422 public ReadOptions
setIgnoreRangeDeletions(final boolean ignoreRangeDeletions
) {
423 assert(isOwningHandle());
424 setIgnoreRangeDeletions(nativeHandle_
, ignoreRangeDeletions
);
429 * Defines the smallest key at which the backward
430 * iterator can return an entry. Once the bound is passed,
431 * {@link RocksIterator#isValid()} will be false.
433 * The lower bound is inclusive i.e. the bound value is a valid
436 * If prefix_extractor is not null, the Seek target and `iterate_lower_bound`
437 * need to have the same prefix. This is because ordering is not guaranteed
438 * outside of prefix domain.
442 * @param iterateLowerBound Slice representing the lower bound
443 * @return the reference to the current ReadOptions.
445 public ReadOptions
setIterateLowerBound(final AbstractSlice
<?
> iterateLowerBound
) {
446 assert(isOwningHandle());
447 setIterateLowerBound(
448 nativeHandle_
, iterateLowerBound
== null ?
0 : iterateLowerBound
.getNativeHandle());
449 // Hold onto a reference so it doesn't get garbage collected out from under us.
450 iterateLowerBoundSlice_
= iterateLowerBound
;
455 * Returns the smallest key at which the backward
456 * iterator can return an entry.
458 * The lower bound is inclusive i.e. the bound value is a valid entry.
460 * @return the smallest key, or null if there is no lower bound defined.
462 public Slice
iterateLowerBound() {
463 assert(isOwningHandle());
464 final long lowerBoundSliceHandle
= iterateLowerBound(nativeHandle_
);
465 if (lowerBoundSliceHandle
!= 0) {
466 // Disown the new slice - it's owned by the C++ side of the JNI boundary
467 // from the perspective of this method.
468 return new Slice(lowerBoundSliceHandle
, false);
474 * Defines the extent up to which the forward iterator
475 * can returns entries. Once the bound is reached,
476 * {@link RocksIterator#isValid()} will be false.
478 * The upper bound is exclusive i.e. the bound value is not a valid entry.
480 * If prefix_extractor is not null, the Seek target and iterate_upper_bound
481 * need to have the same prefix. This is because ordering is not guaranteed
482 * outside of prefix domain.
486 * @param iterateUpperBound Slice representing the upper bound
487 * @return the reference to the current ReadOptions.
489 public ReadOptions
setIterateUpperBound(final AbstractSlice
<?
> iterateUpperBound
) {
490 assert(isOwningHandle());
491 setIterateUpperBound(
492 nativeHandle_
, iterateUpperBound
== null ?
0 : iterateUpperBound
.getNativeHandle());
493 // Hold onto a reference so it doesn't get garbage collected out from under us.
494 iterateUpperBoundSlice_
= iterateUpperBound
;
499 * Returns the largest key at which the forward
500 * iterator can return an entry.
502 * The upper bound is exclusive i.e. the bound value is not a valid entry.
504 * @return the largest key, or null if there is no upper bound defined.
506 public Slice
iterateUpperBound() {
507 assert(isOwningHandle());
508 final long upperBoundSliceHandle
= iterateUpperBound(nativeHandle_
);
509 if (upperBoundSliceHandle
!= 0) {
510 // Disown the new slice - it's owned by the C++ side of the JNI boundary
511 // from the perspective of this method.
512 return new Slice(upperBoundSliceHandle
, false);
518 * A callback to determine whether relevant keys for this scan exist in a
519 * given table based on the table's properties. The callback is passed the
520 * properties of each table during iteration. If the callback returns false,
521 * the table will not be scanned. This option only affects Iterators and has
522 * no impact on point lookups.
524 * Default: null (every table will be scanned)
526 * @param tableFilter the table filter for the callback.
528 * @return the reference to the current ReadOptions.
530 public ReadOptions
setTableFilter(final AbstractTableFilter tableFilter
) {
531 assert(isOwningHandle());
532 setTableFilter(nativeHandle_
, tableFilter
.nativeHandle_
);
537 * When true, by default use total_order_seek = true, and RocksDB can
538 * selectively enable prefix seek mode if won't generate a different result
539 * from total_order_seek, based on seek key, and iterator upper bound.
540 * Not supported in ROCKSDB_LITE mode, in the way that even with value true
541 * prefix mode is not used.
544 * @return true if auto prefix mode is set.
547 public boolean autoPrefixMode() {
548 assert (isOwningHandle());
549 return autoPrefixMode(nativeHandle_
);
553 * When true, by default use total_order_seek = true, and RocksDB can
554 * selectively enable prefix seek mode if won't generate a different result
555 * from total_order_seek, based on seek key, and iterator upper bound.
556 * Not supported in ROCKSDB_LITE mode, in the way that even with value true
557 * prefix mode is not used.
559 * @param mode auto prefix mode
560 * @return the reference to the current ReadOptions.
562 public ReadOptions
setAutoPrefixMode(final boolean mode
) {
563 assert (isOwningHandle());
564 setAutoPrefixMode(nativeHandle_
, mode
);
569 * Timestamp of operation. Read should return the latest data visible to the
570 * specified timestamp. All timestamps of the same database must be of the
571 * same length and format. The user is responsible for providing a customized
572 * compare function via Comparator to order >key, timestamp> tuples.
573 * For iterator, iter_start_ts is the lower bound (older) and timestamp
574 * serves as the upper bound. Versions of the same record that fall in
575 * the timestamp range will be returned. If iter_start_ts is nullptr,
576 * only the most recent version visible to timestamp is returned.
577 * The user-specified timestamp feature is still under active development,
578 * and the API is subject to change.
581 * @see #iterStartTs()
582 * @return Reference to timestamp or null if there is no timestamp defined.
584 public Slice
timestamp() {
585 assert (isOwningHandle());
586 final long timestampSliceHandle
= timestamp(nativeHandle_
);
587 if (timestampSliceHandle
!= 0) {
588 return new Slice(timestampSliceHandle
);
595 * Timestamp of operation. Read should return the latest data visible to the
596 * specified timestamp. All timestamps of the same database must be of the
597 * same length and format. The user is responsible for providing a customized
598 * compare function via Comparator to order {@code <key, timestamp>} tuples.
599 * For iterator, {@code iter_start_ts} is the lower bound (older) and timestamp
600 * serves as the upper bound. Versions of the same record that fall in
601 * the timestamp range will be returned. If iter_start_ts is nullptr,
602 * only the most recent version visible to timestamp is returned.
603 * The user-specified timestamp feature is still under active development,
604 * and the API is subject to change.
607 * @see #setIterStartTs(AbstractSlice)
608 * @param timestamp Slice representing the timestamp
609 * @return the reference to the current ReadOptions.
611 public ReadOptions
setTimestamp(final AbstractSlice
<?
> timestamp
) {
612 assert (isOwningHandle());
613 setTimestamp(nativeHandle_
, timestamp
== null ?
0 : timestamp
.getNativeHandle());
614 timestampSlice_
= timestamp
;
619 * Timestamp of operation. Read should return the latest data visible to the
620 * specified timestamp. All timestamps of the same database must be of the
621 * same length and format. The user is responsible for providing a customized
622 * compare function via Comparator to order {@code <key, timestamp>} tuples.
623 * For iterator, {@code iter_start_ts} is the lower bound (older) and timestamp
624 * serves as the upper bound. Versions of the same record that fall in
625 * the timestamp range will be returned. If iter_start_ts is nullptr,
626 * only the most recent version visible to timestamp is returned.
627 * The user-specified timestamp feature is still under active development,
628 * and the API is subject to change.
631 * @return Reference to lower bound timestamp or null if there is no lower bound timestamp
634 public Slice
iterStartTs() {
635 assert (isOwningHandle());
636 final long iterStartTsHandle
= iterStartTs(nativeHandle_
);
637 if (iterStartTsHandle
!= 0) {
638 return new Slice(iterStartTsHandle
);
645 * Timestamp of operation. Read should return the latest data visible to the
646 * specified timestamp. All timestamps of the same database must be of the
647 * same length and format. The user is responsible for providing a customized
648 * compare function via Comparator to order {@code <key, timestamp>} tuples.
649 * For iterator, {@code iter_start_ts} is the lower bound (older) and timestamp
650 * serves as the upper bound. Versions of the same record that fall in
651 * the timestamp range will be returned. If iter_start_ts is nullptr,
652 * only the most recent version visible to timestamp is returned.
653 * The user-specified timestamp feature is still under active development,
654 * and the API is subject to change.
658 * @param iterStartTs Reference to lower bound timestamp or null if there is no lower bound
660 * @return the reference to the current ReadOptions.
662 public ReadOptions
setIterStartTs(final AbstractSlice
<?
> iterStartTs
) {
663 assert (isOwningHandle());
664 setIterStartTs(nativeHandle_
, iterStartTs
== null ?
0 : iterStartTs
.getNativeHandle());
665 iterStartTs_
= iterStartTs
;
670 * Deadline for completing an API call (Get/MultiGet/Seek/Next for now)
672 * It should be set to microseconds since epoch, i.e, {@code gettimeofday} or
673 * equivalent plus allowed duration in microseconds. The best way is to use
674 * {@code env->NowMicros() + some timeout}.
675 * This is best efforts. The call may exceed the deadline if there is IO
676 * involved and the file system doesn't support deadlines, or due to
677 * checking for deadline periodically rather than for every key if
680 * @return deadline time in microseconds
682 public long deadline() {
683 assert (isOwningHandle());
684 return deadline(nativeHandle_
);
688 * Deadline for completing an API call (Get/MultiGet/Seek/Next for now)
690 * It should be set to microseconds since epoch, i.e, {@code gettimeofday} or
691 * equivalent plus allowed duration in microseconds. The best way is to use
692 * {@code env->NowMicros() + some timeout}.
693 * This is best efforts. The call may exceed the deadline if there is IO
694 * involved and the file system doesn't support deadlines, or due to
695 * checking for deadline periodically rather than for every key if
698 * @param deadlineTime deadline time in microseconds.
699 * @return the reference to the current ReadOptions.
701 public ReadOptions
setDeadline(final long deadlineTime
) {
702 assert (isOwningHandle());
703 setDeadline(nativeHandle_
, deadlineTime
);
708 * A timeout in microseconds to be passed to the underlying FileSystem for
709 * reads. As opposed to deadline, this determines the timeout for each
710 * individual file read request. If a MultiGet/Get/Seek/Next etc call
711 * results in multiple reads, each read can last up to io_timeout us.
712 * @return ioTimeout time in microseconds
714 public long ioTimeout() {
715 assert (isOwningHandle());
716 return ioTimeout(nativeHandle_
);
720 * A timeout in microseconds to be passed to the underlying FileSystem for
721 * reads. As opposed to deadline, this determines the timeout for each
722 * individual file read request. If a MultiGet/Get/Seek/Next etc call
723 * results in multiple reads, each read can last up to io_timeout us.
725 * @param ioTimeout time in microseconds.
726 * @return the reference to the current ReadOptions.
728 public ReadOptions
setIoTimeout(final long ioTimeout
) {
729 assert (isOwningHandle());
730 setIoTimeout(nativeHandle_
, ioTimeout
);
735 * It limits the maximum cumulative value size of the keys in batch while
736 * reading through MultiGet. Once the cumulative value size exceeds this
737 * soft limit then all the remaining keys are returned with status Aborted.
739 * Default: {@code std::numeric_limits<uint64_t>::max()}
740 * @return actual valueSizeSofLimit
742 public long valueSizeSoftLimit() {
743 assert (isOwningHandle());
744 return valueSizeSoftLimit(nativeHandle_
);
748 * It limits the maximum cumulative value size of the keys in batch while
749 * reading through MultiGet. Once the cumulative value size exceeds this
750 * soft limit then all the remaining keys are returned with status Aborted.
752 * Default: {@code std::numeric_limits<uint64_t>::max()}
754 * @param valueSizeSoftLimit the maximum cumulative value size of the keys
755 * @return the reference to the current ReadOptions
757 public ReadOptions
setValueSizeSoftLimit(final long valueSizeSoftLimit
) {
758 assert (isOwningHandle());
759 setValueSizeSoftLimit(nativeHandle_
, valueSizeSoftLimit
);
763 // instance variables
764 // NOTE: If you add new member variables, please update the copy constructor above!
766 // Hold a reference to any iterate lower or upper bound that was set on this
767 // object until we're destroyed or it's overwritten. That way the caller can
768 // freely leave scope without us losing the Java Slice object, which during
769 // close() would also reap its associated rocksdb::Slice native object since
770 // it's possibly (likely) to be an owning handle.
771 private AbstractSlice
<?
> iterateLowerBoundSlice_
;
772 private AbstractSlice
<?
> iterateUpperBoundSlice_
;
773 private AbstractSlice
<?
> timestampSlice_
;
774 private AbstractSlice
<?
> iterStartTs_
;
776 private native static long newReadOptions();
777 private native static long newReadOptions(final boolean verifyChecksums
,
778 final boolean fillCache
);
779 private native static long copyReadOptions(long handle
);
780 @Override protected final native void disposeInternal(final long handle
);
782 private native boolean verifyChecksums(long handle
);
783 private native void setVerifyChecksums(long handle
, boolean verifyChecksums
);
784 private native boolean fillCache(long handle
);
785 private native void setFillCache(long handle
, boolean fillCache
);
786 private native long snapshot(long handle
);
787 private native void setSnapshot(long handle
, long snapshotHandle
);
788 private native byte readTier(long handle
);
789 private native void setReadTier(long handle
, byte readTierValue
);
790 private native boolean tailing(long handle
);
791 private native void setTailing(long handle
, boolean tailing
);
792 private native boolean managed(long handle
);
793 private native void setManaged(long handle
, boolean managed
);
794 private native boolean totalOrderSeek(long handle
);
795 private native void setTotalOrderSeek(long handle
, boolean totalOrderSeek
);
796 private native boolean prefixSameAsStart(long handle
);
797 private native void setPrefixSameAsStart(long handle
, boolean prefixSameAsStart
);
798 private native boolean pinData(long handle
);
799 private native void setPinData(long handle
, boolean pinData
);
800 private native boolean backgroundPurgeOnIteratorCleanup(final long handle
);
801 private native void setBackgroundPurgeOnIteratorCleanup(final long handle
,
802 final boolean backgroundPurgeOnIteratorCleanup
);
803 private native long readaheadSize(final long handle
);
804 private native void setReadaheadSize(final long handle
,
805 final long readaheadSize
);
806 private native long maxSkippableInternalKeys(final long handle
);
807 private native void setMaxSkippableInternalKeys(final long handle
,
808 final long maxSkippableInternalKeys
);
809 private native boolean ignoreRangeDeletions(final long handle
);
810 private native void setIgnoreRangeDeletions(final long handle
,
811 final boolean ignoreRangeDeletions
);
812 private native void setIterateUpperBound(final long handle
,
813 final long upperBoundSliceHandle
);
814 private native long iterateUpperBound(final long handle
);
815 private native void setIterateLowerBound(final long handle
,
816 final long lowerBoundSliceHandle
);
817 private native long iterateLowerBound(final long handle
);
818 private native void setTableFilter(final long handle
, final long tableFilterHandle
);
819 private native boolean autoPrefixMode(final long handle
);
820 private native void setAutoPrefixMode(final long handle
, final boolean autoPrefixMode
);
821 private native long timestamp(final long handle
);
822 private native void setTimestamp(final long handle
, final long timestampSliceHandle
);
823 private native long iterStartTs(final long handle
);
824 private native void setIterStartTs(final long handle
, final long iterStartTsHandle
);
825 private native long deadline(final long handle
);
826 private native void setDeadline(final long handle
, final long deadlineTime
);
827 private native long ioTimeout(final long handle
);
828 private native void setIoTimeout(final long handle
, final long ioTimeout
);
829 private native long valueSizeSoftLimit(final long handle
);
830 private native void setValueSizeSoftLimit(final long handle
, final long softLimit
);