181181import org .apache .iotdb .db .exception .metadata .SchemaQuotaExceededException ;
182182import org .apache .iotdb .db .exception .sql .SemanticException ;
183183import org .apache .iotdb .db .pipe .agent .PipeDataNodeAgent ;
184+ import org .apache .iotdb .db .pipe .source .dataregion .DataRegionListeningFilter ;
184185import org .apache .iotdb .db .protocol .client .ConfigNodeClient ;
185186import org .apache .iotdb .db .protocol .client .ConfigNodeClientManager ;
186187import org .apache .iotdb .db .protocol .client .ConfigNodeInfo ;
@@ -2205,10 +2206,10 @@ public SettableFuture<ConfigTaskResult> createPipe(
22052206 new PipeParameters (createPipeStatement .getSourceAttributes ());
22062207 final PipeParameters sinkPipeParameters =
22072208 new PipeParameters (createPipeStatement .getSinkAttributes ());
2208- if ( PipeConfig . getInstance (). getPipeAutoSplitFullEnabled ()
2209- && PipeDataNodeAgent . task (). isFullSync ( sourcePipeParameters )) {
2210- try ( final ConfigNodeClient configNodeClient =
2211- CONFIG_NODE_CLIENT_MANAGER . borrowClient ( ConfigNodeInfo . CONFIG_REGION_ID )) {
2209+ try ( final ConfigNodeClient configNodeClient =
2210+ CONFIG_NODE_CLIENT_MANAGER . borrowClient ( ConfigNodeInfo . CONFIG_REGION_ID )) {
2211+ if ( PipeConfig . getInstance (). getPipeAutoSplitFullEnabled ()
2212+ && PipeDataNodeAgent . task (). isFullSync ( sourcePipeParameters )) {
22122213 // 1. Send request to create the real-time data synchronization pipeline
22132214 final TCreatePipeReq realtimeReq =
22142215 new TCreatePipeReq ()
@@ -2253,11 +2254,17 @@ public SettableFuture<ConfigTaskResult> createPipe(
22532254 Boolean .toString (false ),
22542255 PipeSourceConstant .EXTRACTOR_HISTORY_ENABLE_KEY ,
22552256 Boolean .toString (true ),
2256- // We force the historical pipe to transfer data only
2257+ // We force the historical pipe to transfer data (and maybe
2258+ // deletion) only
22572259 // Thus we can transfer schema only once
22582260 // And may drop the historical pipe on successfully transferred
22592261 PipeSourceConstant .SOURCE_INCLUSION_KEY ,
2260- PipeSourceConstant .EXTRACTOR_INCLUSION_DEFAULT_VALUE ,
2262+ DataRegionListeningFilter
2263+ .parseInsertionDeletionListeningOptionPair (
2264+ sourcePipeParameters )
2265+ .getRight ()
2266+ ? "data"
2267+ : PipeSourceConstant .EXTRACTOR_INCLUSION_DEFAULT_VALUE ,
22612268 PipeSourceConstant .SOURCE_EXCLUSION_KEY ,
22622269 PipeSourceConstant .EXTRACTOR_EXCLUSION_DEFAULT_VALUE )))
22632270 .getAttribute ())
@@ -2280,27 +2287,20 @@ public SettableFuture<ConfigTaskResult> createPipe(
22802287
22812288 // 3. Set success status only if both pipelines are created successfully
22822289 future .set (new ConfigTaskResult (TSStatusCode .SUCCESS_STATUS ));
2283- } catch (final Exception e ) {
2284- // Catch any other exceptions (e.g., network issues)
2285- future .setException (e );
2286- }
2287- return future ;
2288- }
2289-
2290- try (final ConfigNodeClient configNodeClient =
2291- CONFIG_NODE_CLIENT_MANAGER .borrowClient (ConfigNodeInfo .CONFIG_REGION_ID )) {
2292- final TCreatePipeReq req =
2293- new TCreatePipeReq ()
2294- .setPipeName (pipeName )
2295- .setIfNotExistsCondition (createPipeStatement .hasIfNotExistsCondition ())
2296- .setExtractorAttributes (createPipeStatement .getSourceAttributes ())
2297- .setProcessorAttributes (createPipeStatement .getProcessorAttributes ())
2298- .setConnectorAttributes (createPipeStatement .getSinkAttributes ());
2299- final TSStatus tsStatus = configNodeClient .createPipe (req );
2300- if (TSStatusCode .SUCCESS_STATUS .getStatusCode () != tsStatus .getCode ()) {
2301- future .setException (new IoTDBException (tsStatus ));
23022290 } else {
2303- future .set (new ConfigTaskResult (TSStatusCode .SUCCESS_STATUS ));
2291+ final TCreatePipeReq req =
2292+ new TCreatePipeReq ()
2293+ .setPipeName (pipeName )
2294+ .setIfNotExistsCondition (createPipeStatement .hasIfNotExistsCondition ())
2295+ .setExtractorAttributes (createPipeStatement .getSourceAttributes ())
2296+ .setProcessorAttributes (createPipeStatement .getProcessorAttributes ())
2297+ .setConnectorAttributes (createPipeStatement .getSinkAttributes ());
2298+ final TSStatus tsStatus = configNodeClient .createPipe (req );
2299+ if (TSStatusCode .SUCCESS_STATUS .getStatusCode () != tsStatus .getCode ()) {
2300+ future .setException (new IoTDBException (tsStatus ));
2301+ } else {
2302+ future .set (new ConfigTaskResult (TSStatusCode .SUCCESS_STATUS ));
2303+ }
23042304 }
23052305 } catch (final Exception e ) {
23062306 future .setException (e );
0 commit comments