Repository: ignite Updated Branches: refs/heads/ignite-5024 [created] 67ba03bc2
IGNITE-5024 - expandable memory space Project: http://git-wip-us.apache.org/repos/asf/ignite/repo Commit: http://git-wip-us.apache.org/repos/asf/ignite/commit/67ba03bc Tree: http://git-wip-us.apache.org/repos/asf/ignite/tree/67ba03bc Diff: http://git-wip-us.apache.org/repos/asf/ignite/diff/67ba03bc Branch: refs/heads/ignite-5024 Commit: 67ba03bc2c2181f9d61caddd5981d24ef50cc10a Parents: a826c61 Author: Alexey Goncharuk <[email protected]> Authored: Thu Apr 20 19:38:24 2017 +0300 Committer: Alexey Goncharuk <[email protected]> Committed: Thu Apr 20 19:38:24 2017 +0300 ---------------------------------------------------------------------- .../benchmarks/jmh/tree/BPlusTreeBenchmark.java | 8 +- .../configuration/DataPageEvictionMode.java | 4 +- .../configuration/MemoryConfiguration.java | 7 +- .../MemoryPolicyConfiguration.java | 41 ++- .../ignite/internal/mem/DirectMemory.java | 55 ---- .../internal/mem/DirectMemoryProvider.java | 19 +- .../mem/file/MappedFileMemoryProvider.java | 153 +++------- .../mem/unsafe/UnsafeMemoryProvider.java | 69 ++--- .../pagemem/impl/PageMemoryNoStoreImpl.java | 286 +++++++++++-------- .../IgniteCacheDatabaseSharedManager.java | 81 ++---- .../cache/database/MemoryMetricsImpl.java | 2 +- .../evict/PageAbstractEvictionTracker.java | 2 +- .../evict/Random2LruPageEvictionTracker.java | 2 +- .../evict/RandomLruPageEvictionTracker.java | 2 +- .../node/VisorMemoryPolicyConfiguration.java | 2 +- .../pagemem/impl/PageMemoryNoLoadSelfTest.java | 3 +- .../cache/CacheConfigurationLeakTest.java | 2 +- .../CacheMemoryPolicyConfigurationTest.java | 8 +- .../cache/MemoryPolicyConfigValidationTest.java | 2 +- .../paged/PageEvictionAbstractTest.java | 2 +- .../TxPessimisticDeadlockDetectionTest.java | 2 +- .../processors/database/BPlusTreeSelfTest.java | 12 +- .../database/FreeListImplSelfTest.java | 4 +- .../database/IgniteDbDynamicCacheSelfTest.java | 2 +- .../database/MetadataStorageSelfTest.java | 2 +- .../index/DynamicIndexAbstractSelfTest.java | 2 +- .../h2/database/InlineIndexHelperTest.java | 18 +- 27 files changed, 363 insertions(+), 429 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/ignite/blob/67ba03bc/modules/benchmarks/src/main/java/org/apache/ignite/internal/benchmarks/jmh/tree/BPlusTreeBenchmark.java ---------------------------------------------------------------------- diff --git a/modules/benchmarks/src/main/java/org/apache/ignite/internal/benchmarks/jmh/tree/BPlusTreeBenchmark.java b/modules/benchmarks/src/main/java/org/apache/ignite/internal/benchmarks/jmh/tree/BPlusTreeBenchmark.java index 5833e1f..d4e2c9f 100644 --- a/modules/benchmarks/src/main/java/org/apache/ignite/internal/benchmarks/jmh/tree/BPlusTreeBenchmark.java +++ b/modules/benchmarks/src/main/java/org/apache/ignite/internal/benchmarks/jmh/tree/BPlusTreeBenchmark.java @@ -210,7 +210,7 @@ public class BPlusTreeBenchmark extends JmhAbstractBenchmark { sizes[i] = 1024 * MB / CPUS; PageMemory pageMem = new PageMemoryNoStoreImpl(new JavaLogger(), - new UnsafeMemoryProvider(sizes), + new UnsafeMemoryProvider(new JavaLogger()), null, PAGE_SIZE, null, @@ -281,8 +281,7 @@ public class BPlusTreeBenchmark extends JmhAbstractBenchmark { } /** {@inheritDoc} */ - @Override public Long getLookupRow(BPlusTree<Long,?> tree, long pageAddr, int idx) - throws IgniteCheckedException { + @Override public Long getLookupRow(BPlusTree<Long,?> tree, long pageAddr, int idx) { return PageUtils.getLong(pageAddr, offset(idx)); } } @@ -318,8 +317,7 @@ public class BPlusTreeBenchmark extends JmhAbstractBenchmark { } /** {@inheritDoc} */ - @Override public Long getLookupRow(BPlusTree<Long,?> tree, long pageAddr, int idx) - throws IgniteCheckedException { + @Override public Long getLookupRow(BPlusTree<Long,?> tree, long pageAddr, int idx) { return PageUtils.getLong(pageAddr, offset(idx)); } } http://git-wip-us.apache.org/repos/asf/ignite/blob/67ba03bc/modules/core/src/main/java/org/apache/ignite/configuration/DataPageEvictionMode.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/configuration/DataPageEvictionMode.java b/modules/core/src/main/java/org/apache/ignite/configuration/DataPageEvictionMode.java index 91f707e..661e03e 100644 --- a/modules/core/src/main/java/org/apache/ignite/configuration/DataPageEvictionMode.java +++ b/modules/core/src/main/java/org/apache/ignite/configuration/DataPageEvictionMode.java @@ -31,9 +31,9 @@ public enum DataPageEvictionMode { * <ul> * <li>Once a memory region defined by a memory policy is configured, an off-heap array is allocated to track * last usage timestamp for every individual data page. The size of the array is calculated this way - size = - * ({@link MemoryPolicyConfiguration#getSize()} / {@link MemoryConfiguration#pageSize})</li> + * ({@link MemoryPolicyConfiguration#getMaxSize()} / {@link MemoryConfiguration#pageSize})</li> * <li>When a data page is accessed, its timestamp gets updated in the tracking array. The page index in the - * tracking array is calculated this way - index = (pageAddress / {@link MemoryPolicyConfiguration#getSize()}</li> + * tracking array is calculated this way - index = (pageAddress / {@link MemoryPolicyConfiguration#getMaxSize()}</li> * <li>When it's required to evict some pages, the algorithm randomly chooses 5 indexes from the tracking array and * evicts a page with the latest timestamp. If some of the indexes point to non-data pages (index or system pages) * then the algorithm peaks another ones.</li> http://git-wip-us.apache.org/repos/asf/ignite/blob/67ba03bc/modules/core/src/main/java/org/apache/ignite/configuration/MemoryConfiguration.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/configuration/MemoryConfiguration.java b/modules/core/src/main/java/org/apache/ignite/configuration/MemoryConfiguration.java index cd7c1fe..a353eef 100644 --- a/modules/core/src/main/java/org/apache/ignite/configuration/MemoryConfiguration.java +++ b/modules/core/src/main/java/org/apache/ignite/configuration/MemoryConfiguration.java @@ -62,8 +62,11 @@ public class MemoryConfiguration implements Serializable { /** */ private static final long serialVersionUID = 0L; + /** Default memory policy start size (256 MB). */ + public static final long DFLT_MEMORY_POLICY_INITIAL_SIZE = 256 * 1024 * 1024; + /** Default memory policy's size (1 GB). */ - public static final long DFLT_MEMORY_POLICY_SIZE = 1024 * 1024 * 1024; + public static final long DFLT_MEMORY_POLICY_MAX_SIZE = 1024 * 1024 * 1024; /** Default size of a memory chunk for the system cache (100 MB). */ public static final long DFLT_SYS_CACHE_MEM_SIZE = 100 * 1024 * 1024; @@ -165,7 +168,7 @@ public class MemoryConfiguration implements Serializable { MemoryPolicyConfiguration memPlc = new MemoryPolicyConfiguration(); memPlc.setName(null); - memPlc.setSize(DFLT_MEMORY_POLICY_SIZE); + memPlc.setMaxSize(DFLT_MEMORY_POLICY_MAX_SIZE); return memPlc; } http://git-wip-us.apache.org/repos/asf/ignite/blob/67ba03bc/modules/core/src/main/java/org/apache/ignite/configuration/MemoryPolicyConfiguration.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/configuration/MemoryPolicyConfiguration.java b/modules/core/src/main/java/org/apache/ignite/configuration/MemoryPolicyConfiguration.java index 6d5fe8c..2f52fe1 100644 --- a/modules/core/src/main/java/org/apache/ignite/configuration/MemoryPolicyConfiguration.java +++ b/modules/core/src/main/java/org/apache/ignite/configuration/MemoryPolicyConfiguration.java @@ -63,8 +63,11 @@ public final class MemoryPolicyConfiguration implements Serializable { /** Memory policy name. */ private String name; + /** Memory policy start size. */ + private long initialSize = MemoryConfiguration.DFLT_MEMORY_POLICY_INITIAL_SIZE; + /** Memory policy maximum size. */ - private long size; + private long maxSize = MemoryConfiguration.DFLT_MEMORY_POLICY_MAX_SIZE; /** An optional path to a memory mapped file for this memory policy. */ private String swapFilePath; @@ -107,16 +110,42 @@ public final class MemoryPolicyConfiguration implements Serializable { * * @return Size in bytes. */ - public long getSize() { - return size; + public long getMaxSize() { + return maxSize; } /** * Sets maximum memory region size defined by this memory policy. The total size should not be less than 10 MB * due to the internal data structures overhead. + * + * @param maxSize Maxumum memory policy size in bytes. + * @return {@code this} for chaining. + */ + public MemoryPolicyConfiguration setMaxSize(long maxSize) { + this.maxSize = maxSize; + + return this; + } + + /** + * Gets initial memory region size defined by this memory policy. When the used memory size exceeds this value, + * new chunks of memory will be allocated. + * + * @return Memory policy start size. + */ + public long getInitialSize() { + return initialSize; + } + + /** + * Sets initial memory region size defined by this memory policy. When the used memory size exceeds this value, + * new chunks of memory will be allocated. + * + * @param initialSize Memory policy initial size. + * @return {@code this} for chaining. */ - public MemoryPolicyConfiguration setSize(long size) { - this.size = size; + public MemoryPolicyConfiguration setInitialSize(long initialSize) { + this.initialSize = initialSize; return this; } @@ -146,7 +175,7 @@ public final class MemoryPolicyConfiguration implements Serializable { /** * Gets memory pages eviction mode. If {@link DataPageEvictionMode#DISABLED} is used (default) then an out of * memory exception will be thrown if the memory region usage, defined by this memory policy, goes beyond its - * capacity which is {@link #getSize()}. + * capacity which is {@link #getMaxSize()}. * * @return Memory pages eviction algorithm. {@link DataPageEvictionMode#DISABLED} used by default. */ http://git-wip-us.apache.org/repos/asf/ignite/blob/67ba03bc/modules/core/src/main/java/org/apache/ignite/internal/mem/DirectMemory.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/mem/DirectMemory.java b/modules/core/src/main/java/org/apache/ignite/internal/mem/DirectMemory.java deleted file mode 100644 index 2211a4c..0000000 --- a/modules/core/src/main/java/org/apache/ignite/internal/mem/DirectMemory.java +++ /dev/null @@ -1,55 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You 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. - */ - -package org.apache.ignite.internal.mem; - -import java.util.List; - -/** - * - */ -public class DirectMemory { - /** Will be set if */ - private boolean restored; - - /** */ - private List<DirectMemoryRegion> regions; - - /** - * @param restored Restored flag. - * @param regions Memory fragments. - */ - public DirectMemory(boolean restored, List<DirectMemoryRegion> regions) { - this.restored = restored; - this.regions = regions; - } - - /** - * @return Restored flag. If {@code true}, the memory fragments were successfully restored since the previous - * usage and can be reused. - */ - public boolean restored() { - return restored; - } - - /** - * @return Memory fragments. - */ - public List<DirectMemoryRegion> regions() { - return regions; - } -} http://git-wip-us.apache.org/repos/asf/ignite/blob/67ba03bc/modules/core/src/main/java/org/apache/ignite/internal/mem/DirectMemoryProvider.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/mem/DirectMemoryProvider.java b/modules/core/src/main/java/org/apache/ignite/internal/mem/DirectMemoryProvider.java index 5c73576..a90c6b8 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/mem/DirectMemoryProvider.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/mem/DirectMemoryProvider.java @@ -18,8 +18,23 @@ package org.apache.ignite.internal.mem; /** - * + * Direct memory provider interface. Not thread-safe. */ public interface DirectMemoryProvider { - public DirectMemory memory(); + /** + * @param chunkSizes Initializes provider with the chunk sizes. + */ + public void initialize(long[] chunkSizes); + + /** + * Shuts down the provider. Will deallocate all previously allocated regions. + */ + public void shutdown(); + + /** + * Attempts to allocate next memory region. Will return {@code null} if no more regions are available. + * + * @return Next memory region. + */ + public DirectMemoryRegion nextRegion(); } http://git-wip-us.apache.org/repos/asf/ignite/blob/67ba03bc/modules/core/src/main/java/org/apache/ignite/internal/mem/file/MappedFileMemoryProvider.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/mem/file/MappedFileMemoryProvider.java b/modules/core/src/main/java/org/apache/ignite/internal/mem/file/MappedFileMemoryProvider.java index d442baf..b0d8d9a 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/mem/file/MappedFileMemoryProvider.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/mem/file/MappedFileMemoryProvider.java @@ -22,18 +22,17 @@ import java.io.FilenameFilter; import java.io.IOException; import java.util.ArrayList; import java.util.Arrays; -import java.util.Comparator; import java.util.List; import org.apache.ignite.IgniteException; import org.apache.ignite.IgniteLogger; -import org.apache.ignite.internal.mem.DirectMemory; import org.apache.ignite.internal.mem.DirectMemoryProvider; -import org.apache.ignite.lifecycle.LifecycleAware; +import org.apache.ignite.internal.mem.DirectMemoryRegion; +import org.apache.ignite.internal.util.typedef.internal.U; /** * */ -public class MappedFileMemoryProvider implements DirectMemoryProvider, LifecycleAware { +public class MappedFileMemoryProvider implements DirectMemoryProvider { /** */ private static final String ALLOCATOR_FILE_PREFIX = "allocator-"; @@ -50,33 +49,26 @@ public class MappedFileMemoryProvider implements DirectMemoryProvider, Lifecycle /** File allocation path. */ private final File allocationPath; - /** Clean flag. If true, existing files will be deleted on start. */ - private boolean clean; - - /** */ - private final long[] sizes; - /** */ - private boolean restored; + private long[] sizes; /** */ private List<MappedFile> mappedFiles; /** * @param allocationPath Allocation path. - * @param clean Clean flag. If true, restore procedure will be ignored even if - * allocation folder contains valid files. - * @param sizes Sizes of memory chunks to allocate. */ - public MappedFileMemoryProvider(IgniteLogger log, File allocationPath, boolean clean, long[] sizes) { + public MappedFileMemoryProvider(IgniteLogger log, File allocationPath) { this.log = log; this.allocationPath = allocationPath; - this.clean = clean; - this.sizes = sizes; } /** {@inheritDoc} */ - @Override public void start() throws IgniteException { + @Override public void initialize(long[] sizes) { + this.sizes = sizes; + + mappedFiles = new ArrayList<>(sizes.length); + if (!allocationPath.exists()) { if (!allocationPath.mkdirs()) throw new IgniteException("Failed to initialize allocation path (make sure directory is " + @@ -88,107 +80,19 @@ public class MappedFileMemoryProvider implements DirectMemoryProvider, Lifecycle File[] files = allocationPath.listFiles(ALLOCATOR_FILTER); - Arrays.sort(files, new Comparator<File>() { - /** {@inheritDoc} */ - @Override public int compare(File o1, File o2) { - return o1.getName().compareTo(o2.getName()); - } - }); - - if (files.length == sizes.length) { - for (int i = 0; i < files.length; i++) { - File file = files[i]; - - if (file.length() != sizes[i]) { - clean = true; - - break; - } - } - } - else - clean = true; - - if (files.length == 0 || clean) { - if (files.length != 0) { - log.info("Will clean up the following files upon start: " + Arrays.asList(files)); - - for (File file : files) { - if (!file.delete()) - throw new IgniteException("Failed to delete allocated file on start (make sure file is not " + - "opened by another process and current user has enough rights): " + file); - } - } - - allocateClean(); - - return; - } - - log.info("Restoring memory state from the files: " + Arrays.asList(files)); + if (files.length != 0) { + log.info("Will clean up the following files upon start: " + Arrays.asList(files)); - mappedFiles = new ArrayList<>(files.length); - - try { for (File file : files) { - MappedFile mapped = new MappedFile(file, 0); - - mappedFiles.add(mapped); - } - } - catch (IOException e) { - // Close all files allocated so far. - try { - for (MappedFile mapped : mappedFiles) - mapped.close(); - } - catch (IOException e0) { - e.addSuppressed(e0); - } - - throw new IgniteException(e); - } - - restored = true; - } - - /** - * Allocates clear memory state. - */ - private void allocateClean() { - mappedFiles = new ArrayList<>(sizes.length); - - try { - int idx = 0; - - for (long size : sizes) { - File file = new File(allocationPath, ALLOCATOR_FILE_PREFIX + alignInt(idx)); - - MappedFile mappedFile = new MappedFile(file, size); - - mappedFiles.add(mappedFile); - - idx++; - } - } - catch (IOException e) { - // Close all files allocated so far. - try { - for (MappedFile mapped : mappedFiles) - mapped.close(); - } - catch (IOException e0) { - e.addSuppressed(e0); + if (!file.delete()) + throw new IgniteException("Failed to delete allocated file on start (make sure file is not " + + "opened by another process and current user has enough rights): " + file); } - - throw new IgniteException(e); } - - log.info("Allocated clean memory state at location: " + allocationPath.getAbsolutePath()); } /** {@inheritDoc} */ - @Override public void stop() throws IgniteException { + @Override public void shutdown() { for (MappedFile file : mappedFiles) { try { file.close(); @@ -201,9 +105,28 @@ public class MappedFileMemoryProvider implements DirectMemoryProvider, Lifecycle } /** {@inheritDoc} */ - @SuppressWarnings("unchecked") - @Override public DirectMemory memory() { - return new DirectMemory(restored, (List)mappedFiles); + @Override public DirectMemoryRegion nextRegion() { + try { + if (mappedFiles.size() == sizes.length) + return null; + + int idx = mappedFiles.size(); + + long chunkSize = sizes[idx]; + + File file = new File(allocationPath, ALLOCATOR_FILE_PREFIX + alignInt(idx)); + + MappedFile mappedFile = new MappedFile(file, chunkSize); + + mappedFiles.add(mappedFile); + + return mappedFile; + } + catch (IOException e) { + U.error(log, "Failed to allocate next memory-mapped region", e); + + return null; + } } /** http://git-wip-us.apache.org/repos/asf/ignite/blob/67ba03bc/modules/core/src/main/java/org/apache/ignite/internal/mem/unsafe/UnsafeMemoryProvider.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/mem/unsafe/UnsafeMemoryProvider.java b/modules/core/src/main/java/org/apache/ignite/internal/mem/unsafe/UnsafeMemoryProvider.java index 4cdecde..ef101d0 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/mem/unsafe/UnsafeMemoryProvider.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/mem/unsafe/UnsafeMemoryProvider.java @@ -20,70 +20,71 @@ package org.apache.ignite.internal.mem.unsafe; import java.util.ArrayList; import java.util.Iterator; import java.util.List; -import org.apache.ignite.IgniteException; -import org.apache.ignite.internal.mem.DirectMemory; -import org.apache.ignite.internal.mem.DirectMemoryRegion; +import org.apache.ignite.IgniteLogger; import org.apache.ignite.internal.mem.DirectMemoryProvider; +import org.apache.ignite.internal.mem.DirectMemoryRegion; import org.apache.ignite.internal.mem.UnsafeChunk; import org.apache.ignite.internal.util.GridUnsafe; -import org.apache.ignite.lifecycle.LifecycleAware; +import org.apache.ignite.internal.util.typedef.internal.U; /** * */ -public class UnsafeMemoryProvider implements DirectMemoryProvider, LifecycleAware { +public class UnsafeMemoryProvider implements DirectMemoryProvider { /** */ - private final long[] sizes; + private long[] sizes; /** */ private List<DirectMemoryRegion> regions; + /** */ + private IgniteLogger log; + /** - * @param sizes Sizes of segments. + * @param log Ignite logger to use. */ - public UnsafeMemoryProvider(long[] sizes) { - this.sizes = sizes; + public UnsafeMemoryProvider(IgniteLogger log) { + this.log = log; } /** {@inheritDoc} */ - @Override public DirectMemory memory() { - return new DirectMemory(false, regions); + @Override public void initialize(long[] sizes) { + this.sizes = sizes; + + regions = new ArrayList<>(); } /** {@inheritDoc} */ - @Override public void start() throws IgniteException { - regions = new ArrayList<>(); + @Override public void shutdown() { + for (Iterator<DirectMemoryRegion> it = regions.iterator(); it.hasNext(); ) { + DirectMemoryRegion chunk = it.next(); - long allocated = 0; + GridUnsafe.freeMemory(chunk.address()); - for (long size : sizes) { - long ptr = GridUnsafe.allocateMemory(size); + // Safety. + it.remove(); + } + } - if (ptr <= 0) { - for (DirectMemoryRegion region : regions) - GridUnsafe.freeMemory(region.address()); + /** {@inheritDoc} */ + @Override public DirectMemoryRegion nextRegion() { + if (regions.size() == sizes.length) + return null; - throw new IgniteException("Failed to allocate memory [allocated=" + allocated + - ", requested=" + size + ']'); - } + long chunkSize = sizes[regions.size()]; - DirectMemoryRegion chunk = new UnsafeChunk(ptr, size); + long ptr = GridUnsafe.allocateMemory(chunkSize); - regions.add(chunk); + if (ptr <= 0) { + U.error(log, "Failed to allocate next memory chunk: " + U.readableSize(chunkSize, true)); - allocated += size; + return null; } - } - /** {@inheritDoc} */ - @Override public void stop() throws IgniteException { - for (Iterator<DirectMemoryRegion> it = regions.iterator(); it.hasNext(); ) { - DirectMemoryRegion chunk = it.next(); + DirectMemoryRegion region = new UnsafeChunk(ptr, chunkSize); - GridUnsafe.freeMemory(chunk.address()); + regions.add(region); - // Safety. - it.remove(); - } + return region; } } http://git-wip-us.apache.org/repos/asf/ignite/blob/67ba03bc/modules/core/src/main/java/org/apache/ignite/internal/pagemem/impl/PageMemoryNoStoreImpl.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/pagemem/impl/PageMemoryNoStoreImpl.java b/modules/core/src/main/java/org/apache/ignite/internal/pagemem/impl/PageMemoryNoStoreImpl.java index 872e496..d983790 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/pagemem/impl/PageMemoryNoStoreImpl.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/pagemem/impl/PageMemoryNoStoreImpl.java @@ -21,11 +21,11 @@ import java.io.Closeable; import java.io.IOException; import java.nio.ByteBuffer; import java.util.concurrent.atomic.AtomicInteger; +import java.util.concurrent.atomic.AtomicLong; import java.util.concurrent.locks.ReentrantReadWriteLock; import org.apache.ignite.IgniteException; import org.apache.ignite.IgniteLogger; import org.apache.ignite.configuration.MemoryPolicyConfiguration; -import org.apache.ignite.internal.mem.DirectMemory; import org.apache.ignite.internal.mem.DirectMemoryProvider; import org.apache.ignite.internal.mem.DirectMemoryRegion; import org.apache.ignite.internal.mem.IgniteOutOfMemoryException; @@ -38,7 +38,6 @@ import org.apache.ignite.internal.util.GridUnsafe; import org.apache.ignite.internal.util.OffheapReadWriteLock; import org.apache.ignite.internal.util.offheap.GridOffHeapOutOfMemoryException; import org.apache.ignite.internal.util.typedef.internal.U; -import org.apache.ignite.lifecycle.LifecycleAware; import static org.apache.ignite.internal.util.GridUnsafe.wrapPointer; @@ -98,6 +97,21 @@ public class PageMemoryNoStoreImpl implements PageMemory { */ public static final int PAGE_OVERHEAD = LOCK_OFFSET + OffheapReadWriteLock.LOCK_SIZE; + /** Number of bits required to store segment index. */ + private static final int SEG_BITS = 4; + + /** Number of bits required to store segment index. */ + private static final int SEG_CNT = (1 << SEG_BITS); + + /** Number of bits left to store page index. */ + private static final int IDX_BITS = PageIdUtils.PAGE_IDX_SIZE - SEG_BITS; + + /** Segment mask. */ + private static final int SEG_MASK = ~(-1 << SEG_BITS); + + /** Index mask. */ + private static final int IDX_MASK = ~(-1 << IDX_BITS); + /** Page size. */ private int sysPageSize; @@ -113,20 +127,14 @@ public class PageMemoryNoStoreImpl implements PageMemory { /** Object to collect memory usage metrics. */ private final MemoryMetricsImpl memMetrics; - /** Segments array. */ - private Segment[] segments; - - /** Number of bits required to store segment index. */ - private int segBits; - - /** Number of bits left to store page index. */ - private int idxBits; - /** */ - private int segMask; + private AtomicLong freePageListHead = new AtomicLong(INVALID_REL_PTR); + + /** Segments array. */ + private volatile Segment[] segments; /** */ - private int idxMask; + private final AtomicInteger allocatedPages = new AtomicInteger(); /** */ private AtomicInteger selector = new AtomicInteger(); @@ -174,29 +182,28 @@ public class PageMemoryNoStoreImpl implements PageMemory { /** {@inheritDoc} */ @Override public void start() throws IgniteException { - if (directMemoryProvider instanceof LifecycleAware) - ((LifecycleAware)directMemoryProvider).start(); + long startSize = memoryPolicyCfg.getInitialSize(); + long maxSize = memoryPolicyCfg.getMaxSize(); - DirectMemory memory = directMemoryProvider.memory(); + long[] chunks = new long[SEG_CNT]; - segments = new Segment[memory.regions().size()]; + chunks[0] = startSize; - for (int i = 0; i < segments.length; i++) { - segments[i] = new Segment(i, memory.regions().get(i)); + long total = startSize; - segments[i].init(); - } + long allocChunkSize = Math.max((maxSize - startSize) / (SEG_CNT - 1), 256 * 1024 * 1024); - segBits = Integer.SIZE - Integer.numberOfLeadingZeros(segments.length - 1); + for (int i = 1; i < SEG_CNT; i++) { + long allocSize = Math.min(allocChunkSize, maxSize - total); - // Reserve at least one bit for segment. - if (segBits == 0) - segBits = 1; + chunks[i] = allocSize; + + total += allocSize; + } - idxBits = PageIdUtils.PAGE_IDX_SIZE - segBits; + directMemoryProvider.initialize(chunks); - segMask = ~(-1 << segBits); - idxMask = ~(-1 << idxBits); + addSegment(null); } /** {@inheritDoc} */ @@ -205,8 +212,7 @@ public class PageMemoryNoStoreImpl implements PageMemory { if (log.isDebugEnabled()) log.debug("Stopping page memory."); - if (directMemoryProvider instanceof LifecycleAware) - ((LifecycleAware)directMemoryProvider).stop(); + directMemoryProvider.shutdown(); if (directMemoryProvider instanceof Closeable) { try { @@ -227,35 +233,34 @@ public class PageMemoryNoStoreImpl implements PageMemory { @Override public long allocatePage(int cacheId, int partId, byte flags) { memMetrics.incrementTotalAllocatedPages(); - long relPtr = INVALID_REL_PTR; + long relPtr = borrowFreePage(); long absPtr = 0; - for (Segment seg : segments) { - relPtr = seg.borrowFreePage(); + if (relPtr != INVALID_REL_PTR) { + int pageIdx = PageIdUtils.pageIndex(relPtr); - if (relPtr != INVALID_REL_PTR) { - absPtr = seg.absolute(PageIdUtils.pageIndex(relPtr)); + Segment seg = segment(pageIdx); - break; - } + absPtr = seg.absolute(pageIdx); } // No segments contained a free page. if (relPtr == INVALID_REL_PTR) { - int segAllocIdx = nextRoundRobinIndex(); - - for (int i = 0; i < segments.length; i++) { - int idx = (segAllocIdx + i) % segments.length; + Segment[] seg0 = segments; + Segment allocSeg = seg0[seg0.length - 1]; - Segment seg = segments[idx]; - - relPtr = seg.allocateFreePage(flags); + while (allocSeg != null) { + relPtr = allocSeg.allocateFreePage(flags); if (relPtr != INVALID_REL_PTR) { - absPtr = seg.absolute(PageIdUtils.pageIndex(relPtr)); + if (relPtr != INVALID_REL_PTR) { + absPtr = allocSeg.absolute(PageIdUtils.pageIndex(relPtr)); - break; + break; + } } + else + allocSeg = addSegment(seg0); } } @@ -263,7 +268,7 @@ public class PageMemoryNoStoreImpl implements PageMemory { throw new IgniteOutOfMemoryException("Not enough memory allocated " + "(consider increasing memory policy size or enabling evictions) " + "[policyName=" + memoryPolicyCfg.getName() + - ", size=" + U.readableSize(memoryPolicyCfg.getSize(), true) + "]" + ", size=" + U.readableSize(memoryPolicyCfg.getMaxSize(), true) + "]" ); assert (relPtr & ~PageIdUtils.PAGE_IDX_MASK) == 0; @@ -281,9 +286,7 @@ public class PageMemoryNoStoreImpl implements PageMemory { /** {@inheritDoc} */ @Override public boolean freePage(int cacheId, long pageId) { - Segment seg = segment(PageIdUtils.pageIndex(pageId)); - - seg.releaseFreePage(pageId); + releaseFreePage(pageId); return true; } @@ -382,7 +385,7 @@ public class PageMemoryNoStoreImpl implements PageMemory { * @return Segment index. */ private int segmentIndex(long pageIdx) { - return (int)((pageIdx >> idxBits) & segMask); + return (int)((pageIdx >> IDX_BITS) & SEG_MASK); } /** @@ -393,8 +396,8 @@ public class PageMemoryNoStoreImpl implements PageMemory { private long fromSegmentIndex(int segIdx, long pageIdx) { long res = 0; - res = (res << segBits) | (segIdx & segMask); - res = (res << idxBits) | (pageIdx & idxMask); + res = (res << SEG_BITS) | (segIdx & SEG_MASK); + res = (res << IDX_BITS) | (pageIdx & IDX_MASK); return res; } @@ -428,7 +431,7 @@ public class PageMemoryNoStoreImpl implements PageMemory { } /** {@inheritDoc} */ - public long readLockForce(int cacheId, long pageId, long page) { + @Override public long readLockForce(int cacheId, long pageId, long page) { if (rwLock.readLock(page + LOCK_OFFSET, -1)) return page + PAGE_OVERHEAD; @@ -470,6 +473,109 @@ public class PageMemoryNoStoreImpl implements PageMemory { } /** + * @param pageId Page ID to release. + */ + private void releaseFreePage(long pageId) { + int pageIdx = PageIdUtils.pageIndex(pageId); + + // Clear out flags and file ID. + long relPtr = PageIdUtils.pageId(0, (byte)0, pageIdx); + + Segment seg = segment(pageIdx); + + long absPtr = seg.absolute(pageIdx); + + // Second, write clean relative pointer instead of page ID. + writePageId(absPtr, relPtr); + + // Third, link the free page. + while (true) { + long freePageRelPtrMasked = freePageListHead.get(); + + long freePageRelPtr = freePageRelPtrMasked & RELATIVE_PTR_MASK; + + GridUnsafe.putLong(absPtr, freePageRelPtr); + + if (freePageListHead.compareAndSet(freePageRelPtrMasked, relPtr)) { + allocatedPages.decrementAndGet(); + + return; + } + } + } + + /** + * @return Relative pointer to a free page that was borrowed from the allocated pool. + */ + private long borrowFreePage() { + while (true) { + long freePageRelPtrMasked = freePageListHead.get(); + + long freePageRelPtr = freePageRelPtrMasked & ADDRESS_MASK; + + if (freePageRelPtr != INVALID_REL_PTR) { + int pageIdx = PageIdUtils.pageIndex(freePageRelPtr); + + Segment seg = segment(pageIdx); + + long freePageAbsPtr = seg.absolute(pageIdx); + long nextFreePageRelPtr = GridUnsafe.getLong(freePageAbsPtr) & ADDRESS_MASK; + long cnt = ((freePageRelPtrMasked & COUNTER_MASK) + COUNTER_INC) & COUNTER_MASK; + + if (freePageListHead.compareAndSet(freePageRelPtrMasked, nextFreePageRelPtr | cnt)) { + GridUnsafe.putLong(freePageAbsPtr, PAGE_MARKER); + + allocatedPages.incrementAndGet(); + + return freePageRelPtr; + } + } + else + return INVALID_REL_PTR; + } + } + + /** + * Attempts to add a new memory segment. + * + * @param oldRef Old segments array. If this method observes another segments array, it will allocate a new + * segment (if possible). If the array has already been updated, it will return the last element in the + * new array. + * @return Added segment, if successfull, {@code null} if failed to add. + */ + private synchronized Segment addSegment(Segment[] oldRef) { + if (segments == oldRef) { + DirectMemoryRegion region = directMemoryProvider.nextRegion(); + + // No more memory is available. + if (region == null) + return null; + + if (oldRef != null) { + if (log.isInfoEnabled()) + log.info("Allocated next memory segment [plcName=" + memoryPolicyCfg.getName() + + ", chunkSize=" + U.readableSize(region.size(), true) + ']'); + } + + Segment[] newRef = new Segment[oldRef == null ? 1 : oldRef.length + 1]; + + if (oldRef != null) + System.arraycopy(oldRef, 0, newRef, 0, oldRef.length); + + Segment allocated = new Segment(newRef.length - 1, region); + + allocated.init(); + + newRef[newRef.length - 1] = allocated; + + segments = newRef; + } + + // Only this synchronized method writes to segments, so it is safe to read twice. + return segments[segments.length - 1]; + } + + /** * */ private class Segment extends ReentrantReadWriteLock { @@ -482,9 +588,6 @@ public class PageMemoryNoStoreImpl implements PageMemory { /** Direct memory chunk. */ private DirectMemoryRegion region; - /** Pointer to the address of the free page list. */ - private long freePageListPtr; - /** Last allocated page index. */ private long lastAllocatedIdxPtr; @@ -492,9 +595,6 @@ public class PageMemoryNoStoreImpl implements PageMemory { private long pagesBase; /** */ - private final AtomicInteger allocatedPages; - - /** */ private final AtomicInteger acquiredPages; /** @@ -505,7 +605,6 @@ public class PageMemoryNoStoreImpl implements PageMemory { this.idx = idx; this.region = region; - allocatedPages = new AtomicInteger(); acquiredPages = new AtomicInteger(); } @@ -515,10 +614,6 @@ public class PageMemoryNoStoreImpl implements PageMemory { private void init() { long base = region.address(); - freePageListPtr = base; - - base += 8; - lastAllocatedIdxPtr = base; base += 8; @@ -526,7 +621,6 @@ public class PageMemoryNoStoreImpl implements PageMemory { // Align by 8 bytes. pagesBase = (base + 7) & ~0x7; - GridUnsafe.putLong(freePageListPtr, INVALID_REL_PTR); GridUnsafe.putLong(lastAllocatedIdxPtr, 0); } @@ -556,7 +650,7 @@ public class PageMemoryNoStoreImpl implements PageMemory { * @return Absolute pointer. */ private long absolute(int pageIdx) { - pageIdx &= idxMask; + pageIdx &= IDX_MASK; long off = ((long)pageIdx) * sysPageSize; @@ -578,64 +672,6 @@ public class PageMemoryNoStoreImpl implements PageMemory { } /** - * @param pageId Page ID to release. - */ - private void releaseFreePage(long pageId) { - int pageIdx = PageIdUtils.pageIndex(pageId); - - // Clear out flags and file ID. - long relPtr = PageIdUtils.pageId(0, (byte)0, pageIdx); - - long absPtr = absolute(pageIdx); - - // Second, write clean relative pointer instead of page ID. - writePageId(absPtr, relPtr); - - // Third, link the free page. - while (true) { - long freePageRelPtrMasked = GridUnsafe.getLong(freePageListPtr); - - long freePageRelPtr = freePageRelPtrMasked & RELATIVE_PTR_MASK; - - GridUnsafe.putLong(absPtr, freePageRelPtr); - - if (GridUnsafe.compareAndSwapLong(null, freePageListPtr, freePageRelPtrMasked, relPtr)) { - allocatedPages.decrementAndGet(); - - return; - } - } - } - - /** - * @return Relative pointer to a free page that was borrowed from the allocated pool. - */ - private long borrowFreePage() { - while (true) { - long freePageRelPtrMasked = GridUnsafe.getLong(freePageListPtr); - - long freePageRelPtr = freePageRelPtrMasked & ADDRESS_MASK; - long cnt = ((freePageRelPtrMasked & COUNTER_MASK) + COUNTER_INC) & COUNTER_MASK; - - if (freePageRelPtr != INVALID_REL_PTR) { - long freePageAbsPtr = absolute(PageIdUtils.pageIndex(freePageRelPtr)); - - long nextFreePageRelPtr = GridUnsafe.getLong(freePageAbsPtr) & ADDRESS_MASK; - - if (GridUnsafe.compareAndSwapLong(null, freePageListPtr, freePageRelPtrMasked, nextFreePageRelPtr | cnt)) { - GridUnsafe.putLong(freePageAbsPtr, PAGE_MARKER); - - allocatedPages.incrementAndGet(); - - return freePageRelPtr; - } - } - else - return INVALID_REL_PTR; - } - } - - /** * @param tag Tag to initialize RW lock. * @return Relative pointer of the allocated page. * @throws GridOffHeapOutOfMemoryException If failed to allocate. http://git-wip-us.apache.org/repos/asf/ignite/blob/67ba03bc/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/database/IgniteCacheDatabaseSharedManager.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/database/IgniteCacheDatabaseSharedManager.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/database/IgniteCacheDatabaseSharedManager.java index e6fe7cd..d7e1e17 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/database/IgniteCacheDatabaseSharedManager.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/database/IgniteCacheDatabaseSharedManager.java @@ -209,7 +209,7 @@ public class IgniteCacheDatabaseSharedManager extends GridCacheSharedManagerAdap else { //reserve additional place for system memory policy only memPlcMap = U.newHashMap(memPlcsCfgs.length + 1); - memMetricsMap = U.newHashMap(memPlcsCfgs.length + 1);; + memMetricsMap = U.newHashMap(memPlcsCfgs.length + 1); } for (MemoryPolicyConfiguration memPlcCfg : memPlcsCfgs) { @@ -238,7 +238,7 @@ public class IgniteCacheDatabaseSharedManager extends GridCacheSharedManagerAdap /** * @param memMetrics Mem metrics. */ - private void registerMetricsMBean(MemoryMetricsImpl memMetrics) { + private void registerMetricsMBean(MemoryMetricsMXBean memMetrics) { IgniteConfiguration cfg = cctx.gridConfig(); try { @@ -251,7 +251,7 @@ public class IgniteCacheDatabaseSharedManager extends GridCacheSharedManagerAdap MemoryMetricsMXBean.class); } catch (JMException e) { - log.warning("Failed to register MBean for MemoryMetrics with name: '" + memMetrics.getName() + "'"); + U.error(log, "Failed to register MBean for MemoryMetrics with name: '" + memMetrics.getName() + "'", e); } } @@ -271,7 +271,8 @@ public class IgniteCacheDatabaseSharedManager extends GridCacheSharedManagerAdap MemoryPolicyConfiguration res = new MemoryPolicyConfiguration(); res.setName(SYSTEM_MEMORY_POLICY_NAME); - res.setSize(sysCacheMemSize); + res.setInitialSize(sysCacheMemSize); + res.setMaxSize(sysCacheMemSize); return res; } @@ -304,12 +305,14 @@ public class IgniteCacheDatabaseSharedManager extends GridCacheSharedManagerAdap * @param plcNames All MemoryPolicy names. * @throws IgniteCheckedException In case of validation violation. */ - private static void checkDefaultPolicyConfiguration(String dfltPlcName, Set<String> plcNames) throws IgniteCheckedException { + private static void checkDefaultPolicyConfiguration(String dfltPlcName, Collection<String> plcNames) + throws IgniteCheckedException { if (dfltPlcName != null) { if (dfltPlcName.isEmpty()) throw new IgniteCheckedException("User-defined default MemoryPolicy name must be non-empty"); if (!plcNames.contains(dfltPlcName)) - throw new IgniteCheckedException("User-defined default MemoryPolicy name must be presented among configured MemoryPolices: " + dfltPlcName); + throw new IgniteCheckedException("User-defined default MemoryPolicy name must be presented " + + "among configured MemoryPolices: " + dfltPlcName); } } @@ -318,8 +321,12 @@ public class IgniteCacheDatabaseSharedManager extends GridCacheSharedManagerAdap * @throws IgniteCheckedException If config is invalid. */ private static void checkPolicySize(MemoryPolicyConfiguration plcCfg) throws IgniteCheckedException { - if (plcCfg.getSize() < MIN_PAGE_MEMORY_SIZE) + if (plcCfg.getMaxSize() < MIN_PAGE_MEMORY_SIZE) throw new IgniteCheckedException("MemoryPolicy must have size more than 1MB: " + plcCfg.getName()); + + if (plcCfg.getMaxSize() > plcCfg.getInitialSize()) + throw new IgniteCheckedException("MemoryPolicy maxSize must not be smaller than " + + "initialSize: " + plcCfg.getName()); } /** @@ -340,7 +347,7 @@ public class IgniteCacheDatabaseSharedManager extends GridCacheSharedManagerAdap if (plcCfg.getEmptyPagesPoolSize() <= 10) throw new IgniteCheckedException("Evicted pages pool size should be greater than 10: " + plcCfg.getName()); - long maxPoolSize = plcCfg.getSize() / dbCfg.getPageSize() / 10; + long maxPoolSize = plcCfg.getMaxSize() / dbCfg.getPageSize() / 10; if (plcCfg.getEmptyPagesPoolSize() >= maxPoolSize) { throw new IgniteCheckedException("Evicted pages pool size should be lesser than " + maxPoolSize + @@ -353,9 +360,11 @@ public class IgniteCacheDatabaseSharedManager extends GridCacheSharedManagerAdap * @param observedNames Names of MemoryPolicies observed before. * @throws IgniteCheckedException If config is invalid. */ - private static void checkPolicyName(String plcName, Set<String> observedNames) throws IgniteCheckedException { + private static void checkPolicyName(String plcName, Collection<String> observedNames) + throws IgniteCheckedException { if (plcName == null || plcName.isEmpty()) - throw new IgniteCheckedException("User-defined MemoryPolicyConfiguration must have non-null and non-empty name."); + throw new IgniteCheckedException("User-defined MemoryPolicyConfiguration must have non-null and " + + "non-empty name."); if (observedNames.contains(plcName)) throw new IgniteCheckedException("Two MemoryPolicies have the same name: " + plcName); @@ -564,7 +573,7 @@ public class IgniteCacheDatabaseSharedManager extends GridCacheSharedManagerAdap if (plcCfg.getPageEvictionMode() == DataPageEvictionMode.DISABLED) return; - long memorySize = plcCfg.getSize(); + long memorySize = plcCfg.getMaxSize(); PageMemory pageMem = memPlc.pageMemory(); @@ -588,29 +597,23 @@ public class IgniteCacheDatabaseSharedManager extends GridCacheSharedManagerAdap } /** - * @param dbCfg memory configuration with common parameters. - * @param plc memory policy with PageMemory specific parameters. + * @param memCfg memory configuration with common parameters. + * @param plcCfg memory policy with PageMemory specific parameters. * @param memMetrics {@link MemoryMetrics} object to collect memory usage metrics. * @return Memory policy instance. */ - private MemoryPolicy initMemory(MemoryConfiguration dbCfg, MemoryPolicyConfiguration plc, MemoryMetricsImpl memMetrics) { - long[] sizes = calculateFragmentSizes( - dbCfg.getConcurrencyLevel(), - plc.getSize()); - - File allocPath = buildAllocPath(plc); + private MemoryPolicy initMemory(MemoryConfiguration memCfg, MemoryPolicyConfiguration plcCfg, MemoryMetricsImpl memMetrics) { + File allocPath = buildAllocPath(plcCfg); DirectMemoryProvider memProvider = allocPath == null ? - new UnsafeMemoryProvider(sizes) : + new UnsafeMemoryProvider(log) : new MappedFileMemoryProvider( log, - allocPath, - true, - sizes); + allocPath); - PageMemory pageMem = createPageMemory(memProvider, dbCfg.getPageSize(), plc, memMetrics); + PageMemory pageMem = createPageMemory(memProvider, memCfg, plcCfg, memMetrics); - return new MemoryPolicy(pageMem, plc, memMetrics, createPageEvictionTracker(plc, pageMem)); + return new MemoryPolicy(pageMem, plcCfg, memMetrics, createPageEvictionTracker(plcCfg, pageMem)); } /** @@ -632,28 +635,6 @@ public class IgniteCacheDatabaseSharedManager extends GridCacheSharedManagerAdap } /** - * Calculate fragment sizes for a cache with given size and concurrency level. - * @param concLvl Concurrency level. - * @param cacheSize Cache size. - */ - protected long[] calculateFragmentSizes(int concLvl, long cacheSize) { - if (concLvl < 1) - concLvl = Runtime.getRuntime().availableProcessors(); - - long fragmentSize = cacheSize / concLvl; - - if (fragmentSize < 1024 * 1024) - fragmentSize = 1024 * 1024; - - long[] sizes = new long[concLvl]; - - for (int i = 0; i < concLvl; i++) - sizes[i] = fragmentSize; - - return sizes; - } - - /** * Builds allocation path for memory mapped file to be used with PageMemory. * * @param plc MemoryPolicyConfiguration. @@ -675,18 +656,18 @@ public class IgniteCacheDatabaseSharedManager extends GridCacheSharedManagerAdap * Creates PageMemory with given size and memory provider. * * @param memProvider Memory provider. - * @param pageSize Page size. + * @param memCfg Memory configuartion. * @param memPlcCfg Memory policy configuration. * @param memMetrics MemoryMetrics to collect memory usage metrics. * @return PageMemory instance. */ protected PageMemory createPageMemory( DirectMemoryProvider memProvider, - int pageSize, + MemoryConfiguration memCfg, MemoryPolicyConfiguration memPlcCfg, MemoryMetricsImpl memMetrics ) { - return new PageMemoryNoStoreImpl(log, memProvider, cctx, pageSize, memPlcCfg, memMetrics, false); + return new PageMemoryNoStoreImpl(log, memProvider, cctx, memCfg.getPageSize(), memPlcCfg, memMetrics, false); } /** http://git-wip-us.apache.org/repos/asf/ignite/blob/67ba03bc/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/database/MemoryMetricsImpl.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/database/MemoryMetricsImpl.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/database/MemoryMetricsImpl.java index ed4cae0..ad12983 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/database/MemoryMetricsImpl.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/database/MemoryMetricsImpl.java @@ -79,7 +79,7 @@ public class MemoryMetricsImpl implements MemoryMetricsMXBean { /** {@inheritDoc} */ @Override public int getSize() { - return (int) (memPlcCfg.getSize() / (1024 * 1024)); + return (int) (memPlcCfg.getMaxSize() / (1024 * 1024)); } /** {@inheritDoc} */ http://git-wip-us.apache.org/repos/asf/ignite/blob/67ba03bc/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/database/evict/PageAbstractEvictionTracker.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/database/evict/PageAbstractEvictionTracker.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/database/evict/PageAbstractEvictionTracker.java index 88de545..510ffae 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/database/evict/PageAbstractEvictionTracker.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/database/evict/PageAbstractEvictionTracker.java @@ -85,7 +85,7 @@ public abstract class PageAbstractEvictionTracker implements PageEvictionTracker int pageSize = memCfg.getPageSize(); - long segSize = plcCfg.getSize() / concurrencyLevel; + long segSize = plcCfg.getMaxSize() / concurrencyLevel; if (segSize < 1024 * 1024) segSize = 1024 * 1024; http://git-wip-us.apache.org/repos/asf/ignite/blob/67ba03bc/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/database/evict/Random2LruPageEvictionTracker.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/database/evict/Random2LruPageEvictionTracker.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/database/evict/Random2LruPageEvictionTracker.java index f0ad813..870b4b1 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/database/evict/Random2LruPageEvictionTracker.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/database/evict/Random2LruPageEvictionTracker.java @@ -62,7 +62,7 @@ public class Random2LruPageEvictionTracker extends PageAbstractEvictionTracker { MemoryConfiguration memCfg = sharedCtx.kernalContext().config().getMemoryConfiguration(); - assert plcCfg.getSize() / memCfg.getPageSize() < Integer.MAX_VALUE; + assert plcCfg.getMaxSize() / memCfg.getPageSize() < Integer.MAX_VALUE; log = sharedCtx.logger(getClass()); } http://git-wip-us.apache.org/repos/asf/ignite/blob/67ba03bc/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/database/evict/RandomLruPageEvictionTracker.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/database/evict/RandomLruPageEvictionTracker.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/database/evict/RandomLruPageEvictionTracker.java index 8818b1c..169ec7e 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/database/evict/RandomLruPageEvictionTracker.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/database/evict/RandomLruPageEvictionTracker.java @@ -62,7 +62,7 @@ public class RandomLruPageEvictionTracker extends PageAbstractEvictionTracker { MemoryConfiguration memCfg = sharedCtx.kernalContext().config().getMemoryConfiguration(); - assert plcCfg.getSize() / memCfg.getPageSize() < Integer.MAX_VALUE; + assert plcCfg.getMaxSize() / memCfg.getPageSize() < Integer.MAX_VALUE; log = sharedCtx.logger(getClass()); } http://git-wip-us.apache.org/repos/asf/ignite/blob/67ba03bc/modules/core/src/main/java/org/apache/ignite/internal/visor/node/VisorMemoryPolicyConfiguration.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/visor/node/VisorMemoryPolicyConfiguration.java b/modules/core/src/main/java/org/apache/ignite/internal/visor/node/VisorMemoryPolicyConfiguration.java index 509aa48..66d7c01 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/visor/node/VisorMemoryPolicyConfiguration.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/visor/node/VisorMemoryPolicyConfiguration.java @@ -58,7 +58,7 @@ public class VisorMemoryPolicyConfiguration extends VisorDataTransferObject { assert plc != null; name = plc.getName(); - size = plc.getSize(); + size = plc.getMaxSize(); swapFilePath = plc.getSwapFilePath(); } http://git-wip-us.apache.org/repos/asf/ignite/blob/67ba03bc/modules/core/src/test/java/org/apache/ignite/internal/pagemem/impl/PageMemoryNoLoadSelfTest.java ---------------------------------------------------------------------- diff --git a/modules/core/src/test/java/org/apache/ignite/internal/pagemem/impl/PageMemoryNoLoadSelfTest.java b/modules/core/src/test/java/org/apache/ignite/internal/pagemem/impl/PageMemoryNoLoadSelfTest.java index 0fe90cd..2d6839d 100644 --- a/modules/core/src/test/java/org/apache/ignite/internal/pagemem/impl/PageMemoryNoLoadSelfTest.java +++ b/modules/core/src/test/java/org/apache/ignite/internal/pagemem/impl/PageMemoryNoLoadSelfTest.java @@ -284,8 +284,7 @@ public class PageMemoryNoLoadSelfTest extends GridCommonAbstractTest { for (int i = 0; i < sizes.length; i++) sizes[i] = 1024 * 1024; - DirectMemoryProvider provider = new MappedFileMemoryProvider(log(), memDir, true, - sizes); + DirectMemoryProvider provider = new MappedFileMemoryProvider(log(), memDir); return new PageMemoryNoStoreImpl(log(), provider, null, PAGE_SIZE, null, new MemoryMetricsImpl(null), true); } http://git-wip-us.apache.org/repos/asf/ignite/blob/67ba03bc/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/CacheConfigurationLeakTest.java ---------------------------------------------------------------------- diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/CacheConfigurationLeakTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/CacheConfigurationLeakTest.java index df9fbd5..69eda15 100644 --- a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/CacheConfigurationLeakTest.java +++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/CacheConfigurationLeakTest.java @@ -48,7 +48,7 @@ public class CacheConfigurationLeakTest extends GridCommonAbstractTest { MemoryPolicyConfiguration plc = new MemoryPolicyConfiguration(); plc.setName("dfltPlc"); - plc.setSize(MemoryConfiguration.DFLT_MEMORY_POLICY_SIZE * 10); + plc.setMaxSize(MemoryConfiguration.DFLT_MEMORY_POLICY_MAX_SIZE * 10); memCfg.setDefaultMemoryPolicyName("dfltPlc"); memCfg.setMemoryPolicies(plc); http://git-wip-us.apache.org/repos/asf/ignite/blob/67ba03bc/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/CacheMemoryPolicyConfigurationTest.java ---------------------------------------------------------------------- diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/CacheMemoryPolicyConfigurationTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/CacheMemoryPolicyConfigurationTest.java index d88723c..c1bce94 100644 --- a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/CacheMemoryPolicyConfigurationTest.java +++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/CacheMemoryPolicyConfigurationTest.java @@ -84,11 +84,11 @@ public class CacheMemoryPolicyConfigurationTest extends GridCommonAbstractTest { MemoryPolicyConfiguration dfltPlcCfg = new MemoryPolicyConfiguration(); dfltPlcCfg.setName("dfltPlc"); - dfltPlcCfg.setSize(1024 * 1024); + dfltPlcCfg.setMaxSize(1024 * 1024); MemoryPolicyConfiguration bigPlcCfg = new MemoryPolicyConfiguration(); bigPlcCfg.setName("bigPlc"); - bigPlcCfg.setSize(1024 * 1024 * 1024); + bigPlcCfg.setMaxSize(1024 * 1024 * 1024); memCfg.setMemoryPolicies(dfltPlcCfg, bigPlcCfg); memCfg.setDefaultMemoryPolicyName("dfltPlc"); @@ -137,11 +137,11 @@ public class CacheMemoryPolicyConfigurationTest extends GridCommonAbstractTest { MemoryPolicyConfiguration dfltPlcCfg = new MemoryPolicyConfiguration(); dfltPlcCfg.setName("dfltPlc"); - dfltPlcCfg.setSize(1024 * 1024); + dfltPlcCfg.setMaxSize(1024 * 1024); MemoryPolicyConfiguration bigPlcCfg = new MemoryPolicyConfiguration(); bigPlcCfg.setName("bigPlc"); - bigPlcCfg.setSize(1024 * 1024 * 1024); + bigPlcCfg.setMaxSize(1024 * 1024 * 1024); memCfg.setMemoryPolicies(dfltPlcCfg, bigPlcCfg); memCfg.setDefaultMemoryPolicyName("dfltPlc"); http://git-wip-us.apache.org/repos/asf/ignite/blob/67ba03bc/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/MemoryPolicyConfigValidationTest.java ---------------------------------------------------------------------- diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/MemoryPolicyConfigValidationTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/MemoryPolicyConfigValidationTest.java index c0f74d0..27c09c9 100644 --- a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/MemoryPolicyConfigValidationTest.java +++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/MemoryPolicyConfigValidationTest.java @@ -138,7 +138,7 @@ public class MemoryPolicyConfigValidationTest extends GridCommonAbstractTest { MemoryPolicyConfiguration plc = new MemoryPolicyConfiguration(); plc.setName(name); - plc.setSize(size); + plc.setMaxSize(size); return plc; } http://git-wip-us.apache.org/repos/asf/ignite/blob/67ba03bc/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/eviction/paged/PageEvictionAbstractTest.java ---------------------------------------------------------------------- diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/eviction/paged/PageEvictionAbstractTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/eviction/paged/PageEvictionAbstractTest.java index 20edd4e..6fb4397 100644 --- a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/eviction/paged/PageEvictionAbstractTest.java +++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/eviction/paged/PageEvictionAbstractTest.java @@ -79,7 +79,7 @@ public class PageEvictionAbstractTest extends GridCommonAbstractTest { MemoryPolicyConfiguration plc = new MemoryPolicyConfiguration(); - plc.setSize(SIZE); + plc.setMaxSize(SIZE); plc.setEmptyPagesPoolSize(EMPTY_PAGES_POOL_SIZE); plc.setEvictionThreshold(EVICTION_THRESHOLD); plc.setName(DEFAULT_POLICY_NAME); http://git-wip-us.apache.org/repos/asf/ignite/blob/67ba03bc/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/transactions/TxPessimisticDeadlockDetectionTest.java ---------------------------------------------------------------------- diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/transactions/TxPessimisticDeadlockDetectionTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/transactions/TxPessimisticDeadlockDetectionTest.java index 4660972..bc297a2 100644 --- a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/transactions/TxPessimisticDeadlockDetectionTest.java +++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/transactions/TxPessimisticDeadlockDetectionTest.java @@ -103,7 +103,7 @@ public class TxPessimisticDeadlockDetectionTest extends GridCommonAbstractTest { MemoryPolicyConfiguration plc = new MemoryPolicyConfiguration(); plc.setName("dfltPlc"); - plc.setSize(MemoryConfiguration.DFLT_MEMORY_POLICY_SIZE * 10); + plc.setMaxSize(MemoryConfiguration.DFLT_MEMORY_POLICY_MAX_SIZE * 10); memCfg.setDefaultMemoryPolicyName("dfltPlc"); memCfg.setMemoryPolicies(plc); http://git-wip-us.apache.org/repos/asf/ignite/blob/67ba03bc/modules/core/src/test/java/org/apache/ignite/internal/processors/database/BPlusTreeSelfTest.java ---------------------------------------------------------------------- diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/database/BPlusTreeSelfTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/database/BPlusTreeSelfTest.java index 32c6675..bf25349 100644 --- a/modules/core/src/test/java/org/apache/ignite/internal/processors/database/BPlusTreeSelfTest.java +++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/database/BPlusTreeSelfTest.java @@ -1272,7 +1272,7 @@ public class BPlusTreeSelfTest extends GridCommonAbstractTest { tree.invoke(x, null, new IgniteTree.InvokeClosure<Long>() { IgniteTree.OperationType opType; - @Override public void call(@Nullable Long row) throws IgniteCheckedException { + @Override public void call(@Nullable Long row) { opType = PUT; if (row != null) @@ -1294,7 +1294,7 @@ public class BPlusTreeSelfTest extends GridCommonAbstractTest { tree.invoke(x, null, new IgniteTree.InvokeClosure<Long>() { IgniteTree.OperationType opType; - @Override public void call(@Nullable Long row) throws IgniteCheckedException { + @Override public void call(@Nullable Long row) { if (row != null) { assertEquals(x, row); opType = REMOVE; @@ -1685,8 +1685,7 @@ public class BPlusTreeSelfTest extends GridCommonAbstractTest { } /** {@inheritDoc} */ - @Override public Long getLookupRow(BPlusTree<Long,?> tree, long pageAddr, int idx) - throws IgniteCheckedException { + @Override public Long getLookupRow(BPlusTree<Long,?> tree, long pageAddr, int idx) { Long row = PageUtils.getLong(pageAddr, offset(idx)); checkNotRemoved(row); @@ -1705,7 +1704,7 @@ public class BPlusTreeSelfTest extends GridCommonAbstractTest { sizes[i] = 1024 * MB / CPUS; PageMemory pageMem = new PageMemoryNoStoreImpl(log, - new UnsafeMemoryProvider(sizes), + new UnsafeMemoryProvider(log), null, PAGE_SIZE, null, @@ -1754,8 +1753,7 @@ public class BPlusTreeSelfTest extends GridCommonAbstractTest { } /** {@inheritDoc} */ - @Override public Long getLookupRow(BPlusTree<Long,?> tree, long pageAddr, int idx) - throws IgniteCheckedException { + @Override public Long getLookupRow(BPlusTree<Long,?> tree, long pageAddr, int idx) { return PageUtils.getLong(pageAddr, offset(idx)); } } http://git-wip-us.apache.org/repos/asf/ignite/blob/67ba03bc/modules/core/src/test/java/org/apache/ignite/internal/processors/database/FreeListImplSelfTest.java ---------------------------------------------------------------------- diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/database/FreeListImplSelfTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/database/FreeListImplSelfTest.java index 1cede9b..95771b2 100644 --- a/modules/core/src/test/java/org/apache/ignite/internal/processors/database/FreeListImplSelfTest.java +++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/database/FreeListImplSelfTest.java @@ -145,7 +145,7 @@ public class FreeListImplSelfTest extends GridCommonAbstractTest { /** * @param pageSize Page size. - * @throws Exception + * @throws Exception If failed. */ protected void checkInsertDeleteMultiThreaded(final int pageSize) throws Exception { final FreeList list = createFreeList(pageSize); @@ -320,7 +320,7 @@ public class FreeListImplSelfTest extends GridCommonAbstractTest { sizes[i] = 1024 * MB / CPUS; PageMemory pageMem = new PageMemoryNoStoreImpl(log, - new UnsafeMemoryProvider(sizes), + new UnsafeMemoryProvider(log), null, pageSize, null, http://git-wip-us.apache.org/repos/asf/ignite/blob/67ba03bc/modules/core/src/test/java/org/apache/ignite/internal/processors/database/IgniteDbDynamicCacheSelfTest.java ---------------------------------------------------------------------- diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/database/IgniteDbDynamicCacheSelfTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/database/IgniteDbDynamicCacheSelfTest.java index b7a8bf3..9f556d3 100644 --- a/modules/core/src/test/java/org/apache/ignite/internal/processors/database/IgniteDbDynamicCacheSelfTest.java +++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/database/IgniteDbDynamicCacheSelfTest.java @@ -44,7 +44,7 @@ public class IgniteDbDynamicCacheSelfTest extends GridCommonAbstractTest { MemoryPolicyConfiguration plc = new MemoryPolicyConfiguration(); plc.setName("dfltPlc"); - plc.setSize(200 * 1024 * 1024); + plc.setMaxSize(200 * 1024 * 1024); dbCfg.setDefaultMemoryPolicyName("dfltPlc"); dbCfg.setMemoryPolicies(plc); http://git-wip-us.apache.org/repos/asf/ignite/blob/67ba03bc/modules/core/src/test/java/org/apache/ignite/internal/processors/database/MetadataStorageSelfTest.java ---------------------------------------------------------------------- diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/database/MetadataStorageSelfTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/database/MetadataStorageSelfTest.java index 61c8ad9..d15938d 100644 --- a/modules/core/src/test/java/org/apache/ignite/internal/processors/database/MetadataStorageSelfTest.java +++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/database/MetadataStorageSelfTest.java @@ -159,7 +159,7 @@ public class MetadataStorageSelfTest extends GridCommonAbstractTest { for (int i = 0; i < sizes.length; i++) sizes[i] = 1024 * 1024; - DirectMemoryProvider provider = new MappedFileMemoryProvider(log(), allocationPath, clean, sizes); + DirectMemoryProvider provider = new MappedFileMemoryProvider(log(), allocationPath); return new PageMemoryNoStoreImpl(log, provider, null, PAGE_SIZE, null, new MemoryMetricsImpl(null), true); } http://git-wip-us.apache.org/repos/asf/ignite/blob/67ba03bc/modules/indexing/src/test/java/org/apache/ignite/internal/processors/cache/index/DynamicIndexAbstractSelfTest.java ---------------------------------------------------------------------- diff --git a/modules/indexing/src/test/java/org/apache/ignite/internal/processors/cache/index/DynamicIndexAbstractSelfTest.java b/modules/indexing/src/test/java/org/apache/ignite/internal/processors/cache/index/DynamicIndexAbstractSelfTest.java index 1ed7426..84ee489 100644 --- a/modules/indexing/src/test/java/org/apache/ignite/internal/processors/cache/index/DynamicIndexAbstractSelfTest.java +++ b/modules/indexing/src/test/java/org/apache/ignite/internal/processors/cache/index/DynamicIndexAbstractSelfTest.java @@ -138,7 +138,7 @@ public abstract class DynamicIndexAbstractSelfTest extends AbstractSchemaSelfTes MemoryConfiguration memCfg = new MemoryConfiguration() .setDefaultMemoryPolicyName("default") - .setMemoryPolicies(new MemoryPolicyConfiguration().setName("default").setSize(32 * 1024 * 1024L) + .setMemoryPolicies(new MemoryPolicyConfiguration().setName("default").setMaxSize(32 * 1024 * 1024L) ); cfg.setMemoryConfiguration(memCfg); http://git-wip-us.apache.org/repos/asf/ignite/blob/67ba03bc/modules/indexing/src/test/java/org/apache/ignite/internal/processors/query/h2/database/InlineIndexHelperTest.java ---------------------------------------------------------------------- diff --git a/modules/indexing/src/test/java/org/apache/ignite/internal/processors/query/h2/database/InlineIndexHelperTest.java b/modules/indexing/src/test/java/org/apache/ignite/internal/processors/query/h2/database/InlineIndexHelperTest.java index f34deae..c4ba3c3 100644 --- a/modules/indexing/src/test/java/org/apache/ignite/internal/processors/query/h2/database/InlineIndexHelperTest.java +++ b/modules/indexing/src/test/java/org/apache/ignite/internal/processors/query/h2/database/InlineIndexHelperTest.java @@ -136,8 +136,10 @@ public class InlineIndexHelperTest extends TestCase { for (int i = 0; i < sizes.length; i++) sizes[i] = 1024 * MB / CPUS; - PageMemory pageMem = new PageMemoryNoStoreImpl(new JavaLogger(), - new UnsafeMemoryProvider(sizes), + JavaLogger log = new JavaLogger(); + + PageMemory pageMem = new PageMemoryNoStoreImpl(log, + new UnsafeMemoryProvider(log), null, PAGE_SIZE, null, @@ -183,8 +185,10 @@ public class InlineIndexHelperTest extends TestCase { for (int i = 0; i < sizes.length; i++) sizes[i] = 1024 * MB / CPUS; - PageMemory pageMem = new PageMemoryNoStoreImpl(new JavaLogger(), - new UnsafeMemoryProvider(sizes), + JavaLogger log = new JavaLogger(); + + PageMemory pageMem = new PageMemoryNoStoreImpl(log, + new UnsafeMemoryProvider(log), null, PAGE_SIZE, null, @@ -306,8 +310,10 @@ public class InlineIndexHelperTest extends TestCase { for (int i = 0; i < sizes.length; i++) sizes[i] = 1024 * MB / CPUS; - PageMemory pageMem = new PageMemoryNoStoreImpl(new JavaLogger(), - new UnsafeMemoryProvider(sizes), + JavaLogger log = new JavaLogger(); + + PageMemory pageMem = new PageMemoryNoStoreImpl(log, + new UnsafeMemoryProvider(log), null, PAGE_SIZE, null,
