You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ignite.apache.org by al...@apache.org on 2022/09/06 14:45:37 UTC
[ignite] branch ignite-2.14 updated: IGNITE-17635 Fix checkpoint locks count by current thread after lock timeout - Fixes #10239.
This is an automated email from the ASF dual-hosted git repository.
alexpl pushed a commit to branch ignite-2.14
in repository https://gitbox.apache.org/repos/asf/ignite.git
The following commit(s) were added to refs/heads/ignite-2.14 by this push:
new 0a7a446a412 IGNITE-17635 Fix checkpoint locks count by current thread after lock timeout - Fixes #10239.
0a7a446a412 is described below
commit 0a7a446a4120712d3fe5f8a0dece55dec454b931
Author: Aleksey Plekhanov <pl...@gmail.com>
AuthorDate: Tue Sep 6 17:40:35 2022 +0300
IGNITE-17635 Fix checkpoint locks count by current thread after lock timeout - Fixes #10239.
Signed-off-by: Aleksey Plekhanov <pl...@gmail.com>
(cherry picked from commit f67fadaec37b0563fcefc265bfd4be7f4e70abd6)
---
.../checkpoint/CheckpointReadWriteLock.java | 2 +-
.../db/checkpoint/CheckpointTimeoutLockTest.java | 81 ++++++++++++++++++++++
.../ignite/testsuites/IgnitePdsTestSuite2.java | 2 +
3 files changed, 84 insertions(+), 1 deletion(-)
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/checkpoint/CheckpointReadWriteLock.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/checkpoint/CheckpointReadWriteLock.java
index ad4d4570bc9..d7aaf60e4f0 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/checkpoint/CheckpointReadWriteLock.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/checkpoint/CheckpointReadWriteLock.java
@@ -84,7 +84,7 @@ public class CheckpointReadWriteLock {
boolean res = checkpointLock.readLock().tryLock(timeout, unit);
- if (ASSERTION_ENABLED)
+ if (ASSERTION_ENABLED && res)
CHECKPOINT_LOCK_HOLD_COUNT.set(CHECKPOINT_LOCK_HOLD_COUNT.get() + 1);
return res;
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/persistence/db/checkpoint/CheckpointTimeoutLockTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/persistence/db/checkpoint/CheckpointTimeoutLockTest.java
new file mode 100644
index 00000000000..edd6c137293
--- /dev/null
+++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/persistence/db/checkpoint/CheckpointTimeoutLockTest.java
@@ -0,0 +1,81 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.ignite.internal.processors.cache.persistence.db.checkpoint;
+
+import java.util.concurrent.CountDownLatch;
+import java.util.concurrent.TimeUnit;
+import org.apache.ignite.cluster.ClusterState;
+import org.apache.ignite.configuration.DataRegionConfiguration;
+import org.apache.ignite.configuration.DataStorageConfiguration;
+import org.apache.ignite.configuration.IgniteConfiguration;
+import org.apache.ignite.internal.IgniteEx;
+import org.apache.ignite.internal.processors.cache.persistence.GridCacheDatabaseSharedManager;
+import org.apache.ignite.internal.processors.cache.persistence.checkpoint.CheckpointListener;
+import org.apache.ignite.testframework.junits.common.GridCommonAbstractTest;
+import org.junit.Test;
+
+/**
+ * Test of CheckpointTimeoutLock.
+ */
+public class CheckpointTimeoutLockTest extends GridCommonAbstractTest {
+ /** {@inheritDoc} */
+ @Override protected IgniteConfiguration getConfiguration(String igniteInstanceName) throws Exception {
+ return super.getConfiguration(igniteInstanceName).setDataStorageConfiguration(
+ new DataStorageConfiguration().setDefaultDataRegionConfiguration(
+ new DataRegionConfiguration().setPersistenceEnabled(true)));
+ }
+
+ /**
+ * @throws Exception if failed.
+ */
+ @Test
+ public void testLockIsHeldByThreadAfterTimeout() throws Exception {
+ IgniteEx ignite = startGrid();
+
+ ignite.cluster().state(ClusterState.ACTIVE);
+
+ GridCacheDatabaseSharedManager db = dbMgr(ignite);
+
+ CountDownLatch latch = new CountDownLatch(1);
+
+ db.addCheckpointListener(new CheckpointListener() {
+ @Override public void onMarkCheckpointBegin(Context ctx) {
+ latch.countDown();
+
+ doSleep(200L);
+ }
+
+ @Override public void onCheckpointBegin(Context ctx) {
+ // No-op.
+ }
+
+ @Override public void beforeCheckpointBegin(Context ctx) {
+ // No-op.
+ }
+ });
+
+ db.forceCheckpoint("lock");
+
+ latch.await(getTestTimeout(), TimeUnit.MILLISECONDS);
+
+ db.checkpointReadLockTimeout(10L);
+ db.checkpointReadLock();
+ db.checkpointReadUnlock();
+ assertFalse(db.checkpointLockIsHeldByThread());
+ }
+}
diff --git a/modules/core/src/test/java/org/apache/ignite/testsuites/IgnitePdsTestSuite2.java b/modules/core/src/test/java/org/apache/ignite/testsuites/IgnitePdsTestSuite2.java
index ad5fc72e8b1..0c5f89371cc 100644
--- a/modules/core/src/test/java/org/apache/ignite/testsuites/IgnitePdsTestSuite2.java
+++ b/modules/core/src/test/java/org/apache/ignite/testsuites/IgnitePdsTestSuite2.java
@@ -48,6 +48,7 @@ import org.apache.ignite.internal.processors.cache.persistence.db.checkpoint.Che
import org.apache.ignite.internal.processors.cache.persistence.db.checkpoint.CheckpointFreeListTest;
import org.apache.ignite.internal.processors.cache.persistence.db.checkpoint.CheckpointListenerForRegionTest;
import org.apache.ignite.internal.processors.cache.persistence.db.checkpoint.CheckpointStartLoggingTest;
+import org.apache.ignite.internal.processors.cache.persistence.db.checkpoint.CheckpointTimeoutLockTest;
import org.apache.ignite.internal.processors.cache.persistence.db.checkpoint.IgniteCheckpointDirtyPagesForLowLoadTest;
import org.apache.ignite.internal.processors.cache.persistence.db.checkpoint.LightweightCheckpointTest;
import org.apache.ignite.internal.processors.cache.persistence.db.filename.IgniteUidAsConsistentIdMigrationTest;
@@ -171,6 +172,7 @@ public class IgnitePdsTestSuite2 {
GridTestUtils.addTestIfNeeded(suite, CheckpointListenerForRegionTest.class, ignoredTests);
GridTestUtils.addTestIfNeeded(suite, LightweightCheckpointTest.class, ignoredTests);
GridTestUtils.addTestIfNeeded(suite, CheckpointStartLoggingTest.class, ignoredTests);
+ GridTestUtils.addTestIfNeeded(suite, CheckpointTimeoutLockTest.class, ignoredTests);
GridTestUtils.addTestIfNeeded(suite, FreeListCachingTest.class, ignoredTests);
GridTestUtils.addTestIfNeeded(suite, IgniteWalIteratorSwitchSegmentTest.class, ignoredTests);
GridTestUtils.addTestIfNeeded(suite, IgniteWalIteratorExceptionDuringReadTest.class, ignoredTests);