This is an automated email from the ASF dual-hosted git repository.
xingtanzjr pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/iotdb.git
The following commit(s) were added to refs/heads/master by this push:
new 4c87bf3d352 Fix bugs and code smells in the sonarcloud (#10291)
4c87bf3d352 is described below
commit 4c87bf3d3528e92c72316e7027d36e372adf865a
Author: Alan Choo <[email protected]>
AuthorDate: Mon Jun 26 12:04:21 2023 +0800
Fix bugs and code smells in the sonarcloud (#10291)
---
.../java/org/apache/iotdb/db/tools/WalChecker.java | 3 +-
.../java/org/apache/iotdb/db/wal/WALManager.java | 23 ++++----
.../allocation/AbstractNodeAllocationStrategy.java | 3 +-
.../iotdb/db/wal/allocation/ElasticStrategy.java | 14 +++--
.../db/wal/allocation/FirstCreateStrategy.java | 26 +++++----
.../db/wal/allocation/NodeAllocationStrategy.java | 9 ++-
.../db/wal/allocation/RoundRobinStrategy.java | 14 +++--
.../iotdb/db/wal/buffer/AbstractWALBuffer.java | 22 ++++---
.../org/apache/iotdb/db/wal/buffer/IWALBuffer.java | 21 +++++--
.../iotdb/db/wal/buffer/IWALByteBufferView.java | 1 +
.../org/apache/iotdb/db/wal/buffer/WALBuffer.java | 38 +++++++-----
.../org/apache/iotdb/db/wal/buffer/WALEntry.java | 26 +++++----
.../apache/iotdb/db/wal/buffer/WALEntryType.java | 17 +++---
.../apache/iotdb/db/wal/buffer/WALEntryValue.java | 1 +
.../apache/iotdb/db/wal/buffer/WALInfoEntry.java | 51 ++++++++++++++--
.../apache/iotdb/db/wal/buffer/WALSignalEntry.java | 3 +-
.../apache/iotdb/db/wal/checkpoint/Checkpoint.java | 12 +++-
.../iotdb/db/wal/checkpoint/CheckpointManager.java | 44 +++++++-------
.../iotdb/db/wal/checkpoint/CheckpointType.java | 9 +--
.../iotdb/db/wal/checkpoint/MemTableInfo.java | 22 ++++---
.../db/wal/exception/MemTablePinException.java | 1 +
.../iotdb/db/wal/exception/WALException.java | 1 +
.../db/wal/exception/WALNodeClosedException.java | 1 +
.../iotdb/db/wal/exception/WALPipeException.java | 1 +
.../db/wal/exception/WALRecoverException.java | 1 +
.../apache/iotdb/db/wal/io/CheckpointReader.java | 1 +
.../apache/iotdb/db/wal/io/CheckpointWriter.java | 1 +
.../org/apache/iotdb/db/wal/io/ILogWriter.java | 3 +-
.../java/org/apache/iotdb/db/wal/io/LogWriter.java | 1 +
.../apache/iotdb/db/wal/io/WALByteBufReader.java | 9 ++-
.../org/apache/iotdb/db/wal/io/WALMetaData.java | 8 +--
.../java/org/apache/iotdb/db/wal/io/WALReader.java | 16 ++---
.../java/org/apache/iotdb/db/wal/io/WALWriter.java | 10 +++-
.../org/apache/iotdb/db/wal/node/IWALNode.java | 9 +--
.../org/apache/iotdb/db/wal/node/WALFakeNode.java | 14 ++---
.../java/org/apache/iotdb/db/wal/node/WALNode.java | 68 +++++++++++-----------
.../db/wal/recover/CheckpointRecoverUtils.java | 5 +-
.../iotdb/db/wal/recover/WALNodeRecoverTask.java | 8 +--
.../iotdb/db/wal/recover/WALRecoverManager.java | 9 +--
.../iotdb/db/wal/recover/WALRecoverWriter.java | 1 +
.../file/AbstractTsFileRecoverPerformer.java | 10 +++-
.../recover/file/SealedTsFileRecoverPerformer.java | 6 +-
.../db/wal/recover/file/TsFilePlanRedoer.java | 16 ++---
.../file/UnsealedTsFileRecoverPerformer.java | 23 +++++---
.../iotdb/db/wal/utils/CheckpointFileUtils.java | 15 +++--
.../apache/iotdb/db/wal/utils/WALEntryHandler.java | 15 +++--
.../iotdb/db/wal/utils/WALEntryPosition.java | 27 ++++++---
.../apache/iotdb/db/wal/utils/WALFileStatus.java | 5 +-
.../apache/iotdb/db/wal/utils/WALFileUtils.java | 17 +++---
.../iotdb/db/wal/utils/WALInsertNodeCache.java | 9 +--
.../org/apache/iotdb/db/wal/utils/WALMode.java | 17 +++---
.../apache/iotdb/db/wal/utils/WALWriteUtils.java | 21 +++----
.../wal/utils/listener/AbstractResultListener.java | 5 +-
.../db/wal/utils/listener/WALFlushListener.java | 1 +
.../db/wal/utils/listener/WALRecoverListener.java | 3 +-
55 files changed, 436 insertions(+), 281 deletions(-)
diff --git a/server/src/main/java/org/apache/iotdb/db/tools/WalChecker.java
b/server/src/main/java/org/apache/iotdb/db/tools/WalChecker.java
index bc4f9247abf..9cef1d0d79d 100644
--- a/server/src/main/java/org/apache/iotdb/db/tools/WalChecker.java
+++ b/server/src/main/java/org/apache/iotdb/db/tools/WalChecker.java
@@ -18,7 +18,6 @@
*/
package org.apache.iotdb.db.tools;
-import org.apache.iotdb.commons.exception.IllegalPathException;
import org.apache.iotdb.commons.file.SystemFileFactory;
import org.apache.iotdb.db.wal.buffer.WALEntry;
import org.apache.iotdb.db.wal.buffer.WALEntryType;
@@ -98,7 +97,7 @@ public class WalChecker {
} catch (FileNotFoundException e) {
logger.debug("Wal file doesn't exist, skipping");
return true;
- } catch (IOException | IllegalPathException e) {
+ } catch (IOException e) {
logger.error("{} fails the check because", walFile, e);
return false;
}
diff --git a/server/src/main/java/org/apache/iotdb/db/wal/WALManager.java
b/server/src/main/java/org/apache/iotdb/db/wal/WALManager.java
index d041114fde9..d9b5584ab58 100644
--- a/server/src/main/java/org/apache/iotdb/db/wal/WALManager.java
+++ b/server/src/main/java/org/apache/iotdb/db/wal/WALManager.java
@@ -16,6 +16,7 @@
* specific language governing permissions and limitations
* under the License.
*/
+
package org.apache.iotdb.db.wal;
import org.apache.iotdb.commons.concurrent.IoTDBThreadPoolFactory;
@@ -50,18 +51,18 @@ import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.atomic.AtomicLong;
-/** This class is used to manage and allocate wal nodes */
+/** This class is used to manage and allocate wal nodes. */
public class WALManager implements IService {
private static final Logger logger =
LoggerFactory.getLogger(WALManager.class);
private static final IoTDBConfig config =
IoTDBDescriptor.getInstance().getConfig();
- /** manage all wal nodes and decide how to allocate them */
+ // manage all wal nodes and decide how to allocate them
private final NodeAllocationStrategy walNodesManager;
- /** single thread to delete old .wal files */
+ // single thread to delete old .wal files
private ScheduledExecutorService walDeleteThread;
- /** total disk usage of wal files */
+ // total disk usage of wal files
private final AtomicLong totalDiskUsage = new AtomicLong();
- /** total number of wal files */
+ // total number of wal files
private final AtomicLong totalFileNum = new AtomicLong();
private WALManager() {
@@ -83,7 +84,7 @@ public class WALManager implements IService {
+ (sequence ? "sequence" : "unsequence");
}
- /** Apply for a wal node */
+ /** Apply for a wal node. */
public IWALNode applyForWALNode(String applicantUniqueId) {
if (config.getWalMode() == WALMode.DISABLE) {
return WALFakeNode.getSuccessInstance();
@@ -92,7 +93,7 @@ public class WALManager implements IService {
return walNodesManager.applyForWALNode(applicantUniqueId);
}
- /** WAL node will be registered only when using iot consensus protocol */
+ /** WAL node will be registered only when using iot consensus protocol. */
public void registerWALNode(
String applicantUniqueId, String logDirectory, long startFileVersion,
long startSearchIndex) {
if (config.getWalMode() == WALMode.DISABLE
@@ -106,7 +107,7 @@ public class WALManager implements IService {
WritingMetrics.getInstance().createWALNodeInfoMetrics(applicantUniqueId);
}
- /** WAL node will be deleted only when using iot consensus protocol */
+ /** WAL node will be deleted only when using iot consensus protocol. */
public void deleteWALNode(String applicantUniqueId) {
if (config.getWalMode() == WALMode.DISABLE
|| !config.isClusterMode()
@@ -132,7 +133,7 @@ public class WALManager implements IService {
}
}
- /** reboot wal delete thread to hot modify delete wal period */
+ /** Reboot wal delete thread to hot modify delete wal period. */
public void rebootWALDeleteThread() {
if (config.getWalMode() == WALMode.DISABLE) {
return;
@@ -149,7 +150,7 @@ public class WALManager implements IService {
config.getDeleteWalFilesPeriodInMs());
}
- /** submit delete outdated wal files task and wait for result */
+ /** Submit delete outdated wal files task and wait for result. */
public void deleteOutdatedWALFiles() {
if (config.getWalMode() == WALMode.DISABLE) {
return;
@@ -184,7 +185,7 @@ public class WALManager implements IService {
}
}
- /** Wait until all write-ahead logs are flushed */
+ /** Wait until all write-ahead logs are flushed. */
public void waitAllWALFlushed() {
if (config.getWalMode() == WALMode.DISABLE) {
return;
diff --git
a/server/src/main/java/org/apache/iotdb/db/wal/allocation/AbstractNodeAllocationStrategy.java
b/server/src/main/java/org/apache/iotdb/db/wal/allocation/AbstractNodeAllocationStrategy.java
index 857b9a6d1e3..d2a01ccaabf 100644
---
a/server/src/main/java/org/apache/iotdb/db/wal/allocation/AbstractNodeAllocationStrategy.java
+++
b/server/src/main/java/org/apache/iotdb/db/wal/allocation/AbstractNodeAllocationStrategy.java
@@ -16,6 +16,7 @@
* specific language governing permissions and limitations
* under the License.
*/
+
package org.apache.iotdb.db.wal.allocation;
import org.apache.iotdb.commons.conf.CommonConfig;
@@ -39,7 +40,7 @@ public abstract class AbstractNodeAllocationStrategy
implements NodeAllocationSt
LoggerFactory.getLogger(AbstractNodeAllocationStrategy.class);
private static final CommonConfig commonConfig =
CommonDescriptor.getInstance().getConfig();
- /** manage wal folders */
+ // manage wal folders
protected FolderManager folderManager;
protected AbstractNodeAllocationStrategy() {
diff --git
a/server/src/main/java/org/apache/iotdb/db/wal/allocation/ElasticStrategy.java
b/server/src/main/java/org/apache/iotdb/db/wal/allocation/ElasticStrategy.java
index ab7b18bdaba..06331ccd033 100644
---
a/server/src/main/java/org/apache/iotdb/db/wal/allocation/ElasticStrategy.java
+++
b/server/src/main/java/org/apache/iotdb/db/wal/allocation/ElasticStrategy.java
@@ -16,6 +16,7 @@
* specific language governing permissions and limitations
* under the License.
*/
+
package org.apache.iotdb.db.wal.allocation;
import org.apache.iotdb.db.wal.node.IWALNode;
@@ -33,17 +34,17 @@ import java.util.concurrent.locks.ReentrantLock;
* number of memTables.
*/
public class ElasticStrategy extends AbstractNodeAllocationStrategy {
- /** each wal node manages fixed number of memTables */
+ // each wal node manages fixed number of memTables
public static final int APPLICATION_NODE_RATIO = 4;
- /** protect concurrent safety of wal nodes, including walNodes, nodeCursor
and nodeIdCounter */
+ // protect concurrent safety of wal nodes, including walNodes, nodeCursor
and nodeIdCounter
private final Lock nodesLock = new ReentrantLock();
// region these variables should be protected by nodesLock
- /** wal nodes, the max number of wal nodes is MAX_WAL_NUM */
+ // wal nodes, the max number of wal nodes is MAX_WAL_NUM
private final List<WALNode> walNodes;
- /** help allocate node for users */
+ // help allocate node for users
private final Map<String, WALNode> uniqueId2Nodes = new HashMap<>();
- /** each wal node has a unique long value identifier */
+ // each wal node has a unique long value identifier
private int nodeIdCounter = -1;
// endregion
@@ -51,6 +52,8 @@ public class ElasticStrategy extends
AbstractNodeAllocationStrategy {
this.walNodes = new ArrayList<>();
}
+ // it's safe to not close WALNode here, we use clear method to close all
WALNodes.
+ @SuppressWarnings("squid:S2095")
@Override
public IWALNode applyForWALNode(String applicantUniqueId) {
nodesLock.lock();
@@ -86,7 +89,6 @@ public class ElasticStrategy extends
AbstractNodeAllocationStrategy {
return snapshot;
}
- /** non-thread-safe, used for metrics only */
@Override
public int getNodesNum() {
return walNodes.size();
diff --git
a/server/src/main/java/org/apache/iotdb/db/wal/allocation/FirstCreateStrategy.java
b/server/src/main/java/org/apache/iotdb/db/wal/allocation/FirstCreateStrategy.java
index 0c6c341e7d9..3201715524a 100644
---
a/server/src/main/java/org/apache/iotdb/db/wal/allocation/FirstCreateStrategy.java
+++
b/server/src/main/java/org/apache/iotdb/db/wal/allocation/FirstCreateStrategy.java
@@ -16,6 +16,7 @@
* specific language governing permissions and limitations
* under the License.
*/
+
package org.apache.iotdb.db.wal.allocation;
import org.apache.iotdb.commons.utils.FileUtils;
@@ -36,28 +37,30 @@ import java.util.concurrent.locks.ReentrantLock;
* (like data region) has its own wal node.
*/
public class FirstCreateStrategy extends AbstractNodeAllocationStrategy {
- /** protect concurrent safety of wal nodes, including walNodes, nodeCursor
and nodeIdCounter */
+ // protect concurrent safety of wal nodes, including walNodes, nodeCursor
and nodeIdCounter
private final Lock nodesLock = new ReentrantLock();
// region these variables should be protected by nodesLock
- /** wal nodes */
+ // wal nodes
private final Map<String, WALNode> identifier2Nodes = new HashMap<>();
// endregion
+ // it's safe to not close WALNode here, we use clear method to close all
WALNodes.
+ @SuppressWarnings("squid:S2095")
@Override
public IWALNode applyForWALNode(String applicantUniqueId) {
nodesLock.lock();
try {
- if (identifier2Nodes.containsKey(applicantUniqueId)) {
- return identifier2Nodes.get(applicantUniqueId);
+ if (!identifier2Nodes.containsKey(applicantUniqueId)) {
+ IWALNode walNode = createWALNode(applicantUniqueId);
+ if (walNode instanceof WALNode) {
+ // avoid deletion
+ walNode.setSafelyDeletedSearchIndex(
+ ConsensusReqReader.DEFAULT_SAFELY_DELETED_SEARCH_INDEX);
+ identifier2Nodes.put(applicantUniqueId, (WALNode) walNode);
+ }
}
- IWALNode walNode = createWALNode(applicantUniqueId);
- if (walNode instanceof WALNode) {
- // avoid deletion
-
walNode.setSafelyDeletedSearchIndex(ConsensusReqReader.DEFAULT_SAFELY_DELETED_SEARCH_INDEX);
- identifier2Nodes.put(applicantUniqueId, (WALNode) walNode);
- }
- return walNode;
+ return identifier2Nodes.get(applicantUniqueId);
} finally {
nodesLock.unlock();
}
@@ -112,7 +115,6 @@ public class FirstCreateStrategy extends
AbstractNodeAllocationStrategy {
return snapshot;
}
- /** non-thread-safe, used for metrics only */
@Override
public int getNodesNum() {
return identifier2Nodes.size();
diff --git
a/server/src/main/java/org/apache/iotdb/db/wal/allocation/NodeAllocationStrategy.java
b/server/src/main/java/org/apache/iotdb/db/wal/allocation/NodeAllocationStrategy.java
index 9e7f93d3c48..6dec4677b63 100644
---
a/server/src/main/java/org/apache/iotdb/db/wal/allocation/NodeAllocationStrategy.java
+++
b/server/src/main/java/org/apache/iotdb/db/wal/allocation/NodeAllocationStrategy.java
@@ -16,6 +16,7 @@
* specific language governing permissions and limitations
* under the License.
*/
+
package org.apache.iotdb.db.wal.allocation;
import org.apache.iotdb.commons.utils.TestOnly;
@@ -26,12 +27,14 @@ import java.util.List;
/** This interface */
public interface NodeAllocationStrategy {
- /** Allocate one wal node for the applicant */
+
+ /** Allocate one wal node for the applicant. */
IWALNode applyForWALNode(String applicantUniqueId);
- /** Get all wal nodes */
+
+ /** Get all wal nodes. */
List<WALNode> getNodesSnapshot();
- /** Get all wal nodes num */
+ /** Get all wal nodes num. Not thread-safe, used for metrics only. */
int getNodesNum();
@TestOnly
diff --git
a/server/src/main/java/org/apache/iotdb/db/wal/allocation/RoundRobinStrategy.java
b/server/src/main/java/org/apache/iotdb/db/wal/allocation/RoundRobinStrategy.java
index ffe91e2dd9e..30c2501b41c 100644
---
a/server/src/main/java/org/apache/iotdb/db/wal/allocation/RoundRobinStrategy.java
+++
b/server/src/main/java/org/apache/iotdb/db/wal/allocation/RoundRobinStrategy.java
@@ -16,6 +16,7 @@
* specific language governing permissions and limitations
* under the License.
*/
+
package org.apache.iotdb.db.wal.allocation;
import org.apache.iotdb.db.wal.node.IWALNode;
@@ -31,16 +32,16 @@ import java.util.concurrent.locks.ReentrantLock;
* several identifiers (like data regions) can share one wal node.
*/
public class RoundRobinStrategy extends AbstractNodeAllocationStrategy {
- /** max wal nodes number */
+ // max wal nodes number
private final int maxWalNodeNum;
- /** protect concurrent safety of wal nodes, including walNodes, nodeCursor
and nodeIdCounter */
+ // protect concurrent safety of wal nodes, including walNodes, nodeCursor
and nodeIdCounter
private final Lock nodesLock = new ReentrantLock();
// region these variables should be protected by nodesLock
- /** wal nodes, the max number of wal nodes is MAX_WAL_NUM */
+ // wal nodes, the max number of wal nodes is MAX_WAL_NUM
private final List<WALNode> walNodes;
- /** help allocate node for users */
+ // help allocate node for users
private int nodeCursor = -1;
- /** each wal node has a unique int value identifier */
+ // each wal node has a unique int value identifier
private int nodeIdCounter = -1;
// endregion
@@ -49,6 +50,8 @@ public class RoundRobinStrategy extends
AbstractNodeAllocationStrategy {
this.walNodes = new ArrayList<>(maxWalNodeNum);
}
+ // it's safe to not close WALNode here, we use clear method to close all
WALNodes.
+ @SuppressWarnings("squid:S2095")
@Override
public IWALNode applyForWALNode(String applicantUniqueId) {
WALNode selectedNode;
@@ -89,7 +92,6 @@ public class RoundRobinStrategy extends
AbstractNodeAllocationStrategy {
return snapshot;
}
- /** non-thread-safe, used for metrics only */
@Override
public int getNodesNum() {
return walNodes.size();
diff --git
a/server/src/main/java/org/apache/iotdb/db/wal/buffer/AbstractWALBuffer.java
b/server/src/main/java/org/apache/iotdb/db/wal/buffer/AbstractWALBuffer.java
index 372692ab46d..5028ae84086 100644
--- a/server/src/main/java/org/apache/iotdb/db/wal/buffer/AbstractWALBuffer.java
+++ b/server/src/main/java/org/apache/iotdb/db/wal/buffer/AbstractWALBuffer.java
@@ -16,6 +16,7 @@
* specific language governing permissions and limitations
* under the License.
*/
+
package org.apache.iotdb.db.wal.buffer;
import org.apache.iotdb.commons.file.SystemFileFactory;
@@ -35,19 +36,21 @@ import java.util.Arrays;
public abstract class AbstractWALBuffer implements IWALBuffer {
private static final Logger logger =
LoggerFactory.getLogger(AbstractWALBuffer.class);
- /** WALNode identifier of this buffer */
+ // WALNode identifier of this buffer
protected final String identifier;
- /** directory to store .wal files */
+ // directory to store .wal files
protected final String logDirectory;
- /** disk usage of this node‘s wal files */
+ // disk usage of this node‘s wal files
protected long diskUsage = 0;
- /** number of this node‘s wal files */
+ // number of this node‘s wal files
protected long fileNum = 0;
- /** current wal file version id */
+ // current wal file version id
protected volatile long currentWALFileVersion;
- /** current search index */
+ // current search index
protected volatile long currentSearchIndex;
- /** current wal file log writer */
+ // current wal file log writer
+ // it's safe to use volatile here to make this reference thread-safe.
+ @SuppressWarnings("squid:S3077")
protected volatile WALWriter currentWALFileWriter;
protected AbstractWALBuffer(
@@ -87,14 +90,15 @@ public abstract class AbstractWALBuffer implements
IWALBuffer {
* Notice: only called by syncBufferThread and old log writer will be closed
by this function.
*
* @return last wal file
+ * @throws IOException If failing to close or open the log writer
*/
protected File rollLogWriter(long searchIndex, WALFileStatus fileStatus)
throws IOException {
// close file
- File lastFile = currentWALFileWriter.getLogFile();
- String lastName = lastFile.getName();
currentWALFileWriter.close();
addDiskUsage(currentWALFileWriter.size());
addFileNum(1);
+ File lastFile = currentWALFileWriter.getLogFile();
+ String lastName = lastFile.getName();
if (WALFileUtils.parseStatusCode(lastName) != fileStatus) {
String targetName =
WALFileUtils.getLogFileName(
diff --git
a/server/src/main/java/org/apache/iotdb/db/wal/buffer/IWALBuffer.java
b/server/src/main/java/org/apache/iotdb/db/wal/buffer/IWALBuffer.java
index f310ee5fe47..b833e064658 100644
--- a/server/src/main/java/org/apache/iotdb/db/wal/buffer/IWALBuffer.java
+++ b/server/src/main/java/org/apache/iotdb/db/wal/buffer/IWALBuffer.java
@@ -16,6 +16,7 @@
* specific language governing permissions and limitations
* under the License.
*/
+
package org.apache.iotdb.db.wal.buffer;
import java.util.concurrent.TimeUnit;
@@ -32,24 +33,32 @@ public interface IWALBuffer extends AutoCloseable {
*/
void write(WALEntry walEntry);
- /** Get current log version id */
+ /** Get current log version id. */
long getCurrentWALFileVersion();
- /** Get current wal file's size */
+ /** Get current wal file's size. */
long getCurrentWALFileSize();
- /** Get current search index */
+ /** Get current search index. */
long getCurrentSearchIndex();
@Override
void close();
- /** Wait for next flush operation done */
+ /**
+ * Wait for next flush operation done.
+ *
+ * @throws InterruptedException when interrupted by the flush thread
+ */
void waitForFlush() throws InterruptedException;
- /** Wait for next flush operation done */
+ /**
+ * Wait for next flush operation done.
+ *
+ * @throws InterruptedException when interrupted by the flush thread
+ */
boolean waitForFlush(long time, TimeUnit unit) throws InterruptedException;
- /** Return true when all wal entries all consumed and flushed */
+ /** Return true when all wal entries all consumed and flushed. */
boolean isAllWALEntriesConsumed();
}
diff --git
a/server/src/main/java/org/apache/iotdb/db/wal/buffer/IWALByteBufferView.java
b/server/src/main/java/org/apache/iotdb/db/wal/buffer/IWALByteBufferView.java
index f78355be543..e1590fd2742 100644
---
a/server/src/main/java/org/apache/iotdb/db/wal/buffer/IWALByteBufferView.java
+++
b/server/src/main/java/org/apache/iotdb/db/wal/buffer/IWALByteBufferView.java
@@ -16,6 +16,7 @@
* specific language governing permissions and limitations
* under the License.
*/
+
package org.apache.iotdb.db.wal.buffer;
import java.nio.ByteBuffer;
diff --git a/server/src/main/java/org/apache/iotdb/db/wal/buffer/WALBuffer.java
b/server/src/main/java/org/apache/iotdb/db/wal/buffer/WALBuffer.java
index 9aff438a835..e1efbaf72a4 100644
--- a/server/src/main/java/org/apache/iotdb/db/wal/buffer/WALBuffer.java
+++ b/server/src/main/java/org/apache/iotdb/db/wal/buffer/WALBuffer.java
@@ -16,6 +16,7 @@
* specific language governing permissions and limitations
* under the License.
*/
+
package org.apache.iotdb.db.wal.buffer;
import org.apache.iotdb.commons.concurrent.IoTDBThreadPoolFactory;
@@ -64,28 +65,34 @@ public class WALBuffer extends AbstractWALBuffer {
private static final int QUEUE_CAPACITY = config.getWalBufferQueueCapacity();
private static final WritingMetrics WRITING_METRICS =
WritingMetrics.getInstance();
- /** whether close method is called */
+ // whether close method is called
private volatile boolean isClosed = false;
- /** WALEntries */
+ // WALEntries
private final BlockingQueue<WALEntry> walEntries = new
ArrayBlockingQueue<>(QUEUE_CAPACITY);
- /** lock to provide synchronization for double buffers mechanism, protecting
buffers status */
+ // lock to provide synchronization for double buffers mechanism, protecting
buffers status
private final Lock buffersLock = new ReentrantLock();
- /** condition to guarantee correctness of switching buffers */
+ // condition to guarantee correctness of switching buffers
private final Condition idleBufferReadyCondition =
buffersLock.newCondition();
// region these variables should be protected by buffersLock
- /** two buffers switch between three statuses (there is always 1 buffer
working) */
+ /** two buffers switch between three statuses (there is always 1 buffer
working). */
// buffer in working status, only updated by serializeThread
+ // it's safe to use volatile here to make this reference thread-safe.
+ @SuppressWarnings("squid:S3077")
private volatile ByteBuffer workingBuffer;
// buffer in idle status
+ // it's safe to use volatile here to make this reference thread-safe.
+ @SuppressWarnings("squid:S3077")
private volatile ByteBuffer idleBuffer;
// buffer in syncing status, serializeThread makes sure no more writes to
syncingBuffer
+ // it's safe to use volatile here to make this reference thread-safe.
+ @SuppressWarnings("squid:S3077")
private volatile ByteBuffer syncingBuffer;
// endregion
- /** file status of working buffer, updating file writer's status when
syncing */
+ // file status of working buffer, updating file writer's status when syncing
protected volatile WALFileStatus currentFileStatus;
- /** single thread to serialize WALEntry to workingBuffer */
+ // single thread to serialize WALEntry to workingBuffer
private final ExecutorService serializeThread;
- /** single thread to sync syncingBuffer to disk */
+ // single thread to sync syncingBuffer to disk
private final ExecutorService syncBufferThread;
public WALBuffer(String identifier, String logDirectory) throws
FileNotFoundException {
@@ -137,7 +144,7 @@ public class WALBuffer extends AbstractWALBuffer {
}
// region Task of serializeThread
- /** This info class traverses some extra info from serializeThread to
syncBufferThread */
+ /** This info class traverses some extra info from serializeThread to
syncBufferThread. */
private static class SerializeInfo {
final WALMetaData metaData = new WALMetaData();
final List<WALFlushListener> fsyncListeners = new ArrayList<>();
@@ -161,7 +168,7 @@ public class WALBuffer extends AbstractWALBuffer {
}
}
- /** In order to control memory usage of blocking queue, get 1 and then
serialize 1 */
+ // In order to control memory usage of blocking queue, get 1 and then
serialize 1
private void serialize() {
// try to get first WALEntry with blocking interface
long start = System.nanoTime();
@@ -214,6 +221,8 @@ public class WALBuffer extends AbstractWALBuffer {
}
/**
+ * Handle wal info and signal entry.
+ *
* @return true if fsyncWorkingBuffer has been called, which means this
serialization task
* should be ended.
*/
@@ -226,7 +235,7 @@ public class WALBuffer extends AbstractWALBuffer {
return false;
}
- /** Handle a normal WALEntry. */
+ /** Handle a normal info WALEntry. */
private void handleInfoEntry(WALEntry walEntry) {
int size = byteBufferView.position();
try {
@@ -261,6 +270,8 @@ public class WALBuffer extends AbstractWALBuffer {
}
/**
+ * Handle a signal entry.
+ *
* @return true if fsyncWorkingBuffer has been called, which means this
serialization task
* should be ended.
*/
@@ -433,7 +444,7 @@ public class WALBuffer extends AbstractWALBuffer {
@Override
public void run() {
- long start = System.nanoTime();
+ final long startTime = System.nanoTime();
long walFileVersionId = currentWALFileVersion;
long position = currentWALFileWriter.size();
currentWALFileWriter.updateFileStatus(fileStatus);
@@ -502,7 +513,7 @@ public class WALBuffer extends AbstractWALBuffer {
}
}
WRITING_METRICS.recordWALBufferEntriesCount(info.fsyncListeners.size());
- WRITING_METRICS.recordSyncWALBufferCost(System.nanoTime() - start,
forceFlag);
+ WRITING_METRICS.recordSyncWALBufferCost(System.nanoTime() - startTime,
forceFlag);
}
}
@@ -550,6 +561,7 @@ public class WALBuffer extends AbstractWALBuffer {
walEntries.put(new WALSignalEntry(WALEntryType.CLOSE_SIGNAL));
} catch (InterruptedException e) {
logger.error("Fail to put CLOSE_SIGNAL to walEntries.", e);
+ Thread.currentThread().interrupt();
}
isClosed = true;
shutdownThread(serializeThread, ThreadName.WAL_SERIALIZE);
diff --git a/server/src/main/java/org/apache/iotdb/db/wal/buffer/WALEntry.java
b/server/src/main/java/org/apache/iotdb/db/wal/buffer/WALEntry.java
index 04781a82b22..ce4ebfc4720 100644
--- a/server/src/main/java/org/apache/iotdb/db/wal/buffer/WALEntry.java
+++ b/server/src/main/java/org/apache/iotdb/db/wal/buffer/WALEntry.java
@@ -16,9 +16,9 @@
* specific language governing permissions and limitations
* under the License.
*/
+
package org.apache.iotdb.db.wal.buffer;
-import org.apache.iotdb.commons.exception.IllegalPathException;
import org.apache.iotdb.db.engine.memtable.AbstractMemTable;
import org.apache.iotdb.db.engine.memtable.IMemTable;
import org.apache.iotdb.db.mpp.plan.planner.plan.node.PlanNode;
@@ -44,16 +44,14 @@ import java.util.Objects;
public abstract class WALEntry implements SerializedSize {
private static final Logger logger = LoggerFactory.getLogger(WALEntry.class);
- /** type of value */
+ // type of value
protected final WALEntryType type;
- /** memTable id */
+ // memTable id
protected final long memTableId;
- /** value(physical plan or memTable snapshot) */
+ // value(physical plan or memTable snapshot)
protected final WALEntryValue value;
- /**
- * listen whether this WALEntry has been written to the filesystem, null iff
this WALEntry is
- * deserialized from .wal file
- */
+ // listen whether this WALEntry has been written to the filesystem
+ // null iff this WALEntry is deserialized from .wal file
protected final WALFlushListener walFlushListener;
protected WALEntry(long memTableId, WALEntryValue value, boolean wait) {
@@ -82,8 +80,7 @@ public abstract class WALEntry implements SerializedSize {
public abstract void serialize(IWALByteBufferView buffer);
- public static WALEntry deserialize(DataInputStream stream)
- throws IllegalPathException, IOException {
+ public static WALEntry deserialize(DataInputStream stream) throws
IOException {
byte typeNum = stream.readByte();
WALEntryType type = WALEntryType.valueOf(typeNum);
@@ -121,7 +118,7 @@ public abstract class WALEntry implements SerializedSize {
/**
* This deserialization method is only for iot consensus and just
deserializes InsertRowNode and
- * InsertTabletNode
+ * InsertTabletNode.
*/
public static PlanNode deserializeForConsensus(ByteBuffer buffer) {
logger.debug(
@@ -131,11 +128,16 @@ public abstract class WALEntry implements SerializedSize {
buffer.position());
// wal entry type
buffer.get();
- // memtable id
+ // memTable id
buffer.getLong();
return PlanNodeType.deserializeFromWAL(buffer);
}
+ @Override
+ public int hashCode() {
+ return Objects.hash(type, memTableId, value);
+ }
+
@Override
public boolean equals(Object obj) {
if (obj == this) {
diff --git
a/server/src/main/java/org/apache/iotdb/db/wal/buffer/WALEntryType.java
b/server/src/main/java/org/apache/iotdb/db/wal/buffer/WALEntryType.java
index 97214848deb..66a6e6ddf38 100644
--- a/server/src/main/java/org/apache/iotdb/db/wal/buffer/WALEntryType.java
+++ b/server/src/main/java/org/apache/iotdb/db/wal/buffer/WALEntryType.java
@@ -16,9 +16,10 @@
* specific language governing permissions and limitations
* under the License.
*/
+
package org.apache.iotdb.db.wal.buffer;
-/** Type of {@link WALEntry}, including info type and signal type */
+/** Type of {@link WALEntry}, including info type and signal type. */
public enum WALEntryType {
// region info entry type
@Deprecated
@@ -27,6 +28,7 @@ public enum WALEntryType {
INSERT_TABLET_PLAN((byte) 1),
@Deprecated
DELETE_PLAN((byte) 2),
+ /** {@link org.apache.iotdb.db.engine.memtable.AbstractMemTable} */
MEMORY_TABLE_SNAPSHOT((byte) 3),
/** {@link
org.apache.iotdb.db.mpp.plan.planner.plan.node.write.InsertRowNode} */
INSERT_ROW_NODE((byte) 4),
@@ -36,14 +38,13 @@ public enum WALEntryType {
DELETE_DATA_NODE((byte) 6),
// endregion
// region signal entry type
- /** signal wal buffer has been closed */
+ // signal wal buffer has been closed
CLOSE_SIGNAL(Byte.MIN_VALUE),
- /** signal wal buffer to roll wal log writer */
+ // signal wal buffer to roll wal log writer
ROLL_WAL_LOG_WRITER_SIGNAL((byte) (Byte.MIN_VALUE + 1)),
- /** mark the wal file info part ends */
- WAL_FILE_INFO_END_MARKER((byte) (Byte.MIN_VALUE + 2)),
-// endregion
-;
+ // mark the wal file info part ends
+ WAL_FILE_INFO_END_MARKER((byte) (Byte.MIN_VALUE + 2));
+ // endregion
private final byte code;
@@ -55,7 +56,7 @@ public enum WALEntryType {
return code;
}
- /** Returns true when this type should be searched */
+ /** Returns true when this type should be searched. */
public boolean needSearch() {
return this == INSERT_TABLET_NODE || this == INSERT_ROW_NODE || this ==
DELETE_DATA_NODE;
}
diff --git
a/server/src/main/java/org/apache/iotdb/db/wal/buffer/WALEntryValue.java
b/server/src/main/java/org/apache/iotdb/db/wal/buffer/WALEntryValue.java
index df9a24c3089..191e5f18ea8 100644
--- a/server/src/main/java/org/apache/iotdb/db/wal/buffer/WALEntryValue.java
+++ b/server/src/main/java/org/apache/iotdb/db/wal/buffer/WALEntryValue.java
@@ -16,6 +16,7 @@
* specific language governing permissions and limitations
* under the License.
*/
+
package org.apache.iotdb.db.wal.buffer;
import org.apache.iotdb.db.utils.SerializedSize;
diff --git
a/server/src/main/java/org/apache/iotdb/db/wal/buffer/WALInfoEntry.java
b/server/src/main/java/org/apache/iotdb/db/wal/buffer/WALInfoEntry.java
index 6b8ebb4a703..a1487bacac9 100644
--- a/server/src/main/java/org/apache/iotdb/db/wal/buffer/WALInfoEntry.java
+++ b/server/src/main/java/org/apache/iotdb/db/wal/buffer/WALInfoEntry.java
@@ -16,6 +16,7 @@
* specific language governing permissions and limitations
* under the License.
*/
+
package org.apache.iotdb.db.wal.buffer;
import org.apache.iotdb.db.conf.IoTDBConfig;
@@ -23,14 +24,15 @@ import org.apache.iotdb.db.conf.IoTDBDescriptor;
import org.apache.iotdb.db.mpp.plan.planner.plan.node.write.InsertTabletNode;
import org.apache.iotdb.db.wal.utils.WALMode;
-/** This entry class stores info for persistence */
+import java.util.Objects;
+
+/** This entry class stores info for persistence. */
public class WALInfoEntry extends WALEntry {
private static final IoTDBConfig config =
IoTDBDescriptor.getInstance().getConfig();
-
- /** wal entry type 1 byte, memTable id 8 bytes */
+ // wal entry type 1 byte, memTable id 8 bytes
public static final int FIXED_SERIALIZED_SIZE = Byte.BYTES + Long.BYTES;
- /** extra info for InsertTablet type value */
+ // extra info for InsertTablet type value
private TabletInfo tabletInfo;
public WALInfoEntry(long memTableId, WALEntryValue value, boolean wait) {
@@ -51,6 +53,9 @@ public class WALInfoEntry extends WALEntry {
WALInfoEntry(WALEntryType type, long memTableId, WALEntryValue value) {
super(type, memTableId, value, false);
+ if (value instanceof InsertTabletNode) {
+ tabletInfo = new TabletInfo(0, ((InsertTabletNode) value).getRowCount());
+ }
}
@Override
@@ -78,19 +83,53 @@ public class WALInfoEntry extends WALEntry {
}
private static class TabletInfo {
- /** start row of insert tablet */
+ // start row of insert tablet
private final int tabletStart;
- /** end row of insert tablet */
+ // end row of insert tablet
private final int tabletEnd;
public TabletInfo(int tabletStart, int tabletEnd) {
this.tabletStart = tabletStart;
this.tabletEnd = tabletEnd;
}
+
+ @Override
+ public int hashCode() {
+ return Objects.hash(tabletStart, tabletEnd);
+ }
+
+ @Override
+ public boolean equals(Object obj) {
+ if (obj == this) {
+ return true;
+ }
+ if (obj == null) {
+ return false;
+ }
+ if (!(obj instanceof TabletInfo)) {
+ return false;
+ }
+ TabletInfo other = (TabletInfo) obj;
+ return this.tabletStart == other.tabletStart && this.tabletEnd ==
other.tabletEnd;
+ }
}
@Override
public boolean isSignal() {
return false;
}
+
+ @Override
+ public int hashCode() {
+ return Objects.hash(super.hashCode(), tabletInfo);
+ }
+
+ @Override
+ public boolean equals(Object obj) {
+ if (!super.equals(obj)) {
+ return false;
+ }
+ WALInfoEntry other = (WALInfoEntry) obj;
+ return Objects.equals(this.tabletInfo, other.tabletInfo);
+ }
}
diff --git
a/server/src/main/java/org/apache/iotdb/db/wal/buffer/WALSignalEntry.java
b/server/src/main/java/org/apache/iotdb/db/wal/buffer/WALSignalEntry.java
index 854c2692a83..0fc2e5419ff 100644
--- a/server/src/main/java/org/apache/iotdb/db/wal/buffer/WALSignalEntry.java
+++ b/server/src/main/java/org/apache/iotdb/db/wal/buffer/WALSignalEntry.java
@@ -16,11 +16,12 @@
* specific language governing permissions and limitations
* under the License.
*/
+
package org.apache.iotdb.db.wal.buffer;
import java.nio.ByteBuffer;
-/** This entry class provides a signal to help wal buffer dealing with some
special cases */
+/** This entry class provides a signal to help wal buffer dealing with some
special cases. */
public class WALSignalEntry extends WALEntry {
public WALSignalEntry(WALEntryType signalType) {
this(signalType, false);
diff --git
a/server/src/main/java/org/apache/iotdb/db/wal/checkpoint/Checkpoint.java
b/server/src/main/java/org/apache/iotdb/db/wal/checkpoint/Checkpoint.java
index b21f4e9eb08..37eb559620e 100644
--- a/server/src/main/java/org/apache/iotdb/db/wal/checkpoint/Checkpoint.java
+++ b/server/src/main/java/org/apache/iotdb/db/wal/checkpoint/Checkpoint.java
@@ -16,6 +16,7 @@
* specific language governing permissions and limitations
* under the License.
*/
+
package org.apache.iotdb.db.wal.checkpoint;
import org.apache.iotdb.db.utils.SerializedSize;
@@ -32,12 +33,12 @@ import java.util.Objects;
* brief information of each memTable.
*/
public class Checkpoint implements SerializedSize {
- /** checkpoint type 1 byte, checkpoint number 4 bytes */
+ // checkpoint type 1 byte, checkpoint number 4 bytes
private static final int FIXED_SERIALIZED_SIZE = Byte.BYTES + Integer.BYTES;
- /** checkpoint type */
+ // checkpoint type
private final CheckpointType type;
- /** memTable information */
+ // memTable information
private final List<MemTableInfo> memTableInfos;
public Checkpoint(CheckpointType type, List<MemTableInfo> memTableInfos) {
@@ -77,6 +78,11 @@ public class Checkpoint implements SerializedSize {
return new Checkpoint(type, memTableInfos);
}
+ @Override
+ public int hashCode() {
+ return Objects.hash(type, memTableInfos);
+ }
+
@Override
public boolean equals(Object obj) {
if (obj == this) {
diff --git
a/server/src/main/java/org/apache/iotdb/db/wal/checkpoint/CheckpointManager.java
b/server/src/main/java/org/apache/iotdb/db/wal/checkpoint/CheckpointManager.java
index 73e96d6eef7..a6ac289cf62 100644
---
a/server/src/main/java/org/apache/iotdb/db/wal/checkpoint/CheckpointManager.java
+++
b/server/src/main/java/org/apache/iotdb/db/wal/checkpoint/CheckpointManager.java
@@ -16,6 +16,7 @@
* specific language governing permissions and limitations
* under the License.
*/
+
package org.apache.iotdb.db.wal.checkpoint;
import org.apache.iotdb.commons.conf.CommonDescriptor;
@@ -36,6 +37,7 @@ import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.nio.ByteBuffer;
+import java.nio.file.Files;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
@@ -44,31 +46,31 @@ import java.util.Map;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;
-/** This class is used to manage checkpoints of one wal node */
+/** This class is used to manage checkpoints of one wal node. */
public class CheckpointManager implements AutoCloseable {
private static final Logger logger =
LoggerFactory.getLogger(CheckpointManager.class);
private static final IoTDBConfig config =
IoTDBDescriptor.getInstance().getConfig();
private static final WritingMetrics WRITING_METRICS =
WritingMetrics.getInstance();
- /** WALNode identifier of this checkpoint manager */
+ // WALNode identifier of this checkpoint manager
protected final String identifier;
- /** directory to store .checkpoint file */
+ // directory to store .checkpoint file
protected final String logDirectory;
- /**
- * protect concurrent safety of checkpoint info, including memTableId2Info,
cachedByteBuffer,
- * currentLogVersion and currentLogWriter
- */
+ // protect concurrent safety of checkpoint info
+ // including memTableId2Info, cachedByteBuffer, currentLogVersion and
currentLogWriter
private final Lock infoLock = new ReentrantLock();
// region these variables should be protected by infoLock
- /** memTable id -> memTable info */
+ // memTable id -> memTable info
private final Map<Long, MemTableInfo> memTableId2Info = new HashMap<>();
- /** cache the biggest byte buffer to serialize checkpoint */
+ // cache the biggest byte buffer to serialize checkpoint
+ // it's safe to use volatile here to make this reference thread-safe.
+ @SuppressWarnings("squid:S3077")
private volatile ByteBuffer cachedByteBuffer;
- /** max memTable id */
+ // max memTable id
private long maxMemTableId = 0;
- /** current checkpoint file version id, only updated by fsyncAndDeleteThread
*/
- private int currentCheckPointFileVersion = 0;
- /** current checkpoint file log writer, only updated by fsyncAndDeleteThread
*/
+ // current checkpoint file version id, only updated by fsyncAndDeleteThread
+ private long currentCheckPointFileVersion = 0;
+ // current checkpoint file log writer, only updated by fsyncAndDeleteThread
private ILogWriter currentLogWriter;
// endregion
@@ -114,8 +116,8 @@ public class CheckpointManager implements AutoCloseable {
}
/**
- * make checkpoint for global memTables' info, this checkpoint only exists
in the beginning of
- * each checkpoint file
+ * Make checkpoint for global memTables info, this checkpoint only exists in
the beginning of each
+ * checkpoint file.
*/
private void makeGlobalInfoCP() {
long start = System.nanoTime();
@@ -126,7 +128,7 @@ public class CheckpointManager implements AutoCloseable {
WRITING_METRICS.recordMakeCheckpointCost(checkpoint.getType(),
System.nanoTime() - start);
}
- /** make checkpoint for create memTable info */
+ /** Make checkpoint for create memTable info. */
public void makeCreateMemTableCP(MemTableInfo memTableInfo) {
infoLock.lock();
long start = System.nanoTime();
@@ -144,7 +146,7 @@ public class CheckpointManager implements AutoCloseable {
}
}
- /** make checkpoint for flush memTable info */
+ /** Make checkpoint for flush memTable info. */
public void makeFlushMemTableCP(long memTableId) {
infoLock.lock();
long start = System.nanoTime();
@@ -188,7 +190,7 @@ public class CheckpointManager implements AutoCloseable {
}
// region Task to fsync checkpoint file
- /** Fsync checkpoints to the disk */
+ /** Fsync checkpoints to the disk. */
private void fsyncCheckpointFile() {
infoLock.lock();
try {
@@ -211,7 +213,7 @@ public class CheckpointManager implements AutoCloseable {
SystemFileFactory.INSTANCE.getFile(
logDirectory,
CheckpointFileUtils.getLogFileName(currentCheckPointFileVersion - 1));
- oldFile.delete();
+ Files.delete(oldFile.toPath());
}
} catch (IOException e) {
logger.error(
@@ -298,7 +300,7 @@ public class CheckpointManager implements AutoCloseable {
}
// endregion
- /** Get MemTableInfo of oldest MemTable, whose first version id is smallest
*/
+ /** Get MemTableInfo of oldest MemTable, whose first version id is smallest.
*/
public MemTableInfo getOldestMemTableInfo() {
// find oldest memTable
List<MemTableInfo> memTableInfos = snapshotMemTableInfos();
@@ -328,7 +330,7 @@ public class CheckpointManager implements AutoCloseable {
return firstValidVersionId;
}
- /** Get total cost of active memTables */
+ /** Get total cost of active memTables. */
public long getTotalCostOfActiveMemTables() {
List<MemTableInfo> memTableInfos = snapshotMemTableInfos();
long totalCost = 0;
diff --git
a/server/src/main/java/org/apache/iotdb/db/wal/checkpoint/CheckpointType.java
b/server/src/main/java/org/apache/iotdb/db/wal/checkpoint/CheckpointType.java
index bbd02794c2c..7c302cdc877 100644
---
a/server/src/main/java/org/apache/iotdb/db/wal/checkpoint/CheckpointType.java
+++
b/server/src/main/java/org/apache/iotdb/db/wal/checkpoint/CheckpointType.java
@@ -16,15 +16,16 @@
* specific language governing permissions and limitations
* under the License.
*/
+
package org.apache.iotdb.db.wal.checkpoint;
-/** Type of {@link Checkpoint} */
+/** Type of {@link Checkpoint}. */
public enum CheckpointType {
- /** record all existing memtables' info */
+ // record all existing memTables info
GLOBAL_MEMORY_TABLE_INFO((byte) 0, "global memory table info"),
- /** record create info of one memtable */
+ // record create info of one memTable
CREATE_MEMORY_TABLE((byte) 1, "create memory table"),
- /** record flush info of one memtable */
+ // record flush info of one memTable
FLUSH_MEMORY_TABLE((byte) 2, "flush memory table");
private final byte code;
diff --git
a/server/src/main/java/org/apache/iotdb/db/wal/checkpoint/MemTableInfo.java
b/server/src/main/java/org/apache/iotdb/db/wal/checkpoint/MemTableInfo.java
index bcf1ebe338e..46f849238b3 100644
--- a/server/src/main/java/org/apache/iotdb/db/wal/checkpoint/MemTableInfo.java
+++ b/server/src/main/java/org/apache/iotdb/db/wal/checkpoint/MemTableInfo.java
@@ -16,6 +16,7 @@
* specific language governing permissions and limitations
* under the License.
*/
+
package org.apache.iotdb.db.wal.checkpoint;
import org.apache.iotdb.db.engine.memtable.IMemTable;
@@ -33,20 +34,20 @@ import java.util.Objects;
* file version id of its first {@link WALEntry}.
*/
public class MemTableInfo implements SerializedSize {
- /** memTable id 8 bytes, first version id 8 bytes */
+ // memTable id 8 bytes, first version id 8 bytes
private static final int FIXED_SERIALIZED_SIZE = Long.BYTES * 2;
- /** memTable */
+ // memTable
private IMemTable memTable;
- /** memTable pin count */
+ // memTable pin count
private int pinCount;
- /** memTable is flushed or not */
+ // memTable is flushed or not
private boolean flushed;
- /** memTable id */
+ // memTable id
private long memTableId;
- /** path of the tsFile which this memTable will be flushed to */
+ // path of the tsFile which this memTable will be flushed to
private String tsFilePath;
- /** version id of the file where this memTable's first WALEntry is located */
+ // version id of the file where this memTable's first WALEntry is located
private volatile long firstFileVersionId;
private MemTableInfo() {}
@@ -77,6 +78,11 @@ public class MemTableInfo implements SerializedSize {
return memTableInfo;
}
+ @Override
+ public int hashCode() {
+ return Objects.hash(memTableId, tsFilePath, firstFileVersionId);
+ }
+
@Override
public boolean equals(Object obj) {
if (obj == this) {
@@ -115,7 +121,7 @@ public class MemTableInfo implements SerializedSize {
}
public void setFlushed() {
- // avoid memory leak;
+ // avoid memory leak
this.memTable = null;
this.flushed = true;
}
diff --git
a/server/src/main/java/org/apache/iotdb/db/wal/exception/MemTablePinException.java
b/server/src/main/java/org/apache/iotdb/db/wal/exception/MemTablePinException.java
index 3e9722d8cc1..c19a8ae2428 100644
---
a/server/src/main/java/org/apache/iotdb/db/wal/exception/MemTablePinException.java
+++
b/server/src/main/java/org/apache/iotdb/db/wal/exception/MemTablePinException.java
@@ -16,6 +16,7 @@
* specific language governing permissions and limitations
* under the License.
*/
+
package org.apache.iotdb.db.wal.exception;
public class MemTablePinException extends WALException {
diff --git
a/server/src/main/java/org/apache/iotdb/db/wal/exception/WALException.java
b/server/src/main/java/org/apache/iotdb/db/wal/exception/WALException.java
index ac0c6668750..f881ba3fcbc 100644
--- a/server/src/main/java/org/apache/iotdb/db/wal/exception/WALException.java
+++ b/server/src/main/java/org/apache/iotdb/db/wal/exception/WALException.java
@@ -16,6 +16,7 @@
* specific language governing permissions and limitations
* under the License.
*/
+
package org.apache.iotdb.db.wal.exception;
import org.apache.iotdb.commons.exception.IoTDBException;
diff --git
a/server/src/main/java/org/apache/iotdb/db/wal/exception/WALNodeClosedException.java
b/server/src/main/java/org/apache/iotdb/db/wal/exception/WALNodeClosedException.java
index bd9a4323fed..5b851d71264 100644
---
a/server/src/main/java/org/apache/iotdb/db/wal/exception/WALNodeClosedException.java
+++
b/server/src/main/java/org/apache/iotdb/db/wal/exception/WALNodeClosedException.java
@@ -16,6 +16,7 @@
* specific language governing permissions and limitations
* under the License.
*/
+
package org.apache.iotdb.db.wal.exception;
public class WALNodeClosedException extends WALException {
diff --git
a/server/src/main/java/org/apache/iotdb/db/wal/exception/WALPipeException.java
b/server/src/main/java/org/apache/iotdb/db/wal/exception/WALPipeException.java
index e596ca3cf93..8c1de9c9743 100644
---
a/server/src/main/java/org/apache/iotdb/db/wal/exception/WALPipeException.java
+++
b/server/src/main/java/org/apache/iotdb/db/wal/exception/WALPipeException.java
@@ -16,6 +16,7 @@
* specific language governing permissions and limitations
* under the License.
*/
+
package org.apache.iotdb.db.wal.exception;
public class WALPipeException extends WALException {
diff --git
a/server/src/main/java/org/apache/iotdb/db/wal/exception/WALRecoverException.java
b/server/src/main/java/org/apache/iotdb/db/wal/exception/WALRecoverException.java
index ce836315efa..844f335c336 100644
---
a/server/src/main/java/org/apache/iotdb/db/wal/exception/WALRecoverException.java
+++
b/server/src/main/java/org/apache/iotdb/db/wal/exception/WALRecoverException.java
@@ -16,6 +16,7 @@
* specific language governing permissions and limitations
* under the License.
*/
+
package org.apache.iotdb.db.wal.exception;
public class WALRecoverException extends WALException {
diff --git
a/server/src/main/java/org/apache/iotdb/db/wal/io/CheckpointReader.java
b/server/src/main/java/org/apache/iotdb/db/wal/io/CheckpointReader.java
index 94ad7443864..2b0819e3003 100644
--- a/server/src/main/java/org/apache/iotdb/db/wal/io/CheckpointReader.java
+++ b/server/src/main/java/org/apache/iotdb/db/wal/io/CheckpointReader.java
@@ -16,6 +16,7 @@
* specific language governing permissions and limitations
* under the License.
*/
+
package org.apache.iotdb.db.wal.io;
import org.apache.iotdb.db.wal.checkpoint.Checkpoint;
diff --git
a/server/src/main/java/org/apache/iotdb/db/wal/io/CheckpointWriter.java
b/server/src/main/java/org/apache/iotdb/db/wal/io/CheckpointWriter.java
index e07a107b3c3..f6bcc67a261 100644
--- a/server/src/main/java/org/apache/iotdb/db/wal/io/CheckpointWriter.java
+++ b/server/src/main/java/org/apache/iotdb/db/wal/io/CheckpointWriter.java
@@ -16,6 +16,7 @@
* specific language governing permissions and limitations
* under the License.
*/
+
package org.apache.iotdb.db.wal.io;
import org.apache.iotdb.db.wal.checkpoint.Checkpoint;
diff --git a/server/src/main/java/org/apache/iotdb/db/wal/io/ILogWriter.java
b/server/src/main/java/org/apache/iotdb/db/wal/io/ILogWriter.java
index ee34698f04c..4c51c8a89e0 100644
--- a/server/src/main/java/org/apache/iotdb/db/wal/io/ILogWriter.java
+++ b/server/src/main/java/org/apache/iotdb/db/wal/io/ILogWriter.java
@@ -16,6 +16,7 @@
* specific language governing permissions and limitations
* under the License.
*/
+
package org.apache.iotdb.db.wal.io;
import java.io.Closeable;
@@ -60,7 +61,7 @@ public interface ILogWriter extends Closeable {
long size();
/**
- * Gets the log file
+ * Gets the log file.
*
* @return log file
*/
diff --git a/server/src/main/java/org/apache/iotdb/db/wal/io/LogWriter.java
b/server/src/main/java/org/apache/iotdb/db/wal/io/LogWriter.java
index 416aadc073c..12fb8715916 100644
--- a/server/src/main/java/org/apache/iotdb/db/wal/io/LogWriter.java
+++ b/server/src/main/java/org/apache/iotdb/db/wal/io/LogWriter.java
@@ -16,6 +16,7 @@
* specific language governing permissions and limitations
* under the License.
*/
+
package org.apache.iotdb.db.wal.io;
import org.apache.iotdb.db.wal.buffer.WALEntry;
diff --git
a/server/src/main/java/org/apache/iotdb/db/wal/io/WALByteBufReader.java
b/server/src/main/java/org/apache/iotdb/db/wal/io/WALByteBufReader.java
index 1845bd19fc4..3d6cd88d775 100644
--- a/server/src/main/java/org/apache/iotdb/db/wal/io/WALByteBufReader.java
+++ b/server/src/main/java/org/apache/iotdb/db/wal/io/WALByteBufReader.java
@@ -16,6 +16,7 @@
* specific language governing permissions and limitations
* under the License.
*/
+
package org.apache.iotdb.db.wal.io;
import org.apache.iotdb.db.wal.buffer.WALEntry;
@@ -67,12 +68,16 @@ public class WALByteBufReader implements Closeable {
channel.position(0);
}
- /** Like {@link Iterator#hasNext()} */
+ /** Like {@link Iterator#hasNext()}. */
public boolean hasNext() {
return sizeIterator.hasNext();
}
- /** Like {@link Iterator#next()} */
+ /**
+ * Like {@link Iterator#next()}.
+ *
+ * @throws IOException when failing to read from channel.
+ */
public ByteBuffer next() throws IOException {
int size = sizeIterator.next();
ByteBuffer buffer = ByteBuffer.allocate(size);
diff --git a/server/src/main/java/org/apache/iotdb/db/wal/io/WALMetaData.java
b/server/src/main/java/org/apache/iotdb/db/wal/io/WALMetaData.java
index 35bbd5e67d3..21eb79df7e8 100644
--- a/server/src/main/java/org/apache/iotdb/db/wal/io/WALMetaData.java
+++ b/server/src/main/java/org/apache/iotdb/db/wal/io/WALMetaData.java
@@ -16,6 +16,7 @@
* specific language governing permissions and limitations
* under the License.
*/
+
package org.apache.iotdb.db.wal.io;
import org.apache.iotdb.db.utils.SerializedSize;
@@ -31,13 +32,12 @@ import static
org.apache.iotdb.db.wal.node.WALNode.DEFAULT_SEARCH_INDEX;
* entry and the number of entries.
*/
public class WALMetaData implements SerializedSize {
- /** search index 8 byte, wal entries' number 4 bytes */
+ // search index 8 byte, wal entries' number 4 bytes
private static final int FIXED_SERIALIZED_SIZE = Long.BYTES + Integer.BYTES;
- /** search index of first entry */
+ // search index of first entry
private long firstSearchIndex;
-
- /** each entry's size */
+ // each entry's size
private final List<Integer> buffersSize;
public WALMetaData() {
diff --git a/server/src/main/java/org/apache/iotdb/db/wal/io/WALReader.java
b/server/src/main/java/org/apache/iotdb/db/wal/io/WALReader.java
index 18e1b89b1fe..048407cba7e 100644
--- a/server/src/main/java/org/apache/iotdb/db/wal/io/WALReader.java
+++ b/server/src/main/java/org/apache/iotdb/db/wal/io/WALReader.java
@@ -16,9 +16,9 @@
* specific language governing permissions and limitations
* under the License.
*/
+
package org.apache.iotdb.db.wal.io;
-import org.apache.iotdb.commons.exception.IllegalPathException;
import org.apache.iotdb.db.conf.IoTDBDescriptor;
import org.apache.iotdb.db.wal.buffer.WALEntry;
import org.apache.iotdb.db.wal.buffer.WALEntryType;
@@ -40,7 +40,7 @@ import java.util.NoSuchElementException;
*/
public class WALReader implements Closeable {
private static final Logger logger =
LoggerFactory.getLogger(WALReader.class);
- /** 1/10 of .wal file size as buffer size */
+ // use 1/10 of .wal file size as buffer size
private static final int STREAM_BUFFER_SIZE =
(int)
IoTDBDescriptor.getInstance().getConfig().getWalFileSizeThresholdInByte() / 10;
@@ -62,7 +62,7 @@ public class WALReader implements Closeable {
new BufferedInputStream(Files.newInputStream(logFile.toPath()),
STREAM_BUFFER_SIZE));
}
- /** Like {@link Iterator#hasNext()} */
+ /** Like {@link Iterator#hasNext()}. */
public boolean hasNext() {
if (nextEntry != null) {
return true;
@@ -77,10 +77,6 @@ public class WALReader implements Closeable {
nextEntry = null;
return false;
}
- } catch (IllegalPathException e) {
- fileCorrupted = true;
- logger.warn(
- "WALEntry of wal file {} contains illegal path, skip illegal
WALEntries.", logFile, e);
} catch (Exception e) {
fileCorrupted = true;
// log only when file should be complete
@@ -92,7 +88,11 @@ public class WALReader implements Closeable {
return nextEntry != null;
}
- /** Like {@link Iterator#next()} */
+ /**
+ * Like {@link Iterator#next()}.
+ *
+ * @throws NoSuchElementException when not calling hasNext before.
+ */
public WALEntry next() {
if (nextEntry == null) {
throw new NoSuchElementException();
diff --git a/server/src/main/java/org/apache/iotdb/db/wal/io/WALWriter.java
b/server/src/main/java/org/apache/iotdb/db/wal/io/WALWriter.java
index b0f809eab50..b928b5830ad 100644
--- a/server/src/main/java/org/apache/iotdb/db/wal/io/WALWriter.java
+++ b/server/src/main/java/org/apache/iotdb/db/wal/io/WALWriter.java
@@ -16,6 +16,7 @@
* specific language governing permissions and limitations
* under the License.
*/
+
package org.apache.iotdb.db.wal.io;
import org.apache.iotdb.db.wal.buffer.WALEntry;
@@ -34,15 +35,18 @@ public class WALWriter extends LogWriter {
public static final int MAGIC_STRING_BYTES = MAGIC_STRING.getBytes().length;
private WALFileStatus walFileStatus =
WALFileStatus.CONTAINS_NONE_SEARCH_INDEX;
-
- /** wal files' metadata */
+ // wal files' metadata
protected final WALMetaData metaData = new WALMetaData();
public WALWriter(File logFile) throws FileNotFoundException {
super(logFile);
}
- /** Writes buffer and update its' metadata */
+ /**
+ * Writes buffer and update its' metadata.
+ *
+ * @throws IOException when failing to write
+ */
public void write(ByteBuffer buffer, WALMetaData metaData) throws
IOException {
// update metadata
updateMetaData(metaData);
diff --git a/server/src/main/java/org/apache/iotdb/db/wal/node/IWALNode.java
b/server/src/main/java/org/apache/iotdb/db/wal/node/IWALNode.java
index e700789b176..293b97c2bd1 100644
--- a/server/src/main/java/org/apache/iotdb/db/wal/node/IWALNode.java
+++ b/server/src/main/java/org/apache/iotdb/db/wal/node/IWALNode.java
@@ -16,6 +16,7 @@
* specific language governing permissions and limitations
* under the License.
*/
+
package org.apache.iotdb.db.wal.node;
import org.apache.iotdb.consensus.common.DataSet;
@@ -30,16 +31,16 @@ import
org.apache.iotdb.db.wal.utils.listener.WALFlushListener;
/** This interface provides uniform interface for writing wal and making
checkpoints. */
public interface IWALNode extends FlushListener, AutoCloseable,
ConsensusReqReader, DataSet {
- /** Log InsertRowNode */
+ /** Log InsertRowNode. */
WALFlushListener log(long memTableId, InsertRowNode insertRowNode);
- /** Log InsertTabletNode */
+ /** Log InsertTabletNode. */
WALFlushListener log(long memTableId, InsertTabletNode insertTabletNode, int
start, int end);
- /** Log DeleteDataNode */
+ /** Log DeleteDataNode. */
WALFlushListener log(long memTableId, DeleteDataNode deleteDataNode);
- /** Callback when memTable created */
+ /** Callback when memTable created. */
void onMemTableCreated(IMemTable memTable, String targetTsFile);
@Override
diff --git a/server/src/main/java/org/apache/iotdb/db/wal/node/WALFakeNode.java
b/server/src/main/java/org/apache/iotdb/db/wal/node/WALFakeNode.java
index e07078988d5..76f7475cdfd 100644
--- a/server/src/main/java/org/apache/iotdb/db/wal/node/WALFakeNode.java
+++ b/server/src/main/java/org/apache/iotdb/db/wal/node/WALFakeNode.java
@@ -16,6 +16,7 @@
* specific language governing permissions and limitations
* under the License.
*/
+
package org.apache.iotdb.db.wal.node;
import org.apache.iotdb.db.engine.memtable.IMemTable;
@@ -23,19 +24,20 @@ import
org.apache.iotdb.db.mpp.plan.planner.plan.node.write.DeleteDataNode;
import org.apache.iotdb.db.mpp.plan.planner.plan.node.write.InsertRowNode;
import org.apache.iotdb.db.mpp.plan.planner.plan.node.write.InsertTabletNode;
import org.apache.iotdb.db.wal.exception.WALException;
+import org.apache.iotdb.db.wal.utils.listener.AbstractResultListener.Status;
import org.apache.iotdb.db.wal.utils.listener.WALFlushListener;
/** This class provides fake wal node when wal is disabled or exception
happens. */
public class WALFakeNode implements IWALNode {
- private final WALFlushListener.Status status;
+ private final Status status;
private final WALFlushListener successListener;
private final WALFlushListener failListener;
- private WALFakeNode(WALFlushListener.Status status) {
+ private WALFakeNode(Status status) {
this(status, null);
}
- public WALFakeNode(WALFlushListener.Status status, Exception cause) {
+ public WALFakeNode(Status status, Exception cause) {
this.status = status;
this.successListener = new WALFlushListener(false, null);
this.successListener.succeed();
@@ -116,8 +118,7 @@ public class WALFakeNode implements IWALNode {
public static WALFakeNode getFailureInstance(Exception e) {
return new WALFakeNode(
- WALFlushListener.Status.FAILURE,
- new WALException("Cannot write wal into a fake node. ", e));
+ Status.FAILURE, new WALException("Cannot write wal into a fake node.
", e));
}
public static WALFakeNode getSuccessInstance() {
@@ -125,7 +126,6 @@ public class WALFakeNode implements IWALNode {
}
private static class WALFakeNodeHolder {
- private static final WALFakeNode SUCCESS_INSTANCE =
- new WALFakeNode(WALFlushListener.Status.SUCCESS);
+ private static final WALFakeNode SUCCESS_INSTANCE = new
WALFakeNode(Status.SUCCESS);
}
}
diff --git a/server/src/main/java/org/apache/iotdb/db/wal/node/WALNode.java
b/server/src/main/java/org/apache/iotdb/db/wal/node/WALNode.java
index 8a040a980f1..4851cd09a65 100644
--- a/server/src/main/java/org/apache/iotdb/db/wal/node/WALNode.java
+++ b/server/src/main/java/org/apache/iotdb/db/wal/node/WALNode.java
@@ -16,6 +16,7 @@
* specific language governing permissions and limitations
* under the License.
*/
+
package org.apache.iotdb.db.wal.node;
import org.apache.iotdb.commons.conf.IoTDBConstant;
@@ -49,6 +50,7 @@ import org.apache.iotdb.db.wal.exception.MemTablePinException;
import org.apache.iotdb.db.wal.io.WALByteBufReader;
import org.apache.iotdb.db.wal.utils.WALFileStatus;
import org.apache.iotdb.db.wal.utils.WALFileUtils;
+import org.apache.iotdb.db.wal.utils.listener.AbstractResultListener.Status;
import org.apache.iotdb.db.wal.utils.listener.WALFlushListener;
import org.apache.iotdb.tsfile.fileSystem.FSFactoryProducer;
import org.apache.iotdb.tsfile.utils.TsFileUtils;
@@ -81,35 +83,29 @@ import java.util.regex.Pattern;
public class WALNode implements IWALNode {
private static final Logger logger = LoggerFactory.getLogger(WALNode.class);
private static final IoTDBConfig config =
IoTDBDescriptor.getInstance().getConfig();
- /** no iot consensus, all insert nodes can be safely deleted */
+ // no iot consensus, all insert nodes can be safely deleted
public static final long DEFAULT_SAFELY_DELETED_SEARCH_INDEX =
Long.MAX_VALUE;
-
- /** timeout threshold when waiting for next wal entry */
+ // timeout threshold when waiting for next wal entry
private static final long WAIT_FOR_NEXT_WAL_ENTRY_TIMEOUT_IN_SEC = 30;
-
private static final WritingMetrics WRITING_METRICS =
WritingMetrics.getInstance();
- /** unique identifier of this WALNode */
+ // unique identifier of this WALNode
private final String identifier;
- /** directory to store this node's files */
+ // directory to store this node's files
private final File logDirectory;
- /** wal buffer */
+ // wal buffer
private final WALBuffer buffer;
- /** manage checkpoints */
+ // manage checkpoints
private final CheckpointManager checkpointManager;
- /**
- * memTable id -> memTable snapshot count, used to avoid write amplification
caused by frequent
- * snapshot
- */
+ // memTable id -> memTable snapshot count
+ // used to avoid write amplification caused by frequent snapshot
private final Map<Long, Integer> memTableSnapshotCount = new
ConcurrentHashMap<>();
- /**
- * total cost of flushedMemTables. when memControl enabled, cost is memTable
ram cost, otherwise
- * cost is memTable count
- */
+ // total cost of flushedMemTables
+ // when memControl enabled, cost is memTable ram cost, otherwise cost is
memTable count
private final AtomicLong totalCostOfFlushedMemTables = new AtomicLong();
- /** version id -> cost sum of memTables flushed at this file version */
+ // version id -> cost sum of memTables flushed at this file version
private final Map<Long, Long> walFileVersionId2MemTablesTotalCost = new
ConcurrentHashMap<>();
- /** insert nodes whose search index are before this value can be deleted
safely */
+ // insert nodes whose search index are before this value can be deleted
safely
private volatile long safelyDeletedSearchIndex =
DEFAULT_SAFELY_DELETED_SEARCH_INDEX;
public WALNode(String identifier, String logDirectory) throws
FileNotFoundException {
@@ -188,19 +184,28 @@ public class WALNode implements IWALNode {
}
// region methods for pipe
- /** Pin the wal files of the given memory table */
+ /**
+ * Pin the wal files of the given memory table. Notice: cannot pin one
memTable too long,
+ * otherwise the wal disk usage may too large.
+ *
+ * @throws MemTablePinException If the memTable has been flushed
+ */
public void pinMemTable(long memTableId) throws MemTablePinException {
checkpointManager.pinMemTable(memTableId);
}
- /** Unpin the wal files of the given memory table */
+ /**
+ * Unpin the wal files of the given memory table.
+ *
+ * @throws MemTablePinException If there aren't corresponding pin operations
+ */
public void unpinMemTable(long memTableId) throws MemTablePinException {
checkpointManager.unpinMemTable(memTableId);
}
// endregion
// region Task to delete outdated .wal files
- /** Delete outdated .wal files */
+ /** Delete outdated .wal files. */
public void deleteOutdatedFiles() {
try {
new DeleteOutdatedFileTask().run();
@@ -211,11 +216,11 @@ public class WALNode implements IWALNode {
private class DeleteOutdatedFileTask implements Runnable {
private static final int MAX_RECURSION_TIME = 5;
- /** .wal files whose version ids are less than first valid version id
should be deleted */
+ // .wal files whose version ids are less than first valid version id
should be deleted
private long firstValidVersionId;
- /** the effective information ratio */
+ // the effective information ratio
private double effectiveInfoRatio;
- /** recursion time of calling deletion */
+ // recursion time of calling deletion
private int recursionTime = 0;
@Override
@@ -280,7 +285,7 @@ public class WALNode implements IWALNode {
}
}
- /** Return true iff cannot delete all outdated files because of
IoTConsensus */
+ /** Return true iff cannot delete all outdated files because of
IoTConsensus. */
private boolean deleteOutdatedFiles() {
// find all files to delete
// delete files whose version < firstValidVersionId
@@ -348,14 +353,14 @@ public class WALNode implements IWALNode {
return toDelete;
}
- /** Return true iff effective information ratio is too small or disk usage
is too large */
+ /** Return true iff effective information ratio is too small or disk usage
is too large. */
private boolean shouldSnapshotOrFlush() {
return effectiveInfoRatio < config.getWalMinEffectiveInfoRatio()
|| WALManager.getInstance().shouldThrottle();
}
/**
- * Snapshot or flush one memTable,
+ * Snapshot or flush one memTable.
*
* @return true if snapshot or flush is executed successfully
*/
@@ -442,10 +447,7 @@ public class WALNode implements IWALNode {
}
}
- /**
- * synchronize memTable to make sure snapshot is made before memTable
flush operation, {@link
- *
org.apache.iotdb.db.engine.storagegroup.TsFileProcessor#flushOneMemTable}
- */
+ // synchronize memTable to make sure snapshot is made before memTable
flush operation
private void snapshotMemTable(DataRegion dataRegion, File tsFile,
MemTableInfo memTableInfo) {
IMemTable memTable = memTableInfo.getMemTable();
@@ -465,7 +467,7 @@ public class WALNode implements IWALNode {
WALEntry rollWALFileSignal =
new WALSignalEntry(WALEntryType.ROLL_WAL_LOG_WRITER_SIGNAL,
true);
WALFlushListener fileRolledListener = log(rollWALFileSignal);
- if (fileRolledListener.waitForResult() ==
WALFlushListener.Status.FAILURE) {
+ if (fileRolledListener.waitForResult() == Status.FAILURE) {
logger.error("Fail to roll wal log writer.",
fileRolledListener.getCause());
return;
}
@@ -480,7 +482,7 @@ public class WALNode implements IWALNode {
// wait until getting the result
// it's low-risk to block writes awhile because this memTable
accumulates slowly
- if (flushListener.waitForResult() ==
WALFlushListener.Status.FAILURE) {
+ if (flushListener.waitForResult() == Status.FAILURE) {
logger.error("Fail to snapshot memTable of {}", tsFile,
flushListener.getCause());
}
logger.info(
diff --git
a/server/src/main/java/org/apache/iotdb/db/wal/recover/CheckpointRecoverUtils.java
b/server/src/main/java/org/apache/iotdb/db/wal/recover/CheckpointRecoverUtils.java
index d9bcd2ea217..0ef7616978d 100644
---
a/server/src/main/java/org/apache/iotdb/db/wal/recover/CheckpointRecoverUtils.java
+++
b/server/src/main/java/org/apache/iotdb/db/wal/recover/CheckpointRecoverUtils.java
@@ -16,6 +16,7 @@
* specific language governing permissions and limitations
* under the License.
*/
+
package org.apache.iotdb.db.wal.recover;
import org.apache.iotdb.db.wal.checkpoint.Checkpoint;
@@ -32,7 +33,7 @@ import java.util.Map;
public class CheckpointRecoverUtils {
private CheckpointRecoverUtils() {}
- /** Recover memTable information from checkpoint folder */
+ /** Recover memTable information from checkpoint folder. */
public static CheckpointInfo recoverMemTableInfo(File logDirectory) {
// find all .checkpoint file
File[] checkpointFiles =
CheckpointFileUtils.listAllCheckpointFiles(logDirectory);
@@ -71,6 +72,8 @@ public class CheckpointRecoverUtils {
memTableId2Info.remove(memTableInfo.getMemTableId());
}
break;
+ default:
+ break;
}
}
return new CheckpointInfo(maxMemTableId, memTableId2Info);
diff --git
a/server/src/main/java/org/apache/iotdb/db/wal/recover/WALNodeRecoverTask.java
b/server/src/main/java/org/apache/iotdb/db/wal/recover/WALNodeRecoverTask.java
index 677e19aa7df..b15986e324f 100644
---
a/server/src/main/java/org/apache/iotdb/db/wal/recover/WALNodeRecoverTask.java
+++
b/server/src/main/java/org/apache/iotdb/db/wal/recover/WALNodeRecoverTask.java
@@ -16,6 +16,7 @@
* specific language governing permissions and limitations
* under the License.
*/
+
package org.apache.iotdb.db.wal.recover;
import org.apache.iotdb.commons.file.SystemFileFactory;
@@ -55,13 +56,12 @@ public class WALNodeRecoverTask implements Runnable {
private static final IoTDBConfig config =
IoTDBDescriptor.getInstance().getConfig();
private static final WALRecoverManager walRecoverManger =
WALRecoverManager.getInstance();
- /** this directory store one wal node's .wal and .checkpoint files */
+ // this directory store one wal node's .wal and .checkpoint files
private final File logDirectory;
- /** latch to collect all nodes' recovery end information */
+ // latch to collect all nodes' recovery end information
private final CountDownLatch allNodesRecoveredLatch;
- /** version id of first valid .wal file */
+ // version id of first valid .wal file
private long firstValidVersionId = Long.MAX_VALUE;
-
private Map<Long, MemTableInfo> memTableId2Info;
private Map<Long, UnsealedTsFileRecoverPerformer>
memTableId2RecoverPerformer;
diff --git
a/server/src/main/java/org/apache/iotdb/db/wal/recover/WALRecoverManager.java
b/server/src/main/java/org/apache/iotdb/db/wal/recover/WALRecoverManager.java
index 3f545487d67..85e8f8fa63c 100644
---
a/server/src/main/java/org/apache/iotdb/db/wal/recover/WALRecoverManager.java
+++
b/server/src/main/java/org/apache/iotdb/db/wal/recover/WALRecoverManager.java
@@ -16,6 +16,7 @@
* specific language governing permissions and limitations
* under the License.
*/
+
package org.apache.iotdb.db.wal.recover;
import org.apache.iotdb.commons.concurrent.IoTDBThreadPoolFactory;
@@ -50,13 +51,13 @@ public class WALRecoverManager {
private static final Logger logger =
LoggerFactory.getLogger(WALRecoverManager.class);
private static final CommonConfig commonConfig =
CommonDescriptor.getInstance().getConfig();
- /** true when the recover procedure has started */
+ // true when the recover procedure has started
private volatile boolean hasStarted = false;
- /** start recovery after all data regions have submitted unsealed zero-level
TsFiles */
+ // start recovery after all data regions have submitted unsealed zero-level
TsFiles
private volatile CountDownLatch allDataRegionScannedLatch;
- /** threads to recover wal nodes */
+ // threads to recover wal nodes
private ExecutorService recoverThreadPool;
- /** stores all UnsealedTsFileRecoverPerformer submitted by data region
processors */
+ // stores all UnsealedTsFileRecoverPerformer submitted by data region
processors
private final Map<String, UnsealedTsFileRecoverPerformer>
absolutePath2RecoverPerformer =
new ConcurrentHashMap<>();
diff --git
a/server/src/main/java/org/apache/iotdb/db/wal/recover/WALRecoverWriter.java
b/server/src/main/java/org/apache/iotdb/db/wal/recover/WALRecoverWriter.java
index f20d9c67858..ae91837f68f 100644
--- a/server/src/main/java/org/apache/iotdb/db/wal/recover/WALRecoverWriter.java
+++ b/server/src/main/java/org/apache/iotdb/db/wal/recover/WALRecoverWriter.java
@@ -16,6 +16,7 @@
* specific language governing permissions and limitations
* under the License.
*/
+
package org.apache.iotdb.db.wal.recover;
import org.apache.iotdb.db.wal.io.WALMetaData;
diff --git
a/server/src/main/java/org/apache/iotdb/db/wal/recover/file/AbstractTsFileRecoverPerformer.java
b/server/src/main/java/org/apache/iotdb/db/wal/recover/file/AbstractTsFileRecoverPerformer.java
index aa08daf4151..0e5b1a71c4a 100644
---
a/server/src/main/java/org/apache/iotdb/db/wal/recover/file/AbstractTsFileRecoverPerformer.java
+++
b/server/src/main/java/org/apache/iotdb/db/wal/recover/file/AbstractTsFileRecoverPerformer.java
@@ -16,6 +16,7 @@
* specific language governing permissions and limitations
* under the License.
*/
+
package org.apache.iotdb.db.wal.recover.file;
import org.apache.iotdb.db.engine.storagegroup.TsFileResource;
@@ -36,14 +37,14 @@ import java.io.IOException;
import static
org.apache.iotdb.db.engine.storagegroup.TsFileResource.RESOURCE_SUFFIX;
-/** This class is used to help recover TsFile */
+/** This class is used to help recover TsFile. */
public abstract class AbstractTsFileRecoverPerformer implements Closeable {
private static final Logger logger =
LoggerFactory.getLogger(AbstractTsFileRecoverPerformer.class);
- /** TsFile which needs recovery */
+ // TsFile which needs recovery
protected final TsFileResource tsFileResource;
- /** this writer will be open when .resource file doesn't exist */
+ // this writer will be open when .resource file doesn't exist
protected RestorableTsFileIOWriter writer;
protected AbstractTsFileRecoverPerformer(TsFileResource tsFileResource) {
@@ -54,6 +55,9 @@ public abstract class AbstractTsFileRecoverPerformer
implements Closeable {
* Recover TsFile with RestorableTsFileIOWriter, including load .resource
file (reconstruct when
* necessary) and truncate the file to remaining corrected data. <br>
* Notice: this method may open a {@link RestorableTsFileIOWriter}, remember
to close it.
+ *
+ * @throws DataRegionException when failing to new RestorableTsFileIOWriter.
+ * @throws IOException when failing to read .resource file.
*/
protected void recoverWithWriter() throws DataRegionException, IOException {
File tsFile = tsFileResource.getTsFile();
diff --git
a/server/src/main/java/org/apache/iotdb/db/wal/recover/file/SealedTsFileRecoverPerformer.java
b/server/src/main/java/org/apache/iotdb/db/wal/recover/file/SealedTsFileRecoverPerformer.java
index ddf966bb7c0..9532c97a8cc 100644
---
a/server/src/main/java/org/apache/iotdb/db/wal/recover/file/SealedTsFileRecoverPerformer.java
+++
b/server/src/main/java/org/apache/iotdb/db/wal/recover/file/SealedTsFileRecoverPerformer.java
@@ -16,6 +16,7 @@
* specific language governing permissions and limitations
* under the License.
*/
+
package org.apache.iotdb.db.wal.recover.file;
import org.apache.iotdb.db.engine.storagegroup.TsFileResource;
@@ -33,7 +34,10 @@ public class SealedTsFileRecoverPerformer extends
AbstractTsFileRecoverPerformer
/**
* Recover sealed TsFile, including load .resource file (reconstruct when
necessary) and truncate
- * the file to remaining corrected data
+ * the file to remaining corrected data.
+ *
+ * @throws DataRegionException when failing to recover.
+ * @throws IOException when failing to end file.
*/
public void recover() throws DataRegionException, IOException {
super.recoverWithWriter();
diff --git
a/server/src/main/java/org/apache/iotdb/db/wal/recover/file/TsFilePlanRedoer.java
b/server/src/main/java/org/apache/iotdb/db/wal/recover/file/TsFilePlanRedoer.java
index 093aa30e2aa..016497169d2 100644
---
a/server/src/main/java/org/apache/iotdb/db/wal/recover/file/TsFilePlanRedoer.java
+++
b/server/src/main/java/org/apache/iotdb/db/wal/recover/file/TsFilePlanRedoer.java
@@ -16,6 +16,7 @@
* specific language governing permissions and limitations
* under the License.
*/
+
package org.apache.iotdb.db.wal.recover.file;
import org.apache.iotdb.commons.path.PartialPath;
@@ -32,9 +33,6 @@ import
org.apache.iotdb.db.mpp.plan.planner.plan.node.write.InsertNode;
import org.apache.iotdb.db.mpp.plan.planner.plan.node.write.InsertRowNode;
import org.apache.iotdb.db.mpp.plan.planner.plan.node.write.InsertTabletNode;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
import java.io.IOException;
import java.util.List;
@@ -44,14 +42,12 @@ import java.util.List;
* guarantee concurrency safety.
*/
public class TsFilePlanRedoer {
- private static final Logger logger =
LoggerFactory.getLogger(TsFilePlanRedoer.class);
-
private final TsFileResource tsFileResource;
- /** only unsequence file tolerates duplicated data */
+ // only unsequence file tolerates duplicated data
private final boolean sequence;
- /** virtual database's idTable of this tsFile */
+ // virtual database's idTable of this tsFile
private final IDTable idTable;
- /** store data when redoing logs */
+ // store data when redoing logs
private IMemTable recoveryMemTable = new PrimitiveMemTable();
public TsFilePlanRedoer(TsFileResource tsFileResource, boolean sequence,
IDTable idTable) {
@@ -80,7 +76,6 @@ public class TsFilePlanRedoer {
}
}
- @SuppressWarnings("squid:S3776") // Suppress high Cognitive Complexity
warning
void redoInsert(InsertNode node) throws WriteProcessException {
if (!node.hasValidMeasurements()) {
return;
@@ -105,8 +100,7 @@ public class TsFilePlanRedoer {
}
if (IoTDBDescriptor.getInstance().getConfig().isEnableIDTable()) {
- // TODO get device id by idTable
- // idTable.getSeriesSchemas(node);
+ // TODO get device id by idTable - idTable.getSeriesSchemas(node)
} else {
node.setDeviceID(DeviceIDFactory.getInstance().getDeviceID(node.getDevicePath()));
}
diff --git
a/server/src/main/java/org/apache/iotdb/db/wal/recover/file/UnsealedTsFileRecoverPerformer.java
b/server/src/main/java/org/apache/iotdb/db/wal/recover/file/UnsealedTsFileRecoverPerformer.java
index 76a6eee4e4a..8e88f1e8c5b 100644
---
a/server/src/main/java/org/apache/iotdb/db/wal/recover/file/UnsealedTsFileRecoverPerformer.java
+++
b/server/src/main/java/org/apache/iotdb/db/wal/recover/file/UnsealedTsFileRecoverPerformer.java
@@ -16,6 +16,7 @@
* specific language governing permissions and limitations
* under the License.
*/
+
package org.apache.iotdb.db.wal.recover.file;
import org.apache.iotdb.db.engine.flush.MemTableFlushTask;
@@ -61,13 +62,13 @@ public class UnsealedTsFileRecoverPerformer extends
AbstractTsFileRecoverPerform
private static final Logger logger =
LoggerFactory.getLogger(UnsealedTsFileRecoverPerformer.class);
- /** sequence file or not */
+ // sequence file or not
private final boolean sequence;
- /** add recovered TsFile back to data region */
+ // add recovered TsFile back to data region
private final Consumer<UnsealedTsFileRecoverPerformer>
callbackAfterUnsealedTsFileRecovered;
- /** redo wal log to recover TsFile */
+ // redo wal log to recover TsFile
private final TsFilePlanRedoer walRedoer;
- /** trace result of this recovery */
+ // trace result of this recovery
private final WALRecoverListener recoverListener;
public UnsealedTsFileRecoverPerformer(
@@ -85,6 +86,9 @@ public class UnsealedTsFileRecoverPerformer extends
AbstractTsFileRecoverPerform
/**
* Make preparation for recovery, including load .resource file (reconstruct
when necessary) and
* truncate the file to remaining corrected data.
+ *
+ * @throws DataRegionException when failing to recover.
+ * @throws IOException when failing to recover.
*/
public void startRecovery() throws DataRegionException, IOException {
super.recoverWithWriter();
@@ -178,7 +182,7 @@ public class UnsealedTsFileRecoverPerformer extends
AbstractTsFileRecoverPerform
return modificationsForResource;
}
- /** Redo log */
+ /** Redo log. */
public void redoLog(WALEntry walEntry) {
// skip redo wal log when this TsFile is not crashed
if (!hasCrashed()) {
@@ -209,7 +213,11 @@ public class UnsealedTsFileRecoverPerformer extends
AbstractTsFileRecoverPerform
}
}
- /** Run last procedures to end this recovery */
+ /**
+ * Run last procedures to end this recovery.
+ *
+ * @throws WALRecoverException when failing to flush the recovered memTable.
+ */
public void endRecovery() throws WALRecoverException {
// skip update info when this TsFile is not crashed
if (hasCrashed()) {
@@ -246,7 +254,8 @@ public class UnsealedTsFileRecoverPerformer extends
AbstractTsFileRecoverPerform
// set recover progress index for pipe
PipeAgent.runtime().assignRecoverProgressIndexForTsFileRecovery(tsFileResource);
- // if we put following codes in if clause above, this file can be
continued writing into it
+ // if we put following codes in the 'if' clause above, this file can
be continued writing
+ // into it
// currently, we close this file anyway
writer.endFile();
tsFileResource.serialize();
diff --git
a/server/src/main/java/org/apache/iotdb/db/wal/utils/CheckpointFileUtils.java
b/server/src/main/java/org/apache/iotdb/db/wal/utils/CheckpointFileUtils.java
index e63f45f48cf..51ba1a0c398 100644
---
a/server/src/main/java/org/apache/iotdb/db/wal/utils/CheckpointFileUtils.java
+++
b/server/src/main/java/org/apache/iotdb/db/wal/utils/CheckpointFileUtils.java
@@ -16,6 +16,7 @@
* specific language governing permissions and limitations
* under the License.
*/
+
package org.apache.iotdb.db.wal.utils;
import java.io.File;
@@ -29,25 +30,23 @@ import static
org.apache.iotdb.commons.conf.IoTDBConstant.WAL_FILE_PREFIX;
import static org.apache.iotdb.commons.conf.IoTDBConstant.WAL_VERSION_ID;
public class CheckpointFileUtils {
- /**
- * versionId is a self-incremented id number, helping to maintain the order
of checkpoint files
- */
+ // versionId is a self-incremented id number, helping to maintain the order
of checkpoint files
public static final Pattern CHECKPOINT_FILE_NAME_PATTERN =
Pattern.compile(
String.format(
"%s(?<%s>\\d+)\\%s$", WAL_FILE_PREFIX, WAL_VERSION_ID,
WAL_CHECKPOINT_FILE_SUFFIX));
- /** Return true when this file is .checkpoint file */
+ /** Return true when this file is .checkpoint file. */
public static boolean checkpointFilenameFilter(File dir, String name) {
return CHECKPOINT_FILE_NAME_PATTERN.matcher(name).find();
}
- /** List all .checkpoint files in the directory */
+ /** List all .checkpoint files in the directory. */
public static File[] listAllCheckpointFiles(File dir) {
return dir.listFiles(CheckpointFileUtils::checkpointFilenameFilter);
}
- /** Parse version id from filename */
+ /** Parse version id from filename. */
public static int parseVersionId(String filename) {
Matcher matcher = CHECKPOINT_FILE_NAME_PATTERN.matcher(filename);
if (matcher.find()) {
@@ -56,14 +55,14 @@ public class CheckpointFileUtils {
throw new RuntimeException("Invalid checkpoint file name: " + filename);
}
- /** Sort checkpoint files by version id with descending order * */
+ /** Sort checkpoint files by version id with descending order. */
public static void descSortByVersionId(File[] checkpointFiles) {
Arrays.sort(
checkpointFiles,
Comparator.comparingInt(file -> parseVersionId(((File)
file).getName())).reversed());
}
- /** Get .checkpoint filename */
+ /** Get .checkpoint filename. */
public static String getLogFileName(long version) {
return WAL_FILE_PREFIX + version + WAL_CHECKPOINT_FILE_SUFFIX;
}
diff --git
a/server/src/main/java/org/apache/iotdb/db/wal/utils/WALEntryHandler.java
b/server/src/main/java/org/apache/iotdb/db/wal/utils/WALEntryHandler.java
index 52324b512dd..dda0ad849d4 100644
--- a/server/src/main/java/org/apache/iotdb/db/wal/utils/WALEntryHandler.java
+++ b/server/src/main/java/org/apache/iotdb/db/wal/utils/WALEntryHandler.java
@@ -16,6 +16,7 @@
* specific language governing permissions and limitations
* under the License.
*/
+
package org.apache.iotdb.db.wal.utils;
import org.apache.iotdb.db.mpp.plan.planner.plan.node.write.InsertNode;
@@ -35,11 +36,13 @@ public class WALEntryHandler {
private static final Logger logger =
LoggerFactory.getLogger(WALEntryHandler.class);
private long memTableId = -1;
- /** cached value, null after this value is flushed to wal successfully */
+ // cached value, null after this value is flushed to wal successfully
private volatile WALEntryValue value;
- /** wal entry's position in the wal, valid after the value is flushed to wal
successfully */
+ // wal entry's position in the wal, valid after the value is flushed to wal
successfully
+ // it's safe to use volatile here to make this reference thread-safe.
+ @SuppressWarnings("squid:S3077")
private final WALEntryPosition walEntryPosition = new WALEntryPosition();
- /** wal node, null when wal is disabled */
+ // wal node, null when wal is disabled
private WALNode walNode = null;
public WALEntryHandler(WALEntryValue value) {
@@ -71,7 +74,11 @@ public class WALEntryHandler {
walNode.unpinMemTable(memTableId);
}
- /** Get this handler's value */
+ /**
+ * Get this handler's value.
+ *
+ * @throws WALPipeException when failing to get the value.
+ */
public InsertNode getValue() throws WALPipeException {
// return local cache
WALEntryValue res = value;
diff --git
a/server/src/main/java/org/apache/iotdb/db/wal/utils/WALEntryPosition.java
b/server/src/main/java/org/apache/iotdb/db/wal/utils/WALEntryPosition.java
index acb66a393df..9f928ccde50 100644
--- a/server/src/main/java/org/apache/iotdb/db/wal/utils/WALEntryPosition.java
+++ b/server/src/main/java/org/apache/iotdb/db/wal/utils/WALEntryPosition.java
@@ -16,6 +16,7 @@
* specific language governing permissions and limitations
* under the License.
*/
+
package org.apache.iotdb.db.wal.utils;
import org.apache.iotdb.db.mpp.plan.planner.plan.node.write.InsertNode;
@@ -29,8 +30,8 @@ import java.nio.file.StandardOpenOption;
import java.util.Objects;
/**
- * This class uses the tuple(file, position, size) to denote the position of
the wal entry, and give
- * some methods to read the content from the disk.
+ * This class uses the tuple(identifier, file, position) to denote the
position of the wal entry,
+ * and give some methods to read the content from the disk.
*/
public class WALEntryPosition {
private static final WALInsertNodeCache CACHE =
WALInsertNodeCache.getInstance();
@@ -38,9 +39,9 @@ public class WALEntryPosition {
private volatile long walFileVersionId = -1;
private volatile long position;
private volatile int size;
- /** wal node, null when wal is disabled */
+ // wal node, null when wal is disabled
private WALNode walNode = null;
- /** wal file is not null when openReadFileChannel method has been called */
+ // wal file is not null when openReadFileChannel method has been called
private File walFile = null;
public WALEntryPosition() {}
@@ -52,7 +53,11 @@ public class WALEntryPosition {
this.size = size;
}
- /** Read the wal entry and parse it to the InsertNode. Use LRU cache to
accelerate read. */
+ /**
+ * Read the wal entry and parse it to the InsertNode. Use LRU cache to
accelerate read.
+ *
+ * @throws IOException failing to read.
+ */
public InsertNode readInsertNodeViaCache() throws IOException {
if (!canRead()) {
throw new IOException("This entry isn't ready for read.");
@@ -60,7 +65,11 @@ public class WALEntryPosition {
return CACHE.get(this);
}
- /** Read the byte buffer directly. */
+ /**
+ * Read the byte buffer directly.
+ *
+ * @throws IOException failing to read.
+ */
ByteBuffer read() throws IOException {
if (!canRead()) {
throw new IOException("Target file hasn't been specified.");
@@ -75,8 +84,10 @@ public class WALEntryPosition {
}
/**
- * open the read file channel for this wal entry, this method will retry
automatically when the
- * file is sealed when opening the file channel
+ * Open the read file channel for this wal entry, this method will retry
automatically when the
+ * file is sealed when opening the file channel.
+ *
+ * @throws IOException failing to open the file channel.
*/
public FileChannel openReadFileChannel() throws IOException {
if (isInSealedFile()) {
diff --git
a/server/src/main/java/org/apache/iotdb/db/wal/utils/WALFileStatus.java
b/server/src/main/java/org/apache/iotdb/db/wal/utils/WALFileStatus.java
index f843e301c15..60bc873fec3 100644
--- a/server/src/main/java/org/apache/iotdb/db/wal/utils/WALFileStatus.java
+++ b/server/src/main/java/org/apache/iotdb/db/wal/utils/WALFileStatus.java
@@ -16,6 +16,7 @@
* specific language governing permissions and limitations
* under the License.
*/
+
package org.apache.iotdb.db.wal.utils;
/**
@@ -23,9 +24,9 @@ package org.apache.iotdb.db.wal.utils;
* this contains search index.
*/
public enum WALFileStatus {
- /** This file doesn't contain content needs searching */
+ // This file doesn't contain content needs searching
CONTAINS_NONE_SEARCH_INDEX(0),
- /** This file contains content needs searching */
+ // This file contains content needs searching
CONTAINS_SEARCH_INDEX(1),
;
diff --git
a/server/src/main/java/org/apache/iotdb/db/wal/utils/WALFileUtils.java
b/server/src/main/java/org/apache/iotdb/db/wal/utils/WALFileUtils.java
index 16efb6bc8ee..fc065647389 100644
--- a/server/src/main/java/org/apache/iotdb/db/wal/utils/WALFileUtils.java
+++ b/server/src/main/java/org/apache/iotdb/db/wal/utils/WALFileUtils.java
@@ -16,6 +16,7 @@
* specific language governing permissions and limitations
* under the License.
*/
+
package org.apache.iotdb.db.wal.utils;
import java.io.File;
@@ -61,17 +62,17 @@ public class WALFileUtils {
+ "%d"
+ WAL_FILE_SUFFIX;
- /** Return true when this file is .wal file */
+ /** Return true when this file is .wal file. */
public static boolean walFilenameFilter(File dir, String name) {
return WAL_FILE_NAME_PATTERN.matcher(name).find();
}
- /** List all .wal files in the directory */
+ /** List all .wal files in the directory. */
public static File[] listAllWALFiles(File dir) {
return dir.listFiles(WALFileUtils::walFilenameFilter);
}
- /** Get the .wal file starts with the specified version id in the directory
*/
+ /** Get the .wal file starts with the specified version id in the directory.
*/
public static File getWALFile(File dir, long versionId) {
String filePrefix = WAL_FILE_PREFIX + versionId + FILE_NAME_SEPARATOR;
File[] files =
@@ -82,7 +83,7 @@ public class WALFileUtils {
return files[0];
}
- /** Parse version id from filename */
+ /** Parse version id from filename. */
public static long parseVersionId(String filename) {
Matcher matcher = WAL_FILE_NAME_PATTERN.matcher(filename);
if (matcher.find()) {
@@ -91,7 +92,7 @@ public class WALFileUtils {
throw new RuntimeException("Invalid wal file name: " + filename);
}
- /** Parse start search index from filename */
+ /** Parse start search index from filename. */
public static long parseStartSearchIndex(String filename) {
Matcher matcher = WAL_FILE_NAME_PATTERN.matcher(filename);
if (matcher.find()) {
@@ -100,7 +101,7 @@ public class WALFileUtils {
throw new RuntimeException("Invalid wal file name: " + filename);
}
- /** Parse status code from filename */
+ /** Parse status code from filename. */
public static WALFileStatus parseStatusCode(String filename) {
Matcher matcher = WAL_FILE_NAME_PATTERN.matcher(filename);
if (matcher.find()) {
@@ -109,7 +110,7 @@ public class WALFileUtils {
throw new RuntimeException("Invalid wal file name: " + filename);
}
- /** Sort wal files by version id with ascending order */
+ /** Sort wal files by version id with ascending order. */
public static void ascSortByVersionId(File[] walFiles) {
Arrays.sort(walFiles, Comparator.comparingLong(file ->
parseVersionId(file.getName())));
}
@@ -159,7 +160,7 @@ public class WALFileUtils {
return low - 1;
}
- /** Get .wal filename */
+ /** Get .wal filename. */
public static String getLogFileName(long versionId, long startSearchIndex,
WALFileStatus status) {
return String.format(WAL_FILE_NAME_FORMAT, versionId, startSearchIndex,
status.getCode());
}
diff --git
a/server/src/main/java/org/apache/iotdb/db/wal/utils/WALInsertNodeCache.java
b/server/src/main/java/org/apache/iotdb/db/wal/utils/WALInsertNodeCache.java
index 2a3810268bb..bbf84b43d99 100644
--- a/server/src/main/java/org/apache/iotdb/db/wal/utils/WALInsertNodeCache.java
+++ b/server/src/main/java/org/apache/iotdb/db/wal/utils/WALInsertNodeCache.java
@@ -16,6 +16,7 @@
* specific language governing permissions and limitations
* under the License.
*/
+
package org.apache.iotdb.db.wal.utils;
import org.apache.iotdb.db.conf.IoTDBConfig;
@@ -44,14 +45,14 @@ import java.util.Map;
import java.util.Set;
import java.util.concurrent.ConcurrentHashMap;
-/** This cache is used by {@link WALEntryPosition} */
+/** This cache is used by {@link WALEntryPosition}. */
public class WALInsertNodeCache {
private static final Logger logger =
LoggerFactory.getLogger(WALInsertNodeCache.class);
private static final IoTDBConfig config =
IoTDBDescriptor.getInstance().getConfig();
- /** LRU cache, find InsertNode by WALEntryPosition */
- private final LoadingCache<WALEntryPosition, InsertNode> lruCache;
- /** ids of all pinned memTables */
+ // LRU cache, find InsertNode by WALEntryPosition
+ private final LoadingCache<WALEntryPosition, InsertNode> lruCache;
+ // ids of all pinned memTables
private final Set<Long> memTablesNeedSearch = ConcurrentHashMap.newKeySet();
private WALInsertNodeCache() {
diff --git a/server/src/main/java/org/apache/iotdb/db/wal/utils/WALMode.java
b/server/src/main/java/org/apache/iotdb/db/wal/utils/WALMode.java
index 53faec55a9d..c174eeeae93 100644
--- a/server/src/main/java/org/apache/iotdb/db/wal/utils/WALMode.java
+++ b/server/src/main/java/org/apache/iotdb/db/wal/utils/WALMode.java
@@ -16,20 +16,17 @@
* specific language governing permissions and limitations
* under the License.
*/
+
package org.apache.iotdb.db.wal.utils;
-/** Write mode of wal */
+/** Write mode of wal. */
public enum WALMode {
- /** disable wal */
+ // disable wal
DISABLE,
- /**
- * submit wal synchronously, write request will not return until its wal is
flushed to the disk
- * successfully
- */
+ // submit wal synchronously
+ // write request will not return until its wal is flushed to the disk
successfully
SYNC,
- /**
- * submit wal asynchronously, write request will return immediately no
matter its wal is flushed
- * to the disk successfully
- */
+ // submit wal asynchronously
+ // write request will return immediately no matter its wal is flushed
ASYNC,
}
diff --git
a/server/src/main/java/org/apache/iotdb/db/wal/utils/WALWriteUtils.java
b/server/src/main/java/org/apache/iotdb/db/wal/utils/WALWriteUtils.java
index 5eb016ced79..59598de1d2c 100644
--- a/server/src/main/java/org/apache/iotdb/db/wal/utils/WALWriteUtils.java
+++ b/server/src/main/java/org/apache/iotdb/db/wal/utils/WALWriteUtils.java
@@ -16,6 +16,7 @@
* specific language governing permissions and limitations
* under the License.
*/
+
package org.apache.iotdb.db.wal.utils;
import org.apache.iotdb.db.wal.buffer.IWALByteBufferView;
@@ -28,7 +29,7 @@ import org.apache.iotdb.tsfile.write.schema.MeasurementSchema;
import java.util.Map;
-/** Like {@link org.apache.iotdb.tsfile.utils.ReadWriteIOUtils} */
+/** Like {@link org.apache.iotdb.tsfile.utils.ReadWriteIOUtils}. */
public class WALWriteUtils {
public static final int BOOLEAN_LEN = ReadWriteIOUtils.BOOLEAN_LEN;
public static final int SHORT_LEN = ReadWriteIOUtils.SHORT_LEN;
@@ -41,7 +42,7 @@ public class WALWriteUtils {
private WALWriteUtils() {}
- /** write a byte to byteBuffer according to flag. If flag is true, write 1,
else write 0. */
+ /** Write a byte to byteBuffer according to flag. If flag is true, write 1,
else write 0. */
public static int write(Boolean flag, IWALByteBufferView buffer) {
byte a;
if (Boolean.TRUE.equals(flag)) {
@@ -55,7 +56,7 @@ public class WALWriteUtils {
}
/**
- * write a byte n to byteBuffer.
+ * Write a byte n to byteBuffer.
*
* @return The number of bytes used to represent a {@code byte} value in
two's complement binary
* form.
@@ -66,7 +67,7 @@ public class WALWriteUtils {
}
/**
- * write a short n to byteBuffer.
+ * Write a short n to byteBuffer.
*
* @return The number of bytes used to represent n.
*/
@@ -76,7 +77,7 @@ public class WALWriteUtils {
}
/**
- * write a short n to byteBuffer.
+ * Write a short n to byteBuffer.
*
* @return The number of bytes used to represent n.
*/
@@ -87,7 +88,7 @@ public class WALWriteUtils {
}
/**
- * write a int n to byteBuffer.
+ * Write a int n to byteBuffer.
*
* @return The number of bytes used to represent n.
*/
@@ -96,26 +97,26 @@ public class WALWriteUtils {
return INT_LEN;
}
- /** write a long n to byteBuffer. */
+ /** Write a long n to byteBuffer. */
public static int write(long n, IWALByteBufferView buffer) {
buffer.putLong(n);
return LONG_LEN;
}
- /** write a float n to byteBuffer. */
+ /** Write a float n to byteBuffer. */
public static int write(float n, IWALByteBufferView buffer) {
buffer.putFloat(n);
return FLOAT_LEN;
}
- /** write a double n to byteBuffer. */
+ /** Write a double n to byteBuffer. */
public static int write(double n, IWALByteBufferView buffer) {
buffer.putDouble(n);
return DOUBLE_LEN;
}
/**
- * write string to byteBuffer.
+ * Write string to byteBuffer.
*
* @return the length of string represented by byte[].
*/
diff --git
a/server/src/main/java/org/apache/iotdb/db/wal/utils/listener/AbstractResultListener.java
b/server/src/main/java/org/apache/iotdb/db/wal/utils/listener/AbstractResultListener.java
index 8b19dc4470c..3ae87b79f4e 100644
---
a/server/src/main/java/org/apache/iotdb/db/wal/utils/listener/AbstractResultListener.java
+++
b/server/src/main/java/org/apache/iotdb/db/wal/utils/listener/AbstractResultListener.java
@@ -16,6 +16,7 @@
* specific language governing permissions and limitations
* under the License.
*/
+
package org.apache.iotdb.db.wal.utils.listener;
import org.slf4j.Logger;
@@ -25,10 +26,12 @@ import org.slf4j.LoggerFactory;
public abstract class AbstractResultListener {
private static final Logger logger =
LoggerFactory.getLogger(AbstractResultListener.class);
- /** true means waiting until getting the result */
+ // true means waiting until getting the result
protected final boolean wait;
protected volatile Status status;
+ // it's safe to use volatile here to make this reference thread-safe.
+ @SuppressWarnings("squid:S3077")
protected volatile Exception cause;
protected AbstractResultListener(boolean wait) {
diff --git
a/server/src/main/java/org/apache/iotdb/db/wal/utils/listener/WALFlushListener.java
b/server/src/main/java/org/apache/iotdb/db/wal/utils/listener/WALFlushListener.java
index 2fecd1f585c..7fd8219b092 100644
---
a/server/src/main/java/org/apache/iotdb/db/wal/utils/listener/WALFlushListener.java
+++
b/server/src/main/java/org/apache/iotdb/db/wal/utils/listener/WALFlushListener.java
@@ -16,6 +16,7 @@
* specific language governing permissions and limitations
* under the License.
*/
+
package org.apache.iotdb.db.wal.utils.listener;
import org.apache.iotdb.db.wal.buffer.WALEntryValue;
diff --git
a/server/src/main/java/org/apache/iotdb/db/wal/utils/listener/WALRecoverListener.java
b/server/src/main/java/org/apache/iotdb/db/wal/utils/listener/WALRecoverListener.java
index 777e18f9604..4bb62fa0769 100644
---
a/server/src/main/java/org/apache/iotdb/db/wal/utils/listener/WALRecoverListener.java
+++
b/server/src/main/java/org/apache/iotdb/db/wal/utils/listener/WALRecoverListener.java
@@ -16,12 +16,13 @@
* specific language governing permissions and limitations
* under the License.
*/
+
package org.apache.iotdb.db.wal.utils.listener;
/** This class helps judge whether some TsFile is recovered. */
public class WALRecoverListener extends AbstractResultListener {
- /** path of recovering TsFile */
+ // path of recovering TsFile
private final String filePath;
public WALRecoverListener(String filePath) {