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

[ignite] branch master updated: IGNITE-11297 removed volatile from one time initialized variables - Fixes #6087.

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

dgovorukhin 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 3c4d48b  IGNITE-11297 removed volatile from one time initialized variables - Fixes #6087.
3c4d48b is described below

commit 3c4d48bc72ff753e593d6975881e9bf66fba1b45
Author: Anton Kalashnikov <ka...@yandex.ru>
AuthorDate: Fri Feb 15 12:22:33 2019 +0300

    IGNITE-11297 removed volatile from one time initialized variables - Fixes #6087.
    
    Signed-off-by: Dmitriy Govorukhin <dm...@gmail.com>
---
 .../persistence/wal/FileWriteAheadLogManager.java  | 96 +++++++++++-----------
 1 file changed, 50 insertions(+), 46 deletions(-)

diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/wal/FileWriteAheadLogManager.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/wal/FileWriteAheadLogManager.java
index db245fc..937e9e2 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/wal/FileWriteAheadLogManager.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/wal/FileWriteAheadLogManager.java
@@ -291,13 +291,13 @@ public class FileWriteAheadLogManager extends GridCacheSharedManagerAdapter impl
      * File archiver moves segments from work directory to archive. Locked segments may be kept not moved until release.
      * For mode archive and work folders set to equal value, archiver is not created.
      */
-    @Nullable private volatile FileArchiver archiver;
+    @Nullable private FileArchiver archiver;
 
     /** Compressor. */
-    private volatile FileCompressor compressor;
+    private FileCompressor compressor;
 
     /** Decompressor. */
-    private volatile FileDecompressor decompressor;
+    private FileDecompressor decompressor;
 
     /** */
     private final ThreadLocal<WALPointer> lastWALPtr = new ThreadLocal<>();
@@ -306,10 +306,10 @@ public class FileWriteAheadLogManager extends GridCacheSharedManagerAdapter impl
     private volatile FileWriteHandle currHnd;
 
     /** File handle manager. */
-    private volatile FileHandleManager fileHandleManager;
+    private FileHandleManager fileHandleManager;
 
     /** */
-    private volatile WALDisableContext walDisableContext;
+    private WALDisableContext walDisableContext;
 
     /**
      * Positive (non-0) value indicates WAL can be archived even if not complete<br>
@@ -347,7 +347,7 @@ public class FileWriteAheadLogManager extends GridCacheSharedManagerAdapter impl
     private SegmentRouter segmentRouter;
 
     /** Segment factory with ability locked segment during reading. */
-    private volatile SegmentFileInputFactory lockedSegmentFileInputFactory;
+    private SegmentFileInputFactory lockedSegmentFileInputFactory;
 
     /** FileHandleManagerFactory. */
     private final FileHandleManagerFactory fileHandleManagerFactory;
@@ -400,83 +400,85 @@ public class FileWriteAheadLogManager extends GridCacheSharedManagerAdapter impl
 
     /** {@inheritDoc} */
     @Override public void start0() throws IgniteCheckedException {
-        if(cctx.kernalContext().clientNode())
+        if (cctx.kernalContext().clientNode())
             return;
 
         final PdsFolderSettings resolveFolders = cctx.kernalContext().pdsFolderResolver().resolveFolders();
 
         checkWalConfiguration();
 
-        final File walWorkDir0 = walWorkDir = initDirectory(
+        synchronized (this) {
+            final File walWorkDir0 = walWorkDir = initDirectory(
                 dsCfg.getWalPath(),
                 DataStorageConfiguration.DFLT_WAL_PATH,
                 resolveFolders.folderName(),
                 "write ahead log work directory"
-        );
+            );
 
-        final File walArchiveDir0 = walArchiveDir = initDirectory(
+            final File walArchiveDir0 = walArchiveDir = initDirectory(
                 dsCfg.getWalArchivePath(),
                 DataStorageConfiguration.DFLT_WAL_ARCHIVE_PATH,
                 resolveFolders.folderName(),
                 "write ahead log archive directory"
-        );
+            );
 
-        serializer = new RecordSerializerFactoryImpl(cctx).createSerializer(serializerVer);
+            serializer = new RecordSerializerFactoryImpl(cctx).createSerializer(serializerVer);
 
-        GridCacheDatabaseSharedManager dbMgr = (GridCacheDatabaseSharedManager)cctx.database();
+            GridCacheDatabaseSharedManager dbMgr = (GridCacheDatabaseSharedManager)cctx.database();
 
-        metrics = dbMgr.persistentStoreMetricsImpl();
+            metrics = dbMgr.persistentStoreMetricsImpl();
 
-        checkOrPrepareFiles();
+            checkOrPrepareFiles();
 
-        if (metrics != null)
-            metrics.setWalSizeProvider(new CO<Long>() {
-                @Override public Long apply() {
-                    long size = 0;
+            if (metrics != null)
+                metrics.setWalSizeProvider(new CO<Long>() {
+                    @Override public Long apply() {
+                        long size = 0;
 
-                    for (File f : walWorkDir0.listFiles())
-                        size += f.length();
+                        for (File f : walWorkDir0.listFiles())
+                            size += f.length();
 
-                    for (File f : walArchiveDir0.listFiles())
-                        size += f.length();
+                        for (File f : walArchiveDir0.listFiles())
+                            size += f.length();
 
-                    return size;
-                }
-            });
+                        return size;
+                    }
+                });
 
-        IgniteBiTuple<Long, Long> tup = scanMinMaxArchiveIndices();
+            IgniteBiTuple<Long, Long> tup = scanMinMaxArchiveIndices();
 
-        segmentAware = new SegmentAware(dsCfg.getWalSegments(), dsCfg.isWalCompactionEnabled());
+            segmentAware = new SegmentAware(dsCfg.getWalSegments(), dsCfg.isWalCompactionEnabled());
 
-        segmentAware.lastTruncatedArchiveIdx(tup == null ? -1 : tup.get1() - 1);
+            segmentAware.lastTruncatedArchiveIdx(tup == null ? -1 : tup.get1() - 1);
 
-        long lastAbsArchivedIdx = tup == null ? -1 : tup.get2();
+            long lastAbsArchivedIdx = tup == null ? -1 : tup.get2();
 
-        if (isArchiverEnabled())
-            archiver = new FileArchiver(lastAbsArchivedIdx, log);
-        else
-            archiver = null;
+            if (isArchiverEnabled())
+                archiver = new FileArchiver(lastAbsArchivedIdx, log);
+            else
+                archiver = null;
 
-        if (lastAbsArchivedIdx > 0)
-            segmentAware.setLastArchivedAbsoluteIndex(lastAbsArchivedIdx);
+            if (lastAbsArchivedIdx > 0)
+                segmentAware.setLastArchivedAbsoluteIndex(lastAbsArchivedIdx);
 
-        if (dsCfg.isWalCompactionEnabled()) {
-            compressor = new FileCompressor(log);
+            if (dsCfg.isWalCompactionEnabled()) {
+                compressor = new FileCompressor(log);
 
-            decompressor = new FileDecompressor(log);
-        }
+                decompressor = new FileDecompressor(log);
+            }
 
-        segmentRouter = new SegmentRouter(walWorkDir, walArchiveDir, segmentAware, dsCfg);
+            segmentRouter = new SegmentRouter(walWorkDir, walArchiveDir, segmentAware, dsCfg);
 
-        fileHandleManager = fileHandleManagerFactory.build(
+            fileHandleManager = fileHandleManagerFactory.build(
                 cctx, metrics, mmap, lastWALPtr::get, serializer, this::currentHandle
-        );
+            );
 
-        lockedSegmentFileInputFactory = new LockedSegmentFileInputFactory(
+            lockedSegmentFileInputFactory = new LockedSegmentFileInputFactory(
                 segmentAware,
                 segmentRouter,
                 ioFactory
-        );
+            );
+        }
     }
 
     /**
@@ -639,7 +641,9 @@ public class FileWriteAheadLogManager extends GridCacheSharedManagerAdapter impl
         /*
             walDisableContext is started after FileWriteAheadLogManager, so we obtain actual walDisableContext ref here.
          */
-        walDisableContext = cctx.walState().walDisableContext();
+        synchronized (this) {
+            walDisableContext = cctx.walState().walDisableContext();
+        }
 
         assert currHnd == null;
         assert lastPtr == null || lastPtr instanceof FileWALPointer;