From ac68ea5a0f5ac2be154ee8954543a5da6ad35f11 Mon Sep 17 00:00:00 2001 From: Jonathan Shook Date: Mon, 16 Oct 2023 13:17:19 -0500 Subject: [PATCH 1/7] added result-type option to http op fields --- .../nosqlbench/adapter/http/core/HttpOp.java | 41 ++++++++----------- .../adapter/http/core/HttpOpDispenser.java | 8 +++- .../adapter/http/core/HttpResultType.java | 15 +++++++ adapter-http/src/main/resources/http.md | 5 +++ 4 files changed, 43 insertions(+), 26 deletions(-) create mode 100644 adapter-http/src/main/java/io/nosqlbench/adapter/http/core/HttpResultType.java diff --git a/adapter-http/src/main/java/io/nosqlbench/adapter/http/core/HttpOp.java b/adapter-http/src/main/java/io/nosqlbench/adapter/http/core/HttpOp.java index 099975e09..de1726237 100644 --- a/adapter-http/src/main/java/io/nosqlbench/adapter/http/core/HttpOp.java +++ b/adapter-http/src/main/java/io/nosqlbench/adapter/http/core/HttpOp.java @@ -46,14 +46,24 @@ public class HttpOp implements CycleOp { private final HttpClient client; private final HttpSpace space; private final long cycle; + private final HttpResultType resultType; - public HttpOp(HttpClient client, HttpRequest request, Pattern ok_status, Pattern ok_body, HttpSpace space, long cycle) { + public HttpOp( + HttpClient client, + HttpRequest request, + Pattern ok_status, + Pattern ok_body, + HttpSpace space, + long cycle, + HttpResultType resultType + ) { this.client = client; this.request = request; this.ok_status = ok_status; this.ok_body = ok_body; this.space = space; this.cycle = cycle; + this.resultType = resultType; } @Override @@ -91,31 +101,14 @@ public class HttpOp implements CycleOp { System.out.println(); } // propogate exception so main error handling logic can take over - if (error!=null) { + if (error != null) { throw new RuntimeException(error); } } - try { - JsonParser parser = new JsonParser(); - JsonObject json = parser.parse(response.body()).getAsJsonObject(); - - if (!json.has("hits") || !json.getAsJsonObject("hits").has("hits")) { - return null; - } - JsonArray hits = json.getAsJsonObject("hits").getAsJsonArray("hits"); - - int count = hits.size(); - int[] keys = new int[count]; - int i = 0; - for (JsonElement element : hits) { - JsonObject hit = element.getAsJsonObject(); - keys[i] = hit.getAsJsonObject("_source").get("key").getAsInt(); - i++; - } - return keys; - } catch (Exception e) { - throw new RuntimeException(e); - } - + return switch (resultType) { + case string -> response.body(); + case json_element -> JsonParser.parseString(response.body()).getAsJsonObject(); + case none -> null; + }; } } diff --git a/adapter-http/src/main/java/io/nosqlbench/adapter/http/core/HttpOpDispenser.java b/adapter-http/src/main/java/io/nosqlbench/adapter/http/core/HttpOpDispenser.java index 6895a18b7..9351bf140 100644 --- a/adapter-http/src/main/java/io/nosqlbench/adapter/http/core/HttpOpDispenser.java +++ b/adapter-http/src/main/java/io/nosqlbench/adapter/http/core/HttpOpDispenser.java @@ -93,7 +93,7 @@ public class HttpOpDispenser extends BaseOpDispenser { .filter(n -> n.charAt(0) >= 'A') .filter(n -> n.charAt(0) <= 'Z') .toList(); - if (headerNames.size() > 0) { + if (!headerNames.isEmpty()) { for (String headerName : headerNames) { initBuilderF = op.enhanceFunc(initBuilderF, headerName, String.class, (b, h) -> b.header(headerName, h)); } @@ -113,12 +113,16 @@ public class HttpOpDispenser extends BaseOpDispenser { .map(Pattern::compile) .orElse(null); + HttpResultType resultType = op.getOptionalEnumFromField(HttpResultType.class,"result-type").orElse(HttpResultType.none); + LongFunction opFunc = cycle -> new HttpOp( ctxF.apply(cycle).getClient(), reqF.apply(cycle), ok_status, ok_body, - ctxF.apply(cycle), cycle + ctxF.apply(cycle), + cycle, + resultType ); return opFunc; } diff --git a/adapter-http/src/main/java/io/nosqlbench/adapter/http/core/HttpResultType.java b/adapter-http/src/main/java/io/nosqlbench/adapter/http/core/HttpResultType.java new file mode 100644 index 000000000..0b821157b --- /dev/null +++ b/adapter-http/src/main/java/io/nosqlbench/adapter/http/core/HttpResultType.java @@ -0,0 +1,15 @@ +package io.nosqlbench.adapter.http.core; + +import com.google.gson.JsonElement; + +public enum HttpResultType { + none(Void.class), + string(String.class), + json_element(JsonElement.class); + + public final Class resultClass; + + HttpResultType(Class resultClass) { + this.resultClass = resultClass; + } +} diff --git a/adapter-http/src/main/resources/http.md b/adapter-http/src/main/resources/http.md index 545ce7080..8664a443d 100644 --- a/adapter-http/src/main/resources/http.md +++ b/adapter-http/src/main/resources/http.md @@ -163,6 +163,11 @@ defaults: - **ok-body** - An optional regex pattern which will be applied to the body to verify that it is a valid response. If this is not provided, then content bodies are read, but any content is considered valid. +- **result-type** - If provided, you can specify `none`, `string`, or `json_element`. + By default, this is set to `none` and the http op will not produce a result type. + If you use string, then the raw body is returned, and if you use json_element, + then the body is presumed to be valid JSON, and it is parsed and returned as + a JsonElement. Any other statement parameter which is capitalized is taken as a request header. If additional fields are provided which are not included in the From 244493232227ea3d02517e92f41c29dc2c02d7ee Mon Sep 17 00:00:00 2001 From: Jonathan Shook Date: Mon, 16 Oct 2023 13:37:10 -0500 Subject: [PATCH 2/7] post merge fixups --- .../adapter/http/JsonElementUtils.java | 48 ++++ .../adapter/http/core/HttpResultType.java.new | 33 +++ .../baselinesv2/http_elastic_vector.yaml | 234 ++++++++++++++++++ 3 files changed, 315 insertions(+) create mode 100644 adapter-http/src/main/java/io/nosqlbench/adapter/http/JsonElementUtils.java create mode 100644 adapter-http/src/main/java/io/nosqlbench/adapter/http/core/HttpResultType.java.new create mode 100644 adapter-http/src/main/resources/activities/baselinesv2/http_elastic_vector.yaml diff --git a/adapter-http/src/main/java/io/nosqlbench/adapter/http/JsonElementUtils.java b/adapter-http/src/main/java/io/nosqlbench/adapter/http/JsonElementUtils.java new file mode 100644 index 000000000..8a7c87f81 --- /dev/null +++ b/adapter-http/src/main/java/io/nosqlbench/adapter/http/JsonElementUtils.java @@ -0,0 +1,48 @@ +package io.nosqlbench.adapter.http; + +import com.google.gson.JsonArray; +import com.google.gson.JsonElement; +import com.google.gson.JsonObject; + +import java.util.ArrayList; +import java.util.List; + +public class JsonElementUtils { + + /** + *
{@code
+     * "hits": {
+     *     "hits": [
+     *       {
+     *         "_score": 1,
+     *         "_id": "doGwOYsBv7KeAUqukb5D",
+     *         "_source": {
+     *           "key": 550,
+     *           "value": [
+     *             -0.34495,
+     *             1.0193,
+     *             0.87505,
+     * }
+ * @param element + * @return + */ + public static int[] getIntArrayFromHits(JsonElement jsonElement) { + JsonObject json = jsonElement.getAsJsonObject(); + + if (!json.has("hits") || !json.getAsJsonObject("hits").has("hits")) { + return null; + } + JsonArray hits = json.getAsJsonObject("hits").getAsJsonArray("hits"); + + int count = hits.size(); + int[] keys = new int[count]; + int i = 0; + for (JsonElement element : hits) { + JsonObject hit = element.getAsJsonObject(); + keys[i] = hit.getAsJsonObject("_source").get("key").getAsInt(); + i++; + } + return keys; + + } +} diff --git a/adapter-http/src/main/java/io/nosqlbench/adapter/http/core/HttpResultType.java.new b/adapter-http/src/main/java/io/nosqlbench/adapter/http/core/HttpResultType.java.new new file mode 100644 index 000000000..ab4f0bab1 --- /dev/null +++ b/adapter-http/src/main/java/io/nosqlbench/adapter/http/core/HttpResultType.java.new @@ -0,0 +1,33 @@ +package io.nosqlbench.adapter.http.core; + +/* + * 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. + */ + + +import com.google.gson.JsonElement; + +public enum HttpResultType { + none(Void.class), + string(String.class), + json_element(JsonElement.class); + + public final Class resultClass; + + HttpResultType(Class resultClass) { + this.resultClass = resultClass; + } +} diff --git a/adapter-http/src/main/resources/activities/baselinesv2/http_elastic_vector.yaml b/adapter-http/src/main/resources/activities/baselinesv2/http_elastic_vector.yaml new file mode 100644 index 000000000..a29a8f0a5 --- /dev/null +++ b/adapter-http/src/main/resources/activities/baselinesv2/http_elastic_vector.yaml @@ -0,0 +1,234 @@ +min_version: "5.17.3" +description: | + A workload which reads ann-benchmarks vector data from HDF5 file format. +scenarios: + #main: run driver=http tags=='block:main.*' cycles===1 stride=1 threads=1 + schema: run driver=http tags==block:schema threads==1 cycles==UNDEF + load: + schema: run driver=http tags==block:schema threads==1 cycles==UNDEF diag=all + rampup: run driver=http tags==block:rampup cycles===TEMPLATE(rampup-cycles,100) threads=100 + #rampup: run driver=http tags==block:rampup cycles===47341 threads=1 + #rampup: run driver=http tags==block:rampup cycles===1183514 threads=10 + + drop-tables: + schema: run driver=http tags==block:drop-tables threads==1 cycles==UNDEF + truncate: run driver=http tags==block:truncate-tables cycles===1 threads=1 + #reads: run driver=http tags==block:main-read cycles===TEMPLATE(read-cycles,100) threads=100 + reads: run driver=http tags==block:main-read cycles===TEMPLATE(read-cycles,100) threads=10 +bindings: + rw_key1: Mul(25); ToString() + train_vector1: Mul(25); HdfFileToFloatArray("TEMPLATE(hdf5_path)", "/train") ; ToCqlVector() + rw_key2: Mul(25); Add(1); ToString() + train_vector2: Mul(25); Add(1); HdfFileToFloatArray("TEMPLATE(hdf5_path)", "/train") ; ToCqlVector() + rw_key3: Mul(25); Add(2); ToString() + train_vector3: Mul(25); Add(2); HdfFileToFloatArray("TEMPLATE(hdf5_path)", "/train") ; ToCqlVector() + rw_key4: Mul(25); Add(3); ToString() + train_vector4: Mul(25); Add(3); HdfFileToFloatArray("TEMPLATE(hdf5_path)", "/train") ; ToCqlVector() + rw_key5: Mul(25); Add(4); ToString() + train_vector5: Mul(25); Add(4); HdfFileToFloatArray("TEMPLATE(hdf5_path)", "/train") ; ToCqlVector() + rw_key6: Mul(25); Add(5); ToString() + train_vector6: Mul(25); Add(5); HdfFileToFloatArray("TEMPLATE(hdf5_path)", "/train") ; ToCqlVector() + rw_key7: Mul(25); Add(6); ToString() + train_vector7: Mul(25); Add(6); HdfFileToFloatArray("TEMPLATE(hdf5_path)", "/train") ; ToCqlVector() + rw_key8: Mul(25); Add(7); ToString() + train_vector8: Mul(25); Add(7); HdfFileToFloatArray("TEMPLATE(hdf5_path)", "/train") ; ToCqlVector() + rw_key9: Mul(25); Add(8); ToString() + train_vector9: Mul(25); Add(8); HdfFileToFloatArray("TEMPLATE(hdf5_path)", "/train") ; ToCqlVector() + rw_key10: Mul(25); Add(9); ToString() + train_vector10: Mul(25); Add(9); HdfFileToFloatArray("TEMPLATE(hdf5_path)", "/train") ; ToCqlVector() + rw_key11: Mul(25); Add(10); ToString() + train_vector11: Mul(25); Add(10); HdfFileToFloatArray("TEMPLATE(hdf5_path)", "/train") ; ToCqlVector() + rw_key12: Mul(25); Add(11); ToString() + train_vector12: Mul(25); Add(11); HdfFileToFloatArray("TEMPLATE(hdf5_path)", "/train") ; ToCqlVector() + rw_key13: Mul(25); Add(12); ToString() + train_vector13: Mul(25); Add(12); HdfFileToFloatArray("TEMPLATE(hdf5_path)", "/train") ; ToCqlVector() + rw_key14: Mul(25); Add(13); ToString() + train_vector14: Mul(25); Add(13); HdfFileToFloatArray("TEMPLATE(hdf5_path)", "/train") ; ToCqlVector() + rw_key15: Mul(25); Add(14); ToString() + train_vector15: Mul(25); Add(14); HdfFileToFloatArray("TEMPLATE(hdf5_path)", "/train") ; ToCqlVector() + rw_key16: Mul(25); Add(15); ToString() + train_vector16: Mul(25); Add(15); HdfFileToFloatArray("TEMPLATE(hdf5_path)", "/train") ; ToCqlVector() + rw_key17: Mul(25); Add(16); ToString() + train_vector17: Mul(25); Add(16); HdfFileToFloatArray("TEMPLATE(hdf5_path)", "/train") ; ToCqlVector() + rw_key18: Mul(25); Add(17); ToString() + train_vector18: Mul(25); Add(17); HdfFileToFloatArray("TEMPLATE(hdf5_path)", "/train") ; ToCqlVector() + rw_key19: Mul(25); Add(18); ToString() + train_vector19: Mul(25); Add(18); HdfFileToFloatArray("TEMPLATE(hdf5_path)", "/train") ; ToCqlVector() + rw_key20: Mul(25); Add(19); ToString() + train_vector20: Mul(25); Add(19); HdfFileToFloatArray("TEMPLATE(hdf5_path)", "/train") ; ToCqlVector() + rw_key21: Mul(25); Add(20); ToString() + train_vector21: Mul(25); Add(20); HdfFileToFloatArray("TEMPLATE(hdf5_path)", "/train") ; ToCqlVector() + rw_key22: Mul(25); Add(21); ToString() + train_vector22: Mul(25); Add(21); HdfFileToFloatArray("TEMPLATE(hdf5_path)", "/train") ; ToCqlVector() + rw_key23: Mul(25); Add(22); ToString() + train_vector23: Mul(25); Add(22); HdfFileToFloatArray("TEMPLATE(hdf5_path)", "/train") ; ToCqlVector() + rw_key24: Mul(25); Add(23); ToString() + train_vector24: Mul(25); Add(23); HdfFileToFloatArray("TEMPLATE(hdf5_path)", "/train") ; ToCqlVector() + rw_key25: Mul(25); Add(24); ToString() + train_vector25: Mul(25); Add(24); HdfFileToFloatArray("TEMPLATE(hdf5_path)", "/train") ; ToCqlVector() + + rw_key: ToString() + train_vector: HdfFileToFloatArray("TEMPLATE(hdf5_path)", "/train") ; ToCqlVector() + test_vector: HdfFileToFloatArray("TEMPLATE(hdf5_path)", "/test") ; ToCqlVector() + validation_set: HdfFileToIntArray("TEMPLATE(hdf5_path)", "/neighbors") +ops: + vop1: + stmt: "number:{number} name:{number_name}\n" + verifier-imports: + - "io.nosqlbench.api.engine.metrics.ActivityMetrics" + verifier-init: | + recallHisto = ActivityMetrics.histogram(_parsed_op,"recall-histo",4); + verifier: | + // double recall = vectormath.computeRecall(result,result) + recallHisto.update(cycle); + return true; +blocks: + reset-schema: + ops: + - delete-index: | + DELETE TEMPLATE(url, https://TODO.com)/TEMPLATE(index,vector) + Authorization: ApiKey TEMPLATE(apikey, required) + Content-Type: application/json + schema: + ops: + - create-index: | + PUT TEMPLATE(url, https://TODO.com)/TEMPLATE(index, vector) + Authorization: ApiKey TEMPLATE(apikey, required) + Content-Type: application/json + + { + "mappings": { + "properties": { + "value": { + "type": "dense_vector", + "dims": TEMPLATE(dimensions, 25), + "index": true, + "similarity": "TEMPLATE(similarity_function, cosine)" + }, + "key": { + "type": "text" + } + } + } + } + + + rampup: + ops: + - rampup-bulk-insert: | + POST TEMPLATE(url, https://TODO.com)/TEMPLATE(index,vector)/_bulk?refresh=true + Authorization: ApiKey TEMPLATE(apikey, required) + Content-Type: application/json + + {"index": {} } + {"value": {train_vector1},"key": {rw_key1}} + {"index": {} } + {"value": {train_vector2},"key": {rw_key2}} + {"index": {} } + {"value": {train_vector3},"key": {rw_key3}} + {"index": {} } + {"value": {train_vector4},"key": {rw_key4}} + {"index": {} } + {"value": {train_vector5},"key": {rw_key5}} + {"index": {} } + {"value": {train_vector6},"key": {rw_key6}} + {"index": {} } + {"value": {train_vector7},"key": {rw_key7}} + {"index": {} } + {"value": {train_vector8},"key": {rw_key8}} + {"index": {} } + {"value": {train_vector9},"key": {rw_key9}} + {"index": {} } + {"value": {train_vector10},"key": {rw_key10}} + {"index": {} } + {"value": {train_vector11},"key": {rw_key11}} + {"index": {} } + {"value": {train_vector12},"key": {rw_key12}} + {"index": {} } + {"value": {train_vector13},"key": {rw_key13}} + {"index": {} } + {"value": {train_vector14},"key": {rw_key14}} + {"index": {} } + {"value": {train_vector15},"key": {rw_key15}} + {"index": {} } + {"value": {train_vector16},"key": {rw_key16}} + {"index": {} } + {"value": {train_vector17},"key": {rw_key17}} + {"index": {} } + {"value": {train_vector18},"key": {rw_key18}} + {"index": {} } + {"value": {train_vector19},"key": {rw_key19}} + {"index": {} } + {"value": {train_vector20},"key": {rw_key20}} + {"index": {} } + {"value": {train_vector21},"key": {rw_key21}} + {"index": {} } + {"value": {train_vector22},"key": {rw_key22}} + {"index": {} } + {"value": {train_vector23},"key": {rw_key23}} + {"index": {} } + {"value": {train_vector24},"key": {rw_key24}} + {"index": {} } + {"value": {train_vector25},"key": {rw_key25}} + + #- rampup-insert: | + # POST TEMPLATE(url, https://TODO.com)/TEMPLATE(index,vector)//_doc?refresh=true + # Authorization: ApiKey TEMPLATE(apikey, required) + # Content-Type: application/json + + # { + # "value": {train_vector}, + # "key": {rw_key} + # } + main-read: + params: + ratio: TEMPLATE(read_ratio,90) + instrument: true + ops: + - main-select-ann-limit: + op: | + POST TEMPLATE(url, https://TODO.com)/TEMPLATE(index,vector)/_search + Authorization: ApiKey TEMPLATE(apikey, required) + Content-Type: application/json + + { + "from" : 0, + "size" : TEMPLATE(k,100), + "knn": { + "field": "value", + "query_vector": {test_vector}, + "k": TEMPLATE(k, 100), + "num_candidates": TEMPLATE(k,100) + } + } + verifier-imports: + - io.nosqlbench.adapter.http.JsonElementUtils + verifier-init: | + k=TEMPLATE(top_k,100) + relevancy=scriptingmetrics.newRelevancyMeasures(_parsed_op); + relevancy.addFunction(io.nosqlbench.engine.extensions.computefunctions.RelevancyFunctions.recall("recall",k)); + relevancy.addFunction(io.nosqlbench.engine.extensions.computefunctions.RelevancyFunctions.precision("precision",k)); + relevancy.addFunction(io.nosqlbench.engine.extensions.computefunctions.RelevancyFunctions.F1("F1",k)); + relevancy.addFunction(io.nosqlbench.engine.extensions.computefunctions.RelevancyFunctions.reciprocal_rank("RR",k)); + relevancy.addFunction(io.nosqlbench.engine.extensions.computefunctions.RelevancyFunctions.average_precision("AP",k)); + verifier: | + actual_indices=JsonElementUtils.getIntArrayFromHits(result); + relevancy.accept({relevant_indices},actual_indices); + return true; + + main-write: + params: + ratio: TEMPLATE(write_ratio,10) + cl: TEMPLATE(write_cl,LOCAL_QUORUM) + instrument: true + prepared: true + ops: + - main-insert: | + POST TEMPLATE(url, https://TODO.com)/TEMPLATE(index,vector)/_doc?refresh=true + Authorization: ApiKey TEMPLATE(apikey, required) + Content-Type: application/json + + { + "value": {train_data}, + "key": {rw_key} + } From 04f5e59c2e012e827be41217a62b640ec7656606 Mon Sep 17 00:00:00 2001 From: Jonathan Shook Date: Tue, 17 Oct 2023 13:53:03 -0500 Subject: [PATCH 3/7] minor change --- .../resources/activities/baselinesv2/http_elastic_vector.yaml | 1 + 1 file changed, 1 insertion(+) diff --git a/adapter-http/src/main/resources/activities/baselinesv2/http_elastic_vector.yaml b/adapter-http/src/main/resources/activities/baselinesv2/http_elastic_vector.yaml index a29a8f0a5..02778ce88 100644 --- a/adapter-http/src/main/resources/activities/baselinesv2/http_elastic_vector.yaml +++ b/adapter-http/src/main/resources/activities/baselinesv2/http_elastic_vector.yaml @@ -201,6 +201,7 @@ blocks: "num_candidates": TEMPLATE(k,100) } } + result-type: json_element verifier-imports: - io.nosqlbench.adapter.http.JsonElementUtils verifier-init: | From a6695e486a9a2daaa0f0d536d8b33e6ef54f65d9 Mon Sep 17 00:00:00 2001 From: Jonathan Shook Date: Tue, 17 Oct 2023 13:59:11 -0500 Subject: [PATCH 4/7] add meaning toString on relevancy measures --- .../nosqlbench/api/engine/metrics/DoubleSummaryGauge.java | 4 ++++ .../api/engine/metrics/wrappers/RelevancyMeasures.java | 8 ++++++++ 2 files changed, 12 insertions(+) diff --git a/nb-api/src/main/java/io/nosqlbench/api/engine/metrics/DoubleSummaryGauge.java b/nb-api/src/main/java/io/nosqlbench/api/engine/metrics/DoubleSummaryGauge.java index 2ae012dc6..4ca527693 100644 --- a/nb-api/src/main/java/io/nosqlbench/api/engine/metrics/DoubleSummaryGauge.java +++ b/nb-api/src/main/java/io/nosqlbench/api/engine/metrics/DoubleSummaryGauge.java @@ -70,4 +70,8 @@ public class DoubleSummaryGauge implements NBMetricGauge, DoubleConsumer return labels; } + @Override + public String toString() { + return this.labels.toString()+":"+this.stats.toString(); + } } diff --git a/nb-api/src/main/java/io/nosqlbench/api/engine/metrics/wrappers/RelevancyMeasures.java b/nb-api/src/main/java/io/nosqlbench/api/engine/metrics/wrappers/RelevancyMeasures.java index 6d3d64bd6..e9df828b1 100644 --- a/nb-api/src/main/java/io/nosqlbench/api/engine/metrics/wrappers/RelevancyMeasures.java +++ b/nb-api/src/main/java/io/nosqlbench/api/engine/metrics/wrappers/RelevancyMeasures.java @@ -71,4 +71,12 @@ public class RelevancyMeasures implements NBLabeledElement { } } + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + for (DoubleSummaryGauge gauge : gauges) { + sb.append(gauge.toString()).append("\n"); + } + return sb.toString(); + } } From 26da67bfcd2f21bf851041468d46342bfefcead2 Mon Sep 17 00:00:00 2001 From: Jonathan Shook Date: Tue, 17 Oct 2023 14:05:13 -0500 Subject: [PATCH 5/7] improve http op handling --- .../adapter/http/JsonElementUtils.java | 18 ++++++++++ .../nosqlbench/adapter/http/core/HttpOp.java | 2 +- .../adapter/http/core/HttpResultType.java | 18 ++++++++++ .../adapter/http/core/HttpResultType.java.new | 33 ------------------- 4 files changed, 37 insertions(+), 34 deletions(-) delete mode 100644 adapter-http/src/main/java/io/nosqlbench/adapter/http/core/HttpResultType.java.new diff --git a/adapter-http/src/main/java/io/nosqlbench/adapter/http/JsonElementUtils.java b/adapter-http/src/main/java/io/nosqlbench/adapter/http/JsonElementUtils.java index 8a7c87f81..d4423dc7e 100644 --- a/adapter-http/src/main/java/io/nosqlbench/adapter/http/JsonElementUtils.java +++ b/adapter-http/src/main/java/io/nosqlbench/adapter/http/JsonElementUtils.java @@ -1,5 +1,23 @@ package io.nosqlbench.adapter.http; +/* + * 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. + */ + + import com.google.gson.JsonArray; import com.google.gson.JsonElement; import com.google.gson.JsonObject; diff --git a/adapter-http/src/main/java/io/nosqlbench/adapter/http/core/HttpOp.java b/adapter-http/src/main/java/io/nosqlbench/adapter/http/core/HttpOp.java index de1726237..e52b90659 100644 --- a/adapter-http/src/main/java/io/nosqlbench/adapter/http/core/HttpOp.java +++ b/adapter-http/src/main/java/io/nosqlbench/adapter/http/core/HttpOp.java @@ -102,7 +102,7 @@ public class HttpOp implements CycleOp { } // propogate exception so main error handling logic can take over if (error != null) { - throw new RuntimeException(error); + throw new RuntimeException(error).getClass().getna; } } return switch (resultType) { diff --git a/adapter-http/src/main/java/io/nosqlbench/adapter/http/core/HttpResultType.java b/adapter-http/src/main/java/io/nosqlbench/adapter/http/core/HttpResultType.java index 0b821157b..ab4f0bab1 100644 --- a/adapter-http/src/main/java/io/nosqlbench/adapter/http/core/HttpResultType.java +++ b/adapter-http/src/main/java/io/nosqlbench/adapter/http/core/HttpResultType.java @@ -1,5 +1,23 @@ package io.nosqlbench.adapter.http.core; +/* + * 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. + */ + + import com.google.gson.JsonElement; public enum HttpResultType { diff --git a/adapter-http/src/main/java/io/nosqlbench/adapter/http/core/HttpResultType.java.new b/adapter-http/src/main/java/io/nosqlbench/adapter/http/core/HttpResultType.java.new deleted file mode 100644 index ab4f0bab1..000000000 --- a/adapter-http/src/main/java/io/nosqlbench/adapter/http/core/HttpResultType.java.new +++ /dev/null @@ -1,33 +0,0 @@ -package io.nosqlbench.adapter.http.core; - -/* - * 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. - */ - - -import com.google.gson.JsonElement; - -public enum HttpResultType { - none(Void.class), - string(String.class), - json_element(JsonElement.class); - - public final Class resultClass; - - HttpResultType(Class resultClass) { - this.resultClass = resultClass; - } -} From 79e8828a93379124eb2afef0e6bfaf16a27312ee Mon Sep 17 00:00:00 2001 From: Jonathan Shook Date: Tue, 17 Oct 2023 14:10:48 -0500 Subject: [PATCH 6/7] minor syntax fix --- .../src/main/java/io/nosqlbench/adapter/http/core/HttpOp.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/adapter-http/src/main/java/io/nosqlbench/adapter/http/core/HttpOp.java b/adapter-http/src/main/java/io/nosqlbench/adapter/http/core/HttpOp.java index e52b90659..de1726237 100644 --- a/adapter-http/src/main/java/io/nosqlbench/adapter/http/core/HttpOp.java +++ b/adapter-http/src/main/java/io/nosqlbench/adapter/http/core/HttpOp.java @@ -102,7 +102,7 @@ public class HttpOp implements CycleOp { } // propogate exception so main error handling logic can take over if (error != null) { - throw new RuntimeException(error).getClass().getna; + throw new RuntimeException(error); } } return switch (resultType) { From a19859ab843b58977875fe044010a5c36b616d72 Mon Sep 17 00:00:00 2001 From: Jonathan Shook Date: Tue, 17 Oct 2023 14:36:23 -0500 Subject: [PATCH 7/7] build 5.17.6-preview --- mvn-defaults/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mvn-defaults/pom.xml b/mvn-defaults/pom.xml index 99273a3b1..dfe65fa3f 100644 --- a/mvn-defaults/pom.xml +++ b/mvn-defaults/pom.xml @@ -26,7 +26,7 @@ - 5.17.5-SNAPSHOT + 5.17.6-SNAPSHOT INFO