From e3b50c46eeeece02b84439f95d443da501cafa86 Mon Sep 17 00:00:00 2001 From: Sanket Sarang Date: Sat, 1 Jun 2019 18:34:17 +0530 Subject: [PATCH] TransactionLocking improvements --- .../java/com/blobcity/db/locks/TransactionLocking.java | 9 +++++---- .../java/com/blobcity/db/storage/BSqlFileManager.java | 9 ++++----- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/engine/src/main/java/com/blobcity/db/locks/TransactionLocking.java b/engine/src/main/java/com/blobcity/db/locks/TransactionLocking.java index ff04d4c..b570f64 100644 --- a/engine/src/main/java/com/blobcity/db/locks/TransactionLocking.java +++ b/engine/src/main/java/com/blobcity/db/locks/TransactionLocking.java @@ -17,6 +17,8 @@ package com.blobcity.db.locks; import com.blobcity.db.exceptions.OperationException; + +import java.util.HashMap; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; import org.springframework.scheduling.annotation.Scheduled; @@ -56,6 +58,7 @@ public void acquireLock(String app, String table, String pk, LockType lockType) return value; }); map.get(key).acquireReadLock(); + break; case WRITE: map.compute(key, (k, value)-> { if(value == null) { @@ -64,6 +67,7 @@ public void acquireLock(String app, String table, String pk, LockType lockType) return value; }); map.get(key).acquireWriteLock(); + break; } } @@ -96,9 +100,6 @@ private String generateKey(String app, String table, String pk) { @Scheduled(cron = "0 * * * * *") private void cleanUp() { final long removeBefore = System.currentTimeMillis() - 30000; //30 seconds - map.entrySet().removeIf(key -> { - ReadWriteSemaphore rws = map.get(key); - return rws.getLockType() == LockType.NONE && rws.getLastOperatedAt() < removeBefore; - }); + map.entrySet().removeIf(item -> item.getValue().getLockType() == LockType.NONE && item.getValue().getLastOperatedAt() < removeBefore); } } diff --git a/engine/src/main/java/com/blobcity/db/storage/BSqlFileManager.java b/engine/src/main/java/com/blobcity/db/storage/BSqlFileManager.java index bcd4bf3..c79f14c 100644 --- a/engine/src/main/java/com/blobcity/db/storage/BSqlFileManager.java +++ b/engine/src/main/java/com/blobcity/db/storage/BSqlFileManager.java @@ -87,13 +87,12 @@ public class BSqlFileManager { */ public String select(final String app, final String table, final String key) throws OperationException { String result = null; - if (LicenseRules.DATA_CACHING && cacheRules.shouldCache(app, table)) { + if (app.equals(".systemdb") || (LicenseRules.DATA_CACHING && cacheRules.shouldCache(app, table))) { result = dataCache.load(app, table, key); if (result != null) { return result; } } - transactionLocking.acquireLock(app, table, key, LockType.READ); try { Path path = Paths.get(PathUtil.dataFile(app, table, key)); @@ -332,7 +331,7 @@ public void save(final String app, final String table, final String key, final S Path path = Paths.get(PathUtil.dataFile(app, table, key)); try { Files.write(path, jsonString.getBytes("UTF-8")); - if (LicenseRules.DATA_CACHING && cacheRules.shouldCache(app, table)) { + if (app.equals(".systemdb") || (LicenseRules.DATA_CACHING && cacheRules.shouldCache(app, table))) { dataCache.cache(app, table, key, jsonString); } } catch (IOException ex) { @@ -354,7 +353,7 @@ public void insert(final String app, final String table, final String key, final } try { Files.write(path, jsonString.getBytes("UTF-8")); - if (LicenseRules.DATA_CACHING && LicenseRules.CACHE_INSERTS && cacheRules.shouldCache(app, table)) { + if (app.equals(".systemdb") || (LicenseRules.DATA_CACHING && LicenseRules.CACHE_INSERTS && cacheRules.shouldCache(app, table))) { dataCache.cache(app, table, key, jsonString); } } catch (IOException ex) { @@ -380,7 +379,7 @@ public boolean rename(final String app, final String table, final String existin if (file.renameTo(newFile)) { /* Update cache */ - if (LicenseRules.DATA_CACHING && cacheRules.shouldCache(app, table)) { + if (app.equals(".systemdb") || (LicenseRules.DATA_CACHING && cacheRules.shouldCache(app, table))) { String cachedValue = dataCache.load(app, table, existingKey); dataCache.invalidate(app, table, existingKey); dataCache.cache(app, table, newKey, cachedValue);