This is an automated email from the ASF dual-hosted git repository.

jackietien 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 d866bc5dbaf fix snapshot parser null point.
d866bc5dbaf is described below

commit d866bc5dbaf02a3160b4c78bcd731196af24f750
Author: Colin Li <[email protected]>
AuthorDate: Fri Apr 26 02:09:47 2024 +0800

    fix snapshot parser null point.
---
 .../consensus/request/ConfigPhysicalPlanVisitor.java        |  6 ++++++
 .../iotdb/confignode/consensus/request/auth/AuthorPlan.java |  3 +++
 .../apache/iotdb/confignode/manager/PermissionManager.java  |  3 ++-
 .../manager/pipe/event/PipeConfigRegionSnapshotEvent.java   |  2 +-
 .../manager/pipe/extractor/ConfigRegionListeningFilter.java |  5 ++++-
 .../pipe/receiver/protocol/IoTDBConfigNodeReceiver.java     |  1 +
 .../visitor/PipeConfigPhysicalPlanTSStatusVisitor.java      |  9 +++++++++
 .../confignode/persistence/executor/ConfigPlanExecutor.java |  1 +
 .../persistence/schema/CNPhysicalPlanGenerator.java         |  9 ++++-----
 .../confignode/persistence/CNPhysicalPlanGeneratorTest.java |  3 +++
 .../apache/iotdb/db/tools/schema/SRStatementGenerator.java  | 13 +++++++++----
 11 files changed, 43 insertions(+), 12 deletions(-)

diff --git 
a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/consensus/request/ConfigPhysicalPlanVisitor.java
 
b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/consensus/request/ConfigPhysicalPlanVisitor.java
index 5dab68adc95..bfdf71c7e54 100644
--- 
a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/consensus/request/ConfigPhysicalPlanVisitor.java
+++ 
b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/consensus/request/ConfigPhysicalPlanVisitor.java
@@ -67,6 +67,8 @@ public abstract class ConfigPhysicalPlanVisitor<R, C> {
         return visitRevokeRole((AuthorPlan) plan, context);
       case CreateUser:
         return visitCreateUser((AuthorPlan) plan, context);
+      case CreateUserWithRawPassword:
+        return visitCreateRawUser((AuthorPlan) plan, context);
       case UpdateUser:
         return visitUpdateUser((AuthorPlan) plan, context);
       case DropUser:
@@ -141,6 +143,10 @@ public abstract class ConfigPhysicalPlanVisitor<R, C> {
     return visitPlan(createUserPlan, context);
   }
 
+  public R visitCreateRawUser(AuthorPlan createRawUserPlan, C context) {
+    return visitPlan(createRawUserPlan, context);
+  }
+
   public R visitUpdateUser(AuthorPlan updateUserPlan, C context) {
     return visitPlan(updateUserPlan, context);
   }
diff --git 
a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/consensus/request/auth/AuthorPlan.java
 
b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/consensus/request/auth/AuthorPlan.java
index 9edba898e17..0204d013e06 100644
--- 
a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/consensus/request/auth/AuthorPlan.java
+++ 
b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/consensus/request/auth/AuthorPlan.java
@@ -263,6 +263,9 @@ public class AuthorPlan extends ConfigPhysicalPlan {
       case ListRoleUsers:
         type = ConfigPhysicalPlanType.ListRoleUsers.getPlanType();
         break;
+      case CreateUserWithRawPassword:
+        type = ConfigPhysicalPlanType.CreateUserWithRawPassword.getPlanType();
+        break;
       default:
         throw new IllegalArgumentException("Unknown operator: " + 
configPhysicalPlanType);
     }
diff --git 
a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/manager/PermissionManager.java
 
b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/manager/PermissionManager.java
index 7e74c7dce03..a6f0e23fcff 100644
--- 
a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/manager/PermissionManager.java
+++ 
b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/manager/PermissionManager.java
@@ -64,7 +64,8 @@ public class PermissionManager {
     LOGGER.info("Auth: run auth plan: {}", authorPlan.toString());
     try {
       if (authorPlan.getAuthorType() == ConfigPhysicalPlanType.CreateUser
-          || authorPlan.getAuthorType() == ConfigPhysicalPlanType.CreateRole) {
+          || authorPlan.getAuthorType() == ConfigPhysicalPlanType.CreateRole
+          || authorPlan.getAuthorType() == 
ConfigPhysicalPlanType.CreateUserWithRawPassword) {
         tsStatus = getConsensusManager().write(authorPlan);
       } else {
         List<TDataNodeConfiguration> allDataNodes =
diff --git 
a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/manager/pipe/event/PipeConfigRegionSnapshotEvent.java
 
b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/manager/pipe/event/PipeConfigRegionSnapshotEvent.java
index f4c5ad1bd97..407dec4887e 100644
--- 
a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/manager/pipe/event/PipeConfigRegionSnapshotEvent.java
+++ 
b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/manager/pipe/event/PipeConfigRegionSnapshotEvent.java
@@ -66,7 +66,7 @@ public class PipeConfigRegionSnapshotEvent extends 
PipeSnapshotEvent {
         Collections.unmodifiableSet(
             new HashSet<>(
                 Arrays.asList(
-                    ConfigPhysicalPlanType.CreateUser.getPlanType(),
+                    
ConfigPhysicalPlanType.CreateUserWithRawPassword.getPlanType(),
                     ConfigPhysicalPlanType.GrantUser.getPlanType()))));
     SNAPSHOT_FILE_TYPE_2_CONFIG_PHYSICAL_PLAN_TYPE_MAP.put(
         CNSnapshotFileType.USER_ROLE,
diff --git 
a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/manager/pipe/extractor/ConfigRegionListeningFilter.java
 
b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/manager/pipe/extractor/ConfigRegionListeningFilter.java
index 33b62aaa754..2f1ee641ba6 100644
--- 
a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/manager/pipe/extractor/ConfigRegionListeningFilter.java
+++ 
b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/manager/pipe/extractor/ConfigRegionListeningFilter.java
@@ -113,7 +113,10 @@ public class ConfigRegionListeningFilter {
 
       OPTION_PLAN_MAP.put(
           new PartialPath("auth.user.create"),
-          Collections.singletonList(ConfigPhysicalPlanType.CreateUser));
+          Collections.unmodifiableList(
+              Arrays.asList(
+                  ConfigPhysicalPlanType.CreateUser,
+                  ConfigPhysicalPlanType.CreateUserWithRawPassword)));
       OPTION_PLAN_MAP.put(
           new PartialPath("auth.user.alter"),
           Collections.singletonList(ConfigPhysicalPlanType.UpdateUser));
diff --git 
a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/manager/pipe/receiver/protocol/IoTDBConfigNodeReceiver.java
 
b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/manager/pipe/receiver/protocol/IoTDBConfigNodeReceiver.java
index 88fa0e2411d..502d4b50f73 100644
--- 
a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/manager/pipe/receiver/protocol/IoTDBConfigNodeReceiver.java
+++ 
b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/manager/pipe/receiver/protocol/IoTDBConfigNodeReceiver.java
@@ -279,6 +279,7 @@ public class IoTDBConfigNodeReceiver extends 
IoTDBFileReceiver {
       case CreateSchemaTemplate:
       case CreateUser:
       case CreateRole:
+      case CreateUserWithRawPassword:
       default:
         return configManager.getConsensusManager().write(new 
PipeEnrichedPlan(plan));
     }
diff --git 
a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/manager/pipe/receiver/visitor/PipeConfigPhysicalPlanTSStatusVisitor.java
 
b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/manager/pipe/receiver/visitor/PipeConfigPhysicalPlanTSStatusVisitor.java
index 5a30b25e4d7..89a9fd4d471 100644
--- 
a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/manager/pipe/receiver/visitor/PipeConfigPhysicalPlanTSStatusVisitor.java
+++ 
b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/manager/pipe/receiver/visitor/PipeConfigPhysicalPlanTSStatusVisitor.java
@@ -199,6 +199,15 @@ public class PipeConfigPhysicalPlanTSStatusVisitor
     return super.visitCreateUser(plan, context);
   }
 
+  @Override
+  public TSStatus visitCreateRawUser(AuthorPlan plan, TSStatus context) {
+    if (context.getCode() == TSStatusCode.USER_ALREADY_EXIST.getStatusCode()) {
+      return new 
TSStatus(TSStatusCode.PIPE_RECEIVER_IDEMPOTENT_CONFLICT_EXCEPTION.getStatusCode())
+          .setMessage(context.getMessage());
+    }
+    return super.visitCreateRawUser(plan, context);
+  }
+
   @Override
   public TSStatus visitUpdateUser(AuthorPlan plan, TSStatus context) {
     if (context.getCode() == TSStatusCode.USER_NOT_EXIST.getStatusCode()) {
diff --git 
a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/persistence/executor/ConfigPlanExecutor.java
 
b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/persistence/executor/ConfigPlanExecutor.java
index 5e1543ce665..8bce6987b93 100644
--- 
a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/persistence/executor/ConfigPlanExecutor.java
+++ 
b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/persistence/executor/ConfigPlanExecutor.java
@@ -382,6 +382,7 @@ public class ConfigPlanExecutor {
       case RevokeRole:
       case RevokeRoleFromUser:
       case UpdateUser:
+      case CreateUserWithRawPassword:
       case CreateUserDep:
       case CreateRoleDep:
       case DropUserDep:
diff --git 
a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/persistence/schema/CNPhysicalPlanGenerator.java
 
b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/persistence/schema/CNPhysicalPlanGenerator.java
index c50a176d3b4..70a803e69c1 100644
--- 
a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/persistence/schema/CNPhysicalPlanGenerator.java
+++ 
b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/persistence/schema/CNPhysicalPlanGenerator.java
@@ -80,8 +80,6 @@ public class CNPhysicalPlanGenerator
 
   private static final String STRING_ENCODING = "utf-8";
 
-  // For default password
-  private static final String DEFAULT_PASSWORD = "password";
   private final ThreadLocal<byte[]> strBufferLocal = new ThreadLocal<>();
 
   private final HashMap<Integer, String> templateTable = new HashMap<>();
@@ -187,10 +185,11 @@ public class CNPhysicalPlanGenerator
       }
       String user = versionAndName.left;
       if (isUser) {
-        readString(dataInputStream, STRING_ENCODING, strBufferLocal);
-        final AuthorPlan createUser = new 
AuthorPlan(ConfigPhysicalPlanType.CreateUser);
+        final String rawPassword = readString(dataInputStream, 
STRING_ENCODING, strBufferLocal);
+        final AuthorPlan createUser =
+            new AuthorPlan(ConfigPhysicalPlanType.CreateUserWithRawPassword);
         createUser.setUserName(user);
-        createUser.setPassword(DEFAULT_PASSWORD);
+        createUser.setPassword(rawPassword);
         createUser.setPermissions(new HashSet<>());
         createUser.setNodeNameList(new ArrayList<>());
         planDeque.add(createUser);
diff --git 
a/iotdb-core/confignode/src/test/java/org/apache/iotdb/confignode/persistence/CNPhysicalPlanGeneratorTest.java
 
b/iotdb-core/confignode/src/test/java/org/apache/iotdb/confignode/persistence/CNPhysicalPlanGeneratorTest.java
index 5d0b5cac402..0a4ab4b2a64 100644
--- 
a/iotdb-core/confignode/src/test/java/org/apache/iotdb/confignode/persistence/CNPhysicalPlanGeneratorTest.java
+++ 
b/iotdb-core/confignode/src/test/java/org/apache/iotdb/confignode/persistence/CNPhysicalPlanGeneratorTest.java
@@ -23,6 +23,7 @@ import org.apache.iotdb.commons.auth.AuthException;
 import org.apache.iotdb.commons.auth.entity.PrivilegeType;
 import org.apache.iotdb.commons.file.SystemFileFactory;
 import org.apache.iotdb.commons.path.PartialPath;
+import org.apache.iotdb.commons.utils.AuthUtils;
 import org.apache.iotdb.commons.utils.FileUtils;
 import org.apache.iotdb.confignode.consensus.request.ConfigPhysicalPlan;
 import org.apache.iotdb.confignode.consensus.request.ConfigPhysicalPlanType;
@@ -183,6 +184,8 @@ public class CNPhysicalPlanGeneratorTest {
     plan.setNodeNameList(new ArrayList<>());
     // Create user plan 1
     authorInfo.authorNonQuery(plan);
+    plan.setAuthorType(ConfigPhysicalPlanType.CreateUserWithRawPassword);
+    plan.setPassword(AuthUtils.encryptPassword("password"));
     answerSet.add(plan.hashCode());
 
     plan = new AuthorPlan(ConfigPhysicalPlanType.CreateRole);
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/tools/schema/SRStatementGenerator.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/tools/schema/SRStatementGenerator.java
index 5ea6e86dc9c..cd2517d64c7 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/tools/schema/SRStatementGenerator.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/tools/schema/SRStatementGenerator.java
@@ -274,9 +274,7 @@ public class SRStatementGenerator implements 
Iterator<Statement>, Iterable<State
     @Override
     public Statement visitMeasurementMNode(
         AbstractMeasurementMNode<?, ? extends IMNode<?>> node, PartialPath 
path) {
-      if (node.getParent().getAsDeviceMNode().isAligned()) {
-        return null;
-      } else if (node.isLogicalView()) {
+      if (node.isLogicalView()) {
         final CreateLogicalViewStatement stmt = new 
CreateLogicalViewStatement();
         final LogicalViewSchema viewSchema =
             (LogicalViewSchema) node.getAsMeasurementMNode().getSchema();
@@ -305,6 +303,8 @@ public class SRStatementGenerator implements 
Iterator<Statement>, Iterable<State
         //          node.setOffset(0);
         //        }
         return stmt;
+      } else if (node.getParent().getAsDeviceMNode().isAligned()) {
+        return null;
       } else {
         final CreateTimeSeriesStatement stmt = new CreateTimeSeriesStatement();
         stmt.setPath(path);
@@ -343,7 +343,12 @@ public class SRStatementGenerator implements 
Iterator<Statement>, Iterable<State
     if (node.getAsDeviceMNode().isAligned()) {
       final CreateAlignedTimeSeriesStatement stmt = new 
CreateAlignedTimeSeriesStatement();
       stmt.setDevicePath(path);
+      boolean hasMeasurement = false;
       for (IMemMNode measurement : measurements.values()) {
+        if (!measurement.isMeasurement() || 
measurement.getAsMeasurementMNode().isLogicalView()) {
+          continue;
+        }
+        hasMeasurement = true;
         stmt.addMeasurement(measurement.getName());
         stmt.addDataType(measurement.getAsMeasurementMNode().getDataType());
         if (measurement.getAlias() != null) {
@@ -372,7 +377,7 @@ public class SRStatementGenerator implements 
Iterator<Statement>, Iterable<State
           stmt.addTagsList(null);
         }
       }
-      return stmt;
+      return hasMeasurement ? stmt : null;
     }
     return null;
   }

Reply via email to