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 <[email protected]>
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 <[email protected]>
---
.../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;