From 7019fe9e7e115da183ce87f046b86886d011fd8c Mon Sep 17 00:00:00 2001 From: Stefano Lottini <236640031+sl-at-ibm@users.noreply.github.com> Date: Thu, 10 Sep 2026 10:37:53 +0200 Subject: [PATCH] deleteOne and deleteMany: moved old ops to legacy, created new ops, added deprecation - completed --- .../adapter/dataapi/DataApiOpMapper.java | 13 ++-- ...CollectionLegacyDeleteAllOpDispenser.java} | 14 ++-- ...CollectionLegacyDeleteManyOpDispenser.java | 56 +++++++++++++++ ...iCollectionLegacyDeleteOneOpDispenser.java | 69 +++++++++++++++++++ ...> DataApiCollectionLegacyDeleteAllOp.java} | 4 +- .../adapter/dataapi/ops/DataApiOpType.java | 8 ++- 6 files changed, 148 insertions(+), 16 deletions(-) rename nb-adapters/adapter-dataapi/src/main/java/io/nosqlbench/adapter/dataapi/opdispensers/{DataApiCollectionDeleteAllOpDispenser.java => DataApiCollectionLegacyDeleteAllOpDispenser.java} (71%) create mode 100644 nb-adapters/adapter-dataapi/src/main/java/io/nosqlbench/adapter/dataapi/opdispensers/DataApiCollectionLegacyDeleteManyOpDispenser.java create mode 100644 nb-adapters/adapter-dataapi/src/main/java/io/nosqlbench/adapter/dataapi/opdispensers/DataApiCollectionLegacyDeleteOneOpDispenser.java rename nb-adapters/adapter-dataapi/src/main/java/io/nosqlbench/adapter/dataapi/ops/{DataApiCollectionDeleteAllOp.java => DataApiCollectionLegacyDeleteAllOp.java} (85%) diff --git a/nb-adapters/adapter-dataapi/src/main/java/io/nosqlbench/adapter/dataapi/DataApiOpMapper.java b/nb-adapters/adapter-dataapi/src/main/java/io/nosqlbench/adapter/dataapi/DataApiOpMapper.java index 172e859e8..05858c212 100644 --- a/nb-adapters/adapter-dataapi/src/main/java/io/nosqlbench/adapter/dataapi/DataApiOpMapper.java +++ b/nb-adapters/adapter-dataapi/src/main/java/io/nosqlbench/adapter/dataapi/DataApiOpMapper.java @@ -38,10 +38,13 @@ public class DataApiOpMapper implements OpMapper { static { DEPRECATED_OP_TYPES = new HashMap<>(); // admin ops: - DEPRECATED_OP_TYPES.put(DataApiOpType.create_collection_with_class, null); + DEPRECATED_OP_TYPES.put(DataApiOpType.create_collection_with_class, null); // TODO => newstyle create coll. // db-admin ops: // in-database ops: // in-collection ops: + DEPRECATED_OP_TYPES.put(DataApiOpType.delete_all, DataApiOpType.collection_delete_many); + DEPRECATED_OP_TYPES.put(DataApiOpType.delete_many, DataApiOpType.collection_delete_many); + DEPRECATED_OP_TYPES.put(DataApiOpType.delete_one, DataApiOpType.collection_delete_one); DEPRECATED_OP_TYPES.put(DataApiOpType.find, DataApiOpType.collection_find); DEPRECATED_OP_TYPES.put(DataApiOpType.find_vector, DataApiOpType.collection_find); DEPRECATED_OP_TYPES.put(DataApiOpType.find_vector_filter, DataApiOpType.collection_find); @@ -101,10 +104,7 @@ public class DataApiOpMapper implements OpMapper { case insert_one_vector -> new DataApiCollectionInsertOneVectorOpDispenser(adapter, op, typeAndTarget.targetFunction); case update_one -> new DataApiCollectionUpdateOneOpDispenser(adapter, op, typeAndTarget.targetFunction); case update_many -> new DataApiCollectionUpdateManyOpDispenser(adapter, op, typeAndTarget.targetFunction); - case delete_one -> new DataApiCollectionDeleteOneOpDispenser(adapter, op, typeAndTarget.targetFunction); case find_one_and_delete -> new DataApiCollectionFindOneAndDeleteOpDispenser(adapter, op, typeAndTarget.targetFunction); - case delete_many -> new DataApiCollectionDeleteManyOpDispenser(adapter, op, typeAndTarget.targetFunction); - case delete_all -> new DataApiCollectionDeleteAllOpDispenser(adapter, op, typeAndTarget.targetFunction); case replace_one -> new DataApiCollectionReplaceOneOpDispenser(adapter, op, typeAndTarget.targetFunction); case find_one_and_replace -> new DataApiCollectionFindOneAndReplaceOpDispenser(adapter, op, typeAndTarget.targetFunction); case estimated_document_count -> @@ -117,6 +117,11 @@ public class DataApiOpMapper implements OpMapper { // in-database ops: case create_collection_with_class -> new DataApiLegacyCreateCollectionWithClassOpDispenser(adapter, op, typeAndTarget.targetFunction); // in-collection ops: + case collection_delete_many -> new DataApiCollectionDeleteManyOpDispenser(adapter, op, typeAndTarget.targetFunction); + case collection_delete_one -> new DataApiCollectionDeleteOneOpDispenser(adapter, op, typeAndTarget.targetFunction); + case delete_one -> new DataApiCollectionLegacyDeleteOneOpDispenser(adapter, op, typeAndTarget.targetFunction); + case delete_many -> new DataApiCollectionLegacyDeleteManyOpDispenser(adapter, op, typeAndTarget.targetFunction); + case delete_all -> new DataApiCollectionLegacyDeleteAllOpDispenser(adapter, op, typeAndTarget.targetFunction); case find -> new DataApiCollectionLegacyFindOpDispenser(adapter, op, typeAndTarget.targetFunction); case find_vector -> new DataApiCollectionLegacyFindVectorOpDispenser(adapter, op, typeAndTarget.targetFunction); case find_vector_filter -> new DataApiCollectionLegacyFindVectorFilterOpDispenser(adapter, op, typeAndTarget.targetFunction); diff --git a/nb-adapters/adapter-dataapi/src/main/java/io/nosqlbench/adapter/dataapi/opdispensers/DataApiCollectionDeleteAllOpDispenser.java b/nb-adapters/adapter-dataapi/src/main/java/io/nosqlbench/adapter/dataapi/opdispensers/DataApiCollectionLegacyDeleteAllOpDispenser.java similarity index 71% rename from nb-adapters/adapter-dataapi/src/main/java/io/nosqlbench/adapter/dataapi/opdispensers/DataApiCollectionDeleteAllOpDispenser.java rename to nb-adapters/adapter-dataapi/src/main/java/io/nosqlbench/adapter/dataapi/opdispensers/DataApiCollectionLegacyDeleteAllOpDispenser.java index 569a0685e..721ef5281 100644 --- a/nb-adapters/adapter-dataapi/src/main/java/io/nosqlbench/adapter/dataapi/opdispensers/DataApiCollectionDeleteAllOpDispenser.java +++ b/nb-adapters/adapter-dataapi/src/main/java/io/nosqlbench/adapter/dataapi/opdispensers/DataApiCollectionLegacyDeleteAllOpDispenser.java @@ -19,27 +19,27 @@ package io.nosqlbench.adapter.dataapi.opdispensers; import com.datastax.astra.client.databases.Database; import io.nosqlbench.adapter.dataapi.DataApiDriverAdapter; import io.nosqlbench.adapter.dataapi.ops.DataApiBaseOp; -import io.nosqlbench.adapter.dataapi.ops.DataApiCollectionDeleteAllOp; +import io.nosqlbench.adapter.dataapi.ops.DataApiCollectionLegacyDeleteAllOp; 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 DataApiCollectionDeleteAllOpDispenser extends DataApiOpDispenser { - private static final Logger logger = LogManager.getLogger(DataApiCollectionDeleteAllOpDispenser.class); - private final LongFunction opFunction; +public class DataApiCollectionLegacyDeleteAllOpDispenser extends DataApiOpDispenser { + private static final Logger logger = LogManager.getLogger(DataApiCollectionLegacyDeleteAllOpDispenser.class); + private final LongFunction opFunction; - public DataApiCollectionDeleteAllOpDispenser(DataApiDriverAdapter adapter, ParsedOp op, LongFunction targetFunction) { + public DataApiCollectionLegacyDeleteAllOpDispenser(DataApiDriverAdapter adapter, ParsedOp op, LongFunction targetFunction) { super(adapter, op, targetFunction); this.opFunction = createOpFunction(op); } - private LongFunction createOpFunction(ParsedOp op) { + private LongFunction createOpFunction(ParsedOp op) { return (l) -> { Database db = spaceFunction.apply(l).getDatabase(); - return new DataApiCollectionDeleteAllOp( + return new DataApiCollectionLegacyDeleteAllOp( db, db.getCollection(targetFunction.apply(l)) ); diff --git a/nb-adapters/adapter-dataapi/src/main/java/io/nosqlbench/adapter/dataapi/opdispensers/DataApiCollectionLegacyDeleteManyOpDispenser.java b/nb-adapters/adapter-dataapi/src/main/java/io/nosqlbench/adapter/dataapi/opdispensers/DataApiCollectionLegacyDeleteManyOpDispenser.java new file mode 100644 index 000000000..c3ec617b9 --- /dev/null +++ b/nb-adapters/adapter-dataapi/src/main/java/io/nosqlbench/adapter/dataapi/opdispensers/DataApiCollectionLegacyDeleteManyOpDispenser.java @@ -0,0 +1,56 @@ +/* + * Copyright (c) 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 com.datastax.astra.client.databases.Database; +import com.datastax.astra.client.core.query.Filter; +import io.nosqlbench.adapter.dataapi.DataApiDriverAdapter; +import io.nosqlbench.adapter.dataapi.ops.DataApiBaseOp; +import io.nosqlbench.adapter.dataapi.ops.DataApiCollectionDeleteManyOp; +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 DataApiCollectionLegacyDeleteManyOpDispenser extends DataApiOpDispenser { + private static final Logger logger = LogManager.getLogger(DataApiCollectionLegacyDeleteManyOpDispenser.class); + private final LongFunction opFunction; + + public DataApiCollectionLegacyDeleteManyOpDispenser(DataApiDriverAdapter adapter, ParsedOp op, LongFunction targetFunction) { + super(adapter, op, targetFunction); + this.opFunction = createOpFunction(op); + } + + private LongFunction createOpFunction(ParsedOp op) { + return (l) -> { + Database db = spaceFunction.apply(l).getDatabase(); + Filter filter = getLegacyFilterFromOp(op, l); + + return new DataApiCollectionDeleteManyOp( + db, + db.getCollection(targetFunction.apply(l)), + filter + ); + }; + } + + @Override + public DataApiBaseOp getOp(long cycle) { + return opFunction.apply(cycle); + } +} diff --git a/nb-adapters/adapter-dataapi/src/main/java/io/nosqlbench/adapter/dataapi/opdispensers/DataApiCollectionLegacyDeleteOneOpDispenser.java b/nb-adapters/adapter-dataapi/src/main/java/io/nosqlbench/adapter/dataapi/opdispensers/DataApiCollectionLegacyDeleteOneOpDispenser.java new file mode 100644 index 000000000..9356b23ee --- /dev/null +++ b/nb-adapters/adapter-dataapi/src/main/java/io/nosqlbench/adapter/dataapi/opdispensers/DataApiCollectionLegacyDeleteOneOpDispenser.java @@ -0,0 +1,69 @@ +/* + * Copyright (c) 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 com.datastax.astra.client.databases.Database; +import com.datastax.astra.client.collections.commands.options.CollectionDeleteOneOptions; +import com.datastax.astra.client.core.query.Filter; +import com.datastax.astra.client.core.query.Sort; +import io.nosqlbench.adapter.dataapi.DataApiDriverAdapter; +import io.nosqlbench.adapter.dataapi.ops.DataApiBaseOp; +import io.nosqlbench.adapter.dataapi.ops.DataApiCollectionDeleteOneOp; +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 DataApiCollectionLegacyDeleteOneOpDispenser extends DataApiOpDispenser { + private static final Logger logger = LogManager.getLogger(DataApiCollectionLegacyDeleteOneOpDispenser.class); + private final LongFunction opFunction; + + public DataApiCollectionLegacyDeleteOneOpDispenser(DataApiDriverAdapter adapter, ParsedOp op, LongFunction targetFunction) { + super(adapter, op, targetFunction); + this.opFunction = createOpFunction(op); + } + + private LongFunction createOpFunction(ParsedOp op) { + return (l) -> { + Database db = spaceFunction.apply(l).getDatabase(); + Filter filter = getLegacyFilterFromOp(op, l); + CollectionDeleteOneOptions options = getCollectionDeleteOneOptions(op, l); + + return new DataApiCollectionDeleteOneOp( + db, + db.getCollection(targetFunction.apply(l)), + filter, + options + ); + }; + } + + private CollectionDeleteOneOptions getCollectionDeleteOneOptions(ParsedOp op, long l) { + CollectionDeleteOneOptions options = new CollectionDeleteOneOptions(); + Sort sort = getSortFromOp(op, l); + if (sort != null) { + options = options.sort(sort); + } + return options; + } + + @Override + public DataApiBaseOp getOp(long cycle) { + return opFunction.apply(cycle); + } +} diff --git a/nb-adapters/adapter-dataapi/src/main/java/io/nosqlbench/adapter/dataapi/ops/DataApiCollectionDeleteAllOp.java b/nb-adapters/adapter-dataapi/src/main/java/io/nosqlbench/adapter/dataapi/ops/DataApiCollectionLegacyDeleteAllOp.java similarity index 85% rename from nb-adapters/adapter-dataapi/src/main/java/io/nosqlbench/adapter/dataapi/ops/DataApiCollectionDeleteAllOp.java rename to nb-adapters/adapter-dataapi/src/main/java/io/nosqlbench/adapter/dataapi/ops/DataApiCollectionLegacyDeleteAllOp.java index dbe5fa1c5..2f1538699 100644 --- a/nb-adapters/adapter-dataapi/src/main/java/io/nosqlbench/adapter/dataapi/ops/DataApiCollectionDeleteAllOp.java +++ b/nb-adapters/adapter-dataapi/src/main/java/io/nosqlbench/adapter/dataapi/ops/DataApiCollectionLegacyDeleteAllOp.java @@ -19,10 +19,10 @@ package io.nosqlbench.adapter.dataapi.ops; import com.datastax.astra.client.collections.Collection; import com.datastax.astra.client.databases.Database; -public class DataApiCollectionDeleteAllOp extends DataApiBaseOp { +public class DataApiCollectionLegacyDeleteAllOp extends DataApiBaseOp { private final Collection collection; - public DataApiCollectionDeleteAllOp(Database db, Collection collection) { + public DataApiCollectionLegacyDeleteAllOp(Database db, Collection collection) { super(db); this.collection = collection; } diff --git a/nb-adapters/adapter-dataapi/src/main/java/io/nosqlbench/adapter/dataapi/ops/DataApiOpType.java b/nb-adapters/adapter-dataapi/src/main/java/io/nosqlbench/adapter/dataapi/ops/DataApiOpType.java index fc70df8ad..f6e71506b 100644 --- a/nb-adapters/adapter-dataapi/src/main/java/io/nosqlbench/adapter/dataapi/ops/DataApiOpType.java +++ b/nb-adapters/adapter-dataapi/src/main/java/io/nosqlbench/adapter/dataapi/ops/DataApiOpType.java @@ -39,10 +39,7 @@ public enum DataApiOpType { insert_one_vector, update_one, update_many, - delete_one, find_one_and_delete, - delete_many, - delete_all, replace_one, find_one_and_replace, estimated_document_count, @@ -54,6 +51,9 @@ public enum DataApiOpType { // in-database ops: create_collection_with_class, // in-collection ops: + delete_one, + delete_many, + delete_all, find, find_vector, find_vector_filter, @@ -67,6 +67,8 @@ public enum DataApiOpType { // db-admin ops: // in-database ops: // in-collection ops: + collection_delete_many, + collection_delete_one, collection_find, collection_find_one, collection_find_one_and_update,