From 07ce3a0d2931262a98863c9132fc75c1b03f8216 Mon Sep 17 00:00:00 2001 From: ShaunakDas88 Date: Wed, 1 May 2024 09:58:53 -0700 Subject: [PATCH] add in synchronous analogous of autocommit, write_txn, read_txn ops/opdispensers; prefix original ops with Async for disambiguation from synchronous versions --- .../adapter/neo4j/Neo4JOpMapper.java | 15 ++++-- ...a => Neo4JAsyncAutoCommitOpDispenser.java} | 12 ++--- ...java => Neo4JAsyncReadTxnOpDispenser.java} | 11 ++--- ...ava => Neo4JAsyncWriteTxnOpDispenser.java} | 12 +++-- .../Neo4JSyncAutoCommitOpDispenser.java | 42 +++++++++++++++++ .../Neo4JSyncReadTxnOpDispenser.java | 42 +++++++++++++++++ .../Neo4JSyncWriteTxnOpDispenser.java | 42 +++++++++++++++++ ...mitOp.java => Neo4JAsyncAutoCommitOp.java} | 8 ++-- ...eadTxnOp.java => Neo4JAsyncReadTxnOp.java} | 8 ++-- ...teTxnOp.java => Neo4JAsyncWriteTxnOp.java} | 8 ++-- .../adapter/neo4j/ops/Neo4JBaseOp.java | 9 ++-- .../neo4j/ops/Neo4JSyncAutoCommitOp.java | 42 +++++++++++++++++ .../adapter/neo4j/ops/Neo4JSyncReadTxnOp.java | 47 +++++++++++++++++++ .../neo4j/ops/Neo4JSyncWriteTxnOp.java | 47 +++++++++++++++++++ .../adapter/neo4j/types/Neo4JOpType.java | 12 +++-- 15 files changed, 319 insertions(+), 38 deletions(-) rename nb-adapters/adapter-neo4j/src/main/java/io/nosqlbench/adapter/neo4j/opdispensers/{Neo4JWriteTxnOpDispenser.java => Neo4JAsyncAutoCommitOpDispenser.java} (72%) rename nb-adapters/adapter-neo4j/src/main/java/io/nosqlbench/adapter/neo4j/opdispensers/{Neo4JAutoCommitOpDispenser.java => Neo4JAsyncReadTxnOpDispenser.java} (73%) rename nb-adapters/adapter-neo4j/src/main/java/io/nosqlbench/adapter/neo4j/opdispensers/{Neo4JReadTxnOpDispenser.java => Neo4JAsyncWriteTxnOpDispenser.java} (73%) create mode 100644 nb-adapters/adapter-neo4j/src/main/java/io/nosqlbench/adapter/neo4j/opdispensers/Neo4JSyncAutoCommitOpDispenser.java create mode 100644 nb-adapters/adapter-neo4j/src/main/java/io/nosqlbench/adapter/neo4j/opdispensers/Neo4JSyncReadTxnOpDispenser.java create mode 100644 nb-adapters/adapter-neo4j/src/main/java/io/nosqlbench/adapter/neo4j/opdispensers/Neo4JSyncWriteTxnOpDispenser.java rename nb-adapters/adapter-neo4j/src/main/java/io/nosqlbench/adapter/neo4j/ops/{Neo4JAutoCommitOp.java => Neo4JAsyncAutoCommitOp.java} (90%) rename nb-adapters/adapter-neo4j/src/main/java/io/nosqlbench/adapter/neo4j/ops/{Neo4JReadTxnOp.java => Neo4JAsyncReadTxnOp.java} (91%) rename nb-adapters/adapter-neo4j/src/main/java/io/nosqlbench/adapter/neo4j/ops/{Neo4JWriteTxnOp.java => Neo4JAsyncWriteTxnOp.java} (91%) create mode 100644 nb-adapters/adapter-neo4j/src/main/java/io/nosqlbench/adapter/neo4j/ops/Neo4JSyncAutoCommitOp.java create mode 100644 nb-adapters/adapter-neo4j/src/main/java/io/nosqlbench/adapter/neo4j/ops/Neo4JSyncReadTxnOp.java create mode 100644 nb-adapters/adapter-neo4j/src/main/java/io/nosqlbench/adapter/neo4j/ops/Neo4JSyncWriteTxnOp.java diff --git a/nb-adapters/adapter-neo4j/src/main/java/io/nosqlbench/adapter/neo4j/Neo4JOpMapper.java b/nb-adapters/adapter-neo4j/src/main/java/io/nosqlbench/adapter/neo4j/Neo4JOpMapper.java index 918d52f4d..1f0691b61 100644 --- a/nb-adapters/adapter-neo4j/src/main/java/io/nosqlbench/adapter/neo4j/Neo4JOpMapper.java +++ b/nb-adapters/adapter-neo4j/src/main/java/io/nosqlbench/adapter/neo4j/Neo4JOpMapper.java @@ -43,13 +43,22 @@ public class Neo4JOpMapper implements OpMapper { LongFunction spaceNameFunc = op.getAsFunctionOr("space", "default"); LongFunction spaceFunc = l -> cache.get(spaceNameFunc.apply(l)); return switch (typeAndTarget.enumId) { - case autocommit -> new Neo4JAutoCommitOpDispenser( + case sync_autocommit -> new Neo4JSyncAutoCommitOpDispenser( adapter, op, spaceFunc, typeAndTarget.enumId.getValue() ); - case read_transaction -> new Neo4JReadTxnOpDispenser( + case async_autocommit -> new Neo4JAsyncAutoCommitOpDispenser( adapter, op, spaceFunc, typeAndTarget.enumId.getValue() ); - case write_transaction -> new Neo4JWriteTxnOpDispenser( + case sync_read_transaction -> new Neo4JSyncReadTxnOpDispenser( + adapter, op, spaceFunc, typeAndTarget.enumId.getValue() + ); + case async_read_transaction -> new Neo4JAsyncReadTxnOpDispenser( + adapter, op, spaceFunc, typeAndTarget.enumId.getValue() + ); + case sync_write_transaction -> new Neo4JSyncWriteTxnOpDispenser( + adapter, op, spaceFunc, typeAndTarget.enumId.getValue() + ); + case async_write_transaction -> new Neo4JAsyncWriteTxnOpDispenser( adapter, op, spaceFunc, typeAndTarget.enumId.getValue() ); }; diff --git a/nb-adapters/adapter-neo4j/src/main/java/io/nosqlbench/adapter/neo4j/opdispensers/Neo4JWriteTxnOpDispenser.java b/nb-adapters/adapter-neo4j/src/main/java/io/nosqlbench/adapter/neo4j/opdispensers/Neo4JAsyncAutoCommitOpDispenser.java similarity index 72% rename from nb-adapters/adapter-neo4j/src/main/java/io/nosqlbench/adapter/neo4j/opdispensers/Neo4JWriteTxnOpDispenser.java rename to nb-adapters/adapter-neo4j/src/main/java/io/nosqlbench/adapter/neo4j/opdispensers/Neo4JAsyncAutoCommitOpDispenser.java index cfb5d5aea..4d1079be7 100644 --- a/nb-adapters/adapter-neo4j/src/main/java/io/nosqlbench/adapter/neo4j/opdispensers/Neo4JWriteTxnOpDispenser.java +++ b/nb-adapters/adapter-neo4j/src/main/java/io/nosqlbench/adapter/neo4j/opdispensers/Neo4JAsyncAutoCommitOpDispenser.java @@ -17,24 +17,24 @@ package io.nosqlbench.adapter.neo4j.opdispensers; import io.nosqlbench.adapter.neo4j.Neo4JDriverAdapter; +import io.nosqlbench.adapter.neo4j.ops.Neo4JAsyncAutoCommitOp; import io.nosqlbench.adapter.neo4j.Neo4JSpace; -import io.nosqlbench.adapter.neo4j.ops.Neo4JWriteTxnOp; -import io.nosqlbench.adapter.neo4j.types.Neo4JOpType; import io.nosqlbench.adapters.api.templating.ParsedOp; + import org.neo4j.driver.async.AsyncSession; import java.util.function.LongFunction; -public class Neo4JWriteTxnOpDispenser extends Neo4JBaseOpDispenser { +public class Neo4JAsyncAutoCommitOpDispenser extends Neo4JBaseOpDispenser { - public Neo4JWriteTxnOpDispenser(Neo4JDriverAdapter adapter, ParsedOp op, LongFunction spaceFunc, String requiredTemplateKey) { + public Neo4JAsyncAutoCommitOpDispenser(Neo4JDriverAdapter adapter, ParsedOp op, LongFunction spaceFunc, String requiredTemplateKey) { super(adapter, op, spaceFunc, requiredTemplateKey); } @Override - public LongFunction createOpFunc() { - return l -> new Neo4JWriteTxnOp( + public LongFunction createOpFunc() { + return l -> new Neo4JAsyncAutoCommitOp( spaceFunc.apply(l).getDriver().session(AsyncSession.class), queryFunc.apply(l) ); diff --git a/nb-adapters/adapter-neo4j/src/main/java/io/nosqlbench/adapter/neo4j/opdispensers/Neo4JAutoCommitOpDispenser.java b/nb-adapters/adapter-neo4j/src/main/java/io/nosqlbench/adapter/neo4j/opdispensers/Neo4JAsyncReadTxnOpDispenser.java similarity index 73% rename from nb-adapters/adapter-neo4j/src/main/java/io/nosqlbench/adapter/neo4j/opdispensers/Neo4JAutoCommitOpDispenser.java rename to nb-adapters/adapter-neo4j/src/main/java/io/nosqlbench/adapter/neo4j/opdispensers/Neo4JAsyncReadTxnOpDispenser.java index f3899245e..a8eb63036 100644 --- a/nb-adapters/adapter-neo4j/src/main/java/io/nosqlbench/adapter/neo4j/opdispensers/Neo4JAutoCommitOpDispenser.java +++ b/nb-adapters/adapter-neo4j/src/main/java/io/nosqlbench/adapter/neo4j/opdispensers/Neo4JAsyncReadTxnOpDispenser.java @@ -17,8 +17,8 @@ package io.nosqlbench.adapter.neo4j.opdispensers; import io.nosqlbench.adapter.neo4j.Neo4JDriverAdapter; -import io.nosqlbench.adapter.neo4j.ops.Neo4JAutoCommitOp; import io.nosqlbench.adapter.neo4j.Neo4JSpace; +import io.nosqlbench.adapter.neo4j.ops.Neo4JAsyncReadTxnOp; import io.nosqlbench.adapters.api.templating.ParsedOp; import org.neo4j.driver.async.AsyncSession; @@ -26,15 +26,14 @@ import org.neo4j.driver.async.AsyncSession; import java.util.function.LongFunction; -public class Neo4JAutoCommitOpDispenser extends Neo4JBaseOpDispenser { - - public Neo4JAutoCommitOpDispenser(Neo4JDriverAdapter adapter, ParsedOp op, LongFunction spaceFunc, String requiredTemplateKey) { +public class Neo4JAsyncReadTxnOpDispenser extends Neo4JBaseOpDispenser { + public Neo4JAsyncReadTxnOpDispenser(Neo4JDriverAdapter adapter, ParsedOp op, LongFunction spaceFunc, String requiredTemplateKey) { super(adapter, op, spaceFunc, requiredTemplateKey); } @Override - public LongFunction createOpFunc() { - return l -> new Neo4JAutoCommitOp( + public LongFunction createOpFunc() { + return l -> new Neo4JAsyncReadTxnOp( spaceFunc.apply(l).getDriver().session(AsyncSession.class), queryFunc.apply(l) ); diff --git a/nb-adapters/adapter-neo4j/src/main/java/io/nosqlbench/adapter/neo4j/opdispensers/Neo4JReadTxnOpDispenser.java b/nb-adapters/adapter-neo4j/src/main/java/io/nosqlbench/adapter/neo4j/opdispensers/Neo4JAsyncWriteTxnOpDispenser.java similarity index 73% rename from nb-adapters/adapter-neo4j/src/main/java/io/nosqlbench/adapter/neo4j/opdispensers/Neo4JReadTxnOpDispenser.java rename to nb-adapters/adapter-neo4j/src/main/java/io/nosqlbench/adapter/neo4j/opdispensers/Neo4JAsyncWriteTxnOpDispenser.java index 770d148cf..5bc5dc5da 100644 --- a/nb-adapters/adapter-neo4j/src/main/java/io/nosqlbench/adapter/neo4j/opdispensers/Neo4JReadTxnOpDispenser.java +++ b/nb-adapters/adapter-neo4j/src/main/java/io/nosqlbench/adapter/neo4j/opdispensers/Neo4JAsyncWriteTxnOpDispenser.java @@ -18,21 +18,23 @@ package io.nosqlbench.adapter.neo4j.opdispensers; import io.nosqlbench.adapter.neo4j.Neo4JDriverAdapter; import io.nosqlbench.adapter.neo4j.Neo4JSpace; -import io.nosqlbench.adapter.neo4j.ops.Neo4JReadTxnOp; +import io.nosqlbench.adapter.neo4j.ops.Neo4JAsyncWriteTxnOp; import io.nosqlbench.adapters.api.templating.ParsedOp; + import org.neo4j.driver.async.AsyncSession; import java.util.function.LongFunction; -public class Neo4JReadTxnOpDispenser extends Neo4JBaseOpDispenser { - public Neo4JReadTxnOpDispenser(Neo4JDriverAdapter adapter, ParsedOp op, LongFunction spaceFunc, String requiredTemplateKey) { +public class Neo4JAsyncWriteTxnOpDispenser extends Neo4JBaseOpDispenser { + + public Neo4JAsyncWriteTxnOpDispenser(Neo4JDriverAdapter adapter, ParsedOp op, LongFunction spaceFunc, String requiredTemplateKey) { super(adapter, op, spaceFunc, requiredTemplateKey); } @Override - public LongFunction createOpFunc() { - return l -> new Neo4JReadTxnOp( + public LongFunction createOpFunc() { + return l -> new Neo4JAsyncWriteTxnOp( spaceFunc.apply(l).getDriver().session(AsyncSession.class), queryFunc.apply(l) ); diff --git a/nb-adapters/adapter-neo4j/src/main/java/io/nosqlbench/adapter/neo4j/opdispensers/Neo4JSyncAutoCommitOpDispenser.java b/nb-adapters/adapter-neo4j/src/main/java/io/nosqlbench/adapter/neo4j/opdispensers/Neo4JSyncAutoCommitOpDispenser.java new file mode 100644 index 000000000..bd08aa88d --- /dev/null +++ b/nb-adapters/adapter-neo4j/src/main/java/io/nosqlbench/adapter/neo4j/opdispensers/Neo4JSyncAutoCommitOpDispenser.java @@ -0,0 +1,42 @@ +/* + * 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.neo4j.opdispensers; + +import io.nosqlbench.adapter.neo4j.Neo4JDriverAdapter; +import io.nosqlbench.adapter.neo4j.ops.Neo4JSyncAutoCommitOp; +import io.nosqlbench.adapter.neo4j.Neo4JSpace; +import io.nosqlbench.adapters.api.templating.ParsedOp; + +import org.neo4j.driver.Session; + +import java.util.function.LongFunction; + + +public class Neo4JSyncAutoCommitOpDispenser extends Neo4JBaseOpDispenser { + + public Neo4JSyncAutoCommitOpDispenser(Neo4JDriverAdapter adapter, ParsedOp op, LongFunction spaceFunc, String requiredTemplateKey) { + super(adapter, op, spaceFunc, requiredTemplateKey); + } + + @Override + public LongFunction createOpFunc() { + return l -> new Neo4JSyncAutoCommitOp( + spaceFunc.apply(l).getDriver().session(Session.class), + queryFunc.apply(l) + ); + } +} diff --git a/nb-adapters/adapter-neo4j/src/main/java/io/nosqlbench/adapter/neo4j/opdispensers/Neo4JSyncReadTxnOpDispenser.java b/nb-adapters/adapter-neo4j/src/main/java/io/nosqlbench/adapter/neo4j/opdispensers/Neo4JSyncReadTxnOpDispenser.java new file mode 100644 index 000000000..b1b170566 --- /dev/null +++ b/nb-adapters/adapter-neo4j/src/main/java/io/nosqlbench/adapter/neo4j/opdispensers/Neo4JSyncReadTxnOpDispenser.java @@ -0,0 +1,42 @@ +/* + * 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.neo4j.opdispensers; + +import io.nosqlbench.adapter.neo4j.Neo4JDriverAdapter; +import io.nosqlbench.adapter.neo4j.ops.Neo4JSyncReadTxnOp; +import io.nosqlbench.adapter.neo4j.Neo4JSpace; +import io.nosqlbench.adapters.api.templating.ParsedOp; + +import org.neo4j.driver.Session; + +import java.util.function.LongFunction; + + +public class Neo4JSyncReadTxnOpDispenser extends Neo4JBaseOpDispenser { + + public Neo4JSyncReadTxnOpDispenser(Neo4JDriverAdapter adapter, ParsedOp op, LongFunction spaceFunc, String requiredTemplateKey) { + super(adapter, op, spaceFunc, requiredTemplateKey); + } + + @Override + public LongFunction createOpFunc() { + return l -> new Neo4JSyncReadTxnOp( + spaceFunc.apply(l).getDriver().session(Session.class), + queryFunc.apply(l) + ); + } +} diff --git a/nb-adapters/adapter-neo4j/src/main/java/io/nosqlbench/adapter/neo4j/opdispensers/Neo4JSyncWriteTxnOpDispenser.java b/nb-adapters/adapter-neo4j/src/main/java/io/nosqlbench/adapter/neo4j/opdispensers/Neo4JSyncWriteTxnOpDispenser.java new file mode 100644 index 000000000..7c7d095aa --- /dev/null +++ b/nb-adapters/adapter-neo4j/src/main/java/io/nosqlbench/adapter/neo4j/opdispensers/Neo4JSyncWriteTxnOpDispenser.java @@ -0,0 +1,42 @@ +/* + * 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.neo4j.opdispensers; + +import io.nosqlbench.adapter.neo4j.Neo4JDriverAdapter; +import io.nosqlbench.adapter.neo4j.ops.Neo4JSyncWriteTxnOp; +import io.nosqlbench.adapter.neo4j.Neo4JSpace; +import io.nosqlbench.adapters.api.templating.ParsedOp; + +import org.neo4j.driver.Session; + +import java.util.function.LongFunction; + + +public class Neo4JSyncWriteTxnOpDispenser extends Neo4JBaseOpDispenser { + + public Neo4JSyncWriteTxnOpDispenser(Neo4JDriverAdapter adapter, ParsedOp op, LongFunction spaceFunc, String requiredTemplateKey) { + super(adapter, op, spaceFunc, requiredTemplateKey); + } + + @Override + public LongFunction createOpFunc() { + return l -> new Neo4JSyncWriteTxnOp( + spaceFunc.apply(l).getDriver().session(Session.class), + queryFunc.apply(l) + ); + } +} diff --git a/nb-adapters/adapter-neo4j/src/main/java/io/nosqlbench/adapter/neo4j/ops/Neo4JAutoCommitOp.java b/nb-adapters/adapter-neo4j/src/main/java/io/nosqlbench/adapter/neo4j/ops/Neo4JAsyncAutoCommitOp.java similarity index 90% rename from nb-adapters/adapter-neo4j/src/main/java/io/nosqlbench/adapter/neo4j/ops/Neo4JAutoCommitOp.java rename to nb-adapters/adapter-neo4j/src/main/java/io/nosqlbench/adapter/neo4j/ops/Neo4JAsyncAutoCommitOp.java index 7505553af..b1fd89869 100644 --- a/nb-adapters/adapter-neo4j/src/main/java/io/nosqlbench/adapter/neo4j/ops/Neo4JAutoCommitOp.java +++ b/nb-adapters/adapter-neo4j/src/main/java/io/nosqlbench/adapter/neo4j/ops/Neo4JAsyncAutoCommitOp.java @@ -26,10 +26,12 @@ import java.util.concurrent.ExecutionException; import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeoutException; -public class Neo4JAutoCommitOp extends Neo4JBaseOp { +public class Neo4JAsyncAutoCommitOp extends Neo4JBaseOp { + private final AsyncSession session; - public Neo4JAutoCommitOp(AsyncSession session, Query query) { - super(session, query); + public Neo4JAsyncAutoCommitOp(AsyncSession session, Query query) { + super(query); + this.session = session; } /** diff --git a/nb-adapters/adapter-neo4j/src/main/java/io/nosqlbench/adapter/neo4j/ops/Neo4JReadTxnOp.java b/nb-adapters/adapter-neo4j/src/main/java/io/nosqlbench/adapter/neo4j/ops/Neo4JAsyncReadTxnOp.java similarity index 91% rename from nb-adapters/adapter-neo4j/src/main/java/io/nosqlbench/adapter/neo4j/ops/Neo4JReadTxnOp.java rename to nb-adapters/adapter-neo4j/src/main/java/io/nosqlbench/adapter/neo4j/ops/Neo4JAsyncReadTxnOp.java index 861e1d33d..26f2deb93 100644 --- a/nb-adapters/adapter-neo4j/src/main/java/io/nosqlbench/adapter/neo4j/ops/Neo4JReadTxnOp.java +++ b/nb-adapters/adapter-neo4j/src/main/java/io/nosqlbench/adapter/neo4j/ops/Neo4JAsyncReadTxnOp.java @@ -26,10 +26,12 @@ import java.util.concurrent.ExecutionException; import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeoutException; -public class Neo4JReadTxnOp extends Neo4JBaseOp{ +public class Neo4JAsyncReadTxnOp extends Neo4JBaseOp{ + private final AsyncSession session; - public Neo4JReadTxnOp(AsyncSession session, Query query) { - super(session, query); + public Neo4JAsyncReadTxnOp(AsyncSession session, Query query) { + super(query); + this.session = session; } /** diff --git a/nb-adapters/adapter-neo4j/src/main/java/io/nosqlbench/adapter/neo4j/ops/Neo4JWriteTxnOp.java b/nb-adapters/adapter-neo4j/src/main/java/io/nosqlbench/adapter/neo4j/ops/Neo4JAsyncWriteTxnOp.java similarity index 91% rename from nb-adapters/adapter-neo4j/src/main/java/io/nosqlbench/adapter/neo4j/ops/Neo4JWriteTxnOp.java rename to nb-adapters/adapter-neo4j/src/main/java/io/nosqlbench/adapter/neo4j/ops/Neo4JAsyncWriteTxnOp.java index 1fec09fd6..aca7fa68b 100644 --- a/nb-adapters/adapter-neo4j/src/main/java/io/nosqlbench/adapter/neo4j/ops/Neo4JWriteTxnOp.java +++ b/nb-adapters/adapter-neo4j/src/main/java/io/nosqlbench/adapter/neo4j/ops/Neo4JAsyncWriteTxnOp.java @@ -26,10 +26,12 @@ import java.util.concurrent.ExecutionException; import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeoutException; -public class Neo4JWriteTxnOp extends Neo4JBaseOp{ +public class Neo4JAsyncWriteTxnOp extends Neo4JBaseOp{ + private final AsyncSession session; - public Neo4JWriteTxnOp(AsyncSession session, Query query) { - super(session, query); + public Neo4JAsyncWriteTxnOp(AsyncSession session, Query query) { + super(query); + this.session = session; } /** diff --git a/nb-adapters/adapter-neo4j/src/main/java/io/nosqlbench/adapter/neo4j/ops/Neo4JBaseOp.java b/nb-adapters/adapter-neo4j/src/main/java/io/nosqlbench/adapter/neo4j/ops/Neo4JBaseOp.java index 261b5cf19..aaced604e 100644 --- a/nb-adapters/adapter-neo4j/src/main/java/io/nosqlbench/adapter/neo4j/ops/Neo4JBaseOp.java +++ b/nb-adapters/adapter-neo4j/src/main/java/io/nosqlbench/adapter/neo4j/ops/Neo4JBaseOp.java @@ -24,20 +24,17 @@ import org.neo4j.driver.async.AsyncSession; public abstract class Neo4JBaseOp implements CycleOp { - - protected final AsyncSession session; protected final Query query; - public Neo4JBaseOp(AsyncSession session, Query query) { - this.session = session; + public Neo4JBaseOp(Query query) { this.query = query; } /** * In the child classes, this method will be responsible for: - * - using the Neo4J AsyncSession object to run the Neo4J Query + * - using the Neo4J Session/AsyncSession object to run the Neo4J Query * - process the Result to get an array of Records - * - close the AsyncSession + * - close the Session/AsyncSession * - Return the array of Records * * Session creation and closing is considered light-weight. Reference: diff --git a/nb-adapters/adapter-neo4j/src/main/java/io/nosqlbench/adapter/neo4j/ops/Neo4JSyncAutoCommitOp.java b/nb-adapters/adapter-neo4j/src/main/java/io/nosqlbench/adapter/neo4j/ops/Neo4JSyncAutoCommitOp.java new file mode 100644 index 000000000..9b1fa5f31 --- /dev/null +++ b/nb-adapters/adapter-neo4j/src/main/java/io/nosqlbench/adapter/neo4j/ops/Neo4JSyncAutoCommitOp.java @@ -0,0 +1,42 @@ +/* + * 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.neo4j.ops; + +import org.neo4j.driver.Query; +import org.neo4j.driver.Record; +import org.neo4j.driver.Session; + +import java.util.List; + + +public class Neo4JSyncAutoCommitOp extends Neo4JBaseOp { + private final Session session; + + public Neo4JSyncAutoCommitOp(Session session, Query query) { + super(query); + this.session = session; + } + + @Override + public final Record[] apply(long value) { + List recordList = session.run(query).list(); + if (session.isOpen()) { + session.close(); + } + return recordList.toArray(new Record[recordList.size()]); + } +} diff --git a/nb-adapters/adapter-neo4j/src/main/java/io/nosqlbench/adapter/neo4j/ops/Neo4JSyncReadTxnOp.java b/nb-adapters/adapter-neo4j/src/main/java/io/nosqlbench/adapter/neo4j/ops/Neo4JSyncReadTxnOp.java new file mode 100644 index 000000000..9d6876633 --- /dev/null +++ b/nb-adapters/adapter-neo4j/src/main/java/io/nosqlbench/adapter/neo4j/ops/Neo4JSyncReadTxnOp.java @@ -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.neo4j.ops; + +import org.neo4j.driver.Query; +import org.neo4j.driver.Record; +import org.neo4j.driver.Session; + +import java.util.List; + + +public class Neo4JSyncReadTxnOp extends Neo4JBaseOp{ + private final Session session; + + public Neo4JSyncReadTxnOp(Session session, Query query) { + super(query); + this.session = session; + } + + @Override + public final Record[] apply(long value) { + List recordList = session.executeRead( + txn -> { + var result = txn.run(query); + return result.list(); + } + ); + if (session.isOpen()) { + session.close(); + } + return recordList.toArray(new Record[recordList.size()]); + } +} diff --git a/nb-adapters/adapter-neo4j/src/main/java/io/nosqlbench/adapter/neo4j/ops/Neo4JSyncWriteTxnOp.java b/nb-adapters/adapter-neo4j/src/main/java/io/nosqlbench/adapter/neo4j/ops/Neo4JSyncWriteTxnOp.java new file mode 100644 index 000000000..746fee0fc --- /dev/null +++ b/nb-adapters/adapter-neo4j/src/main/java/io/nosqlbench/adapter/neo4j/ops/Neo4JSyncWriteTxnOp.java @@ -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.neo4j.ops; + +import org.neo4j.driver.Query; +import org.neo4j.driver.Record; +import org.neo4j.driver.Session; + +import java.util.List; + +public class Neo4JSyncWriteTxnOp extends Neo4JBaseOp{ + private final Session session; + + public Neo4JSyncWriteTxnOp(Session session, Query query) { + super(query); + this.session = session; + } + + + @Override + public final Record[] apply(long value) { + List recordList = session.executeWrite( + txn -> { + var result = txn.run(query); + return result.list(); + } + ); + if (session.isOpen()) { + session.close(); + } + return recordList.toArray(new Record[recordList.size()]); + } +} diff --git a/nb-adapters/adapter-neo4j/src/main/java/io/nosqlbench/adapter/neo4j/types/Neo4JOpType.java b/nb-adapters/adapter-neo4j/src/main/java/io/nosqlbench/adapter/neo4j/types/Neo4JOpType.java index 8c5040ade..6f356deff 100644 --- a/nb-adapters/adapter-neo4j/src/main/java/io/nosqlbench/adapter/neo4j/types/Neo4JOpType.java +++ b/nb-adapters/adapter-neo4j/src/main/java/io/nosqlbench/adapter/neo4j/types/Neo4JOpType.java @@ -18,11 +18,17 @@ package io.nosqlbench.adapter.neo4j.types; public enum Neo4JOpType { - autocommit("autocommit"), + sync_autocommit("sync_autocommit"), - read_transaction("read_transaction"), + async_autocommit("async_autocommit"), - write_transaction("write_transaction"); + sync_read_transaction("sync_read_transaction"), + + async_read_transaction("async_read_transaction"), + + sync_write_transaction("sync_write_transaction"), + + async_write_transaction("async_write_transaction"); private final String value;