mirror of
https://github.com/OpenHFT/Chronicle-Map.git
synced 2021-09-13 01:26:12 +00:00
Rename ChronicleHashResourceReleaser to ChronicleHashResources
This commit is contained in:
+4
-1
@@ -22,7 +22,10 @@ import net.openhft.chronicle.hash.impl.util.Throwables;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
public abstract class ChronicleHashResourceReleaser implements Runnable {
|
||||
/**
|
||||
* ChronicleHashResources is Runnable to be passed as "hunk" to {@link sun.misc.Cleaner}.
|
||||
*/
|
||||
public abstract class ChronicleHashResources implements Runnable {
|
||||
|
||||
List<MemoryResource> memoryResources = new ArrayList<>(1);
|
||||
|
||||
+3
-3
@@ -21,12 +21,12 @@ import net.openhft.chronicle.core.OS;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
public final class InMemoryChronicleHashResourceReleaser extends ChronicleHashResourceReleaser {
|
||||
public final class InMemoryChronicleHashResources extends ChronicleHashResources {
|
||||
|
||||
private static final Logger LOG =
|
||||
LoggerFactory.getLogger(PersistedChronicleHashResourceReleaser.class);
|
||||
LoggerFactory.getLogger(PersistedChronicleHashResources.class);
|
||||
|
||||
public InMemoryChronicleHashResourceReleaser() {}
|
||||
public InMemoryChronicleHashResources() {}
|
||||
|
||||
@Override
|
||||
public synchronized void run() {
|
||||
+3
-4
@@ -25,14 +25,13 @@ import org.slf4j.LoggerFactory;
|
||||
import java.io.File;
|
||||
|
||||
|
||||
public final class PersistedChronicleHashResourceReleaser
|
||||
extends ChronicleHashResourceReleaser {
|
||||
public final class PersistedChronicleHashResources extends ChronicleHashResources {
|
||||
private static final Logger LOG =
|
||||
LoggerFactory.getLogger(PersistedChronicleHashResourceReleaser.class);
|
||||
LoggerFactory.getLogger(PersistedChronicleHashResources.class);
|
||||
|
||||
private final File file;
|
||||
|
||||
public PersistedChronicleHashResourceReleaser(File file) {
|
||||
public PersistedChronicleHashResources(File file) {
|
||||
this.file = file;
|
||||
}
|
||||
|
||||
@@ -129,7 +129,7 @@ public abstract class VanillaChronicleHash<K,
|
||||
// Resources
|
||||
private transient File file;
|
||||
private transient RandomAccessFile raf;
|
||||
private transient ChronicleHashResourceReleaser resourceReleaser;
|
||||
private transient ChronicleHashResources resources;
|
||||
private transient Cleaner cleaner;
|
||||
|
||||
/////////////////////////////////////////////////
|
||||
@@ -446,9 +446,9 @@ public abstract class VanillaChronicleHash<K,
|
||||
return CACHE_LINES.align(headerSize, BYTES);
|
||||
}
|
||||
|
||||
public final void createInMemoryStoreAndSegments(
|
||||
ChronicleHashResourceReleaser resourceReleaser) throws IOException {
|
||||
this.resourceReleaser = resourceReleaser;
|
||||
public final void createInMemoryStoreAndSegments(ChronicleHashResources resources)
|
||||
throws IOException {
|
||||
this.resources = resources;
|
||||
BytesStore bytesStore = nativeBytesStoreWithFixedCapacity(sizeInBytesWithoutTiers());
|
||||
createStoreAndSegments(bytesStore);
|
||||
}
|
||||
@@ -495,22 +495,22 @@ public abstract class VanillaChronicleHash<K,
|
||||
}
|
||||
|
||||
public void registerCleaner() {
|
||||
this.cleaner = Cleaner.create(this, resourceReleaser);
|
||||
this.cleaner = Cleaner.create(this, resources);
|
||||
}
|
||||
|
||||
public void addToOnExitHook() {
|
||||
ChronicleHashCloseOnExitHook.add(this);
|
||||
}
|
||||
|
||||
public final void createMappedStoreAndSegments(ChronicleHashResourceReleaser resourceReleaser)
|
||||
public final void createMappedStoreAndSegments(ChronicleHashResources resources)
|
||||
throws IOException {
|
||||
this.resourceReleaser = resourceReleaser;
|
||||
this.resources = resources;
|
||||
createStoreAndSegments(map(dataStoreSize(), 0));
|
||||
}
|
||||
|
||||
public final void basicRecover(ChronicleHashResourceReleaser resourceReleaser)
|
||||
public final void basicRecover(ChronicleHashResources resources)
|
||||
throws IOException {
|
||||
this.resourceReleaser = resourceReleaser;
|
||||
this.resources = resources;
|
||||
long segmentHeadersOffset = globalMutableState().getSegmentHeadersOffset();
|
||||
if (segmentHeadersOffset <= 0 || segmentHeadersOffset % 4096 != 0 ||
|
||||
segmentHeadersOffset > GIGABYTES.toBytes(1)) {
|
||||
@@ -688,8 +688,8 @@ public abstract class VanillaChronicleHash<K,
|
||||
}
|
||||
}
|
||||
|
||||
resourceReleaser.releaseManually();
|
||||
// Releases nothing after resourceReleaser.releaseManually(), only removes the cleaner
|
||||
resources.releaseManually();
|
||||
// Releases nothing after resources.releaseManually(), only removes the cleaner
|
||||
// from the internal linked list of all cleaners.
|
||||
cleaner.clean();
|
||||
ChronicleHashCloseOnExitHook.remove(this);
|
||||
@@ -794,7 +794,7 @@ public abstract class VanillaChronicleHash<K,
|
||||
|
||||
@Override
|
||||
public long offHeapMemoryUsed() {
|
||||
return resourceReleaser.totalMemory();
|
||||
return resources.totalMemory();
|
||||
}
|
||||
|
||||
public long allocateTier() {
|
||||
@@ -1015,7 +1015,7 @@ public abstract class VanillaChronicleHash<K,
|
||||
raf.setLength(minFileSize);
|
||||
}
|
||||
long address = OS.map(fileChannel, READ_WRITE, mappingOffsetInFile, mapSize);
|
||||
resourceReleaser.addMemoryResource(address, mapSize);
|
||||
resources.addMemoryResource(address, mapSize);
|
||||
return new NativeBytesStore(address, mapSize, null, false);
|
||||
}
|
||||
|
||||
@@ -1033,7 +1033,7 @@ public abstract class VanillaChronicleHash<K,
|
||||
|
||||
private BytesStore nativeBytesStoreWithFixedCapacity(long capacity) {
|
||||
long address = OS.memory().allocate(capacity);
|
||||
resourceReleaser.addMemoryResource(address, capacity);
|
||||
resources.addMemoryResource(address, capacity);
|
||||
return new NativeBytesStore<>(address, capacity, null, false);
|
||||
}
|
||||
|
||||
|
||||
@@ -1508,13 +1508,11 @@ public final class ChronicleMapBuilder<K, V> implements
|
||||
file.createNewFile();
|
||||
}
|
||||
RandomAccessFile raf = CanonicalRandomAccessFiles.acquire(file);
|
||||
ChronicleHashResourceReleaser resourceReleaser =
|
||||
new PersistedChronicleHashResourceReleaser(file);
|
||||
ChronicleHashResources resources = new PersistedChronicleHashResources(file);
|
||||
try {
|
||||
VanillaChronicleMap<K, V, ?> result;
|
||||
if (raf.length() > 0) {
|
||||
result = openWithExistingFile(file, raf, resourceReleaser, recover,
|
||||
overrideBuilderConfig);
|
||||
result = openWithExistingFile(file, raf, resources, recover, overrideBuilderConfig);
|
||||
} else {
|
||||
|
||||
// Single-element arrays allow to modify variables within lambda
|
||||
@@ -1536,10 +1534,10 @@ public final class ChronicleMapBuilder<K, V> implements
|
||||
|
||||
if (newFile[0]) {
|
||||
int headerSize = headerBuffer[0].remaining();
|
||||
result = createWithNewFile(map[0], file, raf, resourceReleaser, headerBuffer[0],
|
||||
result = createWithNewFile(map[0], file, raf, resources, headerBuffer[0],
|
||||
headerSize);
|
||||
} else {
|
||||
result = openWithExistingFile(file, raf, resourceReleaser, recover,
|
||||
result = openWithExistingFile(file, raf, resources, recover,
|
||||
overrideBuilderConfig);
|
||||
}
|
||||
}
|
||||
@@ -1547,7 +1545,7 @@ public final class ChronicleMapBuilder<K, V> implements
|
||||
return result;
|
||||
} catch (Throwable throwable) {
|
||||
try {
|
||||
resourceReleaser.releaseManually();
|
||||
resources.releaseManually();
|
||||
} catch (Exception e) {
|
||||
throwable.addSuppressed(e);
|
||||
}
|
||||
@@ -1662,16 +1660,16 @@ public final class ChronicleMapBuilder<K, V> implements
|
||||
|
||||
private VanillaChronicleMap<K, V, ?> createWithNewFile(
|
||||
VanillaChronicleMap<K, V, ?> map, File file, RandomAccessFile raf,
|
||||
ChronicleHashResourceReleaser resourceReleaser, ByteBuffer headerBuffer, int headerSize)
|
||||
ChronicleHashResources resources, ByteBuffer headerBuffer, int headerSize)
|
||||
throws IOException {
|
||||
map.initBeforeMapping(file, raf, headerBuffer.limit(), false);
|
||||
map.createMappedStoreAndSegments(resourceReleaser);
|
||||
map.createMappedStoreAndSegments(resources);
|
||||
commitChronicleMapReady(map, raf, headerBuffer, headerSize);
|
||||
return map;
|
||||
}
|
||||
|
||||
private VanillaChronicleMap<K, V, ?> openWithExistingFile(
|
||||
File file, RandomAccessFile raf, ChronicleHashResourceReleaser resourceReleaser,
|
||||
File file, RandomAccessFile raf, ChronicleHashResources resources,
|
||||
boolean recover, boolean overrideBuilderConfig)
|
||||
throws IOException {
|
||||
try {
|
||||
@@ -1701,13 +1699,13 @@ public final class ChronicleMapBuilder<K, V> implements
|
||||
}
|
||||
map.initTransientsFromBuilder(this);
|
||||
if (!recover) {
|
||||
map.createMappedStoreAndSegments(resourceReleaser);
|
||||
map.createMappedStoreAndSegments(resources);
|
||||
} else {
|
||||
if (!overrideBuilderConfig)
|
||||
writeNotComplete(fileChannel, headerBuffer, headerSize);
|
||||
// if overrideBuilderConfig = true, readiness bit is already set
|
||||
// in writeHeader() call
|
||||
map.recover(resourceReleaser);
|
||||
map.recover(resources);
|
||||
commitChronicleMapReady(map, raf, headerBuffer, headerSize);
|
||||
}
|
||||
return map;
|
||||
@@ -1723,16 +1721,15 @@ public final class ChronicleMapBuilder<K, V> implements
|
||||
replicated = replicationIdentifier != -1;
|
||||
persisted = false;
|
||||
|
||||
ChronicleHashResourceReleaser resourceReleaser =
|
||||
new InMemoryChronicleHashResourceReleaser();
|
||||
ChronicleHashResources resources = new InMemoryChronicleHashResources();
|
||||
try {
|
||||
VanillaChronicleMap<K, V, ?> map = newMap();
|
||||
map.createInMemoryStoreAndSegments(resourceReleaser);
|
||||
map.createInMemoryStoreAndSegments(resources);
|
||||
prepareMapPublication(map);
|
||||
return map;
|
||||
} catch (Throwable throwable) {
|
||||
try {
|
||||
resourceReleaser.releaseManually();
|
||||
resources.releaseManually();
|
||||
} catch (Exception e) {
|
||||
throwable.addSuppressed(e);
|
||||
}
|
||||
|
||||
@@ -154,8 +154,8 @@ public class VanillaChronicleMap<K, V, R>
|
||||
initOwnTransients();
|
||||
}
|
||||
|
||||
public void recover(ChronicleHashResourceReleaser resourceReleaser) throws IOException {
|
||||
basicRecover(resourceReleaser);
|
||||
public void recover(ChronicleHashResources resources) throws IOException {
|
||||
basicRecover(resources);
|
||||
try (IterationContext<K, V, ?> iterationContext = iterationContext()) {
|
||||
iterationContext.recoverSegments();
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user