From 06335b4b99a594705f965869ae4633c9d0719485 Mon Sep 17 00:00:00 2001 From: Stepan Usatiuk Date: Mon, 31 Mar 2025 16:32:13 +0200 Subject: [PATCH] Server: parallel op sending --- .../invalidation/InvalidationQueueService.java | 4 +++- .../src/main/resources/application.properties | 2 +- .../java/com/usatiuk/dhfs/utils/DataLocker.java | 15 ++++++++------- 3 files changed, 12 insertions(+), 9 deletions(-) diff --git a/dhfs-parent/server/src/main/java/com/usatiuk/dhfs/repository/invalidation/InvalidationQueueService.java b/dhfs-parent/server/src/main/java/com/usatiuk/dhfs/repository/invalidation/InvalidationQueueService.java index 83df5292..17531ab6 100644 --- a/dhfs-parent/server/src/main/java/com/usatiuk/dhfs/repository/invalidation/InvalidationQueueService.java +++ b/dhfs-parent/server/src/main/java/com/usatiuk/dhfs/repository/invalidation/InvalidationQueueService.java @@ -1,5 +1,6 @@ package com.usatiuk.dhfs.repository.invalidation; +import com.usatiuk.dhfs.utils.DataLocker; import com.usatiuk.objects.JObjectKey; import com.usatiuk.dhfs.PeerId; import com.usatiuk.dhfs.repository.PeerManager; @@ -39,6 +40,7 @@ public class InvalidationQueueService { @Inject PersistentPeerDataService persistentPeerDataService; + private final DataLocker _locker = new DataLocker(); private ExecutorService _executor; private volatile boolean _shutdown = false; @@ -120,7 +122,7 @@ public class InvalidationQueueService { continue; } - try { + try (var lock = _locker.lock(e)) { opPusher.doPush(e); success++; } catch (Exception ex) { diff --git a/dhfs-parent/server/src/main/resources/application.properties b/dhfs-parent/server/src/main/resources/application.properties index b11a23ee..5c230fd5 100644 --- a/dhfs-parent/server/src/main/resources/application.properties +++ b/dhfs-parent/server/src/main/resources/application.properties @@ -4,7 +4,7 @@ dhfs.objects.peerdiscovery.interval=4s dhfs.objects.peerdiscovery.broadcast=true dhfs.objects.sync.timeout=30 dhfs.objects.sync.ping.timeout=5 -dhfs.objects.invalidation.threads=1 +dhfs.objects.invalidation.threads=4 dhfs.objects.invalidation.delay=1000 dhfs.objects.reconnect_interval=5s dhfs.objects.write_log=false diff --git a/dhfs-parent/utils/src/main/java/com/usatiuk/dhfs/utils/DataLocker.java b/dhfs-parent/utils/src/main/java/com/usatiuk/dhfs/utils/DataLocker.java index 71efaae3..f3bb641b 100644 --- a/dhfs-parent/utils/src/main/java/com/usatiuk/dhfs/utils/DataLocker.java +++ b/dhfs-parent/utils/src/main/java/com/usatiuk/dhfs/utils/DataLocker.java @@ -19,16 +19,17 @@ public class DataLocker { var tag = _locks.get(data); if (tag != null) { synchronized (tag) { - if (!tag.released) { + while (!tag.released) { if (tag.owner == Thread.currentThread()) { return DUMMY_LOCK; } - tag.wait(4000L); - if (!tag.released) { - System.out.println("Timeout waiting for lock: " + data); - System.exit(1); - throw new InterruptedException(); - } + tag.wait(); +// tag.wait(4000L); +// if (!tag.released) { +// System.out.println("Timeout waiting for lock: " + data); +// System.exit(1); +// throw new InterruptedException(); +// } } continue; }