You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@iotdb.apache.org by zy...@apache.org on 2023/01/31 08:32:29 UTC
[iotdb] branch master updated: [IOTDB-5442] SchemaFile update StorageGroupNode asynchronously (#8939)
This is an automated email from the ASF dual-hosted git repository.
zyk 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 c807fca28b [IOTDB-5442] SchemaFile update StorageGroupNode asynchronously (#8939)
c807fca28b is described below
commit c807fca28b86dc6ad9f4b4006d6e89d4a2e0a6b8
Author: Chen YZ <43...@users.noreply.github.com>
AuthorDate: Tue Jan 31 16:32:24 2023 +0800
[IOTDB-5442] SchemaFile update StorageGroupNode asynchronously (#8939)
[IOTDB-5442] SchemaFile update StorageGroupNode asynchronously (#8939)
---
.../db/metadata/mtree/store/CachedMTreeStore.java | 37 ++++++++++-----------
.../mtree/store/disk/cache/CacheManager.java | 38 ++++++++++++++++++----
.../mtree/store/disk/cache/ICacheManager.java | 3 ++
3 files changed, 53 insertions(+), 25 deletions(-)
diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/CachedMTreeStore.java b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/CachedMTreeStore.java
index fa6d1dda71..42a10458f5 100644
--- a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/CachedMTreeStore.java
+++ b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/CachedMTreeStore.java
@@ -24,6 +24,7 @@ import org.apache.iotdb.db.exception.metadata.cache.MNodeNotCachedException;
import org.apache.iotdb.db.metadata.mnode.IEntityMNode;
import org.apache.iotdb.db.metadata.mnode.IMNode;
import org.apache.iotdb.db.metadata.mnode.IMeasurementMNode;
+import org.apache.iotdb.db.metadata.mnode.IStorageGroupMNode;
import org.apache.iotdb.db.metadata.mnode.MNodeUtils;
import org.apache.iotdb.db.metadata.mnode.estimator.IMNodeSizeEstimator;
import org.apache.iotdb.db.metadata.mnode.iterator.AbstractTraverserIterator;
@@ -267,25 +268,11 @@ public class CachedMTreeStore implements IMTreeStore {
*/
@Override
public void updateMNode(IMNode node) throws MetadataException {
- if (node.isStorageGroup()) {
- this.root = node;
- writeLock.lock();
- try {
- file.updateStorageGroupNode(node.getAsStorageGroupMNode());
- } catch (IOException e) {
- logger.error(
- "IOException occurred during updating StorageGroupMNode {}", node.getFullPath());
- throw new MetadataException(e);
- } finally {
- writeLock.unlock();
- }
- } else {
- readLock.lock();
- try {
- cacheManager.updateCacheStatusAfterUpdate(node);
- } finally {
- readLock.unlock();
- }
+ readLock.lock();
+ try {
+ cacheManager.updateCacheStatusAfterUpdate(node);
+ } finally {
+ readLock.unlock();
}
}
@@ -483,6 +470,18 @@ public class CachedMTreeStore implements IMTreeStore {
private void flushVolatileNodes() {
writeLock.lock();
try {
+ IStorageGroupMNode updatedStorageGroupMNode = cacheManager.collectUpdatedStorageGroupMNodes();
+ if (updatedStorageGroupMNode != null) {
+ try {
+ file.updateStorageGroupNode(updatedStorageGroupMNode);
+ } catch (IOException e) {
+ logger.error(
+ "IOException occurred during updating StorageGroupMNode {}",
+ updatedStorageGroupMNode.getFullPath(),
+ e);
+ return;
+ }
+ }
List<IMNode> nodesToPersist = cacheManager.collectVolatileMNodes();
for (IMNode volatileNode : nodesToPersist) {
try {
diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/disk/cache/CacheManager.java b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/disk/cache/CacheManager.java
index d9dc2301ed..985bd0ac01 100644
--- a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/disk/cache/CacheManager.java
+++ b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/disk/cache/CacheManager.java
@@ -21,6 +21,7 @@ package org.apache.iotdb.db.metadata.mtree.store.disk.cache;
import org.apache.iotdb.db.exception.metadata.cache.MNodeNotCachedException;
import org.apache.iotdb.db.exception.metadata.cache.MNodeNotPinnedException;
import org.apache.iotdb.db.metadata.mnode.IMNode;
+import org.apache.iotdb.db.metadata.mnode.IStorageGroupMNode;
import org.apache.iotdb.db.metadata.mtree.store.disk.ICachedMNodeContainer;
import org.apache.iotdb.db.metadata.mtree.store.disk.memcontrol.IMemManager;
import org.apache.iotdb.db.metadata.mtree.store.disk.memcontrol.MemManagerHolder;
@@ -176,11 +177,15 @@ public abstract class CacheManager implements ICacheManager {
// the status change affects the subTre collect in nodeBuffer
cacheEntry.setVolatile(true);
}
- getBelongedContainer(node).updateMNode(node.getName());
- // MNode update operation like node replace may reset the mapping between cacheEntry and node,
- // thus it should be updated
- updateCacheStatusAfterUpdate(cacheEntry, node);
- removeFromNodeCache(cacheEntry);
+ if (!node.isStorageGroup()) {
+ // if node is StorageGroup, getBelongedContainer is null
+ getBelongedContainer(node).updateMNode(node.getName());
+ // MNode update operation like node replace may reset the mapping between cacheEntry and
+ // node,
+ // thus it should be updated
+ updateCacheStatusAfterUpdate(cacheEntry, node);
+ removeFromNodeCache(cacheEntry);
+ }
addToBufferAfterUpdate(node);
}
}
@@ -193,7 +198,7 @@ public abstract class CacheManager implements ICacheManager {
*/
private void addToBufferAfterUpdate(IMNode node) {
if (node.isStorageGroup()) {
- nodeBuffer.put(getCacheEntry(node), node);
+ nodeBuffer.setUpdatedStorageGroupMNode(node.getAsStorageGroupMNode());
return;
}
@@ -252,6 +257,18 @@ public abstract class CacheManager implements ICacheManager {
addToNodeCache(cacheEntry, node);
}
+ /**
+ * Collect updated storage group node.
+ *
+ * @return null if not exist
+ */
+ @Override
+ public IStorageGroupMNode collectUpdatedStorageGroupMNodes() {
+ IStorageGroupMNode storageGroupMNode = nodeBuffer.getUpdatedStorageGroupMNode();
+ nodeBuffer.setUpdatedStorageGroupMNode(null);
+ return storageGroupMNode;
+ }
+
/**
* Collect nodes in all volatile subtrees. All volatile nodes' parents will be collected. The
* ancestor will be in front of the descendent in returned list.
@@ -502,6 +519,7 @@ public abstract class CacheManager implements ICacheManager {
private static final int MAP_NUM = 17;
+ private IStorageGroupMNode updatedStorageGroupMNode;
private Map<CacheEntry, IMNode>[] maps = new Map[MAP_NUM];
NodeBuffer() {
@@ -510,6 +528,14 @@ public abstract class CacheManager implements ICacheManager {
}
}
+ public IStorageGroupMNode getUpdatedStorageGroupMNode() {
+ return updatedStorageGroupMNode;
+ }
+
+ public void setUpdatedStorageGroupMNode(IStorageGroupMNode updatedStorageGroupMNode) {
+ this.updatedStorageGroupMNode = updatedStorageGroupMNode;
+ }
+
void put(CacheEntry cacheEntry, IMNode node) {
maps[getLoc(cacheEntry)].put(cacheEntry, node);
}
diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/disk/cache/ICacheManager.java b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/disk/cache/ICacheManager.java
index 532a90a44f..6394ea0223 100644
--- a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/disk/cache/ICacheManager.java
+++ b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/disk/cache/ICacheManager.java
@@ -21,6 +21,7 @@ package org.apache.iotdb.db.metadata.mtree.store.disk.cache;
import org.apache.iotdb.db.exception.metadata.cache.MNodeNotCachedException;
import org.apache.iotdb.db.exception.metadata.cache.MNodeNotPinnedException;
import org.apache.iotdb.db.metadata.mnode.IMNode;
+import org.apache.iotdb.db.metadata.mnode.IStorageGroupMNode;
import java.util.List;
@@ -38,6 +39,8 @@ public interface ICacheManager {
void updateCacheStatusAfterPersist(IMNode node);
+ IStorageGroupMNode collectUpdatedStorageGroupMNodes();
+
List<IMNode> collectVolatileMNodes();
void remove(IMNode node);