Search in sources :

Example 1 with DBException

use of com.yahoo.ycsb.DBException in project YCSB by brianfrankcooper.

the class BackoffSelectStrategy method init.

@Override
public void init() throws DBException {
    Properties props = getProperties();
    host = props.getProperty("couchbase.host", "127.0.0.1");
    bucketName = props.getProperty("couchbase.bucket", "default");
    String bucketPassword = props.getProperty("couchbase.password", "");
    upsert = props.getProperty("couchbase.upsert", "false").equals("true");
    persistTo = parsePersistTo(props.getProperty("couchbase.persistTo", "0"));
    replicateTo = parseReplicateTo(props.getProperty("couchbase.replicateTo", "0"));
    syncMutResponse = props.getProperty("couchbase.syncMutationResponse", "true").equals("true");
    adhoc = props.getProperty("couchbase.adhoc", "false").equals("true");
    kv = props.getProperty("couchbase.kv", "true").equals("true");
    maxParallelism = Integer.parseInt(props.getProperty("couchbase.maxParallelism", "1"));
    kvEndpoints = Integer.parseInt(props.getProperty("couchbase.kvEndpoints", "1"));
    queryEndpoints = Integer.parseInt(props.getProperty("couchbase.queryEndpoints", "1"));
    epoll = props.getProperty("couchbase.epoll", "false").equals("true");
    boost = Integer.parseInt(props.getProperty("couchbase.boost", "3"));
    networkMetricsInterval = Integer.parseInt(props.getProperty("couchbase.networkMetricsInterval", "0"));
    runtimeMetricsInterval = Integer.parseInt(props.getProperty("couchbase.runtimeMetricsInterval", "0"));
    documentExpiry = Integer.parseInt(props.getProperty("couchbase.documentExpiry", "0"));
    scanAllQuery = "SELECT RAW meta().id FROM `" + bucketName + "` WHERE meta().id >= '$1' ORDER BY meta().id LIMIT $2";
    try {
        synchronized (INIT_COORDINATOR) {
            if (env == null) {
                LatencyMetricsCollectorConfig latencyConfig = networkMetricsInterval <= 0 ? DefaultLatencyMetricsCollectorConfig.disabled() : DefaultLatencyMetricsCollectorConfig.builder().emitFrequency(networkMetricsInterval).emitFrequencyUnit(TimeUnit.SECONDS).build();
                MetricsCollectorConfig runtimeConfig = runtimeMetricsInterval <= 0 ? DefaultMetricsCollectorConfig.disabled() : DefaultMetricsCollectorConfig.create(runtimeMetricsInterval, TimeUnit.SECONDS);
                DefaultCouchbaseEnvironment.Builder builder = DefaultCouchbaseEnvironment.builder().queryEndpoints(queryEndpoints).callbacksOnIoPool(true).runtimeMetricsCollectorConfig(runtimeConfig).networkLatencyMetricsCollectorConfig(latencyConfig).socketConnectTimeout(// 10 secs socket connect timeout
                10000).connectTimeout(// 30 secs overall bucket open timeout
                30000).kvTimeout(// 10 instead of 2.5s for KV ops
                10000).kvEndpoints(kvEndpoints);
                // Tune boosting and epoll based on settings
                SelectStrategyFactory factory = boost > 0 ? new BackoffSelectStrategyFactory() : DefaultSelectStrategyFactory.INSTANCE;
                int poolSize = boost > 0 ? boost : Integer.parseInt(System.getProperty("com.couchbase.ioPoolSize", Integer.toString(DefaultCoreEnvironment.IO_POOL_SIZE)));
                ThreadFactory threadFactory = new DefaultThreadFactory("cb-io", true);
                EventLoopGroup group = epoll ? new EpollEventLoopGroup(poolSize, threadFactory, factory) : new NioEventLoopGroup(poolSize, threadFactory, SelectorProvider.provider(), factory);
                builder.ioPool(group, new IoPoolShutdownHook(group));
                env = builder.build();
                logParams();
            }
        }
        cluster = CouchbaseCluster.create(env, host);
        bucket = cluster.openBucket(bucketName, bucketPassword);
        kvTimeout = env.kvTimeout();
    } catch (Exception ex) {
        throw new DBException("Could not connect to Couchbase Bucket.", ex);
    }
    if (!kv && !syncMutResponse) {
        throw new DBException("Not waiting for N1QL responses on mutations not yet implemented.");
    }
}
Also used : ThreadFactory(java.util.concurrent.ThreadFactory) DefaultThreadFactory(com.couchbase.client.deps.io.netty.util.concurrent.DefaultThreadFactory) DBException(com.yahoo.ycsb.DBException) DefaultLatencyMetricsCollectorConfig(com.couchbase.client.core.metrics.DefaultLatencyMetricsCollectorConfig) LatencyMetricsCollectorConfig(com.couchbase.client.core.metrics.LatencyMetricsCollectorConfig) TemporaryFailureException(com.couchbase.client.java.error.TemporaryFailureException) DBException(com.yahoo.ycsb.DBException) DefaultThreadFactory(com.couchbase.client.deps.io.netty.util.concurrent.DefaultThreadFactory) DefaultSelectStrategyFactory(com.couchbase.client.deps.io.netty.channel.DefaultSelectStrategyFactory) SelectStrategyFactory(com.couchbase.client.deps.io.netty.channel.SelectStrategyFactory) EventLoopGroup(com.couchbase.client.deps.io.netty.channel.EventLoopGroup) NioEventLoopGroup(com.couchbase.client.deps.io.netty.channel.nio.NioEventLoopGroup) EpollEventLoopGroup(com.couchbase.client.deps.io.netty.channel.epoll.EpollEventLoopGroup) IoPoolShutdownHook(com.couchbase.client.core.env.resources.IoPoolShutdownHook) DefaultCouchbaseEnvironment(com.couchbase.client.java.env.DefaultCouchbaseEnvironment) EpollEventLoopGroup(com.couchbase.client.deps.io.netty.channel.epoll.EpollEventLoopGroup) DefaultLatencyMetricsCollectorConfig(com.couchbase.client.core.metrics.DefaultLatencyMetricsCollectorConfig) DefaultMetricsCollectorConfig(com.couchbase.client.core.metrics.DefaultMetricsCollectorConfig) MetricsCollectorConfig(com.couchbase.client.core.metrics.MetricsCollectorConfig) LatencyMetricsCollectorConfig(com.couchbase.client.core.metrics.LatencyMetricsCollectorConfig) NioEventLoopGroup(com.couchbase.client.deps.io.netty.channel.nio.NioEventLoopGroup)

Example 2 with DBException

use of com.yahoo.ycsb.DBException in project YCSB by brianfrankcooper.

the class BackoffSelectStrategy method readN1ql.

/**
   * Performs the {@link #read(String, String, Set, HashMap)} operation via N1QL ("SELECT").
   *
   * If this option should be used, the "-p couchbase.kv=false" property must be set.
   *
   * @param docId the document ID
   * @param fields the fields to be loaded
   * @param result the result map where the doc needs to be converted into
   * @return The result of the operation.
   */
private Status readN1ql(final String docId, Set<String> fields, final HashMap<String, ByteIterator> result) throws Exception {
    String readQuery = "SELECT " + joinFields(fields) + " FROM `" + bucketName + "` USE KEYS [$1]";
    N1qlQueryResult queryResult = bucket.query(N1qlQuery.parameterized(readQuery, JsonArray.from(docId), N1qlParams.build().adhoc(adhoc).maxParallelism(maxParallelism)));
    if (!queryResult.parseSuccess() || !queryResult.finalSuccess()) {
        throw new DBException("Error while parsing N1QL Result. Query: " + readQuery + ", Errors: " + queryResult.errors());
    }
    N1qlQueryRow row;
    try {
        row = queryResult.rows().next();
    } catch (NoSuchElementException ex) {
        return Status.NOT_FOUND;
    }
    JsonObject content = row.value();
    if (fields == null) {
        // n1ql result set scoped under *.bucketName
        content = content.getObject(bucketName);
        fields = content.getNames();
    }
    for (String field : fields) {
        Object value = content.get(field);
        result.put(field, new StringByteIterator(value != null ? value.toString() : ""));
    }
    return Status.OK;
}
Also used : DBException(com.yahoo.ycsb.DBException) StringByteIterator(com.yahoo.ycsb.StringByteIterator) JsonObject(com.couchbase.client.java.document.json.JsonObject) JsonObject(com.couchbase.client.java.document.json.JsonObject)

Example 3 with DBException

use of com.yahoo.ycsb.DBException in project YCSB by brianfrankcooper.

the class AerospikeClient method init.

@Override
public void init() throws DBException {
    insertPolicy.recordExistsAction = RecordExistsAction.CREATE_ONLY;
    updatePolicy.recordExistsAction = RecordExistsAction.REPLACE_ONLY;
    Properties props = getProperties();
    namespace = props.getProperty("as.namespace", DEFAULT_NAMESPACE);
    String host = props.getProperty("as.host", DEFAULT_HOST);
    String user = props.getProperty("as.user");
    String password = props.getProperty("as.password");
    int port = Integer.parseInt(props.getProperty("as.port", DEFAULT_PORT));
    int timeout = Integer.parseInt(props.getProperty("as.timeout", DEFAULT_TIMEOUT));
    readPolicy.timeout = timeout;
    insertPolicy.timeout = timeout;
    updatePolicy.timeout = timeout;
    deletePolicy.timeout = timeout;
    ClientPolicy clientPolicy = new ClientPolicy();
    if (user != null && password != null) {
        clientPolicy.user = user;
        clientPolicy.password = password;
    }
    try {
        client = new com.aerospike.client.AerospikeClient(clientPolicy, host, port);
    } catch (AerospikeException e) {
        throw new DBException(String.format("Error while creating Aerospike " + "client for %s:%d.", host, port), e);
    }
}
Also used : AerospikeException(com.aerospike.client.AerospikeException) DBException(com.yahoo.ycsb.DBException) ClientPolicy(com.aerospike.client.policy.ClientPolicy) Properties(java.util.Properties)

Example 4 with DBException

use of com.yahoo.ycsb.DBException in project YCSB by brianfrankcooper.

the class ArangoDBClient method init.

/**
   * Initialize any state for this DB. Called once per DB instance; there is
   * one DB instance per client thread.
   * 
   * Actually, one client process will share one DB instance here.(Coincide to
   * mongoDB driver)
   */
@Override
public void init() throws DBException {
    INIT_COUNT.incrementAndGet();
    synchronized (ArangoDBClient.class) {
        if (arangoDriver != null) {
            return;
        }
        Properties props = getProperties();
        // Set the DB address
        String ip = props.getProperty("arangodb.ip", "localhost");
        String portStr = props.getProperty("arangodb.port", "8529");
        int port = Integer.parseInt(portStr);
        // If clear db before run
        String dropDBBeforeRunStr = props.getProperty("arangodb.dropDBBeforeRun", "false");
        dropDBBeforeRun = Boolean.parseBoolean(dropDBBeforeRunStr);
        // Set the sync mode
        String waitForSyncStr = props.getProperty("arangodb.waitForSync", "false");
        waitForSync = Boolean.parseBoolean(waitForSyncStr);
        // Set if transaction for update
        String transactionUpdateStr = props.getProperty("arangodb.transactionUpdate", "false");
        transactionUpdate = Boolean.parseBoolean(transactionUpdateStr);
        // Init ArangoDB connection
        try {
            ArangoConfigure arangoConfigure = new ArangoConfigure();
            arangoConfigure.setArangoHost(new ArangoHost(ip, port));
            arangoConfigure.init();
            arangoDriver = new ArangoDriver(arangoConfigure);
        } catch (Exception e) {
            logger.error("Failed to initialize ArangoDB", e);
            System.exit(-1);
        }
        // Init the database
        if (dropDBBeforeRun) {
            // Try delete first
            try {
                arangoDriver.deleteDatabase(databaseName);
            } catch (ArangoException e) {
                if (e.getErrorNumber() != ErrorNums.ERROR_ARANGO_DATABASE_NOT_FOUND) {
                    logger.error("Failed to delete database: {} with ex: {}", databaseName, e.toString());
                    System.exit(-1);
                } else {
                    logger.info("Fail to delete DB, already deleted: {}", databaseName);
                }
            }
        }
        try {
            arangoDriver.createDatabase(databaseName);
            logger.info("Database created: " + databaseName);
        } catch (ArangoException e) {
            if (e.getErrorNumber() != ErrorNums.ERROR_ARANGO_DUPLICATE_NAME) {
                logger.error("Failed to create database: {} with ex: {}", databaseName, e.toString());
                System.exit(-1);
            } else {
                logger.info("DB already exists: {}", databaseName);
            }
        }
        // Always set the default db
        arangoDriver.setDefaultDatabase(databaseName);
        logger.info("ArangoDB client connection created to {}:{}", ip, port);
        // Log the configuration
        logger.info("Arango Configuration: dropDBBeforeRun: {}; address: {}:{}; databaseName: {};" + " waitForSync: {}; transactionUpdate: {};", dropDBBeforeRun, ip, port, databaseName, waitForSync, transactionUpdate);
    }
}
Also used : ArangoDriver(com.arangodb.ArangoDriver) ArangoException(com.arangodb.ArangoException) Properties(java.util.Properties) ArangoHost(com.arangodb.ArangoHost) DBException(com.yahoo.ycsb.DBException) ArangoException(com.arangodb.ArangoException) ArangoConfigure(com.arangodb.ArangoConfigure)

Example 5 with DBException

use of com.yahoo.ycsb.DBException in project YCSB by brianfrankcooper.

the class GoogleBigtableClient method init.

@Override
public void init() throws DBException {
    Properties props = getProperties();
    // Defaults the user can override if needed
    CONFIG.set("google.bigtable.auth.service.account.enable", "true");
    // make it easy on ourselves by copying all CLI properties into the config object.
    final Iterator<Entry<Object, Object>> it = props.entrySet().iterator();
    while (it.hasNext()) {
        Entry<Object, Object> entry = it.next();
        CONFIG.set((String) entry.getKey(), (String) entry.getValue());
    }
    clientSideBuffering = getProperties().getProperty(CLIENT_SIDE_BUFFERING, "false").equals("true") ? true : false;
    System.err.println("Running Google Bigtable with Proto API" + (clientSideBuffering ? " and client side buffering." : "."));
    synchronized (CONFIG) {
        ++threadCount;
        if (session == null) {
            try {
                options = BigtableOptionsFactory.fromConfiguration(CONFIG);
                session = new BigtableSession(options);
                // important to instantiate the first client here, otherwise the
                // other threads may receive an NPE from the options when they try
                // to read the cluster name.
                client = session.getDataClient();
            } catch (IOException e) {
                throw new DBException("Error loading options from config: ", e);
            }
        } else {
            client = session.getDataClient();
        }
        if (clientSideBuffering) {
            heapSizeManager = new HeapSizeManager(Long.parseLong(getProperties().getProperty(ASYNC_MUTATOR_MAX_MEMORY, Long.toString(AsyncExecutor.ASYNC_MUTATOR_MAX_MEMORY_DEFAULT))), Integer.parseInt(getProperties().getProperty(ASYNC_MAX_INFLIGHT_RPCS, Integer.toString(AsyncExecutor.MAX_INFLIGHT_RPCS_DEFAULT))));
            asyncExecutor = new AsyncExecutor(client, heapSizeManager);
        }
    }
    if ((getProperties().getProperty("debug") != null) && (getProperties().getProperty("debug").compareTo("true") == 0)) {
        debug = true;
    }
    final String columnFamily = getProperties().getProperty("columnfamily");
    if (columnFamily == null) {
        System.err.println("Error, must specify a columnfamily for Bigtable table");
        throw new DBException("No columnfamily specified");
    }
    columnFamilyBytes = Bytes.toBytes(columnFamily);
}
Also used : DBException(com.yahoo.ycsb.DBException) Entry(java.util.Map.Entry) BigtableSession(com.google.cloud.bigtable.grpc.BigtableSession) IOException(java.io.IOException) ByteString(com.google.bigtable.repackaged.com.google.protobuf.ByteString) Properties(java.util.Properties) HeapSizeManager(com.google.cloud.bigtable.grpc.async.HeapSizeManager) AsyncExecutor(com.google.cloud.bigtable.grpc.async.AsyncExecutor)

Aggregations

DBException (com.yahoo.ycsb.DBException)32 Properties (java.util.Properties)15 IOException (java.io.IOException)10 TimeoutException (com.stumbleupon.async.TimeoutException)2 Measurements (com.yahoo.ycsb.measurements.Measurements)2 AerospikeException (com.aerospike.client.AerospikeException)1 ClientPolicy (com.aerospike.client.policy.ClientPolicy)1 MongoClientConfiguration (com.allanbank.mongodb.MongoClientConfiguration)1 MongoDbUri (com.allanbank.mongodb.MongoDbUri)1 ClientConfiguration (com.amazonaws.ClientConfiguration)1 AmazonS3Client (com.amazonaws.services.s3.AmazonS3Client)1 SSECustomerKey (com.amazonaws.services.s3.model.SSECustomerKey)1 ArangoConfigure (com.arangodb.ArangoConfigure)1 ArangoDBException (com.arangodb.ArangoDBException)1 ArangoDriver (com.arangodb.ArangoDriver)1 ArangoException (com.arangodb.ArangoException)1 ArangoHost (com.arangodb.ArangoHost)1 MapBuilder (com.arangodb.util.MapBuilder)1 VPackBuilder (com.arangodb.velocypack.VPackBuilder)1 Rados (com.ceph.rados.Rados)1