Skip to content

Commit c13dde1

Browse files
committed
feat: implement alias time series feature
- Add SQL syntax support: ALTER TIMESERIES <oldPath> RENAME TO <newPath> - Implement AliasTimeSeriesStatement and analysis logic - Implement AliasTimeSeriesProcedure with three-phase state machine: * LOCK_AND_GET_SCHEMA_INFO: Lock old path and get schema information * TRANSFORM_METADATA: Transform metadata based on three scenarios * UNLOCK: Unlock after operation completion - Implement SchemaRegion methods for alias operations: * lockForAlias: Lock and mark series as isRenaming * createAliasSeries: Create new alias series with IS_RENAMED and ORIGINAL_PATH * markSeriesDisabled: Mark physical series as DISABLED * updatePhysicalAliasRef: Update ALIAS_PATH reference * dropAliasSeries: Drop alias series * enablePhysicalSeries: Enable physical series * unlockForAlias: Unlock after operation - Add PlanNodes for alias operations (LockAliasNode, CreateAliasSeriesNode, etc.) - Implement automatic database and SchemaRegion creation for new paths - Add MeasurementInfo properties: IS_RENAMED, IS_RENAMING, DISABLED, ORIGINAL_PATH, ALIAS_PATH - Support cross-database alias series creation - All operations use RegionWriteExecutor for consensus consistency
1 parent 7722963 commit c13dde1

File tree

49 files changed

+4403
-31
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

49 files changed

+4403
-31
lines changed

iotdb-core/antlr/src/main/antlr4/org/apache/iotdb/db/qp/sql/IoTDBSqlParser.g4

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -169,12 +169,13 @@ alterTimeseries
169169
;
170170

171171
alterClause
172-
: RENAME beforeName=attributeKey TO currentName=attributeKey
173-
| SET attributePair (COMMA attributePair)*
174-
| DROP attributeKey (COMMA attributeKey)*
175-
| ADD TAGS attributePair (COMMA attributePair)*
176-
| ADD ATTRIBUTES attributePair (COMMA attributePair)*
177-
| UPSERT aliasClause? tagClause? attributeClause?
172+
: RENAME TO newPath=fullPath #renameTimeseriesPath
173+
| RENAME beforeName=attributeKey TO currentName=attributeKey #renameTagOrAttribute
174+
| SET attributePair (COMMA attributePair)* #setAlter
175+
| DROP attributeKey (COMMA attributeKey)* #dropAlter
176+
| ADD TAGS attributePair (COMMA attributePair)* #addTagsAlter
177+
| ADD ATTRIBUTES attributePair (COMMA attributePair)* #addAttributesAlter
178+
| UPSERT aliasClause? tagClause? attributeClause? #upsertAlter
178179
;
179180

180181
alterEncodingCompressor

iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/client/async/CnToDnAsyncRequestType.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -90,6 +90,14 @@ public enum CnToDnAsyncRequestType {
9090
DELETE_DATA_FOR_DELETE_SCHEMA,
9191
DELETE_TIMESERIES,
9292

93+
LOCK_ALIAS,
94+
CREATE_ALIAS_SERIES,
95+
MARK_SERIES_DISABLED,
96+
UPDATE_PHYSICAL_ALIAS_REF,
97+
DROP_ALIAS_SERIES,
98+
ENABLE_PHYSICAL_SERIES,
99+
UNLOCK_FOR_ALIAS,
100+
93101
ALTER_ENCODING_COMPRESSOR,
94102

95103
CONSTRUCT_SCHEMA_BLACK_LIST_WITH_TEMPLATE,

iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/client/async/CnToDnInternalServiceAsyncRequestManager.java

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@
3333
import org.apache.iotdb.commons.client.request.DataNodeInternalServiceRequestManager;
3434
import org.apache.iotdb.commons.client.request.TestConnectionUtils;
3535
import org.apache.iotdb.commons.exception.UncheckedStartupException;
36+
import org.apache.iotdb.confignode.client.async.handlers.rpc.AliasTimeSeriesRPCHandler;
3637
import org.apache.iotdb.confignode.client.async.handlers.rpc.CheckTimeSeriesExistenceRPCHandler;
3738
import org.apache.iotdb.confignode.client.async.handlers.rpc.CountPathsUsingTemplateRPCHandler;
3839
import org.apache.iotdb.confignode.client.async.handlers.rpc.DataNodeAsyncRequestRPCHandler;
@@ -48,6 +49,7 @@
4849
import org.apache.iotdb.confignode.client.async.handlers.rpc.subscription.ConsumerGroupPushMetaRPCHandler;
4950
import org.apache.iotdb.confignode.client.async.handlers.rpc.subscription.TopicPushMetaRPCHandler;
5051
import org.apache.iotdb.mpp.rpc.thrift.TActiveTriggerInstanceReq;
52+
import org.apache.iotdb.mpp.rpc.thrift.TAliasTimeSeriesReq;
5153
import org.apache.iotdb.mpp.rpc.thrift.TAlterEncodingCompressorReq;
5254
import org.apache.iotdb.mpp.rpc.thrift.TAlterViewReq;
5355
import org.apache.iotdb.mpp.rpc.thrift.TCheckSchemaRegionUsingTemplateReq;
@@ -57,6 +59,7 @@
5759
import org.apache.iotdb.mpp.rpc.thrift.TConstructSchemaBlackListWithTemplateReq;
5860
import org.apache.iotdb.mpp.rpc.thrift.TConstructViewSchemaBlackListReq;
5961
import org.apache.iotdb.mpp.rpc.thrift.TCountPathsUsingTemplateReq;
62+
import org.apache.iotdb.mpp.rpc.thrift.TCreateAliasSeriesReq;
6063
import org.apache.iotdb.mpp.rpc.thrift.TCreateDataRegionReq;
6164
import org.apache.iotdb.mpp.rpc.thrift.TCreateFunctionInstanceReq;
6265
import org.apache.iotdb.mpp.rpc.thrift.TCreatePipePluginInstanceReq;
@@ -69,16 +72,20 @@
6972
import org.apache.iotdb.mpp.rpc.thrift.TDeleteTimeSeriesReq;
7073
import org.apache.iotdb.mpp.rpc.thrift.TDeleteViewSchemaReq;
7174
import org.apache.iotdb.mpp.rpc.thrift.TDeviceViewReq;
75+
import org.apache.iotdb.mpp.rpc.thrift.TDropAliasSeriesReq;
7276
import org.apache.iotdb.mpp.rpc.thrift.TDropFunctionInstanceReq;
7377
import org.apache.iotdb.mpp.rpc.thrift.TDropPipePluginInstanceReq;
7478
import org.apache.iotdb.mpp.rpc.thrift.TDropTriggerInstanceReq;
79+
import org.apache.iotdb.mpp.rpc.thrift.TEnablePhysicalSeriesReq;
7580
import org.apache.iotdb.mpp.rpc.thrift.TFetchSchemaBlackListReq;
7681
import org.apache.iotdb.mpp.rpc.thrift.TInactiveTriggerInstanceReq;
7782
import org.apache.iotdb.mpp.rpc.thrift.TInvalidateCacheReq;
7883
import org.apache.iotdb.mpp.rpc.thrift.TInvalidateColumnCacheReq;
7984
import org.apache.iotdb.mpp.rpc.thrift.TInvalidateMatchedSchemaCacheReq;
8085
import org.apache.iotdb.mpp.rpc.thrift.TInvalidateTableCacheReq;
8186
import org.apache.iotdb.mpp.rpc.thrift.TKillQueryInstanceReq;
87+
import org.apache.iotdb.mpp.rpc.thrift.TLockAndGetSchemaInfoForAliasReq;
88+
import org.apache.iotdb.mpp.rpc.thrift.TMarkSeriesDisabledReq;
8289
import org.apache.iotdb.mpp.rpc.thrift.TNotifyRegionMigrationReq;
8390
import org.apache.iotdb.mpp.rpc.thrift.TPipeHeartbeatReq;
8491
import org.apache.iotdb.mpp.rpc.thrift.TPushConsumerGroupMetaReq;
@@ -98,6 +105,7 @@
98105
import org.apache.iotdb.mpp.rpc.thrift.TTableDeviceDeletionWithPatternAndFilterReq;
99106
import org.apache.iotdb.mpp.rpc.thrift.TTableDeviceDeletionWithPatternOrModReq;
100107
import org.apache.iotdb.mpp.rpc.thrift.TTableDeviceInvalidateCacheReq;
108+
import org.apache.iotdb.mpp.rpc.thrift.TUpdatePhysicalAliasRefReq;
101109
import org.apache.iotdb.mpp.rpc.thrift.TUpdateTableReq;
102110
import org.apache.iotdb.mpp.rpc.thrift.TUpdateTemplateReq;
103111
import org.apache.iotdb.mpp.rpc.thrift.TUpdateTriggerLocationReq;
@@ -310,6 +318,39 @@ protected void initActionMapBuilder() {
310318
CnToDnAsyncRequestType.DELETE_TIMESERIES,
311319
(req, client, handler) ->
312320
client.deleteTimeSeries((TDeleteTimeSeriesReq) req, (SchemaUpdateRPCHandler) handler));
321+
actionMapBuilder.put(
322+
CnToDnAsyncRequestType.LOCK_ALIAS,
323+
(req, client, handler) ->
324+
client.lockAndGetSchemaInfoForAlias(
325+
(TLockAndGetSchemaInfoForAliasReq) req, (AliasTimeSeriesRPCHandler) handler));
326+
actionMapBuilder.put(
327+
CnToDnAsyncRequestType.CREATE_ALIAS_SERIES,
328+
(req, client, handler) ->
329+
client.createAliasSeries(
330+
(TCreateAliasSeriesReq) req, (SchemaUpdateRPCHandler) handler));
331+
actionMapBuilder.put(
332+
CnToDnAsyncRequestType.MARK_SERIES_DISABLED,
333+
(req, client, handler) ->
334+
client.markSeriesDisabled(
335+
(TMarkSeriesDisabledReq) req, (SchemaUpdateRPCHandler) handler));
336+
actionMapBuilder.put(
337+
CnToDnAsyncRequestType.UPDATE_PHYSICAL_ALIAS_REF,
338+
(req, client, handler) ->
339+
client.updatePhysicalAliasRef(
340+
(TUpdatePhysicalAliasRefReq) req, (SchemaUpdateRPCHandler) handler));
341+
actionMapBuilder.put(
342+
CnToDnAsyncRequestType.DROP_ALIAS_SERIES,
343+
(req, client, handler) ->
344+
client.dropAliasSeries((TDropAliasSeriesReq) req, (SchemaUpdateRPCHandler) handler));
345+
actionMapBuilder.put(
346+
CnToDnAsyncRequestType.ENABLE_PHYSICAL_SERIES,
347+
(req, client, handler) ->
348+
client.enablePhysicalSeries(
349+
(TEnablePhysicalSeriesReq) req, (SchemaUpdateRPCHandler) handler));
350+
actionMapBuilder.put(
351+
CnToDnAsyncRequestType.UNLOCK_FOR_ALIAS,
352+
(req, client, handler) ->
353+
client.unlockForAlias((TAliasTimeSeriesReq) req, (SchemaUpdateRPCHandler) handler));
313354
actionMapBuilder.put(
314355
CnToDnAsyncRequestType.ALTER_ENCODING_COMPRESSOR,
315356
(req, client, handler) ->
Lines changed: 86 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,86 @@
1+
/*
2+
* Licensed to the Apache Software Foundation (ASF) under one
3+
* or more contributor license agreements. See the NOTICE file
4+
* distributed with this work for additional information
5+
* regarding copyright ownership. The ASF licenses this file
6+
* to you under the Apache License, Version 2.0 (the
7+
* "License"); you may not use this file except in compliance
8+
* with the License. You may obtain a copy of the License at
9+
*
10+
* http://www.apache.org/licenses/LICENSE-2.0
11+
*
12+
* Unless required by applicable law or agreed to in writing,
13+
* software distributed under this License is distributed on an
14+
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15+
* KIND, either express or implied. See the License for the
16+
* specific language governing permissions and limitations
17+
* under the License.
18+
*/
19+
20+
package org.apache.iotdb.confignode.client.async.handlers.rpc;
21+
22+
import org.apache.iotdb.common.rpc.thrift.TDataNodeLocation;
23+
import org.apache.iotdb.common.rpc.thrift.TSStatus;
24+
import org.apache.iotdb.confignode.client.async.CnToDnAsyncRequestType;
25+
import org.apache.iotdb.mpp.rpc.thrift.TAliasTimeSeriesResp;
26+
import org.apache.iotdb.rpc.RpcUtils;
27+
import org.apache.iotdb.rpc.TSStatusCode;
28+
29+
import org.slf4j.Logger;
30+
import org.slf4j.LoggerFactory;
31+
32+
import java.util.Map;
33+
import java.util.concurrent.CountDownLatch;
34+
35+
public class AliasTimeSeriesRPCHandler
36+
extends DataNodeAsyncRequestRPCHandler<TAliasTimeSeriesResp> {
37+
38+
private static final Logger LOGGER = LoggerFactory.getLogger(AliasTimeSeriesRPCHandler.class);
39+
40+
public AliasTimeSeriesRPCHandler(
41+
CnToDnAsyncRequestType requestType,
42+
int requestId,
43+
TDataNodeLocation targetDataNode,
44+
Map<Integer, TDataNodeLocation> dataNodeLocationMap,
45+
Map<Integer, TAliasTimeSeriesResp> responseMap,
46+
CountDownLatch countDownLatch) {
47+
super(requestType, requestId, targetDataNode, dataNodeLocationMap, responseMap, countDownLatch);
48+
}
49+
50+
@Override
51+
public void onComplete(TAliasTimeSeriesResp resp) {
52+
TSStatus tsStatus = resp.getStatus();
53+
responseMap.put(requestId, resp);
54+
if (tsStatus.getCode() == TSStatusCode.SUCCESS_STATUS.getStatusCode()) {
55+
nodeLocationMap.remove(requestId);
56+
LOGGER.info("Successfully executed alias time series operation on DataNode: {}", targetNode);
57+
} else if (tsStatus.getCode() == TSStatusCode.MULTIPLE_ERROR.getStatusCode()) {
58+
nodeLocationMap.remove(requestId);
59+
LOGGER.error(
60+
"Failed to execute alias time series operation on DataNode {}, {}", targetNode, tsStatus);
61+
} else {
62+
LOGGER.error(
63+
"Failed to execute alias time series operation on DataNode {}, {}", targetNode, tsStatus);
64+
}
65+
countDownLatch.countDown();
66+
}
67+
68+
@Override
69+
public void onError(Exception e) {
70+
String errorMsg =
71+
"Alias time series operation error on DataNode: {id="
72+
+ targetNode.getDataNodeId()
73+
+ ", internalEndPoint="
74+
+ targetNode.getInternalEndPoint()
75+
+ "}"
76+
+ e.getMessage();
77+
LOGGER.error(errorMsg);
78+
79+
countDownLatch.countDown();
80+
TAliasTimeSeriesResp resp = new TAliasTimeSeriesResp();
81+
resp.setStatus(
82+
new TSStatus(
83+
RpcUtils.getStatus(TSStatusCode.EXECUTE_STATEMENT_ERROR.getStatusCode(), errorMsg)));
84+
responseMap.put(requestId, resp);
85+
}
86+
}

iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/client/async/handlers/rpc/DataNodeAsyncRequestRPCHandler.java

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@
2929
import org.apache.iotdb.confignode.client.async.handlers.rpc.subscription.CheckSchemaRegionUsingTemplateRPCHandler;
3030
import org.apache.iotdb.confignode.client.async.handlers.rpc.subscription.ConsumerGroupPushMetaRPCHandler;
3131
import org.apache.iotdb.confignode.client.async.handlers.rpc.subscription.TopicPushMetaRPCHandler;
32+
import org.apache.iotdb.mpp.rpc.thrift.TAliasTimeSeriesResp;
3233
import org.apache.iotdb.mpp.rpc.thrift.TCheckSchemaRegionUsingTemplateResp;
3334
import org.apache.iotdb.mpp.rpc.thrift.TCheckTimeSeriesExistenceResp;
3435
import org.apache.iotdb.mpp.rpc.thrift.TCountPathsUsingTemplateResp;
@@ -184,6 +185,27 @@ public static DataNodeAsyncRequestRPCHandler<?> buildHandler(
184185
dataNodeLocationMap,
185186
(Map<Integer, TTestConnectionResp>) responseMap,
186187
countDownLatch);
188+
case LOCK_ALIAS:
189+
return new AliasTimeSeriesRPCHandler(
190+
requestType,
191+
requestId,
192+
targetDataNode,
193+
dataNodeLocationMap,
194+
(Map<Integer, TAliasTimeSeriesResp>) responseMap,
195+
countDownLatch);
196+
case CREATE_ALIAS_SERIES:
197+
case MARK_SERIES_DISABLED:
198+
case UPDATE_PHYSICAL_ALIAS_REF:
199+
case DROP_ALIAS_SERIES:
200+
case ENABLE_PHYSICAL_SERIES:
201+
case UNLOCK_FOR_ALIAS:
202+
return new SchemaUpdateRPCHandler(
203+
requestType,
204+
requestId,
205+
targetDataNode,
206+
dataNodeLocationMap,
207+
(Map<Integer, TSStatus>) responseMap,
208+
countDownLatch);
187209
case DETECT_TREE_DEVICE_VIEW_FIELD_TYPE:
188210
return new TreeDeviceViewFieldDetectionHandler(
189211
requestType,

iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/manager/ConfigManager.java

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,7 @@
4949
import org.apache.iotdb.commons.exception.IllegalPathException;
5050
import org.apache.iotdb.commons.exception.MetadataException;
5151
import org.apache.iotdb.commons.path.PartialPath;
52+
import org.apache.iotdb.commons.path.PathDeserializeUtil;
5253
import org.apache.iotdb.commons.path.PathPatternTree;
5354
import org.apache.iotdb.commons.path.PathPatternUtil;
5455
import org.apache.iotdb.commons.pipe.sink.payload.airgap.AirGapPseudoTPipeTransferRequest;
@@ -134,6 +135,7 @@
134135
import org.apache.iotdb.confignode.rpc.thrift.TAINodeRegisterReq;
135136
import org.apache.iotdb.confignode.rpc.thrift.TAINodeRestartReq;
136137
import org.apache.iotdb.confignode.rpc.thrift.TAINodeRestartResp;
138+
import org.apache.iotdb.confignode.rpc.thrift.TAliasTimeSeriesReq;
137139
import org.apache.iotdb.confignode.rpc.thrift.TAlterEncodingCompressorReq;
138140
import org.apache.iotdb.confignode.rpc.thrift.TAlterLogicalViewReq;
139141
import org.apache.iotdb.confignode.rpc.thrift.TAlterOrDropTableReq;
@@ -2218,6 +2220,22 @@ public TSStatus alterEncodingCompressor(final TAlterEncodingCompressorReq req) {
22182220
}
22192221
}
22202222

2223+
@Override
2224+
public TSStatus aliasTimeSeries(TAliasTimeSeriesReq req) {
2225+
TSStatus status = confirmLeader();
2226+
if (status.getCode() == TSStatusCode.SUCCESS_STATUS.getStatusCode()) {
2227+
String queryId = req.getQueryId();
2228+
PartialPath oldPath =
2229+
(PartialPath) PathDeserializeUtil.deserialize(ByteBuffer.wrap(req.getOldPath()));
2230+
PartialPath newPath =
2231+
(PartialPath) PathDeserializeUtil.deserialize(ByteBuffer.wrap(req.getNewPath()));
2232+
boolean isGeneratedByPipe = req.isSetIsGeneratedByPipe() && req.isIsGeneratedByPipe();
2233+
return procedureManager.aliasTimeSeries(queryId, oldPath, newPath, isGeneratedByPipe);
2234+
} else {
2235+
return status;
2236+
}
2237+
}
2238+
22212239
@Override
22222240
public TSStatus deleteTimeSeries(TDeleteTimeSeriesReq req) {
22232241
TSStatus status = confirmLeader();

iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/manager/IManager.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,7 @@
6262
import org.apache.iotdb.confignode.rpc.thrift.TAINodeRegisterReq;
6363
import org.apache.iotdb.confignode.rpc.thrift.TAINodeRestartReq;
6464
import org.apache.iotdb.confignode.rpc.thrift.TAINodeRestartResp;
65+
import org.apache.iotdb.confignode.rpc.thrift.TAliasTimeSeriesReq;
6566
import org.apache.iotdb.confignode.rpc.thrift.TAlterEncodingCompressorReq;
6667
import org.apache.iotdb.confignode.rpc.thrift.TAlterLogicalViewReq;
6768
import org.apache.iotdb.confignode.rpc.thrift.TAlterOrDropTableReq;
@@ -701,6 +702,9 @@ TDataPartitionTableResp getOrCreateDataPartition(
701702

702703
TSStatus alterEncodingCompressor(TAlterEncodingCompressorReq req);
703704

705+
/** Alias timeseries. */
706+
TSStatus aliasTimeSeries(TAliasTimeSeriesReq req);
707+
704708
/** Delete timeseries. */
705709
TSStatus deleteTimeSeries(TDeleteTimeSeriesReq req);
706710

iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/manager/ProcedureManager.java

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -82,6 +82,7 @@
8282
import org.apache.iotdb.confignode.procedure.impl.region.RegionMigrationPlan;
8383
import org.apache.iotdb.confignode.procedure.impl.region.RegionOperationProcedure;
8484
import org.apache.iotdb.confignode.procedure.impl.region.RemoveRegionPeerProcedure;
85+
import org.apache.iotdb.confignode.procedure.impl.schema.AliasTimeSeriesProcedure;
8586
import org.apache.iotdb.confignode.procedure.impl.schema.AlterEncodingCompressorProcedure;
8687
import org.apache.iotdb.confignode.procedure.impl.schema.AlterLogicalViewProcedure;
8788
import org.apache.iotdb.confignode.procedure.impl.schema.DeactivateTemplateProcedure;
@@ -386,6 +387,46 @@ public TSStatus deleteTimeSeries(
386387
return waitingProcedureFinished(procedure);
387388
}
388389

390+
public TSStatus aliasTimeSeries(
391+
String queryId, PartialPath oldPath, PartialPath newPath, boolean isGeneratedByPipe) {
392+
AliasTimeSeriesProcedure procedure = null;
393+
synchronized (this) {
394+
boolean hasOverlappedTask = false;
395+
ProcedureType type;
396+
AliasTimeSeriesProcedure aliasTimeSeriesProcedure;
397+
for (Procedure<?> runningProcedure : executor.getProcedures().values()) {
398+
type = ProcedureFactory.getProcedureType(runningProcedure);
399+
if (type == null || !type.equals(ProcedureType.ALIAS_TIMESERIES_PROCEDURE)) {
400+
continue;
401+
}
402+
aliasTimeSeriesProcedure = ((AliasTimeSeriesProcedure) runningProcedure);
403+
if (queryId.equals(aliasTimeSeriesProcedure.getQueryId())) {
404+
procedure = aliasTimeSeriesProcedure;
405+
break;
406+
}
407+
// Check if there's overlap with old path or new path
408+
if (oldPath.equals(aliasTimeSeriesProcedure.getOldPath())
409+
|| oldPath.equals(aliasTimeSeriesProcedure.getNewPath())
410+
|| newPath.equals(aliasTimeSeriesProcedure.getOldPath())
411+
|| newPath.equals(aliasTimeSeriesProcedure.getNewPath())) {
412+
hasOverlappedTask = true;
413+
break;
414+
}
415+
}
416+
417+
if (procedure == null) {
418+
if (hasOverlappedTask) {
419+
return RpcUtils.getStatus(
420+
TSStatusCode.OVERLAP_WITH_EXISTING_TASK,
421+
"Some other task is aliasing some target timeseries.");
422+
}
423+
procedure = new AliasTimeSeriesProcedure(queryId, oldPath, newPath, isGeneratedByPipe);
424+
this.executor.submitProcedure(procedure);
425+
}
426+
}
427+
return waitingProcedureFinished(procedure);
428+
}
429+
389430
public TSStatus deleteLogicalView(TDeleteLogicalViewReq req) {
390431
String queryId = req.getQueryId();
391432
PathPatternTree patternTree =

0 commit comments

Comments
 (0)