private TSStatus executePlan()

in iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/manager/pipe/receiver/protocol/IoTDBConfigNodeReceiver.java [569:911]


  private TSStatus executePlan(final ConfigPhysicalPlan plan) throws ConsensusException {
    final String queryId = generatePseudoQueryId();
    switch (plan.getType()) {
      case CreateDatabase:
        // Here we only reserve database name and substitute the sender's local information
        // with the receiver's default configurations
        final TDatabaseSchema schema = ((DatabaseSchemaPlan) plan).getSchema();
        schema.setSchemaReplicationFactor(
            ConfigNodeDescriptor.getInstance().getConf().getSchemaReplicationFactor());
        schema.setDataReplicationFactor(
            ConfigNodeDescriptor.getInstance().getConf().getDataReplicationFactor());
        schema.setTimePartitionInterval(
            CommonDescriptor.getInstance().getConfig().getTimePartitionInterval());
        schema.setMinSchemaRegionGroupNum(
            ConfigNodeDescriptor.getInstance()
                .getConf()
                .getDefaultSchemaRegionGroupNumPerDatabase());
        schema.setMinDataRegionGroupNum(
            ConfigNodeDescriptor.getInstance().getConf().getDefaultDataRegionGroupNumPerDatabase());
        schema.setMaxSchemaRegionGroupNum(schema.getMinSchemaRegionGroupNum());
        schema.setMaxDataRegionGroupNum(schema.getMinDataRegionGroupNum());
        return configManager.getClusterSchemaManager().setDatabase((DatabaseSchemaPlan) plan, true);
      case AlterDatabase:
        return configManager
            .getClusterSchemaManager()
            .alterDatabase((DatabaseSchemaPlan) plan, true);
      case DeleteDatabase:
        return configManager.deleteDatabases(
            new TDeleteDatabasesReq(
                    Collections.singletonList(((DeleteDatabasePlan) plan).getName()))
                .setIsGeneratedByPipe(true)
                .setIsTableModel(
                    PathUtils.isTableModelDatabase(((DeleteDatabasePlan) plan).getName())));
      case ExtendSchemaTemplate:
        return configManager
            .getClusterSchemaManager()
            .extendSchemaTemplate(((ExtendSchemaTemplatePlan) plan).getTemplateExtendInfo(), true);
      case CommitSetSchemaTemplate:
        return configManager.setSchemaTemplate(
            new TSetSchemaTemplateReq(
                    queryId,
                    ((CommitSetSchemaTemplatePlan) plan).getName(),
                    ((CommitSetSchemaTemplatePlan) plan).getPath())
                .setIsGeneratedByPipe(true));
      case PipeUnsetTemplate:
        return configManager.unsetSchemaTemplate(
            new TUnsetSchemaTemplateReq(
                    queryId,
                    ((PipeUnsetSchemaTemplatePlan) plan).getName(),
                    ((PipeUnsetSchemaTemplatePlan) plan).getPath())
                .setIsGeneratedByPipe(true));
      case PipeDeleteTimeSeries:
        return configManager.deleteTimeSeries(
            new TDeleteTimeSeriesReq(
                    queryId, ((PipeDeleteTimeSeriesPlan) plan).getPatternTreeBytes())
                .setIsGeneratedByPipe(true));
      case PipeDeleteLogicalView:
        return configManager.deleteLogicalView(
            new TDeleteLogicalViewReq(
                    queryId, ((PipeDeleteLogicalViewPlan) plan).getPatternTreeBytes())
                .setIsGeneratedByPipe(true));
      case PipeDeactivateTemplate:
        return configManager
            .getProcedureManager()
            .deactivateTemplate(
                queryId, ((PipeDeactivateTemplatePlan) plan).getTemplateSetInfo(), true);
      case UpdateTriggerStateInTable:
        // TODO: Record complete message in trigger
        return new TSStatus(TSStatusCode.SUCCESS_STATUS.getStatusCode());
      case DeleteTriggerInTable:
        return configManager.dropTrigger(
            new TDropTriggerReq(((DeleteTriggerInTablePlan) plan).getTriggerName())
                .setIsGeneratedByPipe(true));
      case SetTTL:
        return ((SetTTLPlan) plan).getTTL() == TTLCache.NULL_TTL
            ? configManager.getTTLManager().unsetTTL((SetTTLPlan) plan, true)
            : configManager.getTTLManager().setTTL((SetTTLPlan) plan, true);
      case PipeCreateTableOrView:
        return executeIdempotentCreateTableOrView((PipeCreateTableOrViewPlan) plan, queryId);
      case AddTableColumn:
        return configManager
            .getProcedureManager()
            .executeWithoutDuplicate(
                ((AddTableColumnPlan) plan).getDatabase(),
                null,
                ((AddTableColumnPlan) plan).getTableName(),
                queryId,
                ProcedureType.ADD_TABLE_COLUMN_PROCEDURE,
                new AddTableColumnProcedure(
                    ((AddTableColumnPlan) plan).getDatabase(),
                    ((AddTableColumnPlan) plan).getTableName(),
                    queryId,
                    ((AddTableColumnPlan) plan).getColumnSchemaList(),
                    true));
      case AddViewColumn:
        return configManager
            .getProcedureManager()
            .executeWithoutDuplicate(
                ((AddTableViewColumnPlan) plan).getDatabase(),
                null,
                ((AddTableViewColumnPlan) plan).getTableName(),
                queryId,
                ProcedureType.ADD_VIEW_COLUMN_PROCEDURE,
                new AddViewColumnProcedure(
                    ((AddTableViewColumnPlan) plan).getDatabase(),
                    ((AddTableViewColumnPlan) plan).getTableName(),
                    queryId,
                    ((AddTableViewColumnPlan) plan).getColumnSchemaList(),
                    true));
      case SetTableProperties:
        return configManager
            .getProcedureManager()
            .executeWithoutDuplicate(
                ((SetTablePropertiesPlan) plan).getDatabase(),
                null,
                ((SetTablePropertiesPlan) plan).getTableName(),
                queryId,
                ProcedureType.SET_TABLE_PROPERTIES_PROCEDURE,
                new SetTablePropertiesProcedure(
                    ((SetTablePropertiesPlan) plan).getDatabase(),
                    ((SetTablePropertiesPlan) plan).getTableName(),
                    queryId,
                    ((SetTablePropertiesPlan) plan).getProperties(),
                    true));
      case SetViewProperties:
        return configManager
            .getProcedureManager()
            .executeWithoutDuplicate(
                ((SetViewPropertiesPlan) plan).getDatabase(),
                null,
                ((SetViewPropertiesPlan) plan).getTableName(),
                queryId,
                ProcedureType.SET_VIEW_PROPERTIES_PROCEDURE,
                new SetViewPropertiesProcedure(
                    ((SetViewPropertiesPlan) plan).getDatabase(),
                    ((SetViewPropertiesPlan) plan).getTableName(),
                    queryId,
                    ((SetViewPropertiesPlan) plan).getProperties(),
                    true));
      case CommitDeleteColumn:
        return configManager
            .getProcedureManager()
            .executeWithoutDuplicate(
                ((CommitDeleteColumnPlan) plan).getDatabase(),
                null,
                ((CommitDeleteColumnPlan) plan).getTableName(),
                queryId,
                ProcedureType.DROP_TABLE_COLUMN_PROCEDURE,
                new DropTableColumnProcedure(
                    ((CommitDeleteColumnPlan) plan).getDatabase(),
                    ((CommitDeleteColumnPlan) plan).getTableName(),
                    queryId,
                    ((CommitDeleteColumnPlan) plan).getColumnName(),
                    true));
      case CommitDeleteViewColumn:
        return configManager
            .getProcedureManager()
            .executeWithoutDuplicate(
                ((CommitDeleteViewColumnPlan) plan).getDatabase(),
                null,
                ((CommitDeleteViewColumnPlan) plan).getTableName(),
                queryId,
                ProcedureType.DROP_VIEW_COLUMN_PROCEDURE,
                new DropViewColumnProcedure(
                    ((CommitDeleteViewColumnPlan) plan).getDatabase(),
                    ((CommitDeleteViewColumnPlan) plan).getTableName(),
                    queryId,
                    ((CommitDeleteViewColumnPlan) plan).getColumnName(),
                    true));
      case RenameTableColumn:
        return configManager
            .getProcedureManager()
            .executeWithoutDuplicate(
                ((RenameTableColumnPlan) plan).getDatabase(),
                null,
                ((RenameTableColumnPlan) plan).getTableName(),
                queryId,
                ProcedureType.RENAME_TABLE_COLUMN_PROCEDURE,
                new RenameTableColumnProcedure(
                    ((RenameTableColumnPlan) plan).getDatabase(),
                    ((RenameTableColumnPlan) plan).getTableName(),
                    queryId,
                    ((RenameTableColumnPlan) plan).getOldName(),
                    ((RenameTableColumnPlan) plan).getNewName(),
                    true));
      case RenameViewColumn:
        return configManager
            .getProcedureManager()
            .executeWithoutDuplicate(
                ((RenameViewColumnPlan) plan).getDatabase(),
                null,
                ((RenameViewColumnPlan) plan).getTableName(),
                queryId,
                ProcedureType.RENAME_VIEW_COLUMN_PROCEDURE,
                new RenameViewColumnProcedure(
                    ((RenameViewColumnPlan) plan).getDatabase(),
                    ((RenameViewColumnPlan) plan).getTableName(),
                    queryId,
                    ((RenameViewColumnPlan) plan).getOldName(),
                    ((RenameViewColumnPlan) plan).getNewName(),
                    true));
      case CommitDeleteTable:
        return configManager
            .getProcedureManager()
            .executeWithoutDuplicate(
                ((CommitDeleteTablePlan) plan).getDatabase(),
                null,
                ((CommitDeleteTablePlan) plan).getTableName(),
                queryId,
                ProcedureType.DROP_TABLE_PROCEDURE,
                new DropTableProcedure(
                    ((CommitDeleteTablePlan) plan).getDatabase(),
                    ((CommitDeleteTablePlan) plan).getTableName(),
                    queryId,
                    true));
      case CommitDeleteView:
        return configManager
            .getProcedureManager()
            .executeWithoutDuplicate(
                ((CommitDeleteViewPlan) plan).getDatabase(),
                null,
                ((CommitDeleteViewPlan) plan).getTableName(),
                queryId,
                ProcedureType.DROP_VIEW_PROCEDURE,
                new DropViewProcedure(
                    ((CommitDeleteViewPlan) plan).getDatabase(),
                    ((CommitDeleteViewPlan) plan).getTableName(),
                    queryId,
                    true));
      case SetTableComment:
        return configManager
            .getClusterSchemaManager()
            .setTableComment(
                ((SetTableCommentPlan) plan).getDatabase(),
                ((SetTableCommentPlan) plan).getTableName(),
                ((SetTableCommentPlan) plan).getComment(),
                false,
                true);
      case SetViewComment:
        return configManager
            .getClusterSchemaManager()
            .setTableComment(
                ((SetViewCommentPlan) plan).getDatabase(),
                ((SetViewCommentPlan) plan).getTableName(),
                ((SetViewCommentPlan) plan).getComment(),
                true,
                true);
      case SetTableColumnComment:
        return configManager
            .getClusterSchemaManager()
            .setTableColumnComment(
                ((SetTableColumnCommentPlan) plan).getDatabase(),
                ((SetTableColumnCommentPlan) plan).getTableName(),
                ((SetTableColumnCommentPlan) plan).getColumnName(),
                ((SetTableColumnCommentPlan) plan).getComment(),
                true);
      case PipeDeleteDevices:
        return configManager
            .getProcedureManager()
            .deleteDevices(
                new TDeleteTableDeviceReq(
                    ((PipeDeleteDevicesPlan) plan).getDatabase(),
                    ((PipeDeleteDevicesPlan) plan).getTableName(),
                    queryId,
                    ByteBuffer.wrap(((PipeDeleteDevicesPlan) plan).getPatternBytes()),
                    ByteBuffer.wrap(((PipeDeleteDevicesPlan) plan).getFilterBytes()),
                    ByteBuffer.wrap(((PipeDeleteDevicesPlan) plan).getModBytes())),
                true)
            .getStatus();
      case RenameTable:
        configManager
            .getProcedureManager()
            .executeWithoutDuplicate(
                ((RenameTablePlan) plan).getDatabase(),
                null,
                ((RenameTablePlan) plan).getTableName(),
                queryId,
                ProcedureType.RENAME_TABLE_PROCEDURE,
                new RenameTableProcedure(
                    ((RenameTablePlan) plan).getDatabase(),
                    ((RenameTablePlan) plan).getTableName(),
                    queryId,
                    ((RenameTablePlan) plan).getNewName(),
                    true));
      case RenameView:
        configManager
            .getProcedureManager()
            .executeWithoutDuplicate(
                ((RenameViewPlan) plan).getDatabase(),
                null,
                ((RenameViewPlan) plan).getTableName(),
                queryId,
                ProcedureType.RENAME_VIEW_PROCEDURE,
                new RenameViewProcedure(
                    ((RenameViewPlan) plan).getDatabase(),
                    ((RenameViewPlan) plan).getTableName(),
                    queryId,
                    ((RenameViewPlan) plan).getNewName(),
                    true));
      case CreateUser:
      case CreateUserWithRawPassword:
      case CreateRole:
      case DropUser:
      case DropRole:
      case GrantRole:
      case GrantUser:
      case GrantRoleToUser:
      case RevokeUser:
      case RevokeRole:
      case RevokeRoleFromUser:
      case UpdateUser:
      case RCreateUser:
      case RCreateRole:
      case RDropUser:
      case RDropRole:
      case RGrantRoleAll:
      case RGrantUserAll:
      case RRevokeRoleAll:
      case RRevokeUserAll:
      case RGrantRoleAny:
      case RGrantUserAny:
      case RRevokeUserAny:
      case RRevokeRoleAny:
      case RGrantRoleDBPriv:
      case RGrantUserDBPriv:
      case RRevokeRoleDBPriv:
      case RRevokeUserDBPriv:
      case RGrantRoleTBPriv:
      case RGrantUserTBPriv:
      case RRevokeRoleTBPriv:
      case RRevokeUserTBPriv:
      case RGrantRoleSysPri:
      case RGrantUserSysPri:
      case RRevokeRoleSysPri:
      case RRevokeUserSysPri:
      case RGrantUserRole:
      case RRevokeUserRole:
        return configManager.getPermissionManager().operatePermission((AuthorPlan) plan, true);
      case CreateSchemaTemplate:
      default:
        return configManager.getConsensusManager().write(new PipeEnrichedPlan(plan));
    }
  }