Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Separate API and internals and make tests modular #176

Merged
merged 1 commit into from
Jul 7, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
178 changes: 178 additions & 0 deletions api-changes.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,178 @@
[
{
"extension": "revapi.versions",
"configuration": {
"enabled": true,
"semantic0": true,
"strictSemver": true,
"versionIncreaseAllows": {
"major": {
"severity": "BREAKING"
},
"minor": {
"severity": "NON_BREAKING"
},
"patch": {
"severity": "EQUIVALENT"
}
}
}
},
{
"extension": "revapi.differences",
"configuration": {
"ignore": true,
"differences": [
{
"code": "java.class.noLongerInheritsFromClass",
"old": "class stormpot.Pool<T extends stormpot.Poolable>",
"new": "interface stormpot.Pool<T extends stormpot.Poolable>",
"justification": "ADD YOUR EXPLANATION FOR THE NECESSITY OF THIS CHANGE"
},
{
"code": "java.class.kindChanged",
"old": "class stormpot.Pool<T extends stormpot.Poolable>",
"new": "interface stormpot.Pool<T extends stormpot.Poolable>",
"justification": "ADD YOUR EXPLANATION FOR THE NECESSITY OF THIS CHANGE"
},
{
"code": "java.method.nowAbstract",
"old": "method stormpot.Pool<T> stormpot.PoolBuilder<T extends stormpot.Poolable>::build()",
"new": "method stormpot.Pool<T> stormpot.PoolBuilder<T extends stormpot.Poolable>::build()",
"justification": "ADD YOUR EXPLANATION FOR THE NECESSITY OF THIS CHANGE"
},
{
"code": "java.method.nowAbstract",
"old": "method stormpot.PoolBuilder<T> stormpot.PoolBuilder<T extends stormpot.Poolable>::clone()",
"new": "method stormpot.PoolBuilder<T> stormpot.PoolBuilder<T extends stormpot.Poolable>::clone()",
"justification": "ADD YOUR EXPLANATION FOR THE NECESSITY OF THIS CHANGE"
},
{
"code": "java.method.nowAbstract",
"old": "method stormpot.Allocator<T> stormpot.PoolBuilder<T extends stormpot.Poolable>::getAllocator()",
"new": "method stormpot.Allocator<T> stormpot.PoolBuilder<T extends stormpot.Poolable>::getAllocator()",
"justification": "ADD YOUR EXPLANATION FOR THE NECESSITY OF THIS CHANGE"
},
{
"code": "java.method.nowAbstract",
"old": "method int stormpot.PoolBuilder<T extends stormpot.Poolable>::getBackgroundExpirationCheckDelay()",
"new": "method int stormpot.PoolBuilder<T extends stormpot.Poolable>::getBackgroundExpirationCheckDelay()",
"justification": "ADD YOUR EXPLANATION FOR THE NECESSITY OF THIS CHANGE"
},
{
"code": "java.method.nowAbstract",
"old": "method stormpot.Expiration<? super T> stormpot.PoolBuilder<T extends stormpot.Poolable>::getExpiration()",
"new": "method stormpot.Expiration<? super T> stormpot.PoolBuilder<T extends stormpot.Poolable>::getExpiration()",
"justification": "ADD YOUR EXPLANATION FOR THE NECESSITY OF THIS CHANGE"
},
{
"code": "java.method.nowAbstract",
"old": "method stormpot.MetricsRecorder stormpot.PoolBuilder<T extends stormpot.Poolable>::getMetricsRecorder()",
"new": "method stormpot.MetricsRecorder stormpot.PoolBuilder<T extends stormpot.Poolable>::getMetricsRecorder()",
"justification": "ADD YOUR EXPLANATION FOR THE NECESSITY OF THIS CHANGE"
},
{
"code": "java.method.nowAbstract",
"old": "method stormpot.Reallocator<T> stormpot.PoolBuilder<T extends stormpot.Poolable>::getReallocator()",
"new": "method stormpot.Reallocator<T> stormpot.PoolBuilder<T extends stormpot.Poolable>::getReallocator()",
"justification": "ADD YOUR EXPLANATION FOR THE NECESSITY OF THIS CHANGE"
},
{
"code": "java.method.nowAbstract",
"old": "method int stormpot.PoolBuilder<T extends stormpot.Poolable>::getSize()",
"new": "method int stormpot.PoolBuilder<T extends stormpot.Poolable>::getSize()",
"justification": "ADD YOUR EXPLANATION FOR THE NECESSITY OF THIS CHANGE"
},
{
"code": "java.method.nowAbstract",
"old": "method java.util.concurrent.ThreadFactory stormpot.PoolBuilder<T extends stormpot.Poolable>::getThreadFactory()",
"new": "method java.util.concurrent.ThreadFactory stormpot.PoolBuilder<T extends stormpot.Poolable>::getThreadFactory()",
"justification": "ADD YOUR EXPLANATION FOR THE NECESSITY OF THIS CHANGE"
},
{
"code": "java.method.nowAbstract",
"old": "method boolean stormpot.PoolBuilder<T extends stormpot.Poolable>::isBackgroundExpirationEnabled()",
"new": "method boolean stormpot.PoolBuilder<T extends stormpot.Poolable>::isBackgroundExpirationEnabled()",
"justification": "ADD YOUR EXPLANATION FOR THE NECESSITY OF THIS CHANGE"
},
{
"code": "java.method.nowAbstract",
"old": "method boolean stormpot.PoolBuilder<T extends stormpot.Poolable>::isPreciseLeakDetectionEnabled()",
"new": "method boolean stormpot.PoolBuilder<T extends stormpot.Poolable>::isPreciseLeakDetectionEnabled()",
"justification": "ADD YOUR EXPLANATION FOR THE NECESSITY OF THIS CHANGE"
},
{
"code": "java.method.nowAbstract",
"old": "method <X extends stormpot.Poolable> stormpot.PoolBuilder<X> stormpot.PoolBuilder<T extends stormpot.Poolable>::setAllocator(stormpot.Allocator<X>)",
"new": "method <X extends stormpot.Poolable> stormpot.PoolBuilder<X> stormpot.PoolBuilder<T extends stormpot.Poolable>::setAllocator(stormpot.Allocator<X>)",
"justification": "ADD YOUR EXPLANATION FOR THE NECESSITY OF THIS CHANGE"
},
{
"code": "java.method.nowAbstract",
"old": "method stormpot.PoolBuilder<T> stormpot.PoolBuilder<T extends stormpot.Poolable>::setBackgroundExpirationCheckDelay(int)",
"new": "method stormpot.PoolBuilder<T> stormpot.PoolBuilder<T extends stormpot.Poolable>::setBackgroundExpirationCheckDelay(int)",
"justification": "ADD YOUR EXPLANATION FOR THE NECESSITY OF THIS CHANGE"
},
{
"code": "java.method.nowAbstract",
"old": "method stormpot.PoolBuilder<T> stormpot.PoolBuilder<T extends stormpot.Poolable>::setBackgroundExpirationEnabled(boolean)",
"new": "method stormpot.PoolBuilder<T> stormpot.PoolBuilder<T extends stormpot.Poolable>::setBackgroundExpirationEnabled(boolean)",
"justification": "ADD YOUR EXPLANATION FOR THE NECESSITY OF THIS CHANGE"
},
{
"code": "java.method.nowAbstract",
"old": "method stormpot.PoolBuilder<T> stormpot.PoolBuilder<T extends stormpot.Poolable>::setExpiration(stormpot.Expiration<? super T>)",
"new": "method stormpot.PoolBuilder<T> stormpot.PoolBuilder<T extends stormpot.Poolable>::setExpiration(stormpot.Expiration<? super T>)",
"justification": "ADD YOUR EXPLANATION FOR THE NECESSITY OF THIS CHANGE"
},
{
"code": "java.method.nowAbstract",
"old": "method stormpot.PoolBuilder<T> stormpot.PoolBuilder<T extends stormpot.Poolable>::setMetricsRecorder(stormpot.MetricsRecorder)",
"new": "method stormpot.PoolBuilder<T> stormpot.PoolBuilder<T extends stormpot.Poolable>::setMetricsRecorder(stormpot.MetricsRecorder)",
"justification": "ADD YOUR EXPLANATION FOR THE NECESSITY OF THIS CHANGE"
},
{
"code": "java.method.nowAbstract",
"old": "method stormpot.PoolBuilder<T> stormpot.PoolBuilder<T extends stormpot.Poolable>::setPreciseLeakDetectionEnabled(boolean)",
"new": "method stormpot.PoolBuilder<T> stormpot.PoolBuilder<T extends stormpot.Poolable>::setPreciseLeakDetectionEnabled(boolean)",
"justification": "ADD YOUR EXPLANATION FOR THE NECESSITY OF THIS CHANGE"
},
{
"code": "java.method.nowAbstract",
"old": "method stormpot.PoolBuilder<T> stormpot.PoolBuilder<T extends stormpot.Poolable>::setSize(int)",
"new": "method stormpot.PoolBuilder<T> stormpot.PoolBuilder<T extends stormpot.Poolable>::setSize(int)",
"justification": "ADD YOUR EXPLANATION FOR THE NECESSITY OF THIS CHANGE"
},
{
"code": "java.method.nowAbstract",
"old": "method stormpot.PoolBuilder<T> stormpot.PoolBuilder<T extends stormpot.Poolable>::setThreadFactory(java.util.concurrent.ThreadFactory)",
"new": "method stormpot.PoolBuilder<T> stormpot.PoolBuilder<T extends stormpot.Poolable>::setThreadFactory(java.util.concurrent.ThreadFactory)",
"justification": "ADD YOUR EXPLANATION FOR THE NECESSITY OF THIS CHANGE"
},
{
"code": "java.class.kindChanged",
"old": "class stormpot.PoolBuilder<T extends stormpot.Poolable>",
"new": "interface stormpot.PoolBuilder<T extends stormpot.Poolable>",
"justification": "ADD YOUR EXPLANATION FOR THE NECESSITY OF THIS CHANGE"
},
{
"code": "java.class.nowAbstract",
"old": "class stormpot.PoolBuilder<T extends stormpot.Poolable>",
"new": "interface stormpot.PoolBuilder<T extends stormpot.Poolable>",
"justification": "ADD YOUR EXPLANATION FOR THE NECESSITY OF THIS CHANGE"
},
{
"code": "java.class.kindChanged",
"old": "class stormpot.PoolTap<T extends stormpot.Poolable>",
"new": "interface stormpot.PoolTap<T extends stormpot.Poolable>",
"justification": "ADD YOUR EXPLANATION FOR THE NECESSITY OF THIS CHANGE"
},
{
"code": "java.method.addedToInterface",
"new": "method long stormpot.SlotInfo<T extends stormpot.Poolable>::getCreatedNanoTime()",
"justification": "ADD YOUR EXPLANATION FOR THE NECESSITY OF THIS CHANGE"
}
]
}
}
]
22 changes: 7 additions & 15 deletions pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -117,12 +117,6 @@
<trimStackTrace>false</trimStackTrace>
<argLine>
@{argLine}
--add-opens stormpot/stormpot=ALL-UNNAMED
--add-opens stormpot/blackbox=ALL-UNNAMED
--add-opens stormpot/extensions=ALL-UNNAMED
-Djunit.jupiter.execution.parallel.enabled=true
-Djunit.jupiter.execution.parallel.mode.classes.default=concurrent
-Djunit.jupiter.execution.timeout.default=30m
-Djdk.attach.allowAttachSelf
</argLine>
</configuration>
Expand All @@ -135,12 +129,6 @@
<trimStackTrace>false</trimStackTrace>
<argLine>
@{argLine}
--add-opens stormpot/stormpot=ALL-UNNAMED
--add-opens stormpot/blackbox=ALL-UNNAMED
--add-opens stormpot/extensions=ALL-UNNAMED
-Djunit.jupiter.execution.parallel.enabled=true
-Djunit.jupiter.execution.parallel.mode.classes.default=concurrent
-Djunit.jupiter.execution.timeout.default=30m
-Djdk.attach.allowAttachSelf
</argLine>
</configuration>
Expand Down Expand Up @@ -312,7 +300,11 @@
</dependency>
</dependencies>
<configuration>
<oldVersion>3.0.1</oldVersion>
<analysisConfigurationFiles>
<configurationFile>
<path>api-changes.json</path>
</configurationFile>
</analysisConfigurationFiles>
</configuration>
<executions>
<execution>
Expand Down Expand Up @@ -395,7 +387,7 @@
<dependency>
<groupId>org.hdrhistogram</groupId>
<artifactId>HdrHistogram</artifactId>
<version>2.2.1</version>
<version>2.2.2</version>
<scope>test</scope>
</dependency>
<dependency>
Expand All @@ -420,7 +412,7 @@
<configuration>
<additionalOptions>
<additionalOption>--snippet-path</additionalOption>
<additionalOption>${build.testSourceDirectory}/examples/</additionalOption>
<additionalOption>${project.build.testSourceDirectory}/examples/</additionalOption>
</additionalOptions>
<detectJavaApiLink>true</detectJavaApiLink>
</configuration>
Expand Down
2 changes: 1 addition & 1 deletion src/main/java/module-info.java
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,6 @@
*/
module stormpot {
requires transitive java.management;
requires static java.sql; // For testing only.
exports stormpot;
exports stormpot.internal to stormpot.test;
}
5 changes: 5 additions & 0 deletions src/main/java/stormpot/Expiration.java
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,11 @@
*/
package stormpot;

import stormpot.internal.EveryExpiration;
import stormpot.internal.OrExpiration;
import stormpot.internal.TimeExpiration;
import stormpot.internal.TimeSpreadExpiration;

import java.util.concurrent.TimeUnit;

/**
Expand Down
39 changes: 19 additions & 20 deletions src/main/java/stormpot/Pool.java
Original file line number Diff line number Diff line change
Expand Up @@ -15,9 +15,11 @@
*/
package stormpot;

import static stormpot.AllocationProcess.direct;
import static stormpot.AllocationProcess.inline;
import static stormpot.AllocationProcess.threaded;
import stormpot.internal.PoolBuilderImpl;

import static stormpot.internal.AllocationProcess.direct;
import static stormpot.internal.AllocationProcess.inline;
import static stormpot.internal.AllocationProcess.threaded;

/**
* A Pool is a self-renewable set of objects from which one can claim exclusive
Expand Down Expand Up @@ -72,10 +74,7 @@
* by the configured allocator.
* @see stormpot.PoolTap
*/
public abstract class Pool<T extends Poolable> extends PoolTap<T> {
Pool() {
}

public interface Pool<T extends Poolable> extends PoolTap<T> {
/**
* Get a {@link PoolBuilder} based on the given {@link Allocator} or
* {@link Reallocator}, which can then in turn be used to
Expand All @@ -92,7 +91,7 @@ public abstract class Pool<T extends Poolable> extends PoolTap<T> {
* before the pool instance is {@linkplain PoolBuilder#build() built}.
* @see #fromThreaded(Allocator)
*/
public static <T extends Poolable> PoolBuilder<T> from(Allocator<T> allocator) {
static <T extends Poolable> PoolBuilder<T> from(Allocator<T> allocator) {
return fromThreaded(allocator);
}

Expand Down Expand Up @@ -120,8 +119,8 @@ public static <T extends Poolable> PoolBuilder<T> from(Allocator<T> allocator) {
* @return A {@link PoolBuilder} that admits additional configurations,
* before the pool instance is {@linkplain PoolBuilder#build() built}.
*/
public static <T extends Poolable> PoolBuilder<T> fromThreaded(Allocator<T> allocator) {
return new PoolBuilder<>(threaded(), allocator);
static <T extends Poolable> PoolBuilder<T> fromThreaded(Allocator<T> allocator) {
return new PoolBuilderImpl<>(threaded(), allocator);
}

/**
Expand All @@ -147,8 +146,8 @@ public static <T extends Poolable> PoolBuilder<T> fromThreaded(Allocator<T> allo
* @return A {@link PoolBuilder} that admits additional configurations,
* before the pool instance is {@linkplain PoolBuilder#build() built}.
*/
public static <T extends Poolable> PoolBuilder<T> fromInline(Allocator<T> allocator) {
return new PoolBuilder<>(inline(), allocator);
static <T extends Poolable> PoolBuilder<T> fromInline(Allocator<T> allocator) {
return new PoolBuilderImpl<>(inline(), allocator);
}

/**
Expand Down Expand Up @@ -185,7 +184,7 @@ public static <T extends Poolable> PoolBuilder<T> fromInline(Allocator<T> alloca
* @return A pool of the given objects.
*/
@SafeVarargs
public static <T> Pool<Pooled<T>> of(T... objects) {
static <T> Pool<Pooled<T>> of(T... objects) {
Allocator<Pooled<T>> allocator = new Allocator<>() {
private int index;
@Override
Expand All @@ -197,7 +196,7 @@ public Pooled<T> allocate(Slot slot) {
public void deallocate(Pooled<T> poolable) {
}
};
PoolBuilder<Pooled<T>> builder = new PoolBuilder<>(direct(), allocator);
PoolBuilder<Pooled<T>> builder = new PoolBuilderImpl<>(direct(), allocator);
builder.setSize(objects.length);
return builder.build();
}
Expand Down Expand Up @@ -232,7 +231,7 @@ public void deallocate(Pooled<T> poolable) {
* @return A {@link Completion} instance that represents the shutdown
* process.
*/
public abstract Completion shutdown();
Completion shutdown();

/**
* Set the target size for this pool. The pool will strive to keep this many
Expand All @@ -256,7 +255,7 @@ public void deallocate(Pooled<T> poolable) {
*
* @param size The new target size of the pool
*/
public abstract void setTargetSize(int size);
void setTargetSize(int size);

/**
* Get the currently configured target size of the pool. Note that this is
Expand All @@ -265,20 +264,20 @@ public void deallocate(Pooled<T> poolable) {
*
* @return The current target size of this pool.
*/
public abstract int getTargetSize();
int getTargetSize();

/**
* Get the {@link ManagedPool} instance that represents this pool.
* @return The {@link ManagedPool} instance for this pool.
*/
public abstract ManagedPool getManagedPool();
ManagedPool getManagedPool();

/**
* Get a thread-safe {@link PoolTap} implementation for this pool, which can
* be freely shared among multiple threads.
* @return A thread-safe {@link PoolTap}.
*/
public final PoolTap<T> getThreadSafeTap() {
default PoolTap<T> getThreadSafeTap() {
// We use the anonymous inner class to enforce encapsulation, which is
// probably the only reason anyone would wan to use this.
return new PoolTap<>() {
Expand Down Expand Up @@ -308,5 +307,5 @@ public T tryClaim() {
*
* @return A thread-local {@link PoolTap}.
*/
public abstract PoolTap<T> getThreadLocalTap();
PoolTap<T> getThreadLocalTap();
}
Loading
Loading