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;