adding op functionality

This commit is contained in:
MarkWolters 2024-05-08 12:55:29 -04:00
parent f5b9660b31
commit a76f69d227
19 changed files with 177 additions and 78 deletions

View File

@ -29,13 +29,13 @@ import io.nosqlbench.nb.api.labels.NBLabels;
import java.util.function.Function;
@Service(value = DriverAdapter.class, selector = "dataapi")
public class DataApiDriverAdapter extends BaseDriverAdapter<DataApiBaseOp<?>, DataApiSpace> {
public class DataApiDriverAdapter extends BaseDriverAdapter<DataApiBaseOp, DataApiSpace> {
public DataApiDriverAdapter(NBComponent parent, NBLabels childLabels) {
super(parent, childLabels);
}
@Override
public OpMapper<DataApiBaseOp<?>> getOpMapper() {
public OpMapper getOpMapper() {
return new DataApiOpMapper(this);
}

View File

@ -26,7 +26,7 @@ import io.nosqlbench.engine.api.templating.TypeAndTarget;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
public class DataApiOpMapper implements OpMapper<DataApiBaseOp<?>> {
public class DataApiOpMapper implements OpMapper<DataApiBaseOp> {
private static final Logger logger = LogManager.getLogger(DataApiOpMapper.class);
private final DataApiDriverAdapter adapter;
@ -35,7 +35,7 @@ public class DataApiOpMapper implements OpMapper<DataApiBaseOp<?>> {
}
@Override
public OpDispenser<? extends DataApiBaseOp<?>> apply(ParsedOp op) {
public OpDispenser<? extends DataApiBaseOp> apply(ParsedOp op) {
TypeAndTarget<DataApiOpType, String> typeAndTarget = op.getTypeAndTarget(
DataApiOpType.class,
String.class,
@ -55,7 +55,7 @@ public class DataApiOpMapper implements OpMapper<DataApiBaseOp<?>> {
case update_many -> new DataApiUpdateManyOpDispenser(adapter, op, typeAndTarget.targetFunction);
case delete_one -> new DataApiDeleteOneOpDispenser(adapter, op, typeAndTarget.targetFunction);
case delete_many -> new DataApiDeleteManyOpDispenser(adapter, op, typeAndTarget.targetFunction);
case delete_collection -> new DataApiDeleteCollectionOpDispenser(adapter, op, typeAndTarget.targetFunction);
case delete_collection -> new DataApiDropCollectionOpDispenser(adapter, op, typeAndTarget.targetFunction);
};
}
}

View File

@ -16,6 +16,7 @@
package io.nosqlbench.adapter.dataapi;
import com.datastax.astra.client.Collection;
import com.datastax.astra.client.DataAPIClient;
import com.datastax.astra.client.Database;
import io.nosqlbench.nb.api.config.standard.ConfigModel;
@ -58,6 +59,10 @@ public class DataApiSpace {
private void createClient() {
this.dataAPIClient = new DataAPIClient(astraToken);
this.database = dataAPIClient.getDatabase(astraApiEndpoint);
// database.getCollection("test");
// database.listCollections().forEach(System.out::println);
// Collection collection = database.getCollection("test");
// collection.deleteMany()
}
private void setApiEndpoint() {

View File

@ -16,46 +16,58 @@
package io.nosqlbench.adapter.dataapi.opdispensers;
import com.datastax.astra.client.model.CollectionOptions;
import com.datastax.astra.client.model.SimilarityMetric;
import io.nosqlbench.adapter.dataapi.DataApiDriverAdapter;
import io.nosqlbench.adapter.dataapi.ops.DataApiBaseOp;
import io.nosqlbench.adapters.api.evalctx.CycleFunction;
import io.nosqlbench.adapter.dataapi.ops.DataApiCreateCollectionOp;
import io.nosqlbench.adapters.api.templating.ParsedOp;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import java.util.Optional;
import java.util.function.LongFunction;
public class DataApiCreateCollectionOpDispenser extends DataApiBaseOpDispenser {
public class DataApiCreateCollectionOpDispenser extends DataApiOpDispenser {
private static final Logger logger = LogManager.getLogger(DataApiCreateCollectionOpDispenser.class);
private final LongFunction<DataApiCreateCollectionOp> opFunction;
public DataApiCreateCollectionOpDispenser(DataApiDriverAdapter adapter, ParsedOp op, LongFunction<String> targetFunction) {
super(adapter, op);
super(adapter, op, targetFunction);
this.opFunction = createOpFunction(op);
}
private LongFunction<DataApiCreateCollectionOp> createOpFunction(ParsedOp op) {
return (l) -> {
CollectionOptions.CollectionOptionsBuilder optionsBldr = CollectionOptions.builder();
Optional<LongFunction<Integer>> dimFunc = op.getAsOptionalFunction("dimensions", Integer.class);
if (dimFunc.isPresent()) {
LongFunction<Integer> af = dimFunc.get();
optionsBldr.vectorDimension(af.apply(l));
}
// COSINE("cosine"),
// EUCLIDEAN("euclidean"),
// DOT_PRODUCT("dot_product");
Optional<LongFunction<String>> simFunc = op.getAsOptionalFunction("similarity", String.class);
if (simFunc.isPresent()) {
LongFunction<String> sf = simFunc.get();
optionsBldr.vectorSimilarity(SimilarityMetric.valueOf(sf.apply(l)));
}
DataApiCreateCollectionOp dataApiCreateCollectionOp =
new DataApiCreateCollectionOp(
spaceFunction.apply(l).getDatabase(),
targetFunction.apply(l),
optionsBldr.build());
return dataApiCreateCollectionOp;
};
}
@Override
public DataApiBaseOp<?> getOp(long value) {
return null;
public DataApiBaseOp getOp(long value) {
return opFunction.apply(value);
}
@Override
public CycleFunction<Boolean> getVerifier() {
return null;
}
@Override
public String getOpName() {
return null;
}
@Override
public void onStart(long cycleValue) {
}
@Override
public void onSuccess(long cycleValue, long nanoTime) {
}
@Override
public void onError(long cycleValue, long resultNanos, Throwable t) {
}
}

View File

@ -22,13 +22,13 @@ import io.nosqlbench.adapters.api.templating.ParsedOp;
import java.util.function.LongFunction;
public class DataApiDeleteManyOpDispenser extends DataApiBaseOpDispenser {
public class DataApiDeleteManyOpDispenser extends DataApiOpDispenser {
public DataApiDeleteManyOpDispenser(DataApiDriverAdapter adapter, ParsedOp op, LongFunction<String> targetFunction) {
super(adapter, op);
super(adapter, op, targetFunction);
}
@Override
public DataApiBaseOp<DataApiBaseOp<?>> getOp(long value) {
public DataApiBaseOp getOp(long value) {
return null;
}
}

View File

@ -22,13 +22,13 @@ import io.nosqlbench.adapters.api.templating.ParsedOp;
import java.util.function.LongFunction;
public class DataApiDeleteOneOpDispenser extends DataApiBaseOpDispenser {
public class DataApiDeleteOneOpDispenser extends DataApiOpDispenser {
public DataApiDeleteOneOpDispenser(DataApiDriverAdapter adapter, ParsedOp op, LongFunction<String> targetFunction) {
super(adapter, op);
super(adapter, op, targetFunction);
}
@Override
public DataApiBaseOp<DataApiBaseOp<?>> getOp(long value) {
public DataApiBaseOp getOp(long value) {
return null;
}
}

View File

@ -0,0 +1,47 @@
/*
* Copyright (c) 2024 nosqlbench
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package io.nosqlbench.adapter.dataapi.opdispensers;
import io.nosqlbench.adapter.dataapi.DataApiDriverAdapter;
import io.nosqlbench.adapter.dataapi.ops.DataApiBaseOp;
import io.nosqlbench.adapter.dataapi.ops.DataApiDropCollectionOp;
import io.nosqlbench.adapters.api.templating.ParsedOp;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import java.util.function.LongFunction;
public class DataApiDropCollectionOpDispenser extends DataApiOpDispenser {
private static final Logger logger = LogManager.getLogger(DataApiDropCollectionOpDispenser.class);
private final LongFunction<DataApiDropCollectionOp> opFunction;
public DataApiDropCollectionOpDispenser(DataApiDriverAdapter adapter, ParsedOp op, LongFunction<String> targetFunction) {
super(adapter, op, targetFunction);
this.opFunction = createOpFunction(op);
}
private LongFunction<DataApiDropCollectionOp> createOpFunction(ParsedOp op) {
return (l) -> new DataApiDropCollectionOp(
spaceFunction.apply(l).getDatabase(),
targetFunction.apply(l)
);
}
@Override
public DataApiBaseOp getOp(long value) {
return opFunction.apply(value);
}
}

View File

@ -22,13 +22,13 @@ import io.nosqlbench.adapters.api.templating.ParsedOp;
import java.util.function.LongFunction;
public class DataApiFindOneAndDeleteOpDispenser extends DataApiBaseOpDispenser {
public class DataApiFindOneAndDeleteOpDispenser extends DataApiOpDispenser {
public DataApiFindOneAndDeleteOpDispenser(DataApiDriverAdapter adapter, ParsedOp op, LongFunction<String> targetFunction) {
super(adapter, op);
super(adapter, op, targetFunction);
}
@Override
public DataApiBaseOp<DataApiBaseOp<?>> getOp(long value) {
public DataApiBaseOp getOp(long value) {
return null;
}
}

View File

@ -22,13 +22,13 @@ import io.nosqlbench.adapters.api.templating.ParsedOp;
import java.util.function.LongFunction;
public class DataApiFindOneAndUpdateOpDispenser extends DataApiBaseOpDispenser {
public class DataApiFindOneAndUpdateOpDispenser extends DataApiOpDispenser {
public DataApiFindOneAndUpdateOpDispenser(DataApiDriverAdapter adapter, ParsedOp op, LongFunction<String> targetFunction) {
super(adapter, op);
super(adapter, op, targetFunction);
}
@Override
public DataApiBaseOp<DataApiBaseOp<?>> getOp(long value) {
public DataApiBaseOp getOp(long value) {
return null;
}
}

View File

@ -22,13 +22,13 @@ import io.nosqlbench.adapters.api.templating.ParsedOp;
import java.util.function.LongFunction;
public class DataApiFindOneOpDispenser extends DataApiBaseOpDispenser {
public class DataApiFindOneOpDispenser extends DataApiOpDispenser {
public DataApiFindOneOpDispenser(DataApiDriverAdapter adapter, ParsedOp op, LongFunction<String> targetFunction) {
super(adapter, op);
super(adapter, op, targetFunction);
}
@Override
public DataApiBaseOp<DataApiBaseOp<?>> getOp(long value) {
public DataApiBaseOp getOp(long value) {
return null;
}
}

View File

@ -22,13 +22,13 @@ import io.nosqlbench.adapters.api.templating.ParsedOp;
import java.util.function.LongFunction;
public class DataApiFindOpDispenser extends DataApiBaseOpDispenser {
public class DataApiFindOpDispenser extends DataApiOpDispenser {
public DataApiFindOpDispenser(DataApiDriverAdapter adapter, ParsedOp op, LongFunction<String> targetFunction) {
super(adapter, op);
super(adapter, op, targetFunction);
}
@Override
public DataApiBaseOp<DataApiBaseOp<?>> getOp(long value) {
public DataApiBaseOp getOp(long value) {
return null;
}
}

View File

@ -22,13 +22,13 @@ import io.nosqlbench.adapters.api.templating.ParsedOp;
import java.util.function.LongFunction;
public class DataApiInsertManyOpDispenser extends DataApiBaseOpDispenser {
public class DataApiInsertManyOpDispenser extends DataApiOpDispenser {
public DataApiInsertManyOpDispenser(DataApiDriverAdapter adapter, ParsedOp op, LongFunction<String> targetFunction) {
super(adapter, op);
super(adapter, op, targetFunction);
}
@Override
public DataApiBaseOp<DataApiBaseOp<?>> getOp(long value) {
public DataApiBaseOp getOp(long value) {
return null;
}
}

View File

@ -22,13 +22,13 @@ import io.nosqlbench.adapters.api.templating.ParsedOp;
import java.util.function.LongFunction;
public class DataApiInsertOneOpDispenser extends DataApiBaseOpDispenser {
public class DataApiInsertOneOpDispenser extends DataApiOpDispenser {
public DataApiInsertOneOpDispenser(DataApiDriverAdapter adapter, ParsedOp op, LongFunction<String> targetFunction) {
super(adapter, op);
super(adapter, op, targetFunction);
}
@Override
public DataApiBaseOp<DataApiBaseOp<?>> getOp(long value) {
public DataApiBaseOp getOp(long value) {
return null;
}
}

View File

@ -22,10 +22,17 @@ import io.nosqlbench.adapters.api.activityimpl.BaseOpDispenser;
import io.nosqlbench.adapters.api.activityimpl.uniform.DriverAdapter;
import io.nosqlbench.adapters.api.templating.ParsedOp;
public abstract class DataApiBaseOpDispenser extends BaseOpDispenser<DataApiBaseOp<?>, DataApiSpace> {
import java.util.function.LongFunction;
protected DataApiBaseOpDispenser(DriverAdapter<? extends DataApiBaseOp<?>,? extends DataApiSpace> adapter, ParsedOp op) {
public abstract class DataApiOpDispenser extends BaseOpDispenser<DataApiBaseOp, DataApiSpace> {
protected final LongFunction<String> targetFunction;
protected final LongFunction<DataApiSpace> spaceFunction;
protected DataApiOpDispenser(DriverAdapter<? extends DataApiBaseOp, DataApiSpace> adapter, ParsedOp op,
LongFunction<String> targetFunction) {
super(adapter, op);
this.targetFunction = targetFunction;
this.spaceFunction = adapter.getSpaceFunc(op);
}
}

View File

@ -22,13 +22,13 @@ import io.nosqlbench.adapters.api.templating.ParsedOp;
import java.util.function.LongFunction;
public class DataApiUpdateManyOpDispenser extends DataApiBaseOpDispenser {
public class DataApiUpdateManyOpDispenser extends DataApiOpDispenser {
public DataApiUpdateManyOpDispenser(DataApiDriverAdapter adapter, ParsedOp op, LongFunction<String> targetFunction) {
super(adapter, op);
super(adapter, op, targetFunction);
}
@Override
public DataApiBaseOp<DataApiBaseOp<?>> getOp(long value) {
public DataApiBaseOp getOp(long value) {
return null;
}
}

View File

@ -22,13 +22,13 @@ import io.nosqlbench.adapters.api.templating.ParsedOp;
import java.util.function.LongFunction;
public class DataApiUpdateOneOpDispenser extends DataApiBaseOpDispenser {
public class DataApiUpdateOneOpDispenser extends DataApiOpDispenser {
public DataApiUpdateOneOpDispenser(DataApiDriverAdapter adapter, ParsedOp op, LongFunction<String> targetFunction) {
super(adapter, op);
super(adapter, op, targetFunction);
}
@Override
public DataApiBaseOp<DataApiBaseOp<?>> getOp(long value) {
public DataApiBaseOp getOp(long value) {
return null;
}
}

View File

@ -16,7 +16,13 @@
package io.nosqlbench.adapter.dataapi.ops;
import io.nosqlbench.adapters.api.activityimpl.uniform.flowtypes.Op;
import com.datastax.astra.client.Database;
import io.nosqlbench.adapters.api.activityimpl.uniform.flowtypes.CycleOp;
public class DataApiBaseOp<T> implements Op {
public abstract class DataApiBaseOp implements CycleOp {
protected final Database db;
public DataApiBaseOp(Database db) {
this.db = db;
}
}

View File

@ -14,21 +14,23 @@
* limitations under the License.
*/
package io.nosqlbench.adapter.dataapi.opdispensers;
package io.nosqlbench.adapter.dataapi.ops;
import io.nosqlbench.adapter.dataapi.DataApiDriverAdapter;
import io.nosqlbench.adapter.dataapi.ops.DataApiBaseOp;
import io.nosqlbench.adapters.api.templating.ParsedOp;
import com.datastax.astra.client.Database;
import com.datastax.astra.client.model.CollectionOptions;
import java.util.function.LongFunction;
public class DataApiCreateCollectionOp extends DataApiBaseOp {
private final String collectionName;
private final CollectionOptions options;
public class DataApiDeleteCollectionOpDispenser extends DataApiBaseOpDispenser {
public DataApiDeleteCollectionOpDispenser(DataApiDriverAdapter adapter, ParsedOp op, LongFunction<String> targetFunction) {
super(adapter, op);
public DataApiCreateCollectionOp(Database db, String collectionName, CollectionOptions options) {
super(db);
this.collectionName = collectionName;
this.options = options;
}
@Override
public DataApiBaseOp<DataApiBaseOp<?>> getOp(long value) {
return null;
public Object apply(long value) {
return db.createCollection(collectionName, options);
}
}

View File

@ -0,0 +1,20 @@
package io.nosqlbench.adapter.dataapi.ops;
import com.datastax.astra.client.Database;
public class DataApiDropCollectionOp extends DataApiBaseOp {
private final String collectionName;
public DataApiDropCollectionOp(Database db, String dbName) {
super(db);
this.collectionName = dbName;
}
@Override
public Object apply(long value) {
Boolean exists = db.collectionExists(collectionName);
if (exists) {
db.dropCollection(collectionName);
}
return exists;
}
}