Remove unsupported code
This commit is contained in:
parent
6443e75ebd
commit
2bed1d4d51
@ -133,12 +133,6 @@ public class LLLocalKeyValueDatabase implements LLKeyValueDatabase {
|
||||
PlatformDependent.getUnsafeUnavailabilityCause()
|
||||
);
|
||||
}
|
||||
if (!MemorySegmentUtils.isSupported()) {
|
||||
throw new UnsupportedOperationException("Foreign Memory Access API support is disabled."
|
||||
+ " Please set \"" + MemorySegmentUtils.getSuggestedArgs() + "\"",
|
||||
MemorySegmentUtils.getUnsupportedCause()
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
OptionsWithCache optionsWithCache = openRocksDb(path, databaseOptions);
|
||||
|
@ -1,129 +0,0 @@
|
||||
package it.cavallium.dbengine.database.disk;
|
||||
|
||||
import io.netty5.util.internal.PlatformDependent;
|
||||
import java.lang.invoke.MethodHandle;
|
||||
import java.lang.invoke.MethodHandles;
|
||||
import java.lang.invoke.MethodHandles.Lookup;
|
||||
import java.lang.invoke.MethodType;
|
||||
import java.nio.ByteBuffer;
|
||||
|
||||
public class MemorySegmentUtils {
|
||||
|
||||
private static final MethodHandle OF_NATIVE_RESTRICTED;
|
||||
private static final MethodHandle AS_SLICE;
|
||||
private static final MethodHandle AS_BYTE_BUFFER;
|
||||
private static Throwable cause;
|
||||
|
||||
private static final Object NATIVE;
|
||||
|
||||
static {
|
||||
Lookup lookup = MethodHandles.lookup();
|
||||
|
||||
Object nativeVal = null;
|
||||
|
||||
var ofNativeRestricted = getJava16NativeRestricted(lookup);
|
||||
if (ofNativeRestricted == null) {
|
||||
cause = null;
|
||||
ofNativeRestricted = getJava17NativeRestricted(lookup);
|
||||
}
|
||||
if (ofNativeRestricted != null) {
|
||||
try {
|
||||
nativeVal = ofNativeRestricted.invoke();
|
||||
} catch (Throwable e) {
|
||||
cause = e;
|
||||
}
|
||||
}
|
||||
OF_NATIVE_RESTRICTED = ofNativeRestricted;
|
||||
|
||||
MethodHandle asSlice;
|
||||
try {
|
||||
asSlice = lookup.findVirtual(lookup.findClass("jdk.incubator.foreign.MemorySegment"),
|
||||
"asSlice",
|
||||
MethodType.methodType(lookup.findClass("jdk.incubator.foreign.MemorySegment"), long.class, long.class)
|
||||
);
|
||||
} catch (NoSuchMethodException | IllegalAccessException | ClassNotFoundException e) {
|
||||
asSlice = null;
|
||||
cause = e;
|
||||
}
|
||||
AS_SLICE = asSlice;
|
||||
|
||||
MethodHandle asByteBuffer;
|
||||
try {
|
||||
asByteBuffer = lookup.findVirtual(lookup.findClass("jdk.incubator.foreign.MemorySegment"),
|
||||
"asByteBuffer", MethodType.methodType(ByteBuffer.class));
|
||||
} catch (NoSuchMethodException | IllegalAccessException | ClassNotFoundException e) {
|
||||
asByteBuffer = null;
|
||||
cause = e;
|
||||
}
|
||||
AS_BYTE_BUFFER = asByteBuffer;
|
||||
|
||||
NATIVE = nativeVal;
|
||||
}
|
||||
|
||||
@SuppressWarnings("JavaLangInvokeHandleSignature")
|
||||
private static MethodHandle getJava16NativeRestricted(Lookup lookup) {
|
||||
MethodHandle ofNativeRestricted;
|
||||
try {
|
||||
ofNativeRestricted = lookup.findStatic(lookup.findClass("jdk.incubator.foreign.MemorySegment"),
|
||||
"ofNativeRestricted",
|
||||
MethodType.methodType(lookup.findClass("jdk.incubator.foreign.MemorySegment"))
|
||||
);
|
||||
} catch (NoSuchMethodException | IllegalAccessException | ClassNotFoundException e) {
|
||||
ofNativeRestricted = null;
|
||||
cause = e;
|
||||
}
|
||||
return ofNativeRestricted;
|
||||
}
|
||||
|
||||
@SuppressWarnings("JavaLangInvokeHandleSignature")
|
||||
private static MethodHandle getJava17NativeRestricted(Lookup lookup) {
|
||||
MethodHandle ofNativeRestricted;
|
||||
try {
|
||||
ofNativeRestricted = lookup.findStatic(lookup.findClass("jdk.incubator.foreign.MemorySegment"),
|
||||
"globalNativeSegment",
|
||||
MethodType.methodType(lookup.findClass("jdk.incubator.foreign.MemorySegment"))
|
||||
);
|
||||
} catch (NoSuchMethodException | IllegalAccessException | ClassNotFoundException e) {
|
||||
ofNativeRestricted = null;
|
||||
cause = e;
|
||||
}
|
||||
return ofNativeRestricted;
|
||||
}
|
||||
|
||||
public static ByteBuffer directBuffer(long address, long size) {
|
||||
if (address <= 0) {
|
||||
throw new IllegalArgumentException("Address is " + address);
|
||||
}
|
||||
if (size > Integer.MAX_VALUE || size < 0) {
|
||||
throw new IllegalArgumentException("size is " + size);
|
||||
}
|
||||
try {
|
||||
if (!isSupported()) {
|
||||
if (PlatformDependent.hasDirectBufferNoCleanerConstructor()) {
|
||||
return PlatformDependent.directBuffer(address, (int) size, null);
|
||||
}
|
||||
throw new UnsupportedOperationException("Foreign Memory Access API is disabled!"
|
||||
+ " Please set \"" + MemorySegmentUtils.getSuggestedArgs() + "\"",
|
||||
getUnsupportedCause()
|
||||
);
|
||||
}
|
||||
var memorySegment = AS_SLICE.invoke(NATIVE, address, size);
|
||||
return (ByteBuffer) AS_BYTE_BUFFER.invoke(memorySegment);
|
||||
} catch (Throwable e) {
|
||||
throw new UnsupportedOperationException("Foreign Memory Access API is disabled!"
|
||||
+ " Please set \"" + MemorySegmentUtils.getSuggestedArgs() + "\"", e);
|
||||
}
|
||||
}
|
||||
|
||||
public static boolean isSupported() {
|
||||
return OF_NATIVE_RESTRICTED != null && AS_SLICE != null && AS_BYTE_BUFFER != null && NATIVE != null;
|
||||
}
|
||||
|
||||
public static Throwable getUnsupportedCause() {
|
||||
return cause;
|
||||
}
|
||||
|
||||
public static String getSuggestedArgs() {
|
||||
return "--enable-preview --add-modules jdk.incubator.foreign -Dforeign.restricted=permit --enable-native-access=ALL-UNNAMED";
|
||||
}
|
||||
}
|
@ -4,7 +4,6 @@ import static org.junit.jupiter.api.Assertions.assertEquals;
|
||||
|
||||
import io.netty5.buffer.api.Buffer;
|
||||
import io.netty5.buffer.api.MemoryManager;
|
||||
import io.netty5.buffer.api.Send;
|
||||
import io.netty5.buffer.api.pool.MetricUtils;
|
||||
import io.netty5.buffer.api.pool.PoolArenaMetric;
|
||||
import io.netty5.buffer.api.pool.PooledBufferAllocator;
|
||||
@ -23,17 +22,14 @@ import it.cavallium.dbengine.database.collections.DatabaseStageEntry;
|
||||
import it.cavallium.dbengine.database.collections.DatabaseStageMap;
|
||||
import it.cavallium.dbengine.database.collections.SubStageGetterHashMap;
|
||||
import it.cavallium.dbengine.database.collections.SubStageGetterMap;
|
||||
import it.cavallium.dbengine.database.disk.MemorySegmentUtils;
|
||||
import it.cavallium.dbengine.database.serialization.SerializationException;
|
||||
import it.cavallium.dbengine.database.serialization.Serializer;
|
||||
import it.cavallium.dbengine.database.serialization.SerializerFixedBinaryLength;
|
||||
import it.unimi.dsi.fastutil.objects.Object2ObjectSortedMap;
|
||||
import java.nio.file.Path;
|
||||
import java.util.Map;
|
||||
import java.util.Objects;
|
||||
import java.util.function.Function;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
import org.reactivestreams.Publisher;
|
||||
import reactor.core.publisher.Flux;
|
||||
import reactor.core.publisher.Mono;
|
||||
@ -47,7 +43,7 @@ public class DbTestUtils {
|
||||
return "0123456789".repeat(1024);
|
||||
}
|
||||
|
||||
public static record TestAllocator(PooledBufferAllocator allocator) {}
|
||||
public record TestAllocator(PooledBufferAllocator allocator) {}
|
||||
|
||||
public static TestAllocator newAllocator() {
|
||||
return new TestAllocator(new PooledBufferAllocator(MemoryManager.instance(), true, 1, 8192, 9, 0, 0, true));
|
||||
@ -85,18 +81,18 @@ public class DbTestUtils {
|
||||
Function<LLKeyValueDatabase, Publisher<U>> action) {
|
||||
return Flux.usingWhen(
|
||||
temporaryDbGenerator.openTempDb(alloc),
|
||||
tempDb -> Flux.from(action.apply(tempDb.db())).doOnDiscard(Object.class, o -> {
|
||||
System.out.println("Discarded: " + o.getClass().getName() + ", " + o);
|
||||
}),
|
||||
tempDb -> Flux
|
||||
.from(action.apply(tempDb.db()))
|
||||
.doOnDiscard(Object.class, o -> System.out.println("Discarded: " + o.getClass().getName() + ", " + o)),
|
||||
temporaryDbGenerator::closeTempDb
|
||||
);
|
||||
}
|
||||
|
||||
public static record TempDb(TestAllocator allocator, LLDatabaseConnection connection, LLKeyValueDatabase db,
|
||||
LLLuceneIndex luceneSingle,
|
||||
LLLuceneIndex luceneMulti,
|
||||
SwappableLuceneSearcher swappableLuceneSearcher,
|
||||
Path path) {}
|
||||
public record TempDb(TestAllocator allocator, LLDatabaseConnection connection, LLKeyValueDatabase db,
|
||||
LLLuceneIndex luceneSingle,
|
||||
LLLuceneIndex luceneMulti,
|
||||
SwappableLuceneSearcher swappableLuceneSearcher,
|
||||
Path path) {}
|
||||
|
||||
static boolean computeCanUseNettyDirect() {
|
||||
boolean canUse = true;
|
||||
@ -105,16 +101,6 @@ public class DbTestUtils {
|
||||
+ " Netty direct buffers will not be used in tests!");
|
||||
canUse = false;
|
||||
}
|
||||
if (!MemorySegmentUtils.isSupported()) {
|
||||
System.err.println("Warning! Foreign Memory Access API is not available!"
|
||||
+ " Netty direct buffers will not be used in tests!"
|
||||
+ " Please set \"" + MemorySegmentUtils.getSuggestedArgs() + "\"");
|
||||
if (MemorySegmentUtils.getUnsupportedCause() != null) {
|
||||
System.err.println("\tCause: " + MemorySegmentUtils.getUnsupportedCause().getClass().getName()
|
||||
+ ":" + MemorySegmentUtils.getUnsupportedCause().getLocalizedMessage());
|
||||
}
|
||||
canUse = false;
|
||||
}
|
||||
return canUse;
|
||||
}
|
||||
|
||||
@ -173,14 +159,13 @@ public class DbTestUtils {
|
||||
}
|
||||
|
||||
@Override
|
||||
public @NotNull Short deserialize(@NotNull Buffer serialized) throws SerializationException {
|
||||
public @NotNull Short deserialize(@NotNull Buffer serialized) {
|
||||
Objects.requireNonNull(serialized);
|
||||
var val = serialized.readShort();
|
||||
return val;
|
||||
return serialized.readShort();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void serialize(@NotNull Short deserialized, Buffer output) throws SerializationException {
|
||||
public void serialize(@NotNull Short deserialized, Buffer output) {
|
||||
output.writeShort(deserialized);
|
||||
}
|
||||
},
|
||||
|
Loading…
Reference in New Issue
Block a user