@Override public void cleanup() throws DBException { store.close(); }
private static String getFieldFromKey(Key key) { return key.getMinorPath().get(0); }
/** * Create a key object. We map "table" and (YCSB's) "key" to a major component * of the oracle.kv.Key, and "field" to a minor component. * * @return An oracle.kv.Key object. */ private static Key createKey(String table, String key, String field) { List<String> majorPath = new ArrayList<String>(); majorPath.add(table); majorPath.add(key); if (field == null) { return Key.createKey(majorPath); } return Key.createKey(majorPath, field); }
KVStoreConfig config = new KVStoreConfig(storeName, helperHosts); if (p != null) { if (p.equalsIgnoreCase("ABSOLUTE")) { config.setConsistency(Consistency.ABSOLUTE); } else if (p.equalsIgnoreCase("NONE_REQUIRED")) { config.setConsistency(Consistency.NONE_REQUIRED); } else { throw new DBException("Illegal value in consistency property"); if (p != null) { if (p.equalsIgnoreCase("COMMIT_NO_SYNC")) { config.setDurability(Durability.COMMIT_NO_SYNC); } else if (p.equalsIgnoreCase("COMMIT_SYNC")) { config.setDurability(Durability.COMMIT_SYNC); } else if (p.equalsIgnoreCase("COMMIT_WRITE_NO_SYNC")) { config.setDurability(Durability.COMMIT_WRITE_NO_SYNC); } else { throw new DBException("Illegal value in durability property"); requestLimitConfig = new RequestLimitConfig(maxActiveRequests, requestThresholdPercent, nodeLimitPercent); config.setRequestLimit(requestLimitConfig); config.setRequestTimeout(timeout, TimeUnit.SECONDS); } catch (IllegalArgumentException e) { throw new DBException(e);
protected void connectStore() { final LoginCredentials credentials = credentialsProvider.getCredentials(); final Properties securityProps = createSecurityProperties(config.getTrustFile()); final KVStoreConfig kvStoreConfig = new KVStoreConfig(config.getStoreName(), helperHosts); kvStoreConfig.setSecurityProperties(securityProps); logger.info("Connecting to the secured kv store [{}] at {} as [{}]", kvStoreConfig.getStoreName(), helperHosts, credentials.getUsername()); try { final KVStore store = KVStoreFactory.getStore(kvStoreConfig, credentials, KVStoreLogin.makeReauthenticateHandler(credentialsProvider)); IOUtils.closeQuietly(store); } catch (FaultException e) { throw new OpenMetricsReaderException("Failed to connect to store", e); } }
count++; KVStoreConfig kconfig = new KVStoreConfig(databaseName, hostsList); if (!securityProps.isEmpty()) kconfig.setSecurityProperties(securityProps); kvStore = KVStoreFactory.getStore(kconfig, new PasswordCredentials(userName, password.toCharArray()), null); kvStore = KVStoreFactory.getStore(kconfig); tableAPI = kvStore.getTableAPI();
KVStoreConfig kconfig = new KVStoreConfig(storeName, hosts); try kconfig.setSecurityProperties(((OracleNoSQLHostConfiguration)configuration).getSecurityProps()); .getStore(kconfig, new PasswordCredentials(userName, password.toCharArray()), null); throw new KunderaException("Could not authorize the client connection " + afe.getMessage()); return KVStoreFactory.getStore(kconfig);
Key majorKeyToFind = Key.createKey(majorComponents); iterator = kvStore.multiGetIterator(Direction.FORWARD, 0, majorKeyToFind, range, null); range = new KeyRange(value.toString(), false, null, true); Key majorKeyToFind = Key.createKey(majorComponents); iterator = kvStore.storeIterator(Direction.UNORDERED, 0, majorKeyToFind, range, null); range = new KeyRange(null, true, value.toString(), false); Key majorKeyToFind = Key.createKey(majorComponents); iterator = kvStore.storeIterator(Direction.UNORDERED, 0, majorKeyToFind, range, null); range = new KeyRange(value.toString(), true, null, true); Key majorKeyToFind = Key.createKey(majorComponents); iterator = kvStore.storeIterator(Direction.UNORDERED, 0, majorKeyToFind, range, null); range = new KeyRange(null, true, value.toString(), true); Key majorKeyToFind = Key.createKey(majorComponents); iterator = kvStore.storeIterator(Direction.UNORDERED, 0, majorKeyToFind, range, null); String minorKey = keyValueVersion.getKey().getMinorPath().get(0); byte[] idByteArr = keyValueVersion.getValue().getValue(); Object keyObj = accessor.fromBytes(entityMetadata.getIdAttribute().getBindableJavaType(), idByteArr);
@Override public Map<String, Object> search(String query, Class<?> parentClass, EntityMetadata parentMetadata, Class<?> childClass, EntityMetadata childMetadata, Object entityId, int start, int count) { String secIndexName = getIndexTableName(childMetadata); String parentIdColumnName = ((AbstractAttribute) parentMetadata.getIdAttribute()).getJPAColumnName(); String childIdColumnName = ((AbstractAttribute) childMetadata.getIdAttribute()).getJPAColumnName(); String id = PropertyAccessorHelper.getString(entityId); List<String> majorComponents = new ArrayList<String>(); majorComponents.add(secIndexName); majorComponents.add(parentIdColumnName); majorComponents.add(id); Key majorKeyToFind = Key.createKey(majorComponents); Iterator<KeyValueVersion> iterator = kvStore.multiGetIterator(Direction.FORWARD, 0, majorKeyToFind, null, null); Map<String, Object> results = new HashMap<String, Object>(); while (iterator.hasNext()) { KeyValueVersion keyValueVersion = iterator.next(); String minorKey = keyValueVersion.getKey().getMinorPath().get(0); PropertyAccessor accessor = PropertyAccessorFactory .getPropertyAccessor(childMetadata.getIdAttribute().getBindableJavaType()); byte[] idByteArr = keyValueVersion.getValue().getValue(); Object keyObj = accessor.fromBytes(childMetadata.getIdAttribute().getBindableJavaType(), idByteArr); results.put(childIdColumnName + "|" + minorKey, keyObj); } return results; }
majorComponents.add(columnName); Key key = Key.createKey(majorComponents); Iterator<KeyValueVersion> iterator = kvStore.storeIterator(Direction.UNORDERED, 0, key, null, null); Key keytoDelete = keyValueVersion.getKey(); byte[] value = keyValueVersion.getValue().getValue(); Object valueObject = PropertyAccessorHelper.getObject( ((AbstractAttribute) entityMetadata.getIdAttribute()).getBindableJavaType(), value); kvStore.multiDelete(keytoDelete, null, null);
@Override public void index(Class entityClazz, EntityMetadata m, Map<String, Object> values, Object entityId, final Class parentClazz) { String idColumnName = ((AbstractAttribute) m.getIdAttribute()).getJPAColumnName(); Object id = values.get(idColumnName); for (String column : values.keySet()) { Object valueObject = values.get(column); List<String> majorKeyComponents = new ArrayList<String>(); majorKeyComponents.add(getIndexTableName(m)); majorKeyComponents.add(column); majorKeyComponents.add(PropertyAccessorHelper.getString(valueObject)); String minorKey = PropertyAccessorHelper.getString(id); Key key = Key.createKey(majorKeyComponents, minorKey); byte[] valueByteArray = PropertyAccessorHelper.getBytes(id); kvStore.put(key, Value.createValue(valueByteArray)); } }
@Override public Status update(String table, String key, Map<String, ByteIterator> values) { for (Map.Entry<String, ByteIterator> entry : values.entrySet()) { Key kvKey = createKey(table, key, entry.getKey()); Value kvValue = Value.createValue(entry.getValue().toArray()); try { store.put(kvKey, kvValue); } catch (FaultException e) { System.err.println(e); return Status.ERROR; } } return Status.OK; }
@Override public Status read(String table, String key, Set<String> fields, Map<String, ByteIterator> result) { Key kvKey = createKey(table, key); SortedMap<Key, ValueVersion> kvResult; try { kvResult = store.multiGet(kvKey, null, null); } catch (FaultException e) { System.err.println(e); return Status.ERROR; } for (Map.Entry<Key, ValueVersion> entry : kvResult.entrySet()) { /* If fields is null, read all fields */ String field = getFieldFromKey(entry.getKey()); if (fields != null && !fields.contains(field)) { continue; } result.put(field, new ByteArrayByteIterator(entry.getValue().getValue().getValue())); } return Status.OK; }
KVStore store = KVStoreFactory.getStore(new KVStoreConfig("kvstore", "VMHostname:5000"));
/** * @param keyValueVersion * @param fileName * @return * @throws FileNotFoundException * @throws IOException */ public File getLOBFile(KeyValueVersion keyValueVersion, String fileName) throws FileNotFoundException, IOException { InputStreamVersion istreamVersion = kvStore.getLOB(keyValueVersion.getKey(), client.getConsistency(), client.getTimeout(), client.getTimeUnit()); InputStream is = istreamVersion.getInputStream(); File lobFile = new File(fileName); OutputStream os = new FileOutputStream(lobFile); int read = 0; byte[] bytes = new byte[OracleNOSQLConstants.OUTPUT_BUFFER_SIZE]; while ((read = is.read(bytes)) != -1) { os.write(bytes, 0, read); } return lobFile; }
@Override public Status delete(String table, String key) { Key kvKey = createKey(table, key); try { store.multiDelete(kvKey, null, null); } catch (FaultException e) { System.err.println(e); return Status.ERROR; } return Status.OK; }
public void execute(List<Operation> operations) { if (operations != null && !operations.isEmpty()) { try { kvStore.execute(operations); } catch (DurabilityException e) { log.error("Error while executing operations",e); throw new PersistenceException("Error while Persisting data using batch. Caused by: " + e + "."); } catch (OperationExecutionException e) { log.error("Error while executing operations",e); throw new PersistenceException("Error while Persisting data using batch. Caused by: " + e + "."); } catch (FaultException e) { log.error("Error while executing operations",e); throw new PersistenceException("Error while Persisting data using batch. Caused by: " + e + "."); } finally { operations.clear(); } } }
/** * Saves LOB file to Oracle KV Store * * @param key * @param lobFile */ public void saveLOBFile(Key key, File lobFile) { try { FileInputStream fis = new FileInputStream(lobFile); Version version = kvStore.putLOB(key, fis, client.getDurability(), client.getTimeout(), client.getTimeUnit()); } catch (FileNotFoundException e) { log.warn("Unable to find file " + lobFile + ". This is being omitted, Caused by:" + e + "."); } catch (IOException e) { log.warn("IOException while writing file " + lobFile + ". This is being omitted. Caused by:" + e + "."); } }
this.indexManager = indexManager; this.clientMetadata = factory.getClientMetadata(); this.tableAPI = kvStore.getTableAPI(); setBatchSize(persistenceUnit, puProperties);
@Override public void destroy() { indexManager.close(); if (schemaManager != null) { getSchemaManager(externalProperties).dropSchema(); } schemaManager = null; externalProperties = null; if (kvStore != null) { logger.info("Closing connection to kvStore."); kvStore.close(); logger.info("Closed connection to kvStore."); } else { logger.warn("Can't close connection to kvStore, it was already disconnected"); } }