Skip to content

Commit

Permalink
Merge pull request #1950 from nosqlbench/ms/dapi
Browse files Browse the repository at this point in the history
Additional APIs, upgraded client
  • Loading branch information
msmygit committed May 16, 2024
2 parents 093e5c9 + 63abc5c commit 2a9f869
Show file tree
Hide file tree
Showing 14 changed files with 284 additions and 7 deletions.
2 changes: 1 addition & 1 deletion nb-adapters/adapter-dataapi/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,7 @@
<dependency>
<groupId>com.datastax.astra</groupId>
<artifactId>astra-db-java</artifactId>
<version>1.0.0</version>
<version>1.1.1</version>
</dependency>
</dependencies>

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -59,6 +59,11 @@ public OpDispenser<? extends DataApiBaseOp> apply(ParsedOp op) {
case delete_one -> new DataApiDeleteOneOpDispenser(adapter, op, typeAndTarget.targetFunction);
case delete_many -> new DataApiDeleteManyOpDispenser(adapter, op, typeAndTarget.targetFunction);
case delete_collection -> new DataApiDropCollectionOpDispenser(adapter, op, typeAndTarget.targetFunction);
case list_collections -> new DataApiListCollectionsOpDispenser(adapter, op, typeAndTarget.targetFunction);
case list_collection_names ->
new DataApiListCollectionNamesOpDispenser(adapter, op, typeAndTarget.targetFunction);
case estimated_document_count ->
new DataApiEstimatedDocumentCountOpDispenser(adapter, op, typeAndTarget.targetFunction);
};
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -56,12 +56,11 @@ private LongFunction<DataApiDeleteOneOp> createOpFunction(ParsedOp op) {
private DeleteOneOptions getDeleteOneOptions(ParsedOp op, long l) {
DeleteOneOptions options = new DeleteOneOptions();
Sort sort = getSortFromOp(op, l);
if (sort != null) {
options = options.sort(sort);
}
float[] vector = getVectorFromOp(op, l);
if (vector != null) {
options = options.vector(vector);
if (sort != null) {
options = (vector != null) ? options.sort(vector, sort) : options.sort(sort);
} else if (vector != null) {
options = options.sort(vector, null);
}
return options;
}
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
/*
* Copyright (c) 2020-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.DataApiEstimatedDocumentCountOp;
import io.nosqlbench.adapters.api.templating.ParsedOp;

import java.util.function.LongFunction;

public class DataApiEstimatedDocumentCountOpDispenser extends DataApiOpDispenser {
private final LongFunction<DataApiEstimatedDocumentCountOp> opFunction;
public DataApiEstimatedDocumentCountOpDispenser(
DataApiDriverAdapter adapter, ParsedOp op, LongFunction<String> targetFunction) {
super(adapter, op, targetFunction);
this.opFunction = createOpFunction(op);
}

private LongFunction<DataApiEstimatedDocumentCountOp> createOpFunction(ParsedOp op) {
return (l) -> {
return new DataApiEstimatedDocumentCountOp(
spaceFunction.apply(l).getDatabase(),
targetFunction.apply(l)
);
};
}

@Override
public DataApiBaseOp getOp(long value) {
return opFunction.apply(value);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
/*
* Copyright (c) 2020-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.DataApiListCollectionNamesOp;
import io.nosqlbench.adapters.api.templating.ParsedOp;

import java.util.function.LongFunction;

public class DataApiListCollectionNamesOpDispenser extends DataApiOpDispenser {
private final LongFunction<DataApiListCollectionNamesOp> opFunction;
public DataApiListCollectionNamesOpDispenser(DataApiDriverAdapter adapter, ParsedOp op, LongFunction<String> targetFunction) {
super(adapter, op, targetFunction);
this.opFunction = createOpFunction(op);
}

private LongFunction<DataApiListCollectionNamesOp> createOpFunction(ParsedOp op) {
return l -> {
return new DataApiListCollectionNamesOp(spaceFunction.apply(l).getDatabase());
};
}

@Override
public DataApiBaseOp getOp(long value) {
return opFunction.apply(value);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
/*
* Copyright (c) 2020-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.DataApiListCollectionsOp;
import io.nosqlbench.adapters.api.templating.ParsedOp;

import java.util.function.LongFunction;

public class DataApiListCollectionsOpDispenser extends DataApiOpDispenser {
private final LongFunction<DataApiListCollectionsOp> opFunction;
public DataApiListCollectionsOpDispenser(DataApiDriverAdapter adapter, ParsedOp op, LongFunction<String> targetFunction) {
super(adapter, op, targetFunction);
this.opFunction = createOpFunction(op);
}

private LongFunction<DataApiListCollectionsOp> createOpFunction(ParsedOp op) {
return l -> {
DataApiListCollectionsOp dataApiListCollectionsOp =
new DataApiListCollectionsOp(
spaceFunction.apply(l).getDatabase());
return dataApiListCollectionsOp;
};
}

@Override
public DataApiBaseOp getOp(long value) {
return opFunction.apply(value);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -18,8 +18,11 @@

import com.datastax.astra.client.Database;
import io.nosqlbench.adapters.api.activityimpl.uniform.flowtypes.CycleOp;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;

public abstract class DataApiBaseOp implements CycleOp {
protected static final Logger logger = LogManager.getLogger(DataApiBaseOp.class);
protected final Database db;

public DataApiBaseOp(Database db) {
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
/*
* Copyright (c) 2020-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.ops;

import com.datastax.astra.client.Collection;
import com.datastax.astra.client.Database;
import com.datastax.astra.client.model.Document;

public class DataApiEstimatedDocumentCountOp extends DataApiBaseOp {
private final String collectionName;
public DataApiEstimatedDocumentCountOp(Database db, String collectionName) {
super(db);
this.collectionName = collectionName;
}

@Override
public Object apply(long value) {
long response;
Collection<Document> collection = db.getCollection(collectionName);
response = collection.estimatedDocumentCount();
return response;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
/*
* Copyright (c) 2020-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.ops;

import com.datastax.astra.client.Database;

import java.util.stream.Stream;

public class DataApiListCollectionNamesOp extends DataApiBaseOp {

public DataApiListCollectionNamesOp(Database db) {
super(db);
}

@Override
public Object apply(long value) {
Stream<String> response;
response = db.listCollectionNames();
if(logger.isDebugEnabled()) response.forEach(logger::debug);
return response;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
/*
* Copyright (c) 2020-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.ops;

import com.datastax.astra.client.Database;

public class DataApiListCollectionsOp extends DataApiBaseOp {

public DataApiListCollectionsOp(Database db) {
super(db);
}

@Override
public Object apply(long value) {
return db.listCollections();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -31,5 +31,8 @@ public enum DataApiOpType {
update_many,
delete_one,
delete_many,
delete_collection
delete_collection,
list_collections,
list_collection_names,
estimated_document_count,
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
scenarios:
default:
estimated_document_count: run driver=dataapi tags==blocks:estimated_document_count cycles=1

blocks:
estimated_document_count:
ops:
op1:
estimated_document_count: "collectionName"
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
scenarios:
default:
list_collection_names: run driver=dataapi tags==blocks:list_collection_names cycles=1

blocks:
list_collection_names:
ops:
op1:
list_collection_names:
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
scenarios:
default:
list_collections: run driver=dataapi tags==blocks:list_collections cycles=1

blocks:
list_collections:
ops:
op1:
list_collections:

0 comments on commit 2a9f869

Please sign in to comment.