@@ -571,12 +571,14 @@ public SuccessResponse reloadAllSegmentsDeprecated2(
571571 @ ApiOperation (value = "Delete a segment" , notes = "Delete a segment" )
572572 public SuccessResponse deleteSegment (
573573 @ ApiParam (value = "Name of the table" , required = true ) @ PathParam ("tableName" ) String tableName ,
574- @ ApiParam (value = "Name of the segment" , required = true ) @ PathParam ("segmentName" ) @ Encoded String segmentName ) {
574+ @ ApiParam (value = "Name of the segment" , required = true ) @ PathParam ("segmentName" ) @ Encoded String segmentName ,
575+ @ ApiParam (value = "Retention period for the deleted segments (e.g. 12h, 3d); Using 0d or -1d will instantly "
576+ + "delete segments without retention" ) @ QueryParam ("retention" ) String retentionPeriod ) {
575577 segmentName = URIUtils .decode (segmentName );
576578 TableType tableType = SegmentName .isRealtimeSegmentName (segmentName ) ? TableType .REALTIME : TableType .OFFLINE ;
577579 String tableNameWithType =
578580 ResourceUtils .getExistingTableNamesWithType (_pinotHelixResourceManager , tableName , tableType , LOGGER ).get (0 );
579- deleteSegmentsInternal (tableNameWithType , Collections .singletonList (segmentName ));
581+ deleteSegmentsInternal (tableNameWithType , Collections .singletonList (segmentName ), retentionPeriod );
580582 return new SuccessResponse ("Segment deleted" );
581583 }
582584
@@ -587,14 +589,17 @@ public SuccessResponse deleteSegment(
587589 @ ApiOperation (value = "Delete all segments" , notes = "Delete all segments" )
588590 public SuccessResponse deleteAllSegments (
589591 @ ApiParam (value = "Name of the table" , required = true ) @ PathParam ("tableName" ) String tableName ,
590- @ ApiParam (value = "OFFLINE|REALTIME" , required = true ) @ QueryParam ("type" ) String tableTypeStr ) {
592+ @ ApiParam (value = "OFFLINE|REALTIME" , required = true ) @ QueryParam ("type" ) String tableTypeStr ,
593+ @ ApiParam (value = "Retention period for the deleted segments (e.g. 12h, 3d); Using 0d or -1d will instantly "
594+ + "delete segments without retention" ) @ QueryParam ("retention" ) String retentionPeriod ) {
591595 TableType tableType = Constants .validateTableType (tableTypeStr );
592596 if (tableType == null ) {
593597 throw new ControllerApplicationException (LOGGER , "Table type must not be null" , Status .BAD_REQUEST );
594598 }
595599 String tableNameWithType =
596600 ResourceUtils .getExistingTableNamesWithType (_pinotHelixResourceManager , tableName , tableType , LOGGER ).get (0 );
597- deleteSegmentsInternal (tableNameWithType , _pinotHelixResourceManager .getSegmentsFor (tableNameWithType , false ));
601+ deleteSegmentsInternal (tableNameWithType , _pinotHelixResourceManager .getSegmentsFor (tableNameWithType , false ),
602+ retentionPeriod );
598603 return new SuccessResponse ("All segments of table " + tableNameWithType + " deleted" );
599604 }
600605
@@ -607,6 +612,8 @@ public SuccessResponse deleteAllSegments(
607612 notes = "Delete the segments in the JSON array payload" )
608613 public SuccessResponse deleteSegments (
609614 @ ApiParam (value = "Name of the table" , required = true ) @ PathParam ("tableName" ) String tableName ,
615+ @ ApiParam (value = "Retention period for the deleted segments (e.g. 12h, 3d); Using 0d or -1d will instantly "
616+ + "delete segments without retention" ) @ QueryParam ("retention" ) String retentionPeriod ,
610617 List <String > segments ) {
611618 int numSegments = segments .size ();
612619 if (numSegments == 0 ) {
@@ -622,16 +629,17 @@ public SuccessResponse deleteSegments(
622629 TableType tableType = isRealtimeSegment ? TableType .REALTIME : TableType .OFFLINE ;
623630 String tableNameWithType =
624631 ResourceUtils .getExistingTableNamesWithType (_pinotHelixResourceManager , tableName , tableType , LOGGER ).get (0 );
625- deleteSegmentsInternal (tableNameWithType , segments );
632+ deleteSegmentsInternal (tableNameWithType , segments , retentionPeriod );
626633 if (numSegments <= 5 ) {
627634 return new SuccessResponse ("Deleted segments: " + segments + " from table: " + tableNameWithType );
628635 } else {
629636 return new SuccessResponse ("Deleted " + numSegments + " segments from table: " + tableNameWithType );
630637 }
631638 }
632639
633- private void deleteSegmentsInternal (String tableNameWithType , List <String > segments ) {
634- PinotResourceManagerResponse response = _pinotHelixResourceManager .deleteSegments (tableNameWithType , segments );
640+ private void deleteSegmentsInternal (String tableNameWithType , List <String > segments , String retentionPeriod ) {
641+ PinotResourceManagerResponse response = _pinotHelixResourceManager .deleteSegments (tableNameWithType , segments ,
642+ retentionPeriod );
635643 if (!response .isSuccessful ()) {
636644 throw new ControllerApplicationException (LOGGER ,
637645 "Failed to delete segments from table: " + tableNameWithType + ", error message: " + response .getMessage (),
0 commit comments