You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@iotdb.apache.org by ji...@apache.org on 2025/10/11 09:13:55 UTC
(iotdb) branch fix_UserLockInfo_concurrency created (now 36fd33461cf)
This is an automated email from the ASF dual-hosted git repository.
jiangtian pushed a change to branch fix_UserLockInfo_concurrency
in repository https://gitbox.apache.org/repos/asf/iotdb.git
at 36fd33461cf Fix the concurrency issue of UserLockInfo
This branch includes the following new commits:
new 36fd33461cf Fix the concurrency issue of UserLockInfo
The 1 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails. The revisions
listed as "add" were already present in the repository and have only
been added to this reference.
(iotdb) 01/01: Fix the concurrency issue of UserLockInfo
Posted by ji...@apache.org.
This is an automated email from the ASF dual-hosted git repository.
jiangtian pushed a commit to branch fix_UserLockInfo_concurrency
in repository https://gitbox.apache.org/repos/asf/iotdb.git
commit 36fd33461cf466a5759dd557de793df600858b58
Author: Tian Jiang <jt...@163.com>
AuthorDate: Sat Oct 11 17:13:46 2025 +0800
Fix the concurrency issue of UserLockInfo
---
.../org/apache/iotdb/db/auth/LoginLockManager.java | 4 +--
.../apache/iotdb/db/auth/LoginLockManagerTest.java | 30 ++++++++++++++++++++++
2 files changed, 31 insertions(+), 3 deletions(-)
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/auth/LoginLockManager.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/auth/LoginLockManager.java
index 66dbc8a7c8a..eaf43d65ca6 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/auth/LoginLockManager.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/auth/LoginLockManager.java
@@ -112,9 +112,7 @@ public class LoginLockManager {
void removeOldFailures(long cutoffTime) {
// Remove timestamps older than cutoffTime
- while (!failureTimestamps.isEmpty() && failureTimestamps.peekFirst() < cutoffTime) {
- failureTimestamps.pollFirst();
- }
+ failureTimestamps.removeIf(timestamp -> timestamp < cutoffTime);
}
int getFailureCount() {
diff --git a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/auth/LoginLockManagerTest.java b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/auth/LoginLockManagerTest.java
index 845e1b4578c..ba4c812efd7 100644
--- a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/auth/LoginLockManagerTest.java
+++ b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/auth/LoginLockManagerTest.java
@@ -19,6 +19,13 @@
package org.apache.iotdb.db.auth;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.concurrent.ExecutionException;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Executors;
+import java.util.concurrent.Future;
+import org.apache.iotdb.db.auth.LoginLockManager.UserLockInfo;
import org.junit.Before;
import org.junit.Test;
@@ -535,4 +542,27 @@ public class LoginLockManagerTest {
// Final verification: no inconsistencies detected during test
assertTrue("Lock state should remain valid during concurrent access", consistencyFlag.get());
}
+
+ @Test
+ public void testConcurrentOperateLockInfo() throws InterruptedException, ExecutionException {
+ UserLockInfo userLockInfo = new UserLockInfo();
+ int numThreads = 100;
+ final int numAttempts = 100000;
+ ExecutorService executor = Executors.newFixedThreadPool(numThreads);
+ List<Future<Void>> threads = new ArrayList<>(numThreads);
+ for (int i = 0; i < numThreads; i++) {
+ threads.add(executor.submit(() -> {
+ for (int i1 = 0; i1 < numAttempts; i1++) {
+ userLockInfo.addFailureTime(i1);
+ if (i1 > 30) {
+ userLockInfo.removeOldFailures(i1 - 30);
+ }
+ }
+ return null;
+ }));
+ }
+ for (Future<Void> thread : threads) {
+ thread.get();
+ }
+ }
}