example adapter

This commit is contained in:
Jonathan Shook 2024-11-20 16:06:05 -06:00
parent 7bed8d4667
commit 8f0f6c3753
15 changed files with 488 additions and 2 deletions

View File

@ -0,0 +1,46 @@
<!--
~ Copyright (c) 2022-2023 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.
-->
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<artifactId>mvn-defaults</artifactId>
<groupId>io.nosqlbench</groupId>
<version>${revision}</version>
<relativePath>../../mvn-defaults</relativePath>
</parent>
<artifactId>adapter-example</artifactId>
<packaging>jar</packaging>
<name>${project.artifactId}</name>
<description>
A HTTP nosqlbench DriverAdapter driver module;
This module provides a basic starting point for a fully featured adapter.
</description>
<dependencies>
<dependency>
<groupId>io.nosqlbench</groupId>
<artifactId>adapters-api</artifactId>
<version>${revision}</version>
<scope>compile</scope>
</dependency>
</dependencies>
</project>

View File

@ -0,0 +1,37 @@
package io.nosqlbench.adapter.prototype;
/*
* 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.
*/
import io.nosqlbench.adapter.prototype.ops.ExampleOpType1;
import io.nosqlbench.adapters.api.activityimpl.OpMapper;
import io.nosqlbench.adapters.api.activityimpl.uniform.BaseDriverAdapter;
import io.nosqlbench.nb.api.components.core.NBComponent;
import io.nosqlbench.nb.api.labels.NBLabels;
public class ExampleDriverAdapter extends BaseDriverAdapter<ExampleOpType1, ExampleSpace> {
public ExampleDriverAdapter(NBComponent parentComponent, NBLabels labels) {
super(parentComponent, labels);
}
@Override
public OpMapper<ExampleOpType1, ExampleSpace> getOpMapper() {
return new ExampleOpMapper();
}
}

View File

@ -0,0 +1,36 @@
package io.nosqlbench.adapter.prototype;
/*
* 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.
*/
import io.nosqlbench.adapter.diag.DriverAdapterLoader;
import io.nosqlbench.nb.annotations.Service;
import io.nosqlbench.nb.api.components.core.NBComponent;
import io.nosqlbench.nb.api.labels.NBLabels;
@Service(value = DriverAdapterLoader.class, selector = "example")
public class ExampleDriverAdapterLoader implements DriverAdapterLoader {
/**
* {@inheritDoc}
*/
@Override
public ExampleDriverAdapter load(NBComponent parent, NBLabels childLabels) {
return new ExampleDriverAdapter(parent, childLabels);
}
}

View File

@ -0,0 +1,48 @@
package io.nosqlbench.adapter.prototype;
/*
* 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.
*/
import io.nosqlbench.adapter.prototype.dispensers.ExampleOpDispenserType1;
import io.nosqlbench.adapter.prototype.ops.ExampleOpType1;
import io.nosqlbench.adapter.prototype.ops.ExampleOpTypes;
import io.nosqlbench.adapters.api.activityimpl.OpDispenser;
import io.nosqlbench.adapters.api.activityimpl.OpMapper;
import io.nosqlbench.adapters.api.templating.ParsedOp;
import io.nosqlbench.engine.api.templating.TypeAndTarget;
import io.nosqlbench.nb.api.components.core.NBComponent;
import java.util.function.LongFunction;
public class ExampleOpMapper implements OpMapper<ExampleOpType1, ExampleSpace> {
@Override
public OpDispenser<ExampleOpType1> apply(
NBComponent adapterC,
ParsedOp pop,
LongFunction<ExampleSpace> spaceInitF
) {
TypeAndTarget<ExampleOpTypes, String> typeAndTarget = pop.getTypeAndTarget(ExampleOpTypes.class, String.class);
return switch (typeAndTarget.enumId) {
case type1 -> new ExampleOpDispenserType1(adapterC, pop, spaceInitF);
case type2 -> new ExampleOpDispenserType1(adapterC, pop, spaceInitF);
};
}
}

View File

@ -0,0 +1,30 @@
package io.nosqlbench.adapter.prototype;
/*
* 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.
*/
import io.nosqlbench.adapters.api.activityimpl.uniform.BaseSpace;
import io.nosqlbench.adapters.api.activityimpl.uniform.DriverAdapter;
public class ExampleSpace extends BaseSpace<ExampleSpace> {
public ExampleSpace(DriverAdapter<?, ExampleSpace> adapter, long idx) {
super(adapter, idx);
}
}

View File

@ -0,0 +1,43 @@
package io.nosqlbench.adapter.prototype.dispensers;
/*
* 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.
*/
import io.nosqlbench.adapter.prototype.ExampleSpace;
import io.nosqlbench.adapter.prototype.ops.ExampleOpType1;
import io.nosqlbench.adapters.api.activityimpl.BaseOpDispenser;
import io.nosqlbench.adapters.api.templating.ParsedOp;
import io.nosqlbench.nb.api.components.core.NBComponent;
import java.util.function.LongFunction;
public class ExampleOpDispenserType1 extends BaseOpDispenser<ExampleOpType1, ExampleSpace> {
public ExampleOpDispenserType1(
NBComponent adapter,
ParsedOp pop,
LongFunction<ExampleSpace> spaceInitF
) {
super(adapter, pop, spaceInitF);
}
@Override
public ExampleOpType1 getOp(long cycle) {
return new ExampleOpType1(cycle);
}
}

View File

@ -0,0 +1,43 @@
package io.nosqlbench.adapter.prototype.dispensers;
/*
* 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.
*/
import io.nosqlbench.adapter.prototype.ExampleSpace;
import io.nosqlbench.adapter.prototype.ops.ExampleOpType2;
import io.nosqlbench.adapters.api.activityimpl.BaseOpDispenser;
import io.nosqlbench.adapters.api.templating.ParsedOp;
import io.nosqlbench.nb.api.components.core.NBComponent;
import java.util.function.LongFunction;
public class ExampleOpDispenserType2 extends BaseOpDispenser<ExampleOpType2, ExampleSpace> {
public ExampleOpDispenserType2(
NBComponent adapter,
ParsedOp pop,
LongFunction<ExampleSpace> spaceInitF
) {
super(adapter, pop, spaceInitF);
}
@Override
public ExampleOpType2 getOp(long cycle) {
return new ExampleOpType2();
}
}

View File

@ -0,0 +1,39 @@
package io.nosqlbench.adapter.prototype.ops;
/*
* 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.
*/
import io.nosqlbench.adapter.prototype.results.ExampleStringResult;
import io.nosqlbench.adapters.api.activityimpl.uniform.flowtypes.CycleOp;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
public class ExampleOpType1 implements CycleOp<ExampleStringResult> {
private final static Logger logger = LogManager.getLogger(ExampleOpType1.class);
private final long cycle;
public ExampleOpType1(long cycle) {
this.cycle = cycle;
}
@Override
public ExampleStringResult apply(long value) {
return new ExampleStringResult("ProtoOpType1 cycle(" + value + ")");
}
}

View File

@ -0,0 +1,34 @@
package io.nosqlbench.adapter.prototype.ops;
/*
* 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.
*/
import io.nosqlbench.adapter.prototype.results.ExampleStringResult;
import io.nosqlbench.adapters.api.activityimpl.uniform.flowtypes.CycleOp;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
public class ExampleOpType2 implements CycleOp<ExampleStringResult> {
private final static Logger logger = LogManager.getLogger(ExampleOpType2.class);
@Override
public ExampleStringResult apply(long value) {
return new ExampleStringResult("ProtoOpType1 cycle(" + value + ")");
}
}

View File

@ -0,0 +1,24 @@
package io.nosqlbench.adapter.prototype.ops;
/*
* 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.
*/
public enum ExampleOpTypes {
type1,
type2
}

View File

@ -0,0 +1,26 @@
/**
* This package contains an example implementation of a
* {@link io.nosqlbench.adapters.api.activityimpl.uniform.DriverAdapter}.
* It is meant to demonstrate common implementation patterns as a starting point for new driver adapters.
* For a given adapter implementation, only some of these patterns will be needed, but examples aim to cover
* also some of the non-trivial patterns needed to implement advanced logic.
*/
package io.nosqlbench.adapter.prototype;
/*
* 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.
*/

View File

@ -0,0 +1,26 @@
package io.nosqlbench.adapter.prototype.results;
/*
* 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.
*/
/**
* Each {@link io.nosqlbench.adapters.api.activityimpl.uniform.DriverAdapter} implementation
* is generic over a type of
*/
public interface ExampleResult {
}

View File

@ -0,0 +1,30 @@
package io.nosqlbench.adapter.prototype.results;
/*
* 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.
*/
public class ExampleStringResult implements ExampleResult {
private final String message;
public ExampleStringResult(String message) {
this.message = message;
}
public String getMessage() {
return message;
}
}

View File

@ -172,7 +172,7 @@
<profile>
<id>adapter-mongodb-include</id>
<activation>
<activeByDefault>true</activeByDefault>
<activeByDefault>false</activeByDefault>
</activation>
<dependencies>
<dependency>
@ -186,7 +186,7 @@
<profile>
<id>adapter-pulsar-include</id>
<activation>
<activeByDefault>true</activeByDefault>
<activeByDefault>false</activeByDefault>
</activation>
<dependencies>
<dependency>
@ -309,6 +309,20 @@
</dependencies>
</profile>
<profile>
<id>adapter-example-include</id>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
<dependencies>
<dependency>
<groupId>io.nosqlbench</groupId>
<artifactId>adapter-example</artifactId>
<version>${revision}</version>
</dependency>
</dependencies>
</profile>
</profiles>
</project>

View File

@ -224,5 +224,15 @@
</modules>
</profile>
<profile>
<id>adapter-example-module</id>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
<modules>
<module>adapter-example</module>
</modules>
</profile>
</profiles>
</project>