From 8fb7b8b78cf3162e2a98dad476d641a967b3ba59 Mon Sep 17 00:00:00 2001 From: Bian Haoqiong Date: Mon, 6 Oct 2025 02:00:36 +0800 Subject: [PATCH 01/18] debug --- .../pixelsdb/pixels/daemon/transaction/TransContextManager.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pixels-daemon/src/main/java/io/pixelsdb/pixels/daemon/transaction/TransContextManager.java b/pixels-daemon/src/main/java/io/pixelsdb/pixels/daemon/transaction/TransContextManager.java index 66a79d1181..0347580cec 100644 --- a/pixels-daemon/src/main/java/io/pixelsdb/pixels/daemon/transaction/TransContextManager.java +++ b/pixels-daemon/src/main/java/io/pixelsdb/pixels/daemon/transaction/TransContextManager.java @@ -180,7 +180,7 @@ private boolean _terminateTrans(TransContext context) else { // only clear the context of write transactions - this.transIdToContext.remove(context.getTransId()); + //this.transIdToContext.remove(context.getTransId()); this.runningWriteTrans.remove(context); String traceId = this.transIdToTraceId.remove(context.getTransId()); if (traceId != null) From 8332b95525f00304ce1f6d9591ac7d3d168c49e7 Mon Sep 17 00:00:00 2001 From: Bian Haoqiong Date: Mon, 6 Oct 2025 02:39:16 +0800 Subject: [PATCH 02/18] debug --- .../pixels/daemon/transaction/TransContextManager.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pixels-daemon/src/main/java/io/pixelsdb/pixels/daemon/transaction/TransContextManager.java b/pixels-daemon/src/main/java/io/pixelsdb/pixels/daemon/transaction/TransContextManager.java index 0347580cec..d17fc37048 100644 --- a/pixels-daemon/src/main/java/io/pixelsdb/pixels/daemon/transaction/TransContextManager.java +++ b/pixels-daemon/src/main/java/io/pixelsdb/pixels/daemon/transaction/TransContextManager.java @@ -55,7 +55,7 @@ protected static TransContextManager Instance() return instance; } - private final Map transIdToContext = new ConcurrentHashMap<>(); + private final Map transIdToContext = new ConcurrentHashMap<>(1024*1024); /** * Two different transactions will not have the same transaction id, so we can store the running transactions using * a sorted set that sorts the transaction contexts by transaction timestamp and id. This is important for watermark pushing @@ -180,7 +180,7 @@ private boolean _terminateTrans(TransContext context) else { // only clear the context of write transactions - //this.transIdToContext.remove(context.getTransId()); + this.transIdToContext.remove(context.getTransId()); this.runningWriteTrans.remove(context); String traceId = this.transIdToTraceId.remove(context.getTransId()); if (traceId != null) From fd282b687f782e5291c87e6192707b271aa5d7e2 Mon Sep 17 00:00:00 2001 From: Bian Haoqiong Date: Mon, 6 Oct 2025 02:52:30 +0800 Subject: [PATCH 03/18] debug --- .../io/pixelsdb/pixels/common/lock/PersistentAutoIncrement.java | 1 + 1 file changed, 1 insertion(+) diff --git a/pixels-common/src/main/java/io/pixelsdb/pixels/common/lock/PersistentAutoIncrement.java b/pixels-common/src/main/java/io/pixelsdb/pixels/common/lock/PersistentAutoIncrement.java index 1ae534b73b..636110d370 100644 --- a/pixels-common/src/main/java/io/pixelsdb/pixels/common/lock/PersistentAutoIncrement.java +++ b/pixels-common/src/main/java/io/pixelsdb/pixels/common/lock/PersistentAutoIncrement.java @@ -57,6 +57,7 @@ public PersistentAutoIncrement(String idKey, boolean interProc) throws EtcdExcep EtcdAutoIncrement.InitId(idKey, interProc); EtcdAutoIncrement.Segment segment = EtcdAutoIncrement.GenerateId(idKey, this.defaultStep, interProc); this.id = segment.getStart(); + System.out.println(idKey + " starts from " + segment.getStart() + ", length " + segment.getLength()); this.count = segment.getLength(); } From 8ebf377a975237a1c5a0f58a41a8790d8f0a2794 Mon Sep 17 00:00:00 2001 From: Bian Haoqiong Date: Mon, 6 Oct 2025 03:01:45 +0800 Subject: [PATCH 04/18] debug --- .../pixels/daemon/transaction/TransContextManager.java | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/pixels-daemon/src/main/java/io/pixelsdb/pixels/daemon/transaction/TransContextManager.java b/pixels-daemon/src/main/java/io/pixelsdb/pixels/daemon/transaction/TransContextManager.java index d17fc37048..3e0de35244 100644 --- a/pixels-daemon/src/main/java/io/pixelsdb/pixels/daemon/transaction/TransContextManager.java +++ b/pixels-daemon/src/main/java/io/pixelsdb/pixels/daemon/transaction/TransContextManager.java @@ -69,7 +69,13 @@ protected static TransContextManager Instance() private final StampedLock contextLock = new StampedLock(); - private TransContextManager() { } + private TransContextManager() + { + for (long i = 0; i < 1000; ++i) + { + this.transIdToContext.put(i, new TransContext(i, i, false)); + } + } /** * Add a trans context when a new transaction begins. From ebb2d99406084bc6cd6b01a872322180f7cf85a6 Mon Sep 17 00:00:00 2001 From: Bian Haoqiong Date: Mon, 6 Oct 2025 03:16:38 +0800 Subject: [PATCH 05/18] debug --- .../common/transaction/TransContext.java | 18 ++++++++++++++++++ .../transaction/TransContextManager.java | 8 +------- .../daemon/transaction/TransServiceImpl.java | 2 +- 3 files changed, 20 insertions(+), 8 deletions(-) diff --git a/pixels-common/src/main/java/io/pixelsdb/pixels/common/transaction/TransContext.java b/pixels-common/src/main/java/io/pixelsdb/pixels/common/transaction/TransContext.java index 3bdfc42edf..23e99888d0 100644 --- a/pixels-common/src/main/java/io/pixelsdb/pixels/common/transaction/TransContext.java +++ b/pixels-common/src/main/java/io/pixelsdb/pixels/common/transaction/TransContext.java @@ -22,6 +22,7 @@ import io.pixelsdb.pixels.daemon.TransProto; import java.util.Map; +import java.util.Objects; import java.util.Properties; import java.util.concurrent.atomic.AtomicReference; @@ -110,6 +111,23 @@ public TransProto.TransContext toProtobuf() return builder.build(); } + @Override + public int hashCode() + { + return Objects.hash(transId); + } + + @Override + public boolean equals(Object obj) + { + if (obj instanceof TransContext) + { + TransContext that = (TransContext) obj; + return this.transId == that.transId; + } + return false; + } + @Override public int compareTo(TransContext that) { diff --git a/pixels-daemon/src/main/java/io/pixelsdb/pixels/daemon/transaction/TransContextManager.java b/pixels-daemon/src/main/java/io/pixelsdb/pixels/daemon/transaction/TransContextManager.java index 3e0de35244..d17fc37048 100644 --- a/pixels-daemon/src/main/java/io/pixelsdb/pixels/daemon/transaction/TransContextManager.java +++ b/pixels-daemon/src/main/java/io/pixelsdb/pixels/daemon/transaction/TransContextManager.java @@ -69,13 +69,7 @@ protected static TransContextManager Instance() private final StampedLock contextLock = new StampedLock(); - private TransContextManager() - { - for (long i = 0; i < 1000; ++i) - { - this.transIdToContext.put(i, new TransContext(i, i, false)); - } - } + private TransContextManager() { } /** * Add a trans context when a new transaction begins. diff --git a/pixels-daemon/src/main/java/io/pixelsdb/pixels/daemon/transaction/TransServiceImpl.java b/pixels-daemon/src/main/java/io/pixelsdb/pixels/daemon/transaction/TransServiceImpl.java index ce2e020bd5..d9d80084f6 100644 --- a/pixels-daemon/src/main/java/io/pixelsdb/pixels/daemon/transaction/TransServiceImpl.java +++ b/pixels-daemon/src/main/java/io/pixelsdb/pixels/daemon/transaction/TransServiceImpl.java @@ -232,7 +232,7 @@ public void commitTransBatch(TransProto.CommitTransBatchRequest request, { allSuccess = false; responseBuilder.setErrorCode(ErrorCode.TRANS_BATCH_PARTIAL_ID_NOT_EXIST); - logger.error("transaction id {} does not exist in the context manager", transId); + logger.error("haha, transaction id {} does not exist in the context manager", transId); } responseBuilder.addResults(commitSuccess); } From 72e4cdd445185c298d08fe8af954e5d4d5883e6b Mon Sep 17 00:00:00 2001 From: Bian Haoqiong Date: Mon, 6 Oct 2025 03:22:21 +0800 Subject: [PATCH 06/18] debug --- .../pixelsdb/pixels/daemon/transaction/TransServiceImpl.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pixels-daemon/src/main/java/io/pixelsdb/pixels/daemon/transaction/TransServiceImpl.java b/pixels-daemon/src/main/java/io/pixelsdb/pixels/daemon/transaction/TransServiceImpl.java index d9d80084f6..00907ef060 100644 --- a/pixels-daemon/src/main/java/io/pixelsdb/pixels/daemon/transaction/TransServiceImpl.java +++ b/pixels-daemon/src/main/java/io/pixelsdb/pixels/daemon/transaction/TransServiceImpl.java @@ -173,7 +173,7 @@ public void commitTrans(TransProto.CommitTransRequest request, * push the watermarks before setTransCommit() * ensure pushWatermarks calls getMinRunningTransTimestamp() to get the correct value */ - pushWatermarks(readOnly); + // pushWatermarks(readOnly); boolean success = TransContextManager.Instance().setTransCommit(request.getTransId()); if (!success) { @@ -217,7 +217,7 @@ public void commitTransBatch(TransProto.CommitTransBatchRequest request, if (TransContextManager.Instance().isTransExist(transId)) { boolean readOnly = TransContextManager.Instance().getTransContext(transId).isReadOnly(); - pushWatermarks(readOnly); + // pushWatermarks(readOnly); if (TransContextManager.Instance().setTransCommit(transId)) { commitSuccess = true; From efc249312648dd30196f4a194f6037e8cf125889 Mon Sep 17 00:00:00 2001 From: Bian Haoqiong Date: Mon, 6 Oct 2025 11:57:29 +0800 Subject: [PATCH 07/18] recover --- .../pixels/daemon/transaction/TransContextManager.java | 2 +- .../pixelsdb/pixels/daemon/transaction/TransServiceImpl.java | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/pixels-daemon/src/main/java/io/pixelsdb/pixels/daemon/transaction/TransContextManager.java b/pixels-daemon/src/main/java/io/pixelsdb/pixels/daemon/transaction/TransContextManager.java index d17fc37048..66a79d1181 100644 --- a/pixels-daemon/src/main/java/io/pixelsdb/pixels/daemon/transaction/TransContextManager.java +++ b/pixels-daemon/src/main/java/io/pixelsdb/pixels/daemon/transaction/TransContextManager.java @@ -55,7 +55,7 @@ protected static TransContextManager Instance() return instance; } - private final Map transIdToContext = new ConcurrentHashMap<>(1024*1024); + private final Map transIdToContext = new ConcurrentHashMap<>(); /** * Two different transactions will not have the same transaction id, so we can store the running transactions using * a sorted set that sorts the transaction contexts by transaction timestamp and id. This is important for watermark pushing diff --git a/pixels-daemon/src/main/java/io/pixelsdb/pixels/daemon/transaction/TransServiceImpl.java b/pixels-daemon/src/main/java/io/pixelsdb/pixels/daemon/transaction/TransServiceImpl.java index 00907ef060..fb4a86f0fe 100644 --- a/pixels-daemon/src/main/java/io/pixelsdb/pixels/daemon/transaction/TransServiceImpl.java +++ b/pixels-daemon/src/main/java/io/pixelsdb/pixels/daemon/transaction/TransServiceImpl.java @@ -217,7 +217,7 @@ public void commitTransBatch(TransProto.CommitTransBatchRequest request, if (TransContextManager.Instance().isTransExist(transId)) { boolean readOnly = TransContextManager.Instance().getTransContext(transId).isReadOnly(); - // pushWatermarks(readOnly); + pushWatermarks(readOnly); if (TransContextManager.Instance().setTransCommit(transId)) { commitSuccess = true; @@ -232,7 +232,7 @@ public void commitTransBatch(TransProto.CommitTransBatchRequest request, { allSuccess = false; responseBuilder.setErrorCode(ErrorCode.TRANS_BATCH_PARTIAL_ID_NOT_EXIST); - logger.error("haha, transaction id {} does not exist in the context manager", transId); + logger.error("transaction id {} does not exist in the context manager", transId); } responseBuilder.addResults(commitSuccess); } From 46f52243be3a9dfd414bbea671d50a3829ade57e Mon Sep 17 00:00:00 2001 From: Haoqiong Bian Date: Mon, 6 Oct 2025 14:03:49 +0800 Subject: [PATCH 08/18] debug --- .../pixelsdb/pixels/daemon/transaction/TransServiceImpl.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/pixels-daemon/src/main/java/io/pixelsdb/pixels/daemon/transaction/TransServiceImpl.java b/pixels-daemon/src/main/java/io/pixelsdb/pixels/daemon/transaction/TransServiceImpl.java index fb4a86f0fe..98e49e9533 100644 --- a/pixels-daemon/src/main/java/io/pixelsdb/pixels/daemon/transaction/TransServiceImpl.java +++ b/pixels-daemon/src/main/java/io/pixelsdb/pixels/daemon/transaction/TransServiceImpl.java @@ -173,7 +173,7 @@ public void commitTrans(TransProto.CommitTransRequest request, * push the watermarks before setTransCommit() * ensure pushWatermarks calls getMinRunningTransTimestamp() to get the correct value */ - // pushWatermarks(readOnly); + pushWatermarks(readOnly); boolean success = TransContextManager.Instance().setTransCommit(request.getTransId()); if (!success) { @@ -212,6 +212,7 @@ public void commitTransBatch(TransProto.CommitTransBatchRequest request, for (int i = 0; i < request.getTransIdsCount(); ++i) { long transId = request.getTransIds(i); + System.out.println("thread " + Thread.currentThread().getName() + " get trans id " + transId); boolean commitSuccess = false; if (TransContextManager.Instance().isTransExist(transId)) From 278d6181c01cd8637fca6c3927f88a5f2db59cc5 Mon Sep 17 00:00:00 2001 From: Haoqiong Bian Date: Mon, 6 Oct 2025 14:41:31 +0800 Subject: [PATCH 09/18] debug --- .../transaction/TransContextManager.java | 51 +++++++++---------- .../daemon/transaction/TransServiceImpl.java | 1 - 2 files changed, 25 insertions(+), 27 deletions(-) diff --git a/pixels-daemon/src/main/java/io/pixelsdb/pixels/daemon/transaction/TransContextManager.java b/pixels-daemon/src/main/java/io/pixelsdb/pixels/daemon/transaction/TransContextManager.java index 66a79d1181..fd0ba33fa6 100644 --- a/pixels-daemon/src/main/java/io/pixelsdb/pixels/daemon/transaction/TransContextManager.java +++ b/pixels-daemon/src/main/java/io/pixelsdb/pixels/daemon/transaction/TransContextManager.java @@ -97,6 +97,7 @@ public void addTransContext(TransContext context) private void _addTransContext(TransContext context) { this.transIdToContext.put(context.getTransId(), context); + System.out.println("thread " + Thread.currentThread().getName() + " add trans id " + context.getTransId()); if (context.isReadOnly()) { this.readOnlyConcurrency.incrementAndGet(); @@ -117,13 +118,13 @@ private void _addTransContext(TransContext context) public boolean setTransCommit(long transId) { long stamp = this.contextLock.tryOptimisticRead(); - boolean res = _setTransStatus(transId, TransProto.TransStatus.COMMIT); + boolean res = _terminateTrans(transId, TransProto.TransStatus.COMMIT); if (!this.contextLock.validate(stamp)) { stamp = this.contextLock.readLock(); try { - res = _setTransStatus(transId, TransProto.TransStatus.COMMIT); + res = _terminateTrans(transId, TransProto.TransStatus.COMMIT); } finally { @@ -143,13 +144,13 @@ public boolean setTransCommit(long transId) public boolean setTransRollback(long transId) { long stamp = this.contextLock.tryOptimisticRead(); - boolean res = _setTransStatus(transId, TransProto.TransStatus.ROLLBACK); + boolean res = _terminateTrans(transId, TransProto.TransStatus.ROLLBACK); if (!this.contextLock.validate(stamp)) { stamp = this.contextLock.readLock(); try { - res = _setTransStatus(transId, TransProto.TransStatus.ROLLBACK); + res = _terminateTrans(transId, TransProto.TransStatus.ROLLBACK); } finally { @@ -159,36 +160,32 @@ public boolean setTransRollback(long transId) return res; } - private boolean _setTransStatus(long transId, TransProto.TransStatus status) + private boolean _terminateTrans(long transId, TransProto.TransStatus status) { TransContext context = this.transIdToContext.get(transId); if (context != null) { context.setStatus(status); - return _terminateTrans(context); - } - return false; - } - - private boolean _terminateTrans(TransContext context) - { - if (context.isReadOnly()) - { - this.readOnlyConcurrency.decrementAndGet(); - this.runningReadOnlyTrans.remove(context); - } - else - { - // only clear the context of write transactions - this.transIdToContext.remove(context.getTransId()); - this.runningWriteTrans.remove(context); - String traceId = this.transIdToTraceId.remove(context.getTransId()); - if (traceId != null) + if (context.isReadOnly()) { - this.traceIdToTransId.remove(traceId); + this.readOnlyConcurrency.decrementAndGet(); + this.runningReadOnlyTrans.remove(context); } + else + { + // only clear the context of write transactions + this.transIdToContext.remove(context.getTransId()); + System.out.println("thread " + Thread.currentThread().getName() + " remove trans id " + context.getTransId()); + this.runningWriteTrans.remove(context); + String traceId = this.transIdToTraceId.remove(context.getTransId()); + if (traceId != null) + { + this.traceIdToTransId.remove(traceId); + } + } + return true; } - return true; + return false; } /** @@ -277,6 +274,8 @@ public TransContext getTransContext(long transId) public boolean isTransExist(long transId) { + System.out.println("thread " + Thread.currentThread().getName() + " check trans id " + transId + " exists " + + this.transIdToContext.containsKey(transId)); return this.transIdToContext.containsKey(transId); } diff --git a/pixels-daemon/src/main/java/io/pixelsdb/pixels/daemon/transaction/TransServiceImpl.java b/pixels-daemon/src/main/java/io/pixelsdb/pixels/daemon/transaction/TransServiceImpl.java index 98e49e9533..ce2e020bd5 100644 --- a/pixels-daemon/src/main/java/io/pixelsdb/pixels/daemon/transaction/TransServiceImpl.java +++ b/pixels-daemon/src/main/java/io/pixelsdb/pixels/daemon/transaction/TransServiceImpl.java @@ -212,7 +212,6 @@ public void commitTransBatch(TransProto.CommitTransBatchRequest request, for (int i = 0; i < request.getTransIdsCount(); ++i) { long transId = request.getTransIds(i); - System.out.println("thread " + Thread.currentThread().getName() + " get trans id " + transId); boolean commitSuccess = false; if (TransContextManager.Instance().isTransExist(transId)) From 9b042cc2c82735b0d0a9c20500c2f8f94a9f40fc Mon Sep 17 00:00:00 2001 From: Haoqiong Bian Date: Mon, 6 Oct 2025 15:09:01 +0800 Subject: [PATCH 10/18] debug --- .../pixelsdb/pixels/daemon/transaction/TransContextManager.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pixels-daemon/src/main/java/io/pixelsdb/pixels/daemon/transaction/TransContextManager.java b/pixels-daemon/src/main/java/io/pixelsdb/pixels/daemon/transaction/TransContextManager.java index fd0ba33fa6..18a44ebe52 100644 --- a/pixels-daemon/src/main/java/io/pixelsdb/pixels/daemon/transaction/TransContextManager.java +++ b/pixels-daemon/src/main/java/io/pixelsdb/pixels/daemon/transaction/TransContextManager.java @@ -55,7 +55,7 @@ protected static TransContextManager Instance() return instance; } - private final Map transIdToContext = new ConcurrentHashMap<>(); + static private final Map transIdToContext = new ConcurrentHashMap<>(); /** * Two different transactions will not have the same transaction id, so we can store the running transactions using * a sorted set that sorts the transaction contexts by transaction timestamp and id. This is important for watermark pushing From 0473423707c3b07bab093f6ec0feea4cdcdd26d3 Mon Sep 17 00:00:00 2001 From: Haoqiong Bian Date: Mon, 6 Oct 2025 15:24:10 +0800 Subject: [PATCH 11/18] debug --- .../pixelsdb/pixels/common/lock/PersistentAutoIncrement.java | 1 - .../pixels/daemon/transaction/TransContextManager.java | 4 ---- 2 files changed, 5 deletions(-) diff --git a/pixels-common/src/main/java/io/pixelsdb/pixels/common/lock/PersistentAutoIncrement.java b/pixels-common/src/main/java/io/pixelsdb/pixels/common/lock/PersistentAutoIncrement.java index 636110d370..1ae534b73b 100644 --- a/pixels-common/src/main/java/io/pixelsdb/pixels/common/lock/PersistentAutoIncrement.java +++ b/pixels-common/src/main/java/io/pixelsdb/pixels/common/lock/PersistentAutoIncrement.java @@ -57,7 +57,6 @@ public PersistentAutoIncrement(String idKey, boolean interProc) throws EtcdExcep EtcdAutoIncrement.InitId(idKey, interProc); EtcdAutoIncrement.Segment segment = EtcdAutoIncrement.GenerateId(idKey, this.defaultStep, interProc); this.id = segment.getStart(); - System.out.println(idKey + " starts from " + segment.getStart() + ", length " + segment.getLength()); this.count = segment.getLength(); } diff --git a/pixels-daemon/src/main/java/io/pixelsdb/pixels/daemon/transaction/TransContextManager.java b/pixels-daemon/src/main/java/io/pixelsdb/pixels/daemon/transaction/TransContextManager.java index 18a44ebe52..f80cadf683 100644 --- a/pixels-daemon/src/main/java/io/pixelsdb/pixels/daemon/transaction/TransContextManager.java +++ b/pixels-daemon/src/main/java/io/pixelsdb/pixels/daemon/transaction/TransContextManager.java @@ -97,7 +97,6 @@ public void addTransContext(TransContext context) private void _addTransContext(TransContext context) { this.transIdToContext.put(context.getTransId(), context); - System.out.println("thread " + Thread.currentThread().getName() + " add trans id " + context.getTransId()); if (context.isReadOnly()) { this.readOnlyConcurrency.incrementAndGet(); @@ -175,7 +174,6 @@ private boolean _terminateTrans(long transId, TransProto.TransStatus status) { // only clear the context of write transactions this.transIdToContext.remove(context.getTransId()); - System.out.println("thread " + Thread.currentThread().getName() + " remove trans id " + context.getTransId()); this.runningWriteTrans.remove(context); String traceId = this.transIdToTraceId.remove(context.getTransId()); if (traceId != null) @@ -274,8 +272,6 @@ public TransContext getTransContext(long transId) public boolean isTransExist(long transId) { - System.out.println("thread " + Thread.currentThread().getName() + " check trans id " + transId + " exists " + - this.transIdToContext.containsKey(transId)); return this.transIdToContext.containsKey(transId); } From 4a92c2c0c9f7113d1e28a883baea17b233c629eb Mon Sep 17 00:00:00 2001 From: Haoqiong Bian Date: Mon, 6 Oct 2025 15:30:22 +0800 Subject: [PATCH 12/18] debug --- .../pixels/daemon/transaction/TransContextManager.java | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/pixels-daemon/src/main/java/io/pixelsdb/pixels/daemon/transaction/TransContextManager.java b/pixels-daemon/src/main/java/io/pixelsdb/pixels/daemon/transaction/TransContextManager.java index f80cadf683..0d9faa3b6c 100644 --- a/pixels-daemon/src/main/java/io/pixelsdb/pixels/daemon/transaction/TransContextManager.java +++ b/pixels-daemon/src/main/java/io/pixelsdb/pixels/daemon/transaction/TransContextManager.java @@ -22,6 +22,8 @@ import io.pixelsdb.pixels.common.transaction.TransContext; import io.pixelsdb.pixels.common.utils.ConfigFactory; import io.pixelsdb.pixels.daemon.TransProto; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; import java.io.BufferedWriter; import java.io.File; @@ -44,6 +46,8 @@ */ public class TransContextManager { + private static final Logger log = LogManager.getLogger(TransContextManager.class); + private static TransContextManager instance; protected static TransContextManager Instance() @@ -232,7 +236,8 @@ public boolean dumpTransContext(long timestamp) entry.getValue().getStatus() == TransProto.TransStatus.ROLLBACK); } catch (IOException e) { - System.err.println("An error occurred: " + e.getMessage()); + log.error("failed to dump transaction context", e); + return false; } return true; } From d7570aec9f9e20799d195219fb02c31874cbfee5 Mon Sep 17 00:00:00 2001 From: Haoqiong Bian Date: Mon, 6 Oct 2025 16:00:56 +0800 Subject: [PATCH 13/18] debug --- .../pixelsdb/pixels/daemon/transaction/TransContextManager.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pixels-daemon/src/main/java/io/pixelsdb/pixels/daemon/transaction/TransContextManager.java b/pixels-daemon/src/main/java/io/pixelsdb/pixels/daemon/transaction/TransContextManager.java index 0d9faa3b6c..81abd439b2 100644 --- a/pixels-daemon/src/main/java/io/pixelsdb/pixels/daemon/transaction/TransContextManager.java +++ b/pixels-daemon/src/main/java/io/pixelsdb/pixels/daemon/transaction/TransContextManager.java @@ -59,7 +59,7 @@ protected static TransContextManager Instance() return instance; } - static private final Map transIdToContext = new ConcurrentHashMap<>(); + private volatile Map transIdToContext = new ConcurrentHashMap<>(); /** * Two different transactions will not have the same transaction id, so we can store the running transactions using * a sorted set that sorts the transaction contexts by transaction timestamp and id. This is important for watermark pushing From ec1a2ad8790255c4c0fd53ad96cbe3eb48fba065 Mon Sep 17 00:00:00 2001 From: Haoqiong Bian Date: Mon, 6 Oct 2025 16:07:51 +0800 Subject: [PATCH 14/18] debug --- .../pixels/daemon/transaction/TransContextManager.java | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/pixels-daemon/src/main/java/io/pixelsdb/pixels/daemon/transaction/TransContextManager.java b/pixels-daemon/src/main/java/io/pixelsdb/pixels/daemon/transaction/TransContextManager.java index 81abd439b2..36ff0e737a 100644 --- a/pixels-daemon/src/main/java/io/pixelsdb/pixels/daemon/transaction/TransContextManager.java +++ b/pixels-daemon/src/main/java/io/pixelsdb/pixels/daemon/transaction/TransContextManager.java @@ -48,18 +48,14 @@ public class TransContextManager { private static final Logger log = LogManager.getLogger(TransContextManager.class); - private static TransContextManager instance; + private static final TransContextManager instance = new TransContextManager(); protected static TransContextManager Instance() { - if (instance == null) - { - instance = new TransContextManager(); - } return instance; } - private volatile Map transIdToContext = new ConcurrentHashMap<>(); + private final Map transIdToContext = new ConcurrentHashMap<>(); /** * Two different transactions will not have the same transaction id, so we can store the running transactions using * a sorted set that sorts the transaction contexts by transaction timestamp and id. This is important for watermark pushing From 3f175319de7cc9909d9a1e742b9485b37be914c4 Mon Sep 17 00:00:00 2001 From: Haoqiong Bian Date: Mon, 6 Oct 2025 16:36:07 +0800 Subject: [PATCH 15/18] debug --- .../daemon/transaction/TransContextManager.java | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/pixels-daemon/src/main/java/io/pixelsdb/pixels/daemon/transaction/TransContextManager.java b/pixels-daemon/src/main/java/io/pixelsdb/pixels/daemon/transaction/TransContextManager.java index 36ff0e737a..0396d681e5 100644 --- a/pixels-daemon/src/main/java/io/pixelsdb/pixels/daemon/transaction/TransContextManager.java +++ b/pixels-daemon/src/main/java/io/pixelsdb/pixels/daemon/transaction/TransContextManager.java @@ -48,10 +48,14 @@ public class TransContextManager { private static final Logger log = LogManager.getLogger(TransContextManager.class); - private static final TransContextManager instance = new TransContextManager(); + private static TransContextManager instance; protected static TransContextManager Instance() { + if (instance == null) + { + instance = new TransContextManager(); + } return instance; } @@ -69,7 +73,10 @@ protected static TransContextManager Instance() private final StampedLock contextLock = new StampedLock(); - private TransContextManager() { } + private TransContextManager() + { + System.out.println("TransContextManager constructed"); + } /** * Add a trans context when a new transaction begins. From 61d00dbdb33f319d5d4efc68a03ae4bcc3549a0d Mon Sep 17 00:00:00 2001 From: Haoqiong Bian Date: Mon, 6 Oct 2025 17:21:28 +0800 Subject: [PATCH 16/18] fix --- .../daemon/transaction/TransContextManager.java | 16 ++++++---------- 1 file changed, 6 insertions(+), 10 deletions(-) diff --git a/pixels-daemon/src/main/java/io/pixelsdb/pixels/daemon/transaction/TransContextManager.java b/pixels-daemon/src/main/java/io/pixelsdb/pixels/daemon/transaction/TransContextManager.java index 0396d681e5..c295af791e 100644 --- a/pixels-daemon/src/main/java/io/pixelsdb/pixels/daemon/transaction/TransContextManager.java +++ b/pixels-daemon/src/main/java/io/pixelsdb/pixels/daemon/transaction/TransContextManager.java @@ -48,15 +48,14 @@ public class TransContextManager { private static final Logger log = LogManager.getLogger(TransContextManager.class); - private static TransContextManager instance; + private static final class InstanceHolder + { + static final TransContextManager instance = new TransContextManager(); + } protected static TransContextManager Instance() { - if (instance == null) - { - instance = new TransContextManager(); - } - return instance; + return InstanceHolder.instance; } private final Map transIdToContext = new ConcurrentHashMap<>(); @@ -73,10 +72,7 @@ protected static TransContextManager Instance() private final StampedLock contextLock = new StampedLock(); - private TransContextManager() - { - System.out.println("TransContextManager constructed"); - } + private TransContextManager() { } /** * Add a trans context when a new transaction begins. From 869f05609e7aad24f08557c150c4adf61da5c596 Mon Sep 17 00:00:00 2001 From: Haoqiong Bian Date: Mon, 6 Oct 2025 22:25:35 +0800 Subject: [PATCH 17/18] fix singleton creation --- .../pixels/common/index/MainIndexFactory.java | 27 ++++++++++-------- .../common/index/SinglePointIndexFactory.java | 28 +++++++++++-------- .../pixels/common/layout/IndexFactory.java | 11 ++++---- .../pixels/common/metadata/MetadataCache.java | 7 +++-- .../common/metadata/MetadataService.java | 5 ++-- .../common/physical/SchedulerFactory.java | 11 ++++---- .../common/physical/StorageFactory.java | 26 ++++++++++------- .../physical/scheduler/NoopScheduler.java | 9 ++---- .../scheduler/RateLimitedScheduler.java | 14 +++++----- .../scheduler/SortMergeScheduler.java | 12 ++++---- .../pixels/common/retina/RetinaService.java | 5 ++-- .../common/transaction/TransContextCache.java | 11 ++++---- .../common/transaction/TransService.java | 6 ++-- .../pixels/common/turbo/InvokerFactory.java | 7 +++-- .../pixels/common/utils/ConfigFactory.java | 14 ++++------ .../pixels/common/utils/EtcdUtil.java | 9 ++++-- .../pixels/common/utils/GcMonitor.java | 1 + .../pixels/common/utils/MetaDBUtil.java | 8 ++++-- .../daemon/metadata/dao/DaoFactory.java | 11 ++++---- .../transaction/TransContextManager.java | 2 +- .../daemon/transaction/TransServiceImpl.java | 3 +- .../aggregation/function/FunctionFactory.java | 7 +++-- .../pixels/index/rocksdb/RocksDBFactory.java | 4 +-- .../pixelsdb/pixels/parser/PixelsParser.java | 3 +- .../pixels/parser/PixelsSchemaFactory.java | 7 ++--- .../pixelsdb/pixels/parser/PixelsTable.java | 5 ++-- .../planner/coordinate/CFWorkerManager.java | 7 +++-- .../coordinate/PlanCoordinatorFactory.java | 7 +++-- .../pixels/planner/plan/PlanOptimizer.java | 8 ++++-- .../pixelsdb/pixels/retina/MinioManager.java | 12 ++++---- .../pixels/retina/RetinaResourceManager.java | 11 ++++---- .../pixels/invoker/lambda/Lambda.java | 7 +++-- .../invoker/spike/SpikeAsyncClient.java | 15 +++++----- .../pixels/invoker/spike/SpikeInvoker.java | 2 +- .../pixels/invoker/vhive/ScanInvoker.java | 5 ---- .../pixelsdb/pixels/invoker/vhive/Vhive.java | 9 ++++-- .../pixels/scaling/ec2/CloudWatch.java | 7 +++-- .../io/pixelsdb/pixels/worker/vhive/Main.java | 3 +- .../worker/vhive/utils/ServiceImpl.java | 4 +-- 39 files changed, 193 insertions(+), 157 deletions(-) diff --git a/pixels-common/src/main/java/io/pixelsdb/pixels/common/index/MainIndexFactory.java b/pixels-common/src/main/java/io/pixelsdb/pixels/common/index/MainIndexFactory.java index d2fa392866..a61efb96bc 100644 --- a/pixels-common/src/main/java/io/pixelsdb/pixels/common/index/MainIndexFactory.java +++ b/pixels-common/src/main/java/io/pixelsdb/pixels/common/index/MainIndexFactory.java @@ -70,25 +70,30 @@ private MainIndexFactory() throws MainIndexException } } - private static MainIndexFactory instance = null; + private static volatile MainIndexFactory instance = null; public static MainIndexFactory Instance() throws MainIndexException { if (instance == null) { - instance = new MainIndexFactory(); - Runtime.getRuntime().addShutdownHook(new Thread(()-> + synchronized (MainIndexFactory.class) { - try + if (instance == null) { - instance.closeAll(); + instance = new MainIndexFactory(); + Runtime.getRuntime().addShutdownHook(new Thread(() -> + { + try + { + instance.closeAll(); + } catch (MainIndexException e) + { + logger.error("Failed to close all main index instances.", e); + e.printStackTrace(); + } + })); } - catch (MainIndexException e) - { - logger.error("Failed to close all main index instances.", e); - e.printStackTrace(); - } - })); + } } return instance; } diff --git a/pixels-common/src/main/java/io/pixelsdb/pixels/common/index/SinglePointIndexFactory.java b/pixels-common/src/main/java/io/pixelsdb/pixels/common/index/SinglePointIndexFactory.java index dc2ef45426..eb2ae66625 100644 --- a/pixels-common/src/main/java/io/pixelsdb/pixels/common/index/SinglePointIndexFactory.java +++ b/pixels-common/src/main/java/io/pixelsdb/pixels/common/index/SinglePointIndexFactory.java @@ -82,25 +82,31 @@ private SinglePointIndexFactory() this.singlePointIndexProviders = providersBuilder.build(); } - private static SinglePointIndexFactory instance = null; + private static volatile SinglePointIndexFactory instance = null; public static SinglePointIndexFactory Instance() { if (instance == null) { - instance = new SinglePointIndexFactory(); - Runtime.getRuntime().addShutdownHook(new Thread(()-> + synchronized (SinglePointIndexFactory.class) { - try - { - instance.closeAll(); - } - catch (SinglePointIndexException e) + if (instance == null) { - logger.error("Failed to close all single point index instances.", e); - e.printStackTrace(); + instance = new SinglePointIndexFactory(); + Runtime.getRuntime().addShutdownHook(new Thread(()-> + { + try + { + instance.closeAll(); + } + catch (SinglePointIndexException e) + { + logger.error("Failed to close all single point index instances.", e); + e.printStackTrace(); + } + })); } - })); + } } return instance; } diff --git a/pixels-common/src/main/java/io/pixelsdb/pixels/common/layout/IndexFactory.java b/pixels-common/src/main/java/io/pixelsdb/pixels/common/layout/IndexFactory.java index 281baf94a0..1c8b4f90f6 100644 --- a/pixels-common/src/main/java/io/pixelsdb/pixels/common/layout/IndexFactory.java +++ b/pixels-common/src/main/java/io/pixelsdb/pixels/common/layout/IndexFactory.java @@ -26,15 +26,14 @@ public class IndexFactory { - private static IndexFactory instance = null; + private static final class InstanceHolder + { + private static final IndexFactory instance = new IndexFactory(); + } public static IndexFactory Instance() { - if (instance == null) - { - instance = new IndexFactory(); - } - return instance; + return InstanceHolder.instance; } private final Map splitsIndexes; diff --git a/pixels-common/src/main/java/io/pixelsdb/pixels/common/metadata/MetadataCache.java b/pixels-common/src/main/java/io/pixelsdb/pixels/common/metadata/MetadataCache.java index dbb288399d..35c368fa50 100644 --- a/pixels-common/src/main/java/io/pixelsdb/pixels/common/metadata/MetadataCache.java +++ b/pixels-common/src/main/java/io/pixelsdb/pixels/common/metadata/MetadataCache.java @@ -35,11 +35,14 @@ */ public class MetadataCache { - private static final MetadataCache instance = new MetadataCache(); + private static final class InstanceHolder + { + private static final MetadataCache instance = new MetadataCache(); + } public static MetadataCache Instance() { - return instance; + return InstanceHolder.instance; } private class TransMetadata diff --git a/pixels-common/src/main/java/io/pixelsdb/pixels/common/metadata/MetadataService.java b/pixels-common/src/main/java/io/pixelsdb/pixels/common/metadata/MetadataService.java index c994223f9f..ef667d17dc 100644 --- a/pixels-common/src/main/java/io/pixelsdb/pixels/common/metadata/MetadataService.java +++ b/pixels-common/src/main/java/io/pixelsdb/pixels/common/metadata/MetadataService.java @@ -34,6 +34,7 @@ import org.apache.logging.log4j.Logger; import java.util.*; +import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.TimeUnit; import java.util.stream.Collectors; @@ -48,7 +49,7 @@ public class MetadataService { private static final Logger logger = LogManager.getLogger(MetadataService.class); private static final MetadataService defaultInstance; - private static final Map otherInstances = new HashMap<>(); + private static final Map otherInstances = new ConcurrentHashMap<>(); static { @@ -94,7 +95,7 @@ public static MetadataService Instance() * @param port the port of the metadata server * @return the created metadata service instance */ - public static MetadataService CreateInstance(String host, int port) + public static synchronized MetadataService CreateInstance(String host, int port) { HostAddress address = HostAddress.fromParts(host, port); MetadataService metadataService = otherInstances.get(address); diff --git a/pixels-common/src/main/java/io/pixelsdb/pixels/common/physical/SchedulerFactory.java b/pixels-common/src/main/java/io/pixelsdb/pixels/common/physical/SchedulerFactory.java index 0eeaab92ff..16a7398c11 100644 --- a/pixels-common/src/main/java/io/pixelsdb/pixels/common/physical/SchedulerFactory.java +++ b/pixels-common/src/main/java/io/pixelsdb/pixels/common/physical/SchedulerFactory.java @@ -30,15 +30,14 @@ */ public class SchedulerFactory { - private static SchedulerFactory instance; + private static final class InstanceHolder + { + private static final SchedulerFactory instance = new SchedulerFactory(); + } public static SchedulerFactory Instance() { - if (instance == null) - { - instance = new SchedulerFactory(); - } - return instance; + return InstanceHolder.instance; } private final Scheduler scheduler; diff --git a/pixels-common/src/main/java/io/pixelsdb/pixels/common/physical/StorageFactory.java b/pixels-common/src/main/java/io/pixelsdb/pixels/common/physical/StorageFactory.java index b8a660757e..18959cd2b0 100644 --- a/pixels-common/src/main/java/io/pixelsdb/pixels/common/physical/StorageFactory.java +++ b/pixels-common/src/main/java/io/pixelsdb/pixels/common/physical/StorageFactory.java @@ -77,24 +77,30 @@ private StorageFactory() this.storageProviders = providersBuilder.build(); } - private static StorageFactory instance = null; + private static volatile StorageFactory instance = null; public static StorageFactory Instance() { if (instance == null) { - instance = new StorageFactory(); - Runtime.getRuntime().addShutdownHook(new Thread(()-> + synchronized (StorageFactory.class) { - try + if (instance == null) { - instance.closeAll(); - } catch (IOException e) - { - logger.error("Failed to close all storage instances.", e); - e.printStackTrace(); + instance = new StorageFactory(); + Runtime.getRuntime().addShutdownHook(new Thread(() -> + { + try + { + instance.closeAll(); + } catch (IOException e) + { + logger.error("Failed to close all storage instances.", e); + e.printStackTrace(); + } + })); } - })); + } } return instance; } diff --git a/pixels-common/src/main/java/io/pixelsdb/pixels/common/physical/scheduler/NoopScheduler.java b/pixels-common/src/main/java/io/pixelsdb/pixels/common/physical/scheduler/NoopScheduler.java index 97c948c889..2c8faeff3b 100644 --- a/pixels-common/src/main/java/io/pixelsdb/pixels/common/physical/scheduler/NoopScheduler.java +++ b/pixels-common/src/main/java/io/pixelsdb/pixels/common/physical/scheduler/NoopScheduler.java @@ -40,15 +40,12 @@ */ public class NoopScheduler implements Scheduler { - private static Logger logger = LogManager.getLogger(NoopScheduler.class); - private static NoopScheduler instance; + private static final Logger logger = LogManager.getLogger(NoopScheduler.class); + private static final NoopScheduler instance = new NoopScheduler(); public static Scheduler Instance() { - if (instance == null) - { - instance = new NoopScheduler(); - } + // no need to create instance lazily. return instance; } diff --git a/pixels-common/src/main/java/io/pixelsdb/pixels/common/physical/scheduler/RateLimitedScheduler.java b/pixels-common/src/main/java/io/pixelsdb/pixels/common/physical/scheduler/RateLimitedScheduler.java index 5845dd592d..b85793f450 100644 --- a/pixels-common/src/main/java/io/pixelsdb/pixels/common/physical/scheduler/RateLimitedScheduler.java +++ b/pixels-common/src/main/java/io/pixelsdb/pixels/common/physical/scheduler/RateLimitedScheduler.java @@ -48,16 +48,16 @@ */ public class RateLimitedScheduler extends SortMergeScheduler { - private static Logger logger = LogManager.getLogger(RateLimitedScheduler.class); - private static RateLimitedScheduler instance; + private static final Logger logger = LogManager.getLogger(RateLimitedScheduler.class); + + private static final class InstanceHolder + { + private static final RateLimitedScheduler instance = new RateLimitedScheduler(); + } public static Scheduler Instance() { - if (instance == null) - { - instance = new RateLimitedScheduler(); - } - return instance; + return InstanceHolder.instance; } private RateLimiter mbpsRateLimiter; diff --git a/pixels-common/src/main/java/io/pixelsdb/pixels/common/physical/scheduler/SortMergeScheduler.java b/pixels-common/src/main/java/io/pixelsdb/pixels/common/physical/scheduler/SortMergeScheduler.java index fa48d89176..24ebb1be9c 100644 --- a/pixels-common/src/main/java/io/pixelsdb/pixels/common/physical/scheduler/SortMergeScheduler.java +++ b/pixels-common/src/main/java/io/pixelsdb/pixels/common/physical/scheduler/SortMergeScheduler.java @@ -42,16 +42,16 @@ public class SortMergeScheduler implements Scheduler { private static final Logger logger = LogManager.getLogger(SortMergeScheduler.class); - private static SortMergeScheduler instance; + + private static final class InstanceHolder + { + private static final SortMergeScheduler instance = new SortMergeScheduler(); + } private static int MaxGap; public static Scheduler Instance() { - if (instance == null) - { - instance = new SortMergeScheduler(); - } - return instance; + return InstanceHolder.instance; } protected RetryPolicy retryPolicy; diff --git a/pixels-common/src/main/java/io/pixelsdb/pixels/common/retina/RetinaService.java b/pixels-common/src/main/java/io/pixelsdb/pixels/common/retina/RetinaService.java index 74517a9b03..e663ba6e2b 100644 --- a/pixels-common/src/main/java/io/pixelsdb/pixels/common/retina/RetinaService.java +++ b/pixels-common/src/main/java/io/pixelsdb/pixels/common/retina/RetinaService.java @@ -92,12 +92,11 @@ public static RetinaService Instance() * @param port the port of the retina server * @return the created retina service instance */ - public static RetinaService CreateInstance(String host, int port) + public static synchronized RetinaService CreateInstance(String host, int port) { HostAddress address = HostAddress.fromParts(host, port); return otherInstances.computeIfAbsent( - address, - addr -> new RetinaService(addr.getHostText(), addr.getPort()) + address, addr -> new RetinaService(addr.getHostText(), addr.getPort()) ); } diff --git a/pixels-common/src/main/java/io/pixelsdb/pixels/common/transaction/TransContextCache.java b/pixels-common/src/main/java/io/pixelsdb/pixels/common/transaction/TransContextCache.java index f6605a3af6..fb3d220b9e 100644 --- a/pixels-common/src/main/java/io/pixelsdb/pixels/common/transaction/TransContextCache.java +++ b/pixels-common/src/main/java/io/pixelsdb/pixels/common/transaction/TransContextCache.java @@ -39,15 +39,14 @@ */ public class TransContextCache { - private static TransContextCache instance; + private static final class InstanceHolder + { + private static final TransContextCache instance = new TransContextCache(); + } public static TransContextCache Instance() { - if (instance == null) - { - instance = new TransContextCache(); - } - return instance; + return InstanceHolder.instance; } private final Map transIdToContext = new ConcurrentHashMap<>(); diff --git a/pixels-common/src/main/java/io/pixelsdb/pixels/common/transaction/TransService.java b/pixels-common/src/main/java/io/pixelsdb/pixels/common/transaction/TransService.java index ccba7244d8..b7d62311c1 100644 --- a/pixels-common/src/main/java/io/pixelsdb/pixels/common/transaction/TransService.java +++ b/pixels-common/src/main/java/io/pixelsdb/pixels/common/transaction/TransService.java @@ -32,9 +32,9 @@ import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; -import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.TimeUnit; /** @@ -47,7 +47,7 @@ public class TransService { private static final Logger logger = LogManager.getLogger(TransService.class); private static final TransService defaultInstance; - private static final Map otherInstances = new HashMap<>(); + private static final Map otherInstances = new ConcurrentHashMap<>(); static { @@ -92,7 +92,7 @@ public static TransService Instance() * @param port the port of the trans server * @return the created trans service instance */ - public static TransService CreateInstance(String host, int port) + public static synchronized TransService CreateInstance(String host, int port) { HostAddress address = HostAddress.fromParts(host, port); TransService transService = otherInstances.get(address); diff --git a/pixels-common/src/main/java/io/pixelsdb/pixels/common/turbo/InvokerFactory.java b/pixels-common/src/main/java/io/pixelsdb/pixels/common/turbo/InvokerFactory.java index 1a9918c282..22d926848e 100644 --- a/pixels-common/src/main/java/io/pixelsdb/pixels/common/turbo/InvokerFactory.java +++ b/pixels-common/src/main/java/io/pixelsdb/pixels/common/turbo/InvokerFactory.java @@ -31,11 +31,14 @@ */ public class InvokerFactory { - private static final InvokerFactory instance = new InvokerFactory(); + private static final class InstanceHolder + { + private static final InvokerFactory instance = new InvokerFactory(); + } public static InvokerFactory Instance() { - return instance; + return InstanceHolder.instance; } /** diff --git a/pixels-common/src/main/java/io/pixelsdb/pixels/common/utils/ConfigFactory.java b/pixels-common/src/main/java/io/pixelsdb/pixels/common/utils/ConfigFactory.java index 13f4c5788b..e1a46f5a62 100755 --- a/pixels-common/src/main/java/io/pixelsdb/pixels/common/utils/ConfigFactory.java +++ b/pixels-common/src/main/java/io/pixelsdb/pixels/common/utils/ConfigFactory.java @@ -33,20 +33,18 @@ */ public class ConfigFactory { - private static ConfigFactory instance = null; + private static final class InstanceHolder + { + private static final ConfigFactory instance = new ConfigFactory(); + } /** - * Injected classes in pixels-presto should not use this method to get ConfigFactory Instance. - * + * Injected classes in pixels-presto and pixels-trino should not use this method to get ConfigFactory Instance. * @return */ public static ConfigFactory Instance() { - if (instance == null) - { - instance = new ConfigFactory(); - } - return instance; + return InstanceHolder.instance; } // Properties is thread safe, so we do not add synchronization to it. diff --git a/pixels-common/src/main/java/io/pixelsdb/pixels/common/utils/EtcdUtil.java b/pixels-common/src/main/java/io/pixelsdb/pixels/common/utils/EtcdUtil.java index fe17e9de5b..b9d194a148 100644 --- a/pixels-common/src/main/java/io/pixelsdb/pixels/common/utils/EtcdUtil.java +++ b/pixels-common/src/main/java/io/pixelsdb/pixels/common/utils/EtcdUtil.java @@ -45,7 +45,12 @@ public class EtcdUtil { private static final Logger logger = LogManager.getLogger(EtcdUtil.class); - private static final EtcdUtil instance = new EtcdUtil(); + + private static final class InstanceHolder + { + private static final EtcdUtil instance = new EtcdUtil(); + } + private final Client client; private EtcdUtil() @@ -71,7 +76,7 @@ private EtcdUtil() public static EtcdUtil Instance() { - return instance; + return InstanceHolder.instance; } /** diff --git a/pixels-common/src/main/java/io/pixelsdb/pixels/common/utils/GcMonitor.java b/pixels-common/src/main/java/io/pixelsdb/pixels/common/utils/GcMonitor.java index ead6d43112..139414f108 100644 --- a/pixels-common/src/main/java/io/pixelsdb/pixels/common/utils/GcMonitor.java +++ b/pixels-common/src/main/java/io/pixelsdb/pixels/common/utils/GcMonitor.java @@ -32,6 +32,7 @@ public class GcMonitor public static GcMonitor Instance() { + // no need to create instance lazily. return instance; } diff --git a/pixels-common/src/main/java/io/pixelsdb/pixels/common/utils/MetaDBUtil.java b/pixels-common/src/main/java/io/pixelsdb/pixels/common/utils/MetaDBUtil.java index 253dfe1f58..9fe5e4f0c3 100644 --- a/pixels-common/src/main/java/io/pixelsdb/pixels/common/utils/MetaDBUtil.java +++ b/pixels-common/src/main/java/io/pixelsdb/pixels/common/utils/MetaDBUtil.java @@ -33,11 +33,15 @@ public class MetaDBUtil { private static final Logger log = LogManager.getLogger(MetaDBUtil.class); - private static final MetaDBUtil Instance = new MetaDBUtil(); + private static final class InstanceHolder + { + private static final MetaDBUtil instance = new MetaDBUtil(); + } public static MetaDBUtil Instance() { - return Instance; + // instance is to be closed in MetadataServer.shutdown(). + return InstanceHolder.instance; } private Connection connection = null; diff --git a/pixels-daemon/src/main/java/io/pixelsdb/pixels/daemon/metadata/dao/DaoFactory.java b/pixels-daemon/src/main/java/io/pixelsdb/pixels/daemon/metadata/dao/DaoFactory.java index 02ed5daa54..3d6a35d4fc 100644 --- a/pixels-daemon/src/main/java/io/pixelsdb/pixels/daemon/metadata/dao/DaoFactory.java +++ b/pixels-daemon/src/main/java/io/pixelsdb/pixels/daemon/metadata/dao/DaoFactory.java @@ -8,15 +8,14 @@ */ public class DaoFactory { - private static DaoFactory instance = null; + private static final class InstanceHolder + { + private static final DaoFactory instance = new DaoFactory(); + } public static DaoFactory Instance () { - if (instance == null) - { - instance = new DaoFactory(); - } - return instance; + return InstanceHolder.instance; } private final ColumnDao columnDao; diff --git a/pixels-daemon/src/main/java/io/pixelsdb/pixels/daemon/transaction/TransContextManager.java b/pixels-daemon/src/main/java/io/pixelsdb/pixels/daemon/transaction/TransContextManager.java index c295af791e..5a52235176 100644 --- a/pixels-daemon/src/main/java/io/pixelsdb/pixels/daemon/transaction/TransContextManager.java +++ b/pixels-daemon/src/main/java/io/pixelsdb/pixels/daemon/transaction/TransContextManager.java @@ -235,7 +235,7 @@ public boolean dumpTransContext(long timestamp) entry.getValue().getStatus() == TransProto.TransStatus.ROLLBACK); } catch (IOException e) { - log.error("failed to dump transaction context", e); + log.error("failed to dump transaction contexts", e); return false; } return true; diff --git a/pixels-daemon/src/main/java/io/pixelsdb/pixels/daemon/transaction/TransServiceImpl.java b/pixels-daemon/src/main/java/io/pixelsdb/pixels/daemon/transaction/TransServiceImpl.java index ce2e020bd5..0eca6b9e15 100644 --- a/pixels-daemon/src/main/java/io/pixelsdb/pixels/daemon/transaction/TransServiceImpl.java +++ b/pixels-daemon/src/main/java/io/pixelsdb/pixels/daemon/transaction/TransServiceImpl.java @@ -221,7 +221,8 @@ public void commitTransBatch(TransProto.CommitTransBatchRequest request, if (TransContextManager.Instance().setTransCommit(transId)) { commitSuccess = true; - } else + } + else { allSuccess = false; responseBuilder.setErrorCode(ErrorCode.TRANS_BATCH_PARTIAL_COMMIT_FAILED); diff --git a/pixels-executor/src/main/java/io/pixelsdb/pixels/executor/aggregation/function/FunctionFactory.java b/pixels-executor/src/main/java/io/pixelsdb/pixels/executor/aggregation/function/FunctionFactory.java index 4825d6aa7a..6eb766cef5 100644 --- a/pixels-executor/src/main/java/io/pixelsdb/pixels/executor/aggregation/function/FunctionFactory.java +++ b/pixels-executor/src/main/java/io/pixelsdb/pixels/executor/aggregation/function/FunctionFactory.java @@ -28,11 +28,14 @@ */ public class FunctionFactory { - private static final FunctionFactory instance = new FunctionFactory(); + private static final class InstanceHolder + { + private static final FunctionFactory instance = new FunctionFactory(); + } public static FunctionFactory Instance() { - return instance; + return InstanceHolder.instance; } private FunctionFactory() { } diff --git a/pixels-index/pixels-index-rocksdb/src/main/java/io/pixelsdb/pixels/index/rocksdb/RocksDBFactory.java b/pixels-index/pixels-index-rocksdb/src/main/java/io/pixelsdb/pixels/index/rocksdb/RocksDBFactory.java index 0ca8e15d43..a173a4b513 100644 --- a/pixels-index/pixels-index-rocksdb/src/main/java/io/pixelsdb/pixels/index/rocksdb/RocksDBFactory.java +++ b/pixels-index/pixels-index-rocksdb/src/main/java/io/pixelsdb/pixels/index/rocksdb/RocksDBFactory.java @@ -34,9 +34,7 @@ public class RocksDBFactory private static RocksDB instance; private static String dbPath; - private RocksDBFactory() - { - } + private RocksDBFactory() { } private static RocksDB createRocksDB(String path) throws RocksDBException { diff --git a/pixels-parser/src/main/java/io/pixelsdb/pixels/parser/PixelsParser.java b/pixels-parser/src/main/java/io/pixelsdb/pixels/parser/PixelsParser.java index 5c3fe65453..4dc75e3550 100644 --- a/pixels-parser/src/main/java/io/pixelsdb/pixels/parser/PixelsParser.java +++ b/pixels-parser/src/main/java/io/pixelsdb/pixels/parser/PixelsParser.java @@ -65,7 +65,6 @@ public class PixelsParser private final MetadataService metadataService; private final SqlParser.Config parserConfig; - private final RexBuilder rexBuilder; private final CalciteSchema schema; private final String schemaName; private final CalciteCatalogReader catalogReader; @@ -81,7 +80,7 @@ public PixelsParser(MetadataService ms, this.metadataService = ms; this.parserConfig = parserConfig; SqlTypeFactoryImpl typeFactory = new SqlTypeFactoryImpl(RelDataTypeSystem.DEFAULT); - this.rexBuilder = new RexBuilder(typeFactory); + RexBuilder rexBuilder = new RexBuilder(typeFactory); this.schema = CalciteSchema.createRootSchema(true); this.schema.add(schemaName, new PixelsSchema(schemaName, metadataService)); diff --git a/pixels-parser/src/main/java/io/pixelsdb/pixels/parser/PixelsSchemaFactory.java b/pixels-parser/src/main/java/io/pixelsdb/pixels/parser/PixelsSchemaFactory.java index 2febaa2136..df682e0e46 100644 --- a/pixels-parser/src/main/java/io/pixelsdb/pixels/parser/PixelsSchemaFactory.java +++ b/pixels-parser/src/main/java/io/pixelsdb/pixels/parser/PixelsSchemaFactory.java @@ -36,13 +36,12 @@ public class PixelsSchemaFactory implements SchemaFactory public PixelsSchemaFactory(MetadataService metadataService) { - this.metadataService = metadataService; + PixelsSchemaFactory.metadataService = metadataService; } @Override - public Schema create( - SchemaPlus parentSchema, String name, Map operand) + public Schema create(SchemaPlus parentSchema, String name, Map operand) { - return new PixelsSchema(name, this.metadataService); + return new PixelsSchema(name, metadataService); } } diff --git a/pixels-parser/src/main/java/io/pixelsdb/pixels/parser/PixelsTable.java b/pixels-parser/src/main/java/io/pixelsdb/pixels/parser/PixelsTable.java index 46af3e70e4..9f4ee4656e 100644 --- a/pixels-parser/src/main/java/io/pixelsdb/pixels/parser/PixelsTable.java +++ b/pixels-parser/src/main/java/io/pixelsdb/pixels/parser/PixelsTable.java @@ -94,13 +94,12 @@ private RelDataType pixelsType(Column column, RelDataTypeFactory typeFactory) th TypeDescription.Category category = typeDesc.getCategory(); SqlTypeName typeName= toSqlTypeName(category); - RelDataType sqlType = typeName.allowsPrecScale(true, true) + + return typeName.allowsPrecScale(true, true) ? typeFactory.createSqlType(typeName, typeDesc.getPrecision(), typeDesc.getScale()) : typeName.allowsPrecScale(true, false) ? typeFactory.createSqlType(typeName, typeDesc.getPrecision()) : typeFactory.createSqlType(typeName); - - return sqlType; } private static SqlTypeName toSqlTypeName(TypeDescription.Category category) { diff --git a/pixels-planner/src/main/java/io/pixelsdb/pixels/planner/coordinate/CFWorkerManager.java b/pixels-planner/src/main/java/io/pixelsdb/pixels/planner/coordinate/CFWorkerManager.java index 4cebe955ba..dafc5e366a 100644 --- a/pixels-planner/src/main/java/io/pixelsdb/pixels/planner/coordinate/CFWorkerManager.java +++ b/pixels-planner/src/main/java/io/pixelsdb/pixels/planner/coordinate/CFWorkerManager.java @@ -31,11 +31,14 @@ */ public class CFWorkerManager { - private static final CFWorkerManager instance = new CFWorkerManager(); + private static final class InstanceHolder + { + private static final CFWorkerManager instance = new CFWorkerManager(); + } public static CFWorkerManager Instance() { - return instance; + return InstanceHolder.instance; } private final Map> workerIdToWorker; diff --git a/pixels-planner/src/main/java/io/pixelsdb/pixels/planner/coordinate/PlanCoordinatorFactory.java b/pixels-planner/src/main/java/io/pixelsdb/pixels/planner/coordinate/PlanCoordinatorFactory.java index 4337ac1b48..71e9470305 100644 --- a/pixels-planner/src/main/java/io/pixelsdb/pixels/planner/coordinate/PlanCoordinatorFactory.java +++ b/pixels-planner/src/main/java/io/pixelsdb/pixels/planner/coordinate/PlanCoordinatorFactory.java @@ -31,11 +31,14 @@ */ public class PlanCoordinatorFactory { - private static final PlanCoordinatorFactory instance = new PlanCoordinatorFactory(); + private static final class InstanceHolder + { + private static final PlanCoordinatorFactory instance = new PlanCoordinatorFactory(); + } public static PlanCoordinatorFactory Instance() { - return instance; + return InstanceHolder.instance; } private final Map transIdToPlanCoordinator; diff --git a/pixels-planner/src/main/java/io/pixelsdb/pixels/planner/plan/PlanOptimizer.java b/pixels-planner/src/main/java/io/pixelsdb/pixels/planner/plan/PlanOptimizer.java index b2464a7a98..3d533e4fc1 100644 --- a/pixels-planner/src/main/java/io/pixelsdb/pixels/planner/plan/PlanOptimizer.java +++ b/pixels-planner/src/main/java/io/pixelsdb/pixels/planner/plan/PlanOptimizer.java @@ -54,11 +54,15 @@ public class PlanOptimizer { private static final Logger logger = LogManager.getLogger(PlanOptimizer.class); - private static final PlanOptimizer instance = new PlanOptimizer(); + + private static final class InstanceHolder + { + private static final PlanOptimizer instance = new PlanOptimizer(); + } public static PlanOptimizer Instance() { - return instance; + return InstanceHolder.instance; } private final MetadataService metadataService; diff --git a/pixels-retina/src/main/java/io/pixelsdb/pixels/retina/MinioManager.java b/pixels-retina/src/main/java/io/pixelsdb/pixels/retina/MinioManager.java index 091ee97b0c..72b6c62134 100644 --- a/pixels-retina/src/main/java/io/pixelsdb/pixels/retina/MinioManager.java +++ b/pixels-retina/src/main/java/io/pixelsdb/pixels/retina/MinioManager.java @@ -35,6 +35,7 @@ public class MinioManager { private final Storage minio; private final String minioPathPrefix; + public MinioManager() { ConfigFactory configFactory = ConfigFactory.Instance(); @@ -52,15 +53,14 @@ public MinioManager() this.minioPathPrefix = configFactory.getProperty("minio.path.prefix"); } - private static MinioManager instance = null; + private static final class InstanceHolder + { + private static final MinioManager instance = new MinioManager(); + } public static MinioManager Instance() { - if (instance == null) - { - instance = new MinioManager(); - } - return instance; + return InstanceHolder.instance; } private String buildKey(long tableId, long entryId) diff --git a/pixels-retina/src/main/java/io/pixelsdb/pixels/retina/RetinaResourceManager.java b/pixels-retina/src/main/java/io/pixelsdb/pixels/retina/RetinaResourceManager.java index 3ebfaf3fc3..de957f2560 100644 --- a/pixels-retina/src/main/java/io/pixelsdb/pixels/retina/RetinaResourceManager.java +++ b/pixels-retina/src/main/java/io/pixelsdb/pixels/retina/RetinaResourceManager.java @@ -58,15 +58,14 @@ private RetinaResourceManager() this.pixelsWriterBufferMap = new ConcurrentHashMap<>(); } - private static RetinaResourceManager instance = null; + private static final class InstanceHolder + { + private static final RetinaResourceManager instance = new RetinaResourceManager(); + } public static RetinaResourceManager Instance() { - if (instance == null) - { - instance = new RetinaResourceManager(); - } - return instance; + return InstanceHolder.instance; } public void addVisibility(long fileId, int rgId, int recordNum) diff --git a/pixels-turbo/pixels-invoker-lambda/src/main/java/io/pixelsdb/pixels/invoker/lambda/Lambda.java b/pixels-turbo/pixels-invoker-lambda/src/main/java/io/pixelsdb/pixels/invoker/lambda/Lambda.java index d3e7b4bd8a..a63f1a9d71 100644 --- a/pixels-turbo/pixels-invoker-lambda/src/main/java/io/pixelsdb/pixels/invoker/lambda/Lambda.java +++ b/pixels-turbo/pixels-invoker-lambda/src/main/java/io/pixelsdb/pixels/invoker/lambda/Lambda.java @@ -30,11 +30,14 @@ */ public class Lambda { - private static final Lambda instance = new Lambda(); + private static final class InstanceHolder + { + private static final Lambda instance = new Lambda(); + } public static Lambda Instance() { - return instance; + return InstanceHolder.instance; } private final LambdaAsyncClient asyncClient; diff --git a/pixels-turbo/pixels-invoker-spike/src/main/java/io/pixelsdb/pixels/invoker/spike/SpikeAsyncClient.java b/pixels-turbo/pixels-invoker-spike/src/main/java/io/pixelsdb/pixels/invoker/spike/SpikeAsyncClient.java index 43a4d8cf5c..f818cbb8b1 100644 --- a/pixels-turbo/pixels-invoker-spike/src/main/java/io/pixelsdb/pixels/invoker/spike/SpikeAsyncClient.java +++ b/pixels-turbo/pixels-invoker-spike/src/main/java/io/pixelsdb/pixels/invoker/spike/SpikeAsyncClient.java @@ -33,7 +33,12 @@ public class SpikeAsyncClient { private static final ConfigFactory config = ConfigFactory.Instance(); - private static SpikeAsyncClient instance; + + private static final class InstanceHolder + { + private static final SpikeAsyncClient instance = new SpikeAsyncClient(); + } + private final ManagedChannel channel; private final SpikeServiceGrpc.SpikeServiceFutureStub stub; private final int cpu; @@ -54,13 +59,9 @@ private SpikeAsyncClient() this.stub = SpikeServiceGrpc.newFutureStub(channel); } - public static synchronized SpikeAsyncClient getInstance() + public static synchronized SpikeAsyncClient Instance() { - if (instance == null) - { - instance = new SpikeAsyncClient(); - } - return instance; + return InstanceHolder.instance; } @Override diff --git a/pixels-turbo/pixels-invoker-spike/src/main/java/io/pixelsdb/pixels/invoker/spike/SpikeInvoker.java b/pixels-turbo/pixels-invoker-spike/src/main/java/io/pixelsdb/pixels/invoker/spike/SpikeInvoker.java index 2112fd1a73..8fff1eae81 100644 --- a/pixels-turbo/pixels-invoker-spike/src/main/java/io/pixelsdb/pixels/invoker/spike/SpikeInvoker.java +++ b/pixels-turbo/pixels-invoker-spike/src/main/java/io/pixelsdb/pixels/invoker/spike/SpikeInvoker.java @@ -79,7 +79,7 @@ public CompletableFuture invoke(Input input) { SpikeWorkerRequest workerRequest = new SpikeWorkerRequest(this.workerType, JSON.toJSONString(input, SerializerFeature.DisableCircularReferenceDetect)); - ListenableFuture future = SpikeAsyncClient.getInstance().invoke( + ListenableFuture future = SpikeAsyncClient.Instance().invoke( this.functionName, JSON.toJSONString(workerRequest, SerializerFeature.DisableCircularReferenceDetect), input.getRequiredCpu(), input.getRequiredMemory()); diff --git a/pixels-turbo/pixels-invoker-vhive/src/main/java/io/pixelsdb/pixels/invoker/vhive/ScanInvoker.java b/pixels-turbo/pixels-invoker-vhive/src/main/java/io/pixelsdb/pixels/invoker/vhive/ScanInvoker.java index edd2cd9b98..d197774d18 100644 --- a/pixels-turbo/pixels-invoker-vhive/src/main/java/io/pixelsdb/pixels/invoker/vhive/ScanInvoker.java +++ b/pixels-turbo/pixels-invoker-vhive/src/main/java/io/pixelsdb/pixels/invoker/vhive/ScanInvoker.java @@ -26,15 +26,11 @@ import io.pixelsdb.pixels.planner.plan.physical.input.ScanInput; import io.pixelsdb.pixels.planner.plan.physical.output.ScanOutput; import io.pixelsdb.pixels.turbo.TurboProto; -import org.apache.logging.log4j.LogManager; -import org.apache.logging.log4j.Logger; import java.util.concurrent.CompletableFuture; public class ScanInvoker extends VhiveInvoker { - private final Logger log = LogManager.getLogger(ScanInvoker.class); - protected ScanInvoker(String functionName) { super(functionName); @@ -49,7 +45,6 @@ public Output parseOutput(String outputJson) @Override public CompletableFuture invoke(Input input) { -// log.info(String.format("invoke ScanInput: %s", JSON.toJSONString(input, SerializerFeature.PrettyFormat, SerializerFeature.DisableCircularReferenceDetect))); ListenableFuture future = Vhive.Instance().getAsyncClient().scan((ScanInput) input); return genCompletableFuture(future); } diff --git a/pixels-turbo/pixels-invoker-vhive/src/main/java/io/pixelsdb/pixels/invoker/vhive/Vhive.java b/pixels-turbo/pixels-invoker-vhive/src/main/java/io/pixelsdb/pixels/invoker/vhive/Vhive.java index bcc9dfa1e7..ac036cdea5 100644 --- a/pixels-turbo/pixels-invoker-vhive/src/main/java/io/pixelsdb/pixels/invoker/vhive/Vhive.java +++ b/pixels-turbo/pixels-invoker-vhive/src/main/java/io/pixelsdb/pixels/invoker/vhive/Vhive.java @@ -24,7 +24,12 @@ public class Vhive { private static final ConfigFactory config = ConfigFactory.Instance(); - private static final Vhive instance = new Vhive(); + + private static final class InstanceHolder + { + private static final Vhive instance = new Vhive(); + } + private final WorkerAsyncClient asyncClient; private Vhive() @@ -36,7 +41,7 @@ private Vhive() public static Vhive Instance() { - return instance; + return InstanceHolder.instance; } public WorkerAsyncClient getAsyncClient() diff --git a/pixels-turbo/pixels-scaling-ec2/src/main/java/io/pixelsdb/pixels/scaling/ec2/CloudWatch.java b/pixels-turbo/pixels-scaling-ec2/src/main/java/io/pixelsdb/pixels/scaling/ec2/CloudWatch.java index 07faa4f86f..e217495f66 100644 --- a/pixels-turbo/pixels-scaling-ec2/src/main/java/io/pixelsdb/pixels/scaling/ec2/CloudWatch.java +++ b/pixels-turbo/pixels-scaling-ec2/src/main/java/io/pixelsdb/pixels/scaling/ec2/CloudWatch.java @@ -27,11 +27,14 @@ */ public class CloudWatch { - private static final CloudWatch instance = new CloudWatch(); + private static final class InstanceHolder + { + private static final CloudWatch instance = new CloudWatch(); + } public static CloudWatch Instance() { - return instance; + return InstanceHolder.instance; } private final CloudWatchClient client; diff --git a/pixels-turbo/pixels-worker-vhive/src/main/java/io/pixelsdb/pixels/worker/vhive/Main.java b/pixels-turbo/pixels-worker-vhive/src/main/java/io/pixelsdb/pixels/worker/vhive/Main.java index 5a0f4616ff..b40d1f112f 100644 --- a/pixels-turbo/pixels-worker-vhive/src/main/java/io/pixelsdb/pixels/worker/vhive/Main.java +++ b/pixels-turbo/pixels-worker-vhive/src/main/java/io/pixelsdb/pixels/worker/vhive/Main.java @@ -38,7 +38,7 @@ public static void main(String[] args) .build()); CommandLineParser parser = new DefaultParser(); - CommandLine cmd = null; + CommandLine cmd; try { cmd = parser.parse(options, args); @@ -54,6 +54,5 @@ public static void main(String[] args) formatter.printHelp("Log messages to sequence diagrams converter", options); System.exit(1); } - } } diff --git a/pixels-turbo/pixels-worker-vhive/src/main/java/io/pixelsdb/pixels/worker/vhive/utils/ServiceImpl.java b/pixels-turbo/pixels-worker-vhive/src/main/java/io/pixelsdb/pixels/worker/vhive/utils/ServiceImpl.java index 26f5f828d7..1c96fee316 100644 --- a/pixels-turbo/pixels-worker-vhive/src/main/java/io/pixelsdb/pixels/worker/vhive/utils/ServiceImpl.java +++ b/pixels-turbo/pixels-worker-vhive/src/main/java/io/pixelsdb/pixels/worker/vhive/utils/ServiceImpl.java @@ -41,9 +41,7 @@ public class ServiceImpl, I extends Input, O exte final Class handlerClass; final Class typeParameterClass; - public ServiceImpl( - Class handlerClass, - Class typeParameterClass) + public ServiceImpl(Class handlerClass, Class typeParameterClass) { this.handlerClass = handlerClass; this.typeParameterClass = typeParameterClass; From 762b3e1fd85b076164f4fba4cfd8eb2af70de108 Mon Sep 17 00:00:00 2001 From: Haoqiong Bian Date: Mon, 6 Oct 2025 23:06:00 +0800 Subject: [PATCH 18/18] fix --- .../daemon/metadata/dao/impl/RdbFileDao.java | 4 ++-- .../daemon/metadata/dao/impl/RdbLayoutDao.java | 8 ++++---- .../daemon/metadata/dao/impl/RdbPathDao.java | 4 ++-- .../daemon/metadata/dao/impl/RdbPeerDao.java | 4 ++-- .../daemon/metadata/dao/impl/RdbPeerPathDao.java | 15 ++++++--------- .../daemon/metadata/dao/impl/RdbRangeDao.java | 4 ++-- .../metadata/dao/impl/RdbRangeIndexDao.java | 4 ++-- .../daemon/metadata/dao/impl/RdbSchemaDao.java | 3 ++- .../metadata/dao/impl/RdbSchemaVersionDao.java | 5 +++-- .../metadata/dao/impl/RdbSinglePointIndexDao.java | 4 ++-- .../daemon/metadata/dao/impl/RdbTableDao.java | 3 ++- .../daemon/metadata/dao/impl/RdbViewDao.java | 3 ++- 12 files changed, 31 insertions(+), 30 deletions(-) diff --git a/pixels-daemon/src/main/java/io/pixelsdb/pixels/daemon/metadata/dao/impl/RdbFileDao.java b/pixels-daemon/src/main/java/io/pixelsdb/pixels/daemon/metadata/dao/impl/RdbFileDao.java index f68a2ba466..dc6507ca5d 100644 --- a/pixels-daemon/src/main/java/io/pixelsdb/pixels/daemon/metadata/dao/impl/RdbFileDao.java +++ b/pixels-daemon/src/main/java/io/pixelsdb/pixels/daemon/metadata/dao/impl/RdbFileDao.java @@ -35,9 +35,9 @@ */ public class RdbFileDao extends FileDao { - public RdbFileDao() { } + private static final Logger log = LogManager.getLogger(RdbFileDao.class); - private static final Logger log = LogManager.getLogger(RdbPathDao.class); + public RdbFileDao() { } private static final MetaDBUtil db = MetaDBUtil.Instance(); diff --git a/pixels-daemon/src/main/java/io/pixelsdb/pixels/daemon/metadata/dao/impl/RdbLayoutDao.java b/pixels-daemon/src/main/java/io/pixelsdb/pixels/daemon/metadata/dao/impl/RdbLayoutDao.java index 4e703b50ef..52c6ab2396 100644 --- a/pixels-daemon/src/main/java/io/pixelsdb/pixels/daemon/metadata/dao/impl/RdbLayoutDao.java +++ b/pixels-daemon/src/main/java/io/pixelsdb/pixels/daemon/metadata/dao/impl/RdbLayoutDao.java @@ -21,7 +21,6 @@ import io.pixelsdb.pixels.common.utils.MetaDBUtil; import io.pixelsdb.pixels.daemon.MetadataProto; -import io.pixelsdb.pixels.daemon.metadata.dao.DaoFactory; import io.pixelsdb.pixels.daemon.metadata.dao.LayoutDao; import io.pixelsdb.pixels.daemon.metadata.dao.PathDao; import org.apache.logging.log4j.LogManager; @@ -38,13 +37,14 @@ */ public class RdbLayoutDao extends LayoutDao { - public RdbLayoutDao() {} - private static final Logger log = LogManager.getLogger(RdbLayoutDao.class); + public RdbLayoutDao() {} + private static final MetaDBUtil db = MetaDBUtil.Instance(); - private static final PathDao pathDao = DaoFactory.Instance().getPathDao(); + // Issue #1105: do not get pathDao from DaoFactory, otherwise it leads to recursive initialization of DaoFactory. + private static final PathDao pathDao = new RdbPathDao(); @Override public MetadataProto.Layout getById(long id) diff --git a/pixels-daemon/src/main/java/io/pixelsdb/pixels/daemon/metadata/dao/impl/RdbPathDao.java b/pixels-daemon/src/main/java/io/pixelsdb/pixels/daemon/metadata/dao/impl/RdbPathDao.java index ca14bbc04c..5836bb0538 100644 --- a/pixels-daemon/src/main/java/io/pixelsdb/pixels/daemon/metadata/dao/impl/RdbPathDao.java +++ b/pixels-daemon/src/main/java/io/pixelsdb/pixels/daemon/metadata/dao/impl/RdbPathDao.java @@ -35,10 +35,10 @@ */ public class RdbPathDao extends PathDao { - public RdbPathDao() {} - private static final Logger log = LogManager.getLogger(RdbPathDao.class); + public RdbPathDao() {} + private static final MetaDBUtil db = MetaDBUtil.Instance(); @Override diff --git a/pixels-daemon/src/main/java/io/pixelsdb/pixels/daemon/metadata/dao/impl/RdbPeerDao.java b/pixels-daemon/src/main/java/io/pixelsdb/pixels/daemon/metadata/dao/impl/RdbPeerDao.java index b815063fb7..8d6fc0d714 100644 --- a/pixels-daemon/src/main/java/io/pixelsdb/pixels/daemon/metadata/dao/impl/RdbPeerDao.java +++ b/pixels-daemon/src/main/java/io/pixelsdb/pixels/daemon/metadata/dao/impl/RdbPeerDao.java @@ -39,10 +39,10 @@ */ public class RdbPeerDao extends PeerDao { - public RdbPeerDao() {} - private static final Logger log = LogManager.getLogger(RdbPeerDao.class); + public RdbPeerDao() {} + private static final MetaDBUtil db = MetaDBUtil.Instance(); @Override diff --git a/pixels-daemon/src/main/java/io/pixelsdb/pixels/daemon/metadata/dao/impl/RdbPeerPathDao.java b/pixels-daemon/src/main/java/io/pixelsdb/pixels/daemon/metadata/dao/impl/RdbPeerPathDao.java index 37fad1ee4c..308f6a4628 100644 --- a/pixels-daemon/src/main/java/io/pixelsdb/pixels/daemon/metadata/dao/impl/RdbPeerPathDao.java +++ b/pixels-daemon/src/main/java/io/pixelsdb/pixels/daemon/metadata/dao/impl/RdbPeerPathDao.java @@ -23,16 +23,11 @@ import io.pixelsdb.pixels.common.utils.MetaDBUtil; import io.pixelsdb.pixels.daemon.MetadataProto; import io.pixelsdb.pixels.daemon.metadata.dao.ColumnDao; -import io.pixelsdb.pixels.daemon.metadata.dao.DaoFactory; import io.pixelsdb.pixels.daemon.metadata.dao.PeerPathDao; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; -import java.sql.Connection; -import java.sql.ResultSet; -import java.sql.SQLException; -import java.sql.Statement; -import java.sql.PreparedStatement; +import java.sql.*; import java.util.ArrayList; import java.util.List; @@ -42,12 +37,14 @@ */ public class RdbPeerPathDao extends PeerPathDao { - public RdbPeerPathDao() {} - private static final Logger log = LogManager.getLogger(RdbPeerPathDao.class); + public RdbPeerPathDao() {} + private static final MetaDBUtil db = MetaDBUtil.Instance(); - private static final ColumnDao columnDao = DaoFactory.Instance().getColumnDao(); + + // Issue #1105: do not get columnDao from DaoFactory, otherwise it leads to recursive initialization of DaoFactory. + private static final ColumnDao columnDao = new RdbColumnDao(); @Override public MetadataProto.PeerPath getById(long id) diff --git a/pixels-daemon/src/main/java/io/pixelsdb/pixels/daemon/metadata/dao/impl/RdbRangeDao.java b/pixels-daemon/src/main/java/io/pixelsdb/pixels/daemon/metadata/dao/impl/RdbRangeDao.java index e43966cd65..e1a3d74878 100644 --- a/pixels-daemon/src/main/java/io/pixelsdb/pixels/daemon/metadata/dao/impl/RdbRangeDao.java +++ b/pixels-daemon/src/main/java/io/pixelsdb/pixels/daemon/metadata/dao/impl/RdbRangeDao.java @@ -36,10 +36,10 @@ */ public class RdbRangeDao extends RangeDao { - public RdbRangeDao() {} - private static final Logger log = LogManager.getLogger(RdbRangeDao.class); + public RdbRangeDao() {} + private static final MetaDBUtil db = MetaDBUtil.Instance(); @Override diff --git a/pixels-daemon/src/main/java/io/pixelsdb/pixels/daemon/metadata/dao/impl/RdbRangeIndexDao.java b/pixels-daemon/src/main/java/io/pixelsdb/pixels/daemon/metadata/dao/impl/RdbRangeIndexDao.java index 1bf9fe13d5..aa61df57c3 100644 --- a/pixels-daemon/src/main/java/io/pixelsdb/pixels/daemon/metadata/dao/impl/RdbRangeIndexDao.java +++ b/pixels-daemon/src/main/java/io/pixelsdb/pixels/daemon/metadata/dao/impl/RdbRangeIndexDao.java @@ -35,10 +35,10 @@ */ public class RdbRangeIndexDao extends RangeIndexDao { - public RdbRangeIndexDao() {} - private static final Logger log = LogManager.getLogger(RdbRangeIndexDao.class); + public RdbRangeIndexDao() {} + private static final MetaDBUtil db = MetaDBUtil.Instance(); @Override diff --git a/pixels-daemon/src/main/java/io/pixelsdb/pixels/daemon/metadata/dao/impl/RdbSchemaDao.java b/pixels-daemon/src/main/java/io/pixelsdb/pixels/daemon/metadata/dao/impl/RdbSchemaDao.java index f21e185f1e..8ca42aed79 100644 --- a/pixels-daemon/src/main/java/io/pixelsdb/pixels/daemon/metadata/dao/impl/RdbSchemaDao.java +++ b/pixels-daemon/src/main/java/io/pixelsdb/pixels/daemon/metadata/dao/impl/RdbSchemaDao.java @@ -34,10 +34,11 @@ */ public class RdbSchemaDao extends SchemaDao { + private static final Logger log = LogManager.getLogger(RdbSchemaDao.class); + public RdbSchemaDao() {} private static final MetaDBUtil db = MetaDBUtil.Instance(); - private static final Logger log = LogManager.getLogger(RdbSchemaDao.class); @Override public MetadataProto.Schema getById(long id) diff --git a/pixels-daemon/src/main/java/io/pixelsdb/pixels/daemon/metadata/dao/impl/RdbSchemaVersionDao.java b/pixels-daemon/src/main/java/io/pixelsdb/pixels/daemon/metadata/dao/impl/RdbSchemaVersionDao.java index 31c2b5bf23..259323946d 100644 --- a/pixels-daemon/src/main/java/io/pixelsdb/pixels/daemon/metadata/dao/impl/RdbSchemaVersionDao.java +++ b/pixels-daemon/src/main/java/io/pixelsdb/pixels/daemon/metadata/dao/impl/RdbSchemaVersionDao.java @@ -23,7 +23,6 @@ import io.pixelsdb.pixels.common.utils.MetaDBUtil; import io.pixelsdb.pixels.daemon.MetadataProto; import io.pixelsdb.pixels.daemon.metadata.dao.ColumnDao; -import io.pixelsdb.pixels.daemon.metadata.dao.DaoFactory; import io.pixelsdb.pixels.daemon.metadata.dao.SchemaVersionDao; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; @@ -41,7 +40,9 @@ public class RdbSchemaVersionDao extends SchemaVersionDao public RdbSchemaVersionDao() {} private static final MetaDBUtil db = MetaDBUtil.Instance(); - private static final ColumnDao columnDao = DaoFactory.Instance().getColumnDao(); + + // Issue #1105: do not get columnDao from DaoFactory, otherwise it leads to recursive initialization of DaoFactory. + private static final ColumnDao columnDao = new RdbColumnDao(); @Override public MetadataProto.SchemaVersion getById(long id) diff --git a/pixels-daemon/src/main/java/io/pixelsdb/pixels/daemon/metadata/dao/impl/RdbSinglePointIndexDao.java b/pixels-daemon/src/main/java/io/pixelsdb/pixels/daemon/metadata/dao/impl/RdbSinglePointIndexDao.java index 7d0ac45349..daf9bc6953 100644 --- a/pixels-daemon/src/main/java/io/pixelsdb/pixels/daemon/metadata/dao/impl/RdbSinglePointIndexDao.java +++ b/pixels-daemon/src/main/java/io/pixelsdb/pixels/daemon/metadata/dao/impl/RdbSinglePointIndexDao.java @@ -35,10 +35,10 @@ */ public class RdbSinglePointIndexDao extends SinglePointIndexDao { - public RdbSinglePointIndexDao() { } - private static final Logger log = LogManager.getLogger(RdbSinglePointIndexDao.class); + public RdbSinglePointIndexDao() { } + private static final MetaDBUtil db = MetaDBUtil.Instance(); @Override diff --git a/pixels-daemon/src/main/java/io/pixelsdb/pixels/daemon/metadata/dao/impl/RdbTableDao.java b/pixels-daemon/src/main/java/io/pixelsdb/pixels/daemon/metadata/dao/impl/RdbTableDao.java index a6beaf6dd2..9748f30cf6 100644 --- a/pixels-daemon/src/main/java/io/pixelsdb/pixels/daemon/metadata/dao/impl/RdbTableDao.java +++ b/pixels-daemon/src/main/java/io/pixelsdb/pixels/daemon/metadata/dao/impl/RdbTableDao.java @@ -34,10 +34,11 @@ */ public class RdbTableDao extends TableDao { + private static final Logger log = LogManager.getLogger(RdbTableDao.class); + public RdbTableDao() {} private static final MetaDBUtil db = MetaDBUtil.Instance(); - private static final Logger log = LogManager.getLogger(RdbTableDao.class); @Override public MetadataProto.Table getById(long id) diff --git a/pixels-daemon/src/main/java/io/pixelsdb/pixels/daemon/metadata/dao/impl/RdbViewDao.java b/pixels-daemon/src/main/java/io/pixelsdb/pixels/daemon/metadata/dao/impl/RdbViewDao.java index ad171962c6..55016abe62 100644 --- a/pixels-daemon/src/main/java/io/pixelsdb/pixels/daemon/metadata/dao/impl/RdbViewDao.java +++ b/pixels-daemon/src/main/java/io/pixelsdb/pixels/daemon/metadata/dao/impl/RdbViewDao.java @@ -34,10 +34,11 @@ */ public class RdbViewDao extends ViewDao { + private static final Logger log = LogManager.getLogger(RdbViewDao.class); + public RdbViewDao() {} private static final MetaDBUtil db = MetaDBUtil.Instance(); - private static final Logger log = LogManager.getLogger(RdbViewDao.class); @Override public MetadataProto.View getById(long id)