IGNITE-7016 Avoid WAL segment fsync on header write in non-default mode
Project: http://git-wip-us.apache.org/repos/asf/ignite/repo Commit: http://git-wip-us.apache.org/repos/asf/ignite/commit/e52113b2 Tree: http://git-wip-us.apache.org/repos/asf/ignite/tree/e52113b2 Diff: http://git-wip-us.apache.org/repos/asf/ignite/diff/e52113b2 Branch: refs/heads/ignite-7016 Commit: e52113b2ec92d8b03a572d73255d44aa53388a56 Parents: 5fa9de3 Author: Alexey Goncharuk <[email protected]> Authored: Mon Nov 27 11:06:49 2017 +0300 Committer: Alexey Goncharuk <[email protected]> Committed: Wed Nov 29 19:10:44 2017 +0300 ---------------------------------------------------------------------- .../wal/FileWriteAheadLogManager.java | 20 +++++++++++++------- 1 file changed, 13 insertions(+), 7 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/ignite/blob/e52113b2/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/wal/FileWriteAheadLogManager.java ---------------------------------------------------------------------- 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 a450521..517923a 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 @@ -1304,16 +1304,19 @@ public class FileWriteAheadLogManager extends GridCacheSharedManagerAdapter impl synchronized (this) { while (locked.containsKey(toArchive) && !stopped) wait(); + } - // Firstly, format working file - if (!stopped) - formatFile(res.getOrigWorkFile()); + // Firstly, format working file + if (!stopped) + formatFile(res.getOrigWorkFile()); + synchronized (this) { // Then increase counter to allow rollover on clean working file changeLastArchivedIndexAndWakeupCompressor(toArchive); notifyAll(); } + if (evt.isRecordable(EventType.EVT_WAL_SEGMENT_ARCHIVED)) evt.record(new WalSegmentArchivedEvent(cctx.discovery().localNode(), res.getAbsIdx(), res.getDstArchiveFile())); @@ -1889,7 +1892,7 @@ public class FileWriteAheadLogManager extends GridCacheSharedManagerAdapter impl * @return I/O position after write version. * @throws IOException If failed to write serializer version. */ - public static long writeSerializerVersion(FileIO io, long idx, int version) throws IOException { + public static long writeSerializerVersion(FileIO io, long idx, int version, WALMode mode) throws IOException { ByteBuffer buffer = prepareSerializerVersionBuffer(idx, version, false); do { @@ -1898,7 +1901,8 @@ public class FileWriteAheadLogManager extends GridCacheSharedManagerAdapter impl while (buffer.hasRemaining()); // Flush - io.force(); + if (mode == WALMode.DEFAULT) + io.force(); return io.position(); } @@ -2205,9 +2209,11 @@ public class FileWriteAheadLogManager extends GridCacheSharedManagerAdapter impl */ public void writeSerializerVersion() throws IgniteCheckedException { try { - assert fileIO.position() == 0 : "Serializer version can be written only at the begin of file " + fileIO.position(); + assert fileIO.position() == 0 : "Serializer version can be written only at the begin of file " + + fileIO.position(); - long updatedPosition = FileWriteAheadLogManager.writeSerializerVersion(fileIO, idx, serializer.version()); + long updatedPosition = FileWriteAheadLogManager.writeSerializerVersion(fileIO, idx, + serializer.version(), mode); written = updatedPosition; lastFsyncPos = updatedPosition;
