Return-Path: X-Original-To: archive-asf-public-internal@cust-asf2.ponee.io Delivered-To: archive-asf-public-internal@cust-asf2.ponee.io Received: from cust-asf.ponee.io (cust-asf.ponee.io [163.172.22.183]) by cust-asf2.ponee.io (Postfix) with ESMTP id E1C1C200CE0 for ; Thu, 10 Aug 2017 19:31:09 +0200 (CEST) Received: by cust-asf.ponee.io (Postfix) id E0924162222; Thu, 10 Aug 2017 17:31:09 +0000 (UTC) Delivered-To: archive-asf-public@cust-asf.ponee.io Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by cust-asf.ponee.io (Postfix) with SMTP id 1133A162EEE for ; Thu, 10 Aug 2017 19:31:08 +0200 (CEST) Received: (qmail 21770 invoked by uid 500); 10 Aug 2017 17:31:08 -0000 Mailing-List: contact commits-help@ignite.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@ignite.apache.org Delivered-To: mailing list commits@ignite.apache.org Received: (qmail 21755 invoked by uid 99); 10 Aug 2017 17:31:08 -0000 Received: from git1-us-west.apache.org (HELO git1-us-west.apache.org) (140.211.11.23) by apache.org (qpsmtpd/0.29) with ESMTP; Thu, 10 Aug 2017 17:31:08 +0000 Received: by git1-us-west.apache.org (ASF Mail Server at git1-us-west.apache.org, from userid 33) id 2583EE964E; Thu, 10 Aug 2017 17:30:58 +0000 (UTC) Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit From: agoncharuk@apache.org To: commits@ignite.apache.org Message-Id: <26449f88105c470b8852108d1f47be22@git.apache.org> X-Mailer: ASF-Git Admin Mailer Subject: ignite git commit: IGNITE-5901 - Debug Date: Thu, 10 Aug 2017 17:30:58 +0000 (UTC) archived-at: Thu, 10 Aug 2017 17:31:10 -0000 Repository: ignite Updated Branches: refs/heads/ignite-5901 fa2b743b2 -> a117e0893 IGNITE-5901 - Debug Project: http://git-wip-us.apache.org/repos/asf/ignite/repo Commit: http://git-wip-us.apache.org/repos/asf/ignite/commit/a117e089 Tree: http://git-wip-us.apache.org/repos/asf/ignite/tree/a117e089 Diff: http://git-wip-us.apache.org/repos/asf/ignite/diff/a117e089 Branch: refs/heads/ignite-5901 Commit: a117e089372323266d8b0599b36267c5a7199f79 Parents: fa2b743 Author: Alexey Goncharuk Authored: Thu Aug 10 20:30:37 2017 +0300 Committer: Alexey Goncharuk Committed: Thu Aug 10 20:30:37 2017 +0300 ---------------------------------------------------------------------- .../wal/FileWriteAheadLogManager.java | 72 +++++++++++--------- 1 file changed, 41 insertions(+), 31 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/ignite/blob/a117e089/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 da295aa..ebc05a4 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 @@ -2028,6 +2028,9 @@ public class FileWriteAheadLogManager extends GridCacheSharedManagerAdapter impl flushOrWait(ptr, stop); + if (stopped()) + return; + if (lastFsyncPos != written) { assert lastFsyncPos < written; // Fsync position must be behind. @@ -2069,55 +2072,62 @@ public class FileWriteAheadLogManager extends GridCacheSharedManagerAdapter impl */ private boolean close(boolean rollOver) throws IgniteCheckedException, StorageException { if (stop.compareAndSet(false, true)) { - flushOrWait(null, true); + lock.lock(); + + try { + flushOrWait(null, true); - WALRecord hd = head.get(); + WALRecord hd = head.get(); - assert stopped() : "Segment is not closed after close flush: " + hd; + assert stopped() : "Segment is not closed after close flush: " + hd; - try { - int switchSegmentRecSize = RecordV1Serializer.REC_TYPE_SIZE + RecordV1Serializer.FILE_WAL_POINTER_SIZE; + try { + int switchSegmentRecSize = RecordV1Serializer.REC_TYPE_SIZE + RecordV1Serializer.FILE_WAL_POINTER_SIZE; - if (rollOver && written < (maxSegmentSize - switchSegmentRecSize)) { - //it is expected there is sufficient space for this record because rollover should run early - final ByteBuffer buf = ByteBuffer.allocate(switchSegmentRecSize); - buf.put((byte)(WALRecord.RecordType.SWITCH_SEGMENT_RECORD.ordinal() + 1)); + if (rollOver && written < (maxSegmentSize - switchSegmentRecSize)) { + //it is expected there is sufficient space for this record because rollover should run early + final ByteBuffer buf = ByteBuffer.allocate(switchSegmentRecSize); + buf.put((byte)(WALRecord.RecordType.SWITCH_SEGMENT_RECORD.ordinal() + 1)); - final FileWALPointer pointer = new FileWALPointer(idx, (int)fileIO.position(), -1); - RecordV1Serializer.putPosition(buf, pointer); + final FileWALPointer pointer = new FileWALPointer(idx, (int)fileIO.position(), -1); + RecordV1Serializer.putPosition(buf, pointer); - buf.rewind(); + buf.rewind(); - int rem = buf.remaining(); + int rem = buf.remaining(); - while (rem > 0) { - int written0 = fileIO.write(buf, written); + while (rem > 0) { + int written0 = fileIO.write(buf, written); - written += written0; + written += written0; - rem -= written0; + rem -= written0; + } } - } - // Do the final fsync. - if (mode == WALMode.DEFAULT) { - fileIO.force(); + // Do the final fsync. + if (mode == WALMode.DEFAULT) { + fileIO.force(); + + lastFsyncPos = written; + } + + closeStack = new Exception("written=" + written + ", head=" + hd); - lastFsyncPos = written; + fileIO.close(); + } + catch (IOException e) { + throw new IgniteCheckedException(e); } - closeStack = new Exception("written=" + written + ", head=" + hd); + if (log.isDebugEnabled()) + log.debug("Closed WAL write handle [idx=" + idx + "]"); - fileIO.close(); + return true; } - catch (IOException e) { - throw new IgniteCheckedException(e); + finally { + lock.unlock(); } - - if (log.isDebugEnabled()) - log.debug("Closed WAL write handle [idx=" + idx + "]"); - - return true; } else return false;