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 import org.junit.ClassRule; 9 import org.junit.Rule; 10 import org.junit.Test; 11 import org.junit.rules.TemporaryFolder; 12 13 import java.util.ArrayList; 14 import java.util.Arrays; 15 import java.util.List; 16 import java.util.concurrent.TimeUnit; 17 18 import static org.assertj.core.api.Assertions.assertThat; 19 20 public class TtlDBTest { 21 22 @ClassRule 23 public static final RocksNativeLibraryResource ROCKS_NATIVE_LIBRARY_RESOURCE = 24 new RocksNativeLibraryResource(); 25 26 @Rule 27 public TemporaryFolder dbFolder = new TemporaryFolder(); 28 29 @Test ttlDBOpen()30 public void ttlDBOpen() throws RocksDBException, InterruptedException { 31 try (final Options options = new Options().setCreateIfMissing(true).setMaxCompactionBytes(0); 32 final TtlDB ttlDB = TtlDB.open(options, dbFolder.getRoot().getAbsolutePath())) { 33 ttlDB.put("key".getBytes(), "value".getBytes()); 34 assertThat(ttlDB.get("key".getBytes())). 35 isEqualTo("value".getBytes()); 36 assertThat(ttlDB.get("key".getBytes())).isNotNull(); 37 } 38 } 39 40 @Test ttlDBOpenWithTtl()41 public void ttlDBOpenWithTtl() throws RocksDBException, InterruptedException { 42 try (final Options options = new Options().setCreateIfMissing(true).setMaxCompactionBytes(0); 43 final TtlDB ttlDB = TtlDB.open(options, dbFolder.getRoot().getAbsolutePath(), 1, false);) { 44 ttlDB.put("key".getBytes(), "value".getBytes()); 45 assertThat(ttlDB.get("key".getBytes())). 46 isEqualTo("value".getBytes()); 47 TimeUnit.SECONDS.sleep(2); 48 ttlDB.compactRange(); 49 assertThat(ttlDB.get("key".getBytes())).isNull(); 50 } 51 } 52 53 @Test ttlDbOpenWithColumnFamilies()54 public void ttlDbOpenWithColumnFamilies() throws RocksDBException, 55 InterruptedException { 56 final List<ColumnFamilyDescriptor> cfNames = Arrays.asList( 57 new ColumnFamilyDescriptor(RocksDB.DEFAULT_COLUMN_FAMILY), 58 new ColumnFamilyDescriptor("new_cf".getBytes()) 59 ); 60 final List<Integer> ttlValues = Arrays.asList(0, 1); 61 62 final List<ColumnFamilyHandle> columnFamilyHandleList = new ArrayList<>(); 63 try (final DBOptions dbOptions = new DBOptions() 64 .setCreateMissingColumnFamilies(true) 65 .setCreateIfMissing(true); 66 final TtlDB ttlDB = TtlDB.open(dbOptions, 67 dbFolder.getRoot().getAbsolutePath(), cfNames, 68 columnFamilyHandleList, ttlValues, false)) { 69 try { 70 ttlDB.put("key".getBytes(), "value".getBytes()); 71 assertThat(ttlDB.get("key".getBytes())). 72 isEqualTo("value".getBytes()); 73 ttlDB.put(columnFamilyHandleList.get(1), "key".getBytes(), 74 "value".getBytes()); 75 assertThat(ttlDB.get(columnFamilyHandleList.get(1), 76 "key".getBytes())).isEqualTo("value".getBytes()); 77 TimeUnit.SECONDS.sleep(2); 78 79 ttlDB.compactRange(); 80 ttlDB.compactRange(columnFamilyHandleList.get(1)); 81 82 assertThat(ttlDB.get("key".getBytes())).isNotNull(); 83 assertThat(ttlDB.get(columnFamilyHandleList.get(1), 84 "key".getBytes())).isNull(); 85 } finally { 86 for (final ColumnFamilyHandle columnFamilyHandle : 87 columnFamilyHandleList) { 88 columnFamilyHandle.close(); 89 } 90 } 91 } 92 } 93 94 @Test createTtlColumnFamily()95 public void createTtlColumnFamily() throws RocksDBException, 96 InterruptedException { 97 try (final Options options = new Options().setCreateIfMissing(true); 98 final TtlDB ttlDB = TtlDB.open(options, 99 dbFolder.getRoot().getAbsolutePath()); 100 final ColumnFamilyHandle columnFamilyHandle = 101 ttlDB.createColumnFamilyWithTtl( 102 new ColumnFamilyDescriptor("new_cf".getBytes()), 1)) { 103 ttlDB.put(columnFamilyHandle, "key".getBytes(), 104 "value".getBytes()); 105 assertThat(ttlDB.get(columnFamilyHandle, "key".getBytes())). 106 isEqualTo("value".getBytes()); 107 TimeUnit.SECONDS.sleep(2); 108 ttlDB.compactRange(columnFamilyHandle); 109 assertThat(ttlDB.get(columnFamilyHandle, "key".getBytes())).isNull(); 110 } 111 } 112 } 113