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). 5 6 package org.rocksdb; 7 8 /** 9 * Provides Checkpoint functionality. Checkpoints 10 * provide persistent snapshots of RocksDB databases. 11 */ 12 public class Checkpoint extends RocksObject { 13 14 /** 15 * Creates a Checkpoint object to be used for creating open-able 16 * snapshots. 17 * 18 * @param db {@link RocksDB} instance. 19 * @return a Checkpoint instance. 20 * 21 * @throws java.lang.IllegalArgumentException if {@link RocksDB} 22 * instance is null. 23 * @throws java.lang.IllegalStateException if {@link RocksDB} 24 * instance is not initialized. 25 */ create(final RocksDB db)26 public static Checkpoint create(final RocksDB db) { 27 if (db == null) { 28 throw new IllegalArgumentException( 29 "RocksDB instance shall not be null."); 30 } else if (!db.isOwningHandle()) { 31 throw new IllegalStateException( 32 "RocksDB instance must be initialized."); 33 } 34 Checkpoint checkpoint = new Checkpoint(db); 35 return checkpoint; 36 } 37 38 /** 39 * <p>Builds an open-able snapshot of RocksDB on the same disk, which 40 * accepts an output directory on the same disk, and under the directory 41 * (1) hard-linked SST files pointing to existing live SST files 42 * (2) a copied manifest files and other files</p> 43 * 44 * @param checkpointPath path to the folder where the snapshot is going 45 * to be stored. 46 * @throws RocksDBException thrown if an error occurs within the native 47 * part of the library. 48 */ createCheckpoint(final String checkpointPath)49 public void createCheckpoint(final String checkpointPath) 50 throws RocksDBException { 51 createCheckpoint(nativeHandle_, checkpointPath); 52 } 53 Checkpoint(final RocksDB db)54 private Checkpoint(final RocksDB db) { 55 super(newCheckpoint(db.nativeHandle_)); 56 this.db_ = db; 57 } 58 59 private final RocksDB db_; 60 newCheckpoint(long dbHandle)61 private static native long newCheckpoint(long dbHandle); disposeInternal(final long handle)62 @Override protected final native void disposeInternal(final long handle); 63 createCheckpoint(long handle, String checkpointPath)64 private native void createCheckpoint(long handle, String checkpointPath) 65 throws RocksDBException; 66 } 67