|
45 | 45 | import org.apache.iotdb.commons.pipe.sink.payload.thrift.request.PipeTransferFileSealReqV2; |
46 | 46 | import org.apache.iotdb.commons.pipe.sink.payload.thrift.request.PipeTransferSliceReq; |
47 | 47 | import org.apache.iotdb.commons.schema.column.ColumnHeaderConstant; |
| 48 | +import org.apache.iotdb.commons.utils.PathUtils; |
48 | 49 | import org.apache.iotdb.confignode.rpc.thrift.TDatabaseSchema; |
49 | 50 | import org.apache.iotdb.db.auth.AuthorityChecker; |
50 | 51 | import org.apache.iotdb.db.conf.IoTDBConfig; |
|
101 | 102 | import org.apache.iotdb.db.queryengine.plan.statement.crud.InsertRowsStatement; |
102 | 103 | import org.apache.iotdb.db.queryengine.plan.statement.crud.InsertTabletStatement; |
103 | 104 | import org.apache.iotdb.db.queryengine.plan.statement.crud.LoadTsFileStatement; |
| 105 | +import org.apache.iotdb.db.queryengine.plan.statement.metadata.DatabaseSchemaStatement; |
104 | 106 | import org.apache.iotdb.db.queryengine.plan.statement.pipe.PipeEnrichedStatement; |
105 | 107 | import org.apache.iotdb.db.schemaengine.table.DataNodeTableCache; |
106 | 108 | import org.apache.iotdb.db.storageengine.load.active.ActiveLoadPathHelper; |
@@ -625,8 +627,16 @@ static LoadTsFileStatement buildLoadTsFileStatementForSync( |
625 | 627 | private TSStatus loadSchemaSnapShot( |
626 | 628 | final Map<String, String> parameters, final List<String> fileAbsolutePaths) |
627 | 629 | throws IllegalPathException, IOException { |
628 | | - final PartialPath databasePath = |
629 | | - PartialPath.getQualifiedDatabasePartialPath(parameters.get(ColumnHeaderConstant.DATABASE)); |
| 630 | + final String databaseName = parameters.get(ColumnHeaderConstant.DATABASE); |
| 631 | + final PartialPath databasePath = PartialPath.getQualifiedDatabasePartialPath(databaseName); |
| 632 | + |
| 633 | + if (!PathUtils.isTableModelDatabase(databaseName)) { |
| 634 | + final TSStatus createDatabaseStatus = createSchemaSnapshotDatabaseIfNecessary(databasePath); |
| 635 | + if (createDatabaseStatus.getCode() != TSStatusCode.SUCCESS_STATUS.getStatusCode()) { |
| 636 | + return createDatabaseStatus; |
| 637 | + } |
| 638 | + } |
| 639 | + |
630 | 640 | final SRStatementGenerator generator = |
631 | 641 | SchemaRegionSnapshotParser.translate2Statements( |
632 | 642 | Paths.get(fileAbsolutePaths.get(0)), |
@@ -697,6 +707,33 @@ private TSStatus loadSchemaSnapShot( |
697 | 707 | return PipeReceiverStatusHandler.getPriorStatus(results); |
698 | 708 | } |
699 | 709 |
|
| 710 | + private TSStatus createSchemaSnapshotDatabaseIfNecessary(final PartialPath databasePath) { |
| 711 | + final DatabaseSchemaStatement statement = |
| 712 | + new DatabaseSchemaStatement(DatabaseSchemaStatement.DatabaseSchemaStatementType.CREATE); |
| 713 | + statement.setDatabasePath(databasePath); |
| 714 | + |
| 715 | + final TSStatus status = executeStatementAndClassifyExceptions(statement); |
| 716 | + if (status.getCode() == TSStatusCode.SUCCESS_STATUS.getStatusCode()) { |
| 717 | + return status; |
| 718 | + } |
| 719 | + |
| 720 | + if (status.getCode() == TSStatusCode.DATABASE_ALREADY_EXISTS.getStatusCode()) { |
| 721 | + return Objects.equals( |
| 722 | + status.getMessage(), |
| 723 | + databasePath.getFullPath() + " has already been created as database") |
| 724 | + ? RpcUtils.getStatus(TSStatusCode.SUCCESS_STATUS) |
| 725 | + : new TSStatus(TSStatusCode.PIPE_RECEIVER_USER_CONFLICT_EXCEPTION.getStatusCode()) |
| 726 | + .setMessage(status.getMessage()); |
| 727 | + } |
| 728 | + |
| 729 | + if (status.getCode() == TSStatusCode.DATABASE_CONFLICT.getStatusCode()) { |
| 730 | + return new TSStatus(TSStatusCode.PIPE_RECEIVER_USER_CONFLICT_EXCEPTION.getStatusCode()) |
| 731 | + .setMessage(status.getMessage()); |
| 732 | + } |
| 733 | + |
| 734 | + return status; |
| 735 | + } |
| 736 | + |
700 | 737 | private TPipeTransferResp handleTransferSchemaPlan(final PipeTransferPlanNodeReq req) { |
701 | 738 | // We may be able to skip the alter logical view's exception parsing because |
702 | 739 | // the "AlterLogicalViewNode" is itself idempotent |
|
0 commit comments