This is an automated email from the ASF dual-hosted git repository.

kharekartik pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/pinot.git


The following commit(s) were added to refs/heads/master by this push:
     new 0225f9216c9 Add reset segment operation to UI (#16078)
0225f9216c9 is described below

commit 0225f9216c9ab96cdcbcf51558235906ffa91c21
Author: Kartik Khare <kharekar...@gmail.com>
AuthorDate: Tue Jun 17 08:46:00 2025 +0530

    Add reset segment operation to UI (#16078)
---
 .../main/resources/app/pages/SegmentDetails.tsx    | 38 ++++++++++++++++++++++
 .../src/main/resources/app/requests/index.ts       |  3 ++
 .../main/resources/app/utils/PinotMethodUtils.ts   |  8 +++++
 3 files changed, 49 insertions(+)

diff --git a/pinot-controller/src/main/resources/app/pages/SegmentDetails.tsx 
b/pinot-controller/src/main/resources/app/pages/SegmentDetails.tsx
index 8ba9ed96964..84b8c949498 100644
--- a/pinot-controller/src/main/resources/app/pages/SegmentDetails.tsx
+++ b/pinot-controller/src/main/resources/app/pages/SegmentDetails.tsx
@@ -325,6 +325,35 @@ const SegmentDetails = ({ match }: 
RouteComponentProps<Props>) => {
     setConfirmDialog(true);
   };
 
+  const handleResetSegmentClick = () => {
+    setDialogDetails({
+      title: 'Reset Segment',
+      content: 'Are you sure you want to reset this segment?',
+      successCb: () => handleResetOp(),
+    });
+    setConfirmDialog(true);
+  };
+
+  const handleResetOp = async () => {
+    try {
+      const result = await PinotMethodUtils.resetSegmentOp(
+        tableName,
+        segmentName
+      );
+      if (result.status) {
+        dispatch({ type: 'success', message: result.status, show: true });
+        fetchData();
+      } else {
+        dispatch({ type: 'error', message: result.error, show: true });
+      }
+    } catch (error) {
+      console.error('Error resetting segment:', error);
+      dispatch({ type: 'error', message: 'Failed to reset segment. Please try 
again later.', show: true });
+    } finally {
+      closeDialog();
+    }
+  };
+
   const handleReloadOp = async () => {
     const result = await PinotMethodUtils.reloadSegmentOp(
       tableName,
@@ -376,6 +405,15 @@ const SegmentDetails = ({ match }: 
RouteComponentProps<Props>) => {
               >
                 Reload Segment
               </CustomButton>
+              <CustomButton
+                onClick={() => {
+                  handleResetSegmentClick();
+                }}
+                tooltipTitle="Reset the segment by disabling and enabling it"
+                enableTooltip={true}
+              >
+                Reset Segment
+              </CustomButton>
             </div>
           </SimpleAccordion>
         </div>
diff --git a/pinot-controller/src/main/resources/app/requests/index.ts 
b/pinot-controller/src/main/resources/app/requests/index.ts
index 42ecfccbcb9..afa9f55d59f 100644
--- a/pinot-controller/src/main/resources/app/requests/index.ts
+++ b/pinot-controller/src/main/resources/app/requests/index.ts
@@ -265,6 +265,9 @@ export const getServerListOfTenant = (name: string): 
Promise<AxiosResponse<Serve
 export const reloadSegment = (tableName: string, instanceName: string): 
Promise<AxiosResponse<OperationResponse>> =>
   baseApi.post(`/segments/${tableName}/${instanceName}/reload`, null, 
{headers});
 
+export const resetSegment = (tableName: string, segmentName: string): 
Promise<AxiosResponse<OperationResponse>> =>
+  baseApi.post(`/segments/${tableName}/${segmentName}/reset`, null, {headers});
+
 export const reloadAllSegments = (tableName: string, tableType: string): 
Promise<AxiosResponse<OperationResponse>> =>
   baseApi.post(`/segments/${tableName}/reload?type=${tableType}`, null, 
{headers});
 
diff --git a/pinot-controller/src/main/resources/app/utils/PinotMethodUtils.ts 
b/pinot-controller/src/main/resources/app/utils/PinotMethodUtils.ts
index 086383d29cb..8f27aab0fae 100644
--- a/pinot-controller/src/main/resources/app/utils/PinotMethodUtils.ts
+++ b/pinot-controller/src/main/resources/app/utils/PinotMethodUtils.ts
@@ -80,6 +80,7 @@ import {
   getBrokerListOfTenant,
   getServerListOfTenant,
   deleteSegment,
+  resetSegment,
   putTable,
   putSchema,
   deleteTable,
@@ -989,6 +990,12 @@ const reloadStatusOp = (tableName, tableType) => {
   });
 }
 
+const resetSegmentOp = (tableName, segmentName) => {
+  return resetSegment(tableName, segmentName).then((response) => {
+    return response.data;
+  });
+};
+
 const deleteSegmentOp = (tableName, segmentName) => {
   return deleteSegment(tableName, segmentName).then((response)=>{
     return response.data;
@@ -1382,6 +1389,7 @@ export default {
   getTaskProgressData,
   getTaskGeneratorDebugData,
   deleteSegmentOp,
+  resetSegmentOp,
   reloadSegmentOp,
   reloadStatusOp,
   reloadAllSegmentsOp,


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscr...@pinot.apache.org
For additional commands, e-mail: commits-h...@pinot.apache.org

Reply via email to