You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ignite.apache.org by mm...@apache.org on 2021/02/09 22:09:22 UTC

[ignite] branch master updated: IGNITE-14141 Remove unnecessary storage configuration from PageStore (#8774)

This is an automated email from the ASF dual-hosted git repository.

mmuzaf pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/ignite.git


The following commit(s) were added to refs/heads/master by this push:
     new 1af728f  IGNITE-14141 Remove unnecessary storage configuration from PageStore (#8774)
1af728f is described below

commit 1af728f33d1e2c9b904cd7390336897d1949cad6
Author: Maxim Muzafarov <mm...@apache.org>
AuthorDate: Wed Feb 10 01:08:49 2021 +0300

    IGNITE-14141 Remove unnecessary storage configuration from PageStore (#8774)
---
 .../cache/persistence/file/FilePageStore.java      | 32 ++++++++++++---------
 .../persistence/file/FilePageStoreManager.java     |  2 +-
 .../cache/persistence/file/FilePageStoreV2.java    | 14 +++------
 .../file/FileVersionCheckingFactory.java           | 33 ++++++++++++----------
 .../persistence/IgnitePdsTaskCancelingTest.java    |  2 +-
 5 files changed, 43 insertions(+), 40 deletions(-)

diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/file/FilePageStore.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/file/FilePageStore.java
index 6b63d31..67a8c51 100755
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/file/FilePageStore.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/file/FilePageStore.java
@@ -34,7 +34,6 @@ import java.util.function.LongConsumer;
 import org.apache.ignite.IgniteCheckedException;
 import org.apache.ignite.IgniteException;
 import org.apache.ignite.IgniteSystemProperties;
-import org.apache.ignite.configuration.DataStorageConfiguration;
 import org.apache.ignite.internal.pagemem.PageIdUtils;
 import org.apache.ignite.internal.pagemem.store.PageStore;
 import org.apache.ignite.internal.pagemem.store.PageWriteListener;
@@ -85,12 +84,12 @@ public class FilePageStore implements PageStore {
      */
     private volatile Boolean fileExists;
 
-    /** */
+    /**
+     * The type of stored pages into given page storage. The field can take the following values:
+     * {@link PageStore#TYPE_DATA} for regular affinity partition files or {@link PageStore#TYPE_IDX} for index pages.
+     */
     private final byte type;
 
-    /** Database configuration. */
-    protected final DataStorageConfiguration dbCfg;
-
     /** Factory to provide I/O interfaces for read/write operations with files */
     private final FileIOFactory ioFactory;
 
@@ -124,20 +123,27 @@ public class FilePageStore implements PageStore {
     /** */
     private final ReadWriteLock lock = new ReentrantReadWriteLock();
 
-    /** */
+    /**
+     * @param type Type of stored pages.
+     * @param pathProvider Store path.
+     * @param factory Factory producing an IO accessor.
+     * @param pageSize Page size.
+     * @param allocatedTracker Allocation tracker.
+     */
     public FilePageStore(
         byte type,
         IgniteOutClosure<Path> pathProvider,
         FileIOFactory factory,
-        DataStorageConfiguration cfg,
+        int pageSize,
         LongConsumer allocatedTracker
     ) {
+        assert type == PageStore.TYPE_DATA || type == PageStore.TYPE_IDX : type;
+
         this.type = type;
         this.pathProvider = pathProvider;
-        this.dbCfg = cfg;
         this.ioFactory = factory;
         this.allocated = new AtomicLong();
-        this.pageSize = dbCfg.getPageSize();
+        this.pageSize = pageSize;
         this.allocatedTracker = allocatedTracker;
     }
 
@@ -248,12 +254,12 @@ public class FilePageStore implements PageStore {
      */
     private long initFile(FileIO fileIO) throws IOException {
         try {
-            ByteBuffer hdr = header(type, dbCfg.getPageSize());
+            ByteBuffer hdr = header(type, pageSize);
 
             fileIO.writeFully(hdr);
 
             //there is 'super' page in every file
-            return headerSize() + dbCfg.getPageSize();
+            return headerSize() + pageSize;
         }
         catch (ClosedByInterruptException e) {
             // If thread was interrupted written header can be inconsistent.
@@ -310,9 +316,9 @@ public class FilePageStore implements PageStore {
 
         int pageSize = hdr.getInt();
 
-        if (dbCfg.getPageSize() != pageSize)
+        if (this.pageSize != pageSize)
             throw new IOException(prefix + "(invalid page size)" +
-                " [expectedPageSize=" + dbCfg.getPageSize() +
+                " [expectedPageSize=" + this.pageSize +
                 ", filePageSize=" + pageSize + "]");
 
         long fileSize = cfgFile.length();
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/file/FilePageStoreManager.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/file/FilePageStoreManager.java
index f8f28d8..197296a 100755
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/file/FilePageStoreManager.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/file/FilePageStoreManager.java
@@ -703,7 +703,7 @@ public class FilePageStoreManager extends GridCacheSharedManagerAdapter implemen
         FileVersionCheckingFactory pageStoreFactory = new FileVersionCheckingFactory(
             pageStoreFileIoFactory,
             pageStoreV1FileIoFactory,
-            igniteCfg.getDataStorageConfiguration()
+            igniteCfg.getDataStorageConfiguration()::getPageSize
         );
 
         if (encrypted) {
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/file/FilePageStoreV2.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/file/FilePageStoreV2.java
index 84609c9..8c1db88 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/file/FilePageStoreV2.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/file/FilePageStoreV2.java
@@ -18,7 +18,6 @@ package org.apache.ignite.internal.processors.cache.persistence.file;
 
 import java.nio.file.Path;
 import java.util.function.LongConsumer;
-import org.apache.ignite.configuration.DataStorageConfiguration;
 import org.apache.ignite.lang.IgniteOutClosure;
 
 /**
@@ -28,32 +27,27 @@ public class FilePageStoreV2 extends FilePageStore {
     /** File version. */
     public static final int VERSION = 2;
 
-    /** Header size. */
-    private final int hdrSize;
-
     /**
      * Constructor which initializes file path provider closure, allowing to calculate file path in any time.
      *
      * @param type Type.
      * @param pathProvider file path provider.
      * @param factory Factory.
-     * @param cfg Config.
+     * @param pageSize Page size.
      * @param allocatedTracker Allocated tracker.
      */
     public FilePageStoreV2(
         byte type,
         IgniteOutClosure<Path> pathProvider,
         FileIOFactory factory,
-        DataStorageConfiguration cfg,
+        int pageSize,
         LongConsumer allocatedTracker) {
-        super(type, pathProvider, factory, cfg, allocatedTracker);
-
-        hdrSize = cfg.getPageSize();
+        super(type, pathProvider, factory, pageSize, allocatedTracker);
     }
 
     /** {@inheritDoc} */
     @Override public int headerSize() {
-        return hdrSize;
+        return pageSize;
     }
 
     /** {@inheritDoc} */
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/file/FileVersionCheckingFactory.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/file/FileVersionCheckingFactory.java
index e650242..656a9bd 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/file/FileVersionCheckingFactory.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/file/FileVersionCheckingFactory.java
@@ -22,9 +22,9 @@ import java.nio.ByteBuffer;
 import java.nio.ByteOrder;
 import java.nio.file.Files;
 import java.nio.file.Path;
+import java.util.function.IntSupplier;
 import java.util.function.LongConsumer;
 import org.apache.ignite.IgniteCheckedException;
-import org.apache.ignite.configuration.DataStorageConfiguration;
 import org.apache.ignite.internal.pagemem.store.PageStore;
 import org.apache.ignite.lang.IgniteOutClosure;
 
@@ -45,41 +45,42 @@ public class FileVersionCheckingFactory implements FilePageStoreFactory {
      * Factory to provide I/O interfaces for read/write operations with files.
      * This is backup factory for V1 page store.
      */
-    private FileIOFactory fileIOFactoryStoreV1;
+    private final FileIOFactory fileIOFactoryStoreV1;
 
     /** Memory configuration. */
-    private final DataStorageConfiguration memCfg;
+    private final IntSupplier pageSize;
 
     /**
      * @param fileIOFactory File IO factory.
      * @param fileIOFactoryStoreV1 File IO factory for V1 page store and for version checking.
-     * @param memCfg Memory configuration.
+     * @param pageSize Page size supplier.
      */
     public FileVersionCheckingFactory(
         FileIOFactory fileIOFactory,
         FileIOFactory fileIOFactoryStoreV1,
-        DataStorageConfiguration memCfg
+        IntSupplier pageSize
     ) {
         this.fileIOFactory = fileIOFactory;
         this.fileIOFactoryStoreV1 = fileIOFactoryStoreV1;
-        this.memCfg = memCfg;
+        this.pageSize = pageSize;
     }
 
     /** {@inheritDoc} */
     @Override public PageStore createPageStore(
         byte type,
         IgniteOutClosure<Path> pathProvider,
-        LongConsumer allocatedTracker) throws IgniteCheckedException {
+        LongConsumer allocatedTracker
+    ) throws IgniteCheckedException {
         Path filePath = pathProvider.apply();
 
         if (!Files.exists(filePath))
-            return createPageStore(type, pathProvider, latestVersion(), allocatedTracker);
+            return createPageStore(type, pathProvider, pageSize.getAsInt(), latestVersion(), allocatedTracker);
 
         try (FileIO fileIO = fileIOFactoryStoreV1.create(filePath.toFile())) {
             int minHdr = FilePageStore.HEADER_SIZE;
 
             if (fileIO.size() < minHdr)
-                return createPageStore(type, pathProvider, latestVersion(), allocatedTracker);
+                return createPageStore(type, pathProvider, pageSize.getAsInt(), latestVersion(), allocatedTracker);
 
             ByteBuffer hdr = ByteBuffer.allocate(minHdr).order(ByteOrder.nativeOrder());
 
@@ -91,7 +92,7 @@ public class FileVersionCheckingFactory implements FilePageStoreFactory {
 
             int ver = hdr.getInt();
 
-            return createPageStore(type, pathProvider, ver, allocatedTracker);
+            return createPageStore(type, pathProvider, pageSize.getAsInt(), ver, allocatedTracker);
         }
         catch (IOException e) {
             throw new IgniteCheckedException("Error while creating file page store [file=" + filePath.toAbsolutePath() + "]:", e);
@@ -118,20 +119,22 @@ public class FileVersionCheckingFactory implements FilePageStoreFactory {
      *
      * @param type Type.
      * @param ver Version.
+     * @param pageSize Page size.
      * @param allocatedTracker Metrics updater
      */
     private FilePageStore createPageStore(
         byte type,
         IgniteOutClosure<Path> pathProvider,
+        int pageSize,
         int ver,
-        LongConsumer allocatedTracker) {
-
+        LongConsumer allocatedTracker
+    ) {
         switch (ver) {
             case FilePageStore.VERSION:
-                return new FilePageStore(type, pathProvider, fileIOFactoryStoreV1, memCfg, allocatedTracker);
+                return new FilePageStore(type, pathProvider, fileIOFactoryStoreV1, pageSize, allocatedTracker);
 
             case FilePageStoreV2.VERSION:
-                return new FilePageStoreV2(type, pathProvider, fileIOFactory, memCfg, allocatedTracker);
+                return new FilePageStoreV2(type, pathProvider, fileIOFactory, pageSize, allocatedTracker);
 
             default:
                 throw new IllegalArgumentException("Unknown version of file page store: " + ver + " for file [" + pathProvider.apply().toAbsolutePath() + "]");
@@ -148,7 +151,7 @@ public class FileVersionCheckingFactory implements FilePageStoreFactory {
                 return FilePageStore.HEADER_SIZE;
 
             case FilePageStoreV2.VERSION:
-                return memCfg.getPageSize();
+                return pageSize.getAsInt();
 
             default:
                 throw new IllegalArgumentException("Unknown version of file page store.");
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/persistence/IgnitePdsTaskCancelingTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/persistence/IgnitePdsTaskCancelingTest.java
index 300ce4e..ba702c6 100644
--- a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/persistence/IgnitePdsTaskCancelingTest.java
+++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/persistence/IgnitePdsTaskCancelingTest.java
@@ -198,7 +198,7 @@ public class IgnitePdsTaskCancelingTest extends GridCommonAbstractTest {
 
         DataStorageConfiguration dbCfg = getDataStorageConfiguration();
 
-        FilePageStore pageStore = new FilePageStore(PageMemory.FLAG_DATA, file::toPath, factory, dbCfg, val -> {});
+        FilePageStore pageStore = new FilePageStore(PageMemory.FLAG_DATA, file::toPath, factory, dbCfg.getPageSize(), val -> {});
 
         int pageSize = dbCfg.getPageSize();