specialize op template collection into a more useful type

This commit is contained in:
Jonathan Shook
2024-12-22 19:19:21 -06:00
parent 638095a82a
commit a8bbd9f923
17 changed files with 438 additions and 352 deletions

View File

@@ -20,6 +20,7 @@ package io.nosqlbench.adapter.diag;
import io.nosqlbench.adapters.api.activityconfig.OpsLoader;
import io.nosqlbench.adapters.api.activityconfig.yaml.OpTemplate;
import io.nosqlbench.adapters.api.activityconfig.yaml.OpTemplateFormat;
import io.nosqlbench.adapters.api.activityconfig.yaml.OpTemplates;
import io.nosqlbench.adapters.api.activityconfig.yaml.OpsDocList;
import io.nosqlbench.adapters.api.activityimpl.OpMapper;
import io.nosqlbench.adapters.api.activityimpl.uniform.BaseDriverAdapter;
@@ -107,9 +108,12 @@ public class DiagDriverAdapter extends BaseDriverAdapter<DiagOp, DiagSpace> impl
}
@Override
public List<OpTemplate> getSyntheticOpTemplates(OpsDocList opsDocList, Map<String, Object> params) {
return OpsLoader.loadString("noop: noop", OpTemplateFormat.inline, params,null).getOps(true);
// return OpsLoader.loadString("log:level=INFO", OpTemplateFormat.inline, params,null).getOps();
public OpTemplates getSyntheticOpTemplates(
OpTemplates opTemplates,
Map<String, Object> params) {
OpTemplates matching = OpsLoader.loadString(
"noop: noop", OpTemplateFormat.inline, params, null).getOps().matching("", true);
return matching;
}
}

View File

@@ -54,7 +54,7 @@ public class HttpOpMapperTest {
private static ParsedOp parsedOpFor(final String yaml) {
final OpsDocList docs = OpsLoader.loadString(yaml, OpTemplateFormat.yaml, Map.of(), null);
final OpTemplate opTemplate = docs.getOps(true).get(0);
final OpTemplate opTemplate = docs.getOps().get(0);
final ParsedOp parsedOp = new ParsedOp(opTemplate, HttpOpMapperTest.cfg, List.of(HttpOpMapperTest.adapter.getPreprocessor()), new TestComponent("parent","parent"));
return parsedOp;
}

View File

@@ -18,6 +18,7 @@ package io.nosqlbench.adapter.stdout;
import io.nosqlbench.adapters.api.activityconfig.yaml.OpData;
import io.nosqlbench.adapters.api.activityconfig.yaml.OpTemplate;
import io.nosqlbench.adapters.api.activityconfig.yaml.OpTemplates;
import io.nosqlbench.adapters.api.activityconfig.yaml.OpsDocList;
import io.nosqlbench.adapters.api.activityimpl.OpMapper;
import io.nosqlbench.adapters.api.activityimpl.uniform.BaseDriverAdapter;
@@ -48,7 +49,7 @@ public class StdoutDriverAdapter extends BaseDriverAdapter<StdoutOp, StdoutSpace
}
@Override
public OpMapper<StdoutOp,StdoutSpace> getOpMapper() {
public OpMapper<StdoutOp, StdoutSpace> getOpMapper() {
return new StdoutOpMapper(this);
}
@@ -59,57 +60,57 @@ public class StdoutDriverAdapter extends BaseDriverAdapter<StdoutOp, StdoutSpace
@Override
public NBConfigModel getConfigModel() {
return ConfigModel.of(this.getClass())
.add(super.getConfigModel())
.add(StdoutSpace.getConfigModel());
return ConfigModel.of(this.getClass()).add(super.getConfigModel()).add(
StdoutSpace.getConfigModel());
}
@Override
public List<OpTemplate> getSyntheticOpTemplates(OpsDocList opsDocList, Map<String, Object> cfg) {
Set<String> activeBindingNames = new LinkedHashSet<>(opsDocList.getDocBindings().keySet());
public OpTemplates getSyntheticOpTemplates(OpTemplates opTempl, Map<String, Object> cfg) {
Set<String> activeBindingNames = new LinkedHashSet<>(opTempl.getDocBindings().keySet());
if (activeBindingNames.isEmpty()) {
logger.warn("Unable to synthesize op for driver=" + this.getAdapterName() + " with zero bindings.");
return List.of();
logger.warn(
"Unable to synthesize op for driver=" + this.getAdapterName() + " with zero bindings.");
return new OpTemplates(List.of(),OpsDocList.none());
}
String bindings = Optional.ofNullable(cfg.get("bindings")).map(Object::toString).orElse("doc");
Pattern bindingsFilter = Pattern.compile(bindings.equalsIgnoreCase("doc") ? ".*" : bindings);
String bindings = Optional.ofNullable(cfg.get("bindings")).map(Object::toString).orElse(
"doc");
Pattern bindingsFilter = Pattern.compile(
bindings.equalsIgnoreCase("doc") ? ".*" : bindings);
Set<String> filteredBindingNames = activeBindingNames
.stream()
.filter(n -> {
if (bindingsFilter.matcher(n).matches()) {
logger.trace(() -> "bindings filter kept binding '" + n + "'");
return true;
} else {
logger.trace(() -> "bindings filter removed binding '" + n + "'");
return false;
}
})
.collect(Collectors.toSet());
Set<String> filteredBindingNames = activeBindingNames.stream().filter(n -> {
if (bindingsFilter.matcher(n).matches()) {
logger.trace(() -> "bindings filter kept binding '" + n + "'");
return true;
} else {
logger.trace(() -> "bindings filter removed binding '" + n + "'");
return false;
}
}).collect(Collectors.toSet());
if (filteredBindingNames.isEmpty()) {
logger.warn("Unable to synthesize op for driver="+getAdapterName()+" when " + activeBindingNames.size()+"/"+activeBindingNames.size() + " bindings were filtered out with bindings=" + bindings);
return List.of();
logger.warn(
"Unable to synthesize op for driver=" + getAdapterName() + " when " + activeBindingNames.size() + "/" + activeBindingNames.size() + " bindings were filtered out with bindings=" + bindings);
return new OpTemplates(List.of(),OpsDocList.none());
}
OpData op = new OpData("synthetic", "synthetic", Map.of(), opsDocList.getDocBindings(), cfg,
Map.of("stmt", genStatementTemplate(filteredBindingNames, cfg)),200);
OpData op = new OpData(
"synthetic", "synthetic", Map.of(), opTempl.getDocBindings(), cfg,
Map.of("stmt", genStatementTemplate(filteredBindingNames, cfg)), 200
);
return List.of(op);
return new OpTemplates(List.of(op),OpsDocList.none());
}
private String genStatementTemplate(Set<String> keySet, Map<String, Object> cfg) {
TemplateFormat format = Optional.ofNullable(cfg.get("format"))
.map(Object::toString)
.map(TemplateFormat::valueOf)
.orElse(TemplateFormat.assignments);
TemplateFormat format = Optional.ofNullable(cfg.get("format")).map(Object::toString).map(
TemplateFormat::valueOf).orElse(TemplateFormat.assignments);
boolean ensureNewline = Optional.ofNullable(cfg.get("newline"))
.map(Object::toString)
.map(Boolean::valueOf)
.orElse(true);
boolean ensureNewline = Optional.ofNullable(cfg.get("newline")).map(Object::toString).map(
Boolean::valueOf).orElse(true);
String stmtTemplate = format.format(ensureNewline, new ArrayList<>(keySet));
return stmtTemplate;

View File

@@ -17,6 +17,7 @@
package io.nosqlbench.adapter.tcpclient;
import io.nosqlbench.adapter.stdout.StdoutDriverAdapter;
import io.nosqlbench.adapters.api.activityconfig.yaml.OpTemplates;
import io.nosqlbench.nb.api.config.standard.ConfigModel;
import io.nosqlbench.nb.api.config.standard.NBConfigModel;
import io.nosqlbench.nb.api.config.standard.NBConfiguration;
@@ -67,7 +68,9 @@ public class TcpClientDriverAdapter extends BaseDriverAdapter<TcpClientOp, TcpCl
}
@Override
public List<OpTemplate> getSyntheticOpTemplates(OpsDocList opsDocList, Map<String,Object> cfg) {
public OpTemplates getSyntheticOpTemplates(
OpTemplates opsDocList,
Map<String,Object> cfg) {
return adap.getSyntheticOpTemplates(opsDocList, cfg);
}

View File

@@ -16,6 +16,7 @@
package io.nosqlbench.adapter.tcpserver;
import io.nosqlbench.adapter.stdout.StdoutDriverAdapter;
import io.nosqlbench.adapters.api.activityconfig.yaml.OpTemplates;
import io.nosqlbench.nb.api.config.standard.ConfigModel;
import io.nosqlbench.nb.api.config.standard.NBConfigModel;
import io.nosqlbench.nb.api.config.standard.NBConfiguration;
@@ -65,7 +66,9 @@ public class TcpServerDriverAdapter extends BaseDriverAdapter<TcpServerOp, TcpSe
}
@Override
public List<OpTemplate> getSyntheticOpTemplates(OpsDocList opsDocList, Map<String,Object> cfg) {
public OpTemplates getSyntheticOpTemplates(
OpTemplates opsDocList,
Map<String,Object> cfg) {
return adap.getSyntheticOpTemplates(opsDocList, cfg);
}