public static RocksDB createWithColumnFamily(Map conf, String rocksDbDir, final Map<String, ColumnFamilyHandle> columnFamilyHandleMap, int ttlTimeSec) throws IOException { List<ColumnFamilyDescriptor> columnFamilyDescriptors = getExistingColumnFamilyDesc(conf, rocksDbDir); List<ColumnFamilyHandle> columnFamilyHandles = new ArrayList<>(); DBOptions dbOptions = getDBOptions(conf); try { RocksDB rocksDb = ttlTimeSec > 0 ? TtlDB.open( dbOptions, rocksDbDir, columnFamilyDescriptors, columnFamilyHandles, getTtlValues(ttlTimeSec, columnFamilyDescriptors), false) : RocksDB.open(dbOptions, rocksDbDir, columnFamilyDescriptors, columnFamilyHandles); int n = Math.min(columnFamilyDescriptors.size(), columnFamilyHandles.size()); // skip default column columnFamilyHandleMap.put(DEFAULT_COLUMN_FAMILY, rocksDb.getDefaultColumnFamily()); for (int i = 1; i < n; i++) { ColumnFamilyDescriptor descriptor = columnFamilyDescriptors.get(i); columnFamilyHandleMap.put(new String(descriptor.columnFamilyName()), columnFamilyHandles.get(i)); } LOG.info("Finished loading RocksDB with existing column family={}, dbPath={}, ttlSec={}", columnFamilyHandleMap.keySet(), rocksDbDir, ttlTimeSec); // enable compaction rocksDb.compactRange(); return rocksDb; } catch (RocksDBException e) { throw new IOException("Failed to initialize RocksDb.", e); } }
synchronized public RocksDbWrapper setColumnFamilies( Collection<ColumnFamilyDescriptor> columnFamilies) { this.columnFamilies.clear(); this.columnFamilyNames.clear(); for (Entry<String, ColumnFamilyHandle> entry : this.columnFamilyHandles.entrySet()) { RocksDbUtils.closeRocksObjects(entry.getValue()); } if (columnFamilies != null) { this.columnFamilies.addAll(columnFamilies); this.columnFamilies.iterator().forEachRemaining(x -> { this.columnFamilyNames.add(new String(x.columnFamilyName(), RocksDbUtils.UTF8)); }); } return this; }
public void initialize(List<ColumnFamilyDescriptor> cfDescriptors, List<ColumnFamilyHandle> cfHandles) throws RocksDBException { for (int i = 0; i < cfDescriptors.size(); i++) { String fullTableName = new String(cfDescriptors.get(i).columnFamilyName(), Charsets.UTF_8); int nameIndex = fullTableName.lastIndexOf("__"); String tableName; long index; if (nameIndex == -1) { tableName = fullTableName; index = 0; } else { tableName = fullTableName.substring(0, nameIndex); index = Long.parseLong(fullTableName.substring(nameIndex + 2)); } ColumnFamily cf = new ColumnFamily(index, cfHandles.get(i)); ColumnFamily oldCf = cfs.put(tableName, cf); if (oldCf != null && !tableName.equals("default")) { db.dropColumnFamily(oldCf.getHandle()); oldCf.getHandle().dispose(); } } }
protected void prepareColumnFamilyDescriptors() throws RocksDbException { if (columnFamilies == null || columnFamilies.size() == 0) { if (columnFamilies == null) { columnFamilies = new HashSet<>(); } try { String[] cfList = RocksDbUtils.getColumnFamilyList(directory.getAbsolutePath()); for (String cf : cfList) { columnFamilies.add(RocksDbUtils.buildColumnFamilyDescriptor(cf)); } } catch (Exception e) { throw e instanceof RocksDbException ? (RocksDbException) e : new RocksDbException(e); } } boolean hasDefaultCf = false; for (ColumnFamilyDescriptor cfd : columnFamilies) { if (Arrays.equals(cfd.columnFamilyName(), RocksDB.DEFAULT_COLUMN_FAMILY)) { hasDefaultCf = true; break; } } if (!hasDefaultCf) { columnFamilies.add(new ColumnFamilyDescriptor(RocksDB.DEFAULT_COLUMN_FAMILY)); } }
final ColumnFamilyDescriptor cfDescriptor = columnFamilyDescriptors.get(i); cfNames[i] = cfDescriptor.columnFamilyName(); cfOptionHandles[i] = cfDescriptor.columnFamilyOptions().nativeHandle_;
/** * Creates a new column family with the name columnFamilyName and * allocates a ColumnFamilyHandle within an internal structure. * The ColumnFamilyHandle is automatically disposed with DB disposal. * * @param columnFamilyDescriptor column family to be created. * @return {@link org.rocksdb.ColumnFamilyHandle} instance. * * @throws RocksDBException thrown if error happens in underlying * native library. */ public ColumnFamilyHandle createColumnFamily( final ColumnFamilyDescriptor columnFamilyDescriptor) throws RocksDBException { return new ColumnFamilyHandle(this, createColumnFamily(nativeHandle_, columnFamilyDescriptor.columnFamilyName(), columnFamilyDescriptor.columnFamilyOptions().nativeHandle_)); }
final ColumnFamilyDescriptor cfDescriptor = columnFamilyDescriptors .get(i); cfNames[i] = cfDescriptor.columnFamilyName(); cfOptionHandles[i] = cfDescriptor.columnFamilyOptions().nativeHandle_;
byte[] cfName = cfdList.get(i).columnFamilyName(); ColumnFamilyHandle cfh = cfhList.get(i); columnFamilyHandles.put(new String(cfName, RocksDbUtils.UTF8), cfh);
final ColumnFamilyDescriptor cfDescriptor = columnFamilyDescriptors .get(i); cfNames[i] = cfDescriptor.columnFamilyName(); cfOptionHandles[i] = cfDescriptor.columnFamilyOptions().nativeHandle_;
final ColumnFamilyDescriptor cfDescriptor = columnFamilyDescriptors .get(i); cfNames[i] = cfDescriptor.columnFamilyName(); cfOptionHandles[i] = cfDescriptor.columnFamilyOptions().nativeHandle_;
/** * <p>Creates a new ttl based column family with a name defined * in given ColumnFamilyDescriptor and allocates a * ColumnFamilyHandle within an internal structure.</p> * * <p>The ColumnFamilyHandle is automatically disposed with DB * disposal.</p> * * @param columnFamilyDescriptor column family to be created. * @param ttl TTL to set for this column family. * * @return {@link org.rocksdb.ColumnFamilyHandle} instance. * * @throws RocksDBException thrown if error happens in underlying * native library. */ public ColumnFamilyHandle createColumnFamilyWithTtl( final ColumnFamilyDescriptor columnFamilyDescriptor, final int ttl) throws RocksDBException { return new ColumnFamilyHandle(this, createColumnFamilyWithTtl(nativeHandle_, columnFamilyDescriptor.columnFamilyName(), columnFamilyDescriptor.columnFamilyOptions().nativeHandle_, ttl)); }
final ColumnFamilyDescriptor cfDescriptor = columnFamilyDescriptors .get(i); cfNames[i] = cfDescriptor.columnFamilyName(); cfOptionHandles[i] = cfDescriptor.columnFamilyOptions().nativeHandle_;
int index = 0; for (ColumnFamilyDescriptor descriptor : colDescriptors) { if (new String(descriptor.columnFamilyName()).equals("default")) { extraColumns.put("default", colFamiliesTarget.get(index));
int index = 0; for (ColumnFamilyDescriptor descriptor : colDescriptors) { if (new String(descriptor.columnFamilyName()).equals("default")) { extraColumns.put("default", colFamiliesTarget.get( index));