content: // Copyright (c) 2011-present, Facebook, Inc.  All rights reserved.
  //  This source code is licensed under both the GPLv2 (found in the
  //  COPYING file in the root directory) and Apache 2.0 License
  //  (found in the LICENSE.Apache file in the root directory).
  
  package org.rocksdb;
  
  /**
   * Compaction Priorities
   */
  public enum CompactionPriority {
  
    /**
     * Slightly Prioritize larger files by size compensated by #deletes
     */
    ByCompensatedSize((byte)0x0),
  
    /**
     * First compact files whose data's latest update time is oldest.
     * Try this if you only update some hot keys in small ranges.
     */
    OldestLargestSeqFirst((byte)0x1),
  
    /**
     * First compact files whose range hasn't been compacted to the next level
     * for the longest. If your updates are random across the key space,
     * write amplification is slightly better with this option.
     */
    OldestSmallestSeqFirst((byte)0x2),
  
    /**
     * First compact files whose ratio between overlapping size in next level
     * and its size is the smallest. It in many cases can optimize write
     * amplification.
     */
    MinOverlappingRatio((byte)0x3);
  
  
    private final byte value;
  
    CompactionPriority(final byte value) {
      this.value = value;
    }
  
    /**
     * Returns the byte value of the enumerations value
     *
     * @return byte representation
     */
    public byte getValue() {
      return value;
    }
  
    /**
     * Get CompactionPriority by byte value.
     *
     * @param value byte representation of CompactionPriority.
     *
     * @return {@link org.rocksdb.CompactionPriority} instance or null.
     * @throws java.lang.IllegalArgumentException if an invalid
     *     value is provided.
     */
    public static CompactionPriority getCompactionPriority(final byte value) {
      for (final CompactionPriority compactionPriority :
          CompactionPriority.values()) {
        if (compactionPriority.getValue() == value){
          return compactionPriority;
        }
      }
      throw new IllegalArgumentException(
          "Illegal value provided for CompactionPriority.");
    }
  }
  