You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@iotdb.apache.org by ji...@apache.org on 2020/12/11 07:20:29 UTC
[iotdb] branch master updated: fix
This is an automated email from the ASF dual-hosted git repository.
jiangtian 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 c8bc153 fix
new d7e291c Merge pull request #2223 from LebronAl/cluster_fix_auto_create_schema_bug
c8bc153 is described below
commit c8bc1531cf8f6d4a84b32b7aad307a7876b675d4
Author: LebronAl <TX...@gmail.com>
AuthorDate: Wed Dec 9 11:13:04 2020 +0800
fix
---
.../apache/iotdb/cluster/metadata/CMManager.java | 21 +++++++++++++++++++--
.../iotdb/cluster/query/LocalQueryExecutor.java | 2 +-
.../cluster/server/member/MetaGroupMember.java | 4 ++--
3 files changed, 22 insertions(+), 5 deletions(-)
diff --git a/cluster/src/main/java/org/apache/iotdb/cluster/metadata/CMManager.java b/cluster/src/main/java/org/apache/iotdb/cluster/metadata/CMManager.java
index 73c75dc..ceef221 100644
--- a/cluster/src/main/java/org/apache/iotdb/cluster/metadata/CMManager.java
+++ b/cluster/src/main/java/org/apache/iotdb/cluster/metadata/CMManager.java
@@ -396,7 +396,7 @@ public class CMManager extends MManager {
* create storage groups for CreateTimeseriesPlan and InsertPlan, also create timeseries for
* InsertPlan. Only the two kind of plans can use this method.
*/
- public void createSchema(PhysicalPlan plan) throws MetadataException {
+ public void createSchema(PhysicalPlan plan) throws MetadataException, CheckConsistencyException {
// try to set storage group
List<PartialPath> deviceIds;
// only handle InsertPlan, CreateTimeSeriesPlan and CreateMultiTimeSeriesPlan currently
@@ -491,7 +491,8 @@ public class CMManager extends MManager {
* @param insertPlan, some of the timeseries in it are not created yet
* @return true of all uncreated timeseries are created
*/
- public boolean createTimeseries(InsertPlan insertPlan) throws IllegalPathException {
+ public boolean createTimeseries(InsertPlan insertPlan)
+ throws IllegalPathException, CheckConsistencyException {
List<String> seriesList = new ArrayList<>();
PartialPath deviceId = insertPlan.getDeviceId();
PartialPath storageGroupName;
@@ -566,6 +567,22 @@ public class CMManager extends MManager {
* To check which timeseries in the input list is unregistered from one node in "partitionGroup".
*/
private List<String> getUnregisteredSeriesList(List<String> seriesList,
+ PartitionGroup partitionGroup) throws CheckConsistencyException {
+ if (partitionGroup.contains(metaGroupMember.getThisNode())) {
+ return getUnregisteredSeriesListLocally(seriesList, partitionGroup);
+ } else {
+ return getUnregisteredSeriesListRemotely(seriesList, partitionGroup);
+ }
+ }
+
+ private List<String> getUnregisteredSeriesListLocally(List<String> seriesList,
+ PartitionGroup partitionGroup) throws CheckConsistencyException {
+ DataGroupMember dataMember = metaGroupMember.getDataClusterServer()
+ .getDataMember(partitionGroup.getHeader(), null, null);
+ return dataMember.getLocalQueryExecutor().getUnregisteredTimeseries(seriesList);
+ }
+
+ private List<String> getUnregisteredSeriesListRemotely(List<String> seriesList,
PartitionGroup partitionGroup) {
for (Node node : partitionGroup) {
try {
diff --git a/cluster/src/main/java/org/apache/iotdb/cluster/query/LocalQueryExecutor.java b/cluster/src/main/java/org/apache/iotdb/cluster/query/LocalQueryExecutor.java
index 3f3880e..d4fe221 100644
--- a/cluster/src/main/java/org/apache/iotdb/cluster/query/LocalQueryExecutor.java
+++ b/cluster/src/main/java/org/apache/iotdb/cluster/query/LocalQueryExecutor.java
@@ -447,7 +447,7 @@ public class LocalQueryExecutor {
*/
public List<String> getUnregisteredTimeseries(List<String> timeseriesList)
throws CheckConsistencyException {
- dataGroupMember.syncLeaderWithConsistencyCheck(false);
+ dataGroupMember.syncLeaderWithConsistencyCheck(true);
List<String> result = new ArrayList<>();
for (String seriesPath : timeseriesList) {
diff --git a/cluster/src/main/java/org/apache/iotdb/cluster/server/member/MetaGroupMember.java b/cluster/src/main/java/org/apache/iotdb/cluster/server/member/MetaGroupMember.java
index 7cccccd..863314f 100644
--- a/cluster/src/main/java/org/apache/iotdb/cluster/server/member/MetaGroupMember.java
+++ b/cluster/src/main/java/org/apache/iotdb/cluster/server/member/MetaGroupMember.java
@@ -1468,7 +1468,7 @@ public class MetaGroupMember extends RaftMember {
try {
((CMManager) IoTDB.metaManager).createSchema(plan);
return processPartitionedPlan(plan);
- } catch (MetadataException e) {
+ } catch (MetadataException | CheckConsistencyException e) {
logger.error(
String.format("Failed to set storage group or create timeseries, because %s", e));
}
@@ -1551,7 +1551,7 @@ public class MetaGroupMember extends RaftMember {
boolean hasCreate;
try {
hasCreate = ((CMManager) IoTDB.metaManager).createTimeseries(plan);
- } catch (IllegalPathException e) {
+ } catch (IllegalPathException | CheckConsistencyException e) {
return StatusUtils.getStatus(StatusUtils.EXECUTE_STATEMENT_ERROR, e.getMessage());
}
if (hasCreate) {