From 701122ff61589c7730fc13cfdc1fab36bd38497f Mon Sep 17 00:00:00 2001 From: Jonathan Shook Date: Fri, 11 Mar 2022 10:03:02 -0600 Subject: [PATCH] implement DeleteTable for dynamodb driver --- .../adapter/dynamodb/DynamoDBCmdType.java | 7 +++ .../adapter/dynamodb/DynamoDBOpMapper.java | 6 +-- .../DDBDeleteTableOpDispenser.java | 54 +++++++++++++++++++ .../dynamodb/optypes/DDBDeleteTableOp.java | 36 +++++++++++++ 4 files changed, 99 insertions(+), 4 deletions(-) create mode 100644 adapter-dynamodb/src/main/java/io/nosqlbench/adapter/dynamodb/opdispensers/DDBDeleteTableOpDispenser.java create mode 100644 adapter-dynamodb/src/main/java/io/nosqlbench/adapter/dynamodb/optypes/DDBDeleteTableOp.java diff --git a/adapter-dynamodb/src/main/java/io/nosqlbench/adapter/dynamodb/DynamoDBCmdType.java b/adapter-dynamodb/src/main/java/io/nosqlbench/adapter/dynamodb/DynamoDBCmdType.java index 66cec549b..e61640422 100644 --- a/adapter-dynamodb/src/main/java/io/nosqlbench/adapter/dynamodb/DynamoDBCmdType.java +++ b/adapter-dynamodb/src/main/java/io/nosqlbench/adapter/dynamodb/DynamoDBCmdType.java @@ -16,8 +16,15 @@ package io.nosqlbench.adapter.dynamodb; +/** + * Op templates which are supported by the NoSQLBench DynamoDB driver are + * enumerated below. These command names should mirror those in the official + * DynamoDB API exactly. See the official API for more details. + * @see DynamoDB API Reference + */ public enum DynamoDBCmdType { CreateTable, + DeleteTable, PutItem, GetItem, Query diff --git a/adapter-dynamodb/src/main/java/io/nosqlbench/adapter/dynamodb/DynamoDBOpMapper.java b/adapter-dynamodb/src/main/java/io/nosqlbench/adapter/dynamodb/DynamoDBOpMapper.java index a60c80d27..542f1cc6a 100644 --- a/adapter-dynamodb/src/main/java/io/nosqlbench/adapter/dynamodb/DynamoDBOpMapper.java +++ b/adapter-dynamodb/src/main/java/io/nosqlbench/adapter/dynamodb/DynamoDBOpMapper.java @@ -17,10 +17,7 @@ package io.nosqlbench.adapter.dynamodb; import com.amazonaws.services.dynamodbv2.document.DynamoDB; -import io.nosqlbench.adapter.dynamodb.opdispensers.DDBCreateTableOpDispenser; -import io.nosqlbench.adapter.dynamodb.opdispensers.DDBGetItemOpDispenser; -import io.nosqlbench.adapter.dynamodb.opdispensers.DDBPutItemOpDispenser; -import io.nosqlbench.adapter.dynamodb.opdispensers.DDBQueryOpDispenser; +import io.nosqlbench.adapter.dynamodb.opdispensers.*; import io.nosqlbench.adapter.dynamodb.optypes.DynamoDBOp; import io.nosqlbench.engine.api.activityimpl.OpDispenser; import io.nosqlbench.engine.api.activityimpl.OpMapper; @@ -56,6 +53,7 @@ public class DynamoDBOpMapper implements OpMapper { TypeAndTarget cmdType = cmd.getTargetEnum(DynamoDBCmdType.class,String.class); return switch (cmdType.enumId) { case CreateTable -> new DDBCreateTableOpDispenser(ddb, cmd, cmdType.targetFunction); + case DeleteTable -> new DDBDeleteTableOpDispenser(ddb, cmd, cmdType.targetFunction); case PutItem -> new DDBPutItemOpDispenser(ddb, cmd, cmdType.targetFunction); case GetItem -> new DDBGetItemOpDispenser(ddb, cmd, cmdType.targetFunction); case Query -> new DDBQueryOpDispenser(ddb, cmd, cmdType.targetFunction); diff --git a/adapter-dynamodb/src/main/java/io/nosqlbench/adapter/dynamodb/opdispensers/DDBDeleteTableOpDispenser.java b/adapter-dynamodb/src/main/java/io/nosqlbench/adapter/dynamodb/opdispensers/DDBDeleteTableOpDispenser.java new file mode 100644 index 000000000..fe856d2be --- /dev/null +++ b/adapter-dynamodb/src/main/java/io/nosqlbench/adapter/dynamodb/opdispensers/DDBDeleteTableOpDispenser.java @@ -0,0 +1,54 @@ +/* + * Copyright (c) 2022 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.dynamodb.opdispensers; + +import com.amazonaws.services.dynamodbv2.document.DynamoDB; +import com.amazonaws.services.dynamodbv2.model.DeleteTableRequest; +import io.nosqlbench.adapter.dynamodb.optypes.DDBDeleteTableOp; +import io.nosqlbench.adapter.dynamodb.optypes.DynamoDBOp; +import io.nosqlbench.engine.api.activityimpl.BaseOpDispenser; +import io.nosqlbench.engine.api.templating.ParsedOp; + +import java.util.function.LongFunction; + +/** + *
{@code
+ * Request Syntax
+ * {
+ *    "TableName": "string"
+ * }
+ * }
+ */ +public class DDBDeleteTableOpDispenser extends BaseOpDispenser { + + private final DynamoDB ddb; + private final LongFunction tableNameFunc; + + public DDBDeleteTableOpDispenser(DynamoDB ddb, ParsedOp cmd, LongFunction targetFunc) { + super(cmd); + this.ddb = ddb; + this.tableNameFunc = l -> targetFunc.apply(l).toString(); + } + + @Override + public DDBDeleteTableOp apply(long cycle) { + DeleteTableRequest rq = new DeleteTableRequest(); + rq.setTableName(tableNameFunc.apply(cycle)); + return new DDBDeleteTableOp(ddb, rq); + } + +} diff --git a/adapter-dynamodb/src/main/java/io/nosqlbench/adapter/dynamodb/optypes/DDBDeleteTableOp.java b/adapter-dynamodb/src/main/java/io/nosqlbench/adapter/dynamodb/optypes/DDBDeleteTableOp.java new file mode 100644 index 000000000..f4912e86f --- /dev/null +++ b/adapter-dynamodb/src/main/java/io/nosqlbench/adapter/dynamodb/optypes/DDBDeleteTableOp.java @@ -0,0 +1,36 @@ +/* + * Copyright (c) 2022 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.dynamodb.optypes; + +import com.amazonaws.services.dynamodbv2.document.DynamoDB; +import com.amazonaws.services.dynamodbv2.model.DeleteTableRequest; +import com.amazonaws.services.dynamodbv2.model.DeleteTableResult; + +public class DDBDeleteTableOp extends DynamoDBOp { + + private final DeleteTableRequest rq; + + public DDBDeleteTableOp(DynamoDB ddb, DeleteTableRequest rq) { + super(ddb); + this.rq = rq; + } + + @Override + public DeleteTableResult apply(long value) { + return ddb.getTable(rq.getTableName()).delete(); + } +}