npawar commented on a change in pull request #6336: URL: https://github.com/apache/incubator-pinot/pull/6336#discussion_r550008061
########## File path: pinot-controller/src/main/java/org/apache/pinot/controller/api/resources/PinotSegmentRestletResource.java ########## @@ -355,6 +355,67 @@ public SuccessResponse reloadSegment( } } + /** + * Resets the segment of the table, by disabling and then enabling it. + * This API will take segments to OFFLINE state, wait for External View to stabilize, and then back to ONLINE/CONSUMING state, + * thus effective in resetting segments or consumers in error states. + */ + @POST + @Path("segments/{tableNameWithType}/{segmentName}/reset") + @Produces(MediaType.APPLICATION_JSON) + @ApiOperation(value = "Resets a segment by first disabling it, waiting for external view to stabilize, and finally enabling it again", notes = "Resets a segment by disabling and then enabling the segment") + public SuccessResponse resetSegment( + @ApiParam(value = "Name of the table with type", required = true) @PathParam("tableNameWithType") String tableNameWithType, + @ApiParam(value = "Name of the segment", required = true) @PathParam("segmentName") @Encoded String segmentName, + @ApiParam(value = "Maximum time in milliseconds to wait for reset to be completed. By default, uses serverAdminRequestTimeout") @QueryParam("maxWaitTimeMs") long maxWaitTimeMs) { + segmentName = URIUtils.decode(segmentName); + TableType tableType = TableNameBuilder.getTableTypeFromTableName(tableNameWithType); + try { + Preconditions.checkState(tableType != null, "Must provide table name with type: %s", tableNameWithType); + _pinotHelixResourceManager.resetSegment(tableNameWithType, segmentName, + maxWaitTimeMs > 0 ? maxWaitTimeMs : _controllerConf.getServerAdminRequestTimeoutSeconds() * 1000); + return new SuccessResponse( + String.format("Successfully reset segment: %s of table: %s", segmentName, tableNameWithType)); + } catch (IllegalStateException e) { + throw new ControllerApplicationException(LOGGER, + String.format("Failed to reset segments in table: %s. %s", tableNameWithType, e.getMessage()), + Status.NOT_FOUND); + } catch (Exception e) { + throw new ControllerApplicationException(LOGGER, + String.format("Failed to reset segment: %s of table: %s. %s", segmentName, tableNameWithType, e.getMessage()), + Status.INTERNAL_SERVER_ERROR); + } + } + + /** + * Resets all segments of the given table + * This API will take segments to OFFLINE state, wait for External View to stabilize, and then back to ONLINE/CONSUMING state, + * thus effective in resetting segments or consumers in error states. + */ + @POST + @Path("segments/{tableNameWithType}/reset") + @Produces(MediaType.APPLICATION_JSON) + @ApiOperation(value = "Resets all segments of the table, by first disabling them, waiting for external view to stabilize, and finally enabling the segments", notes = "Resets a segment by disabling and then enabling a segment") + public SuccessResponse resetAllSegments( + @ApiParam(value = "Name of the table with type", required = true) @PathParam("tableNameWithType") String tableNameWithType, + @ApiParam(value = "Maximum time in milliseconds to wait for reset to be completed. By default, uses serverAdminRequestTimeout") @QueryParam("maxWaitTimeMs") long maxWaitTimeMs) { + TableType tableType = TableNameBuilder.getTableTypeFromTableName(tableNameWithType); + try { + Preconditions.checkState(tableType != null, "Must provide table name with type: %s", tableNameWithType); + _pinotHelixResourceManager.resetAllSegments(tableNameWithType, Review comment: `Timed out waiting for external view to stabilize after call to disable/reset segment: %s of table: %s. Skipping enable of segment` ---------------------------------------------------------------- This is an automated message from the Apache Git Service. To respond to the message, please log on to GitHub and use the URL above to go to the specific comment. For queries about this service, please contact Infrastructure at: us...@infra.apache.org --------------------------------------------------------------------- To unsubscribe, e-mail: commits-unsubscr...@pinot.apache.org For additional commands, e-mail: commits-h...@pinot.apache.org