Skip to content

Commit 9262b6d

Browse files
fix: Prevent calls to ensembling job service/controllers if batch ensembling is deactivated (#356)
* Add check to ensure batch ensembling jobs table is not shown when inactive * Add additional checks to prevent calls to the ensembling job svc if inactive * Fix unit tests
1 parent ec567ae commit 9262b6d

File tree

3 files changed

+47
-2
lines changed

3 files changed

+47
-2
lines changed

api/turing/api/ensemblers_api.go

+10
Original file line numberDiff line numberDiff line change
@@ -255,6 +255,11 @@ func (c EnsemblersController) checkCurrentRouterVersion(options EnsemblersPathOp
255255
}
256256

257257
func (c EnsemblersController) checkActiveEnsemblingJob(options EnsemblersPathOptions) (int, error) {
258+
// Batch ensembling is not enabled
259+
if c.EnsemblingJobService == nil {
260+
return http.StatusOK, nil
261+
}
262+
258263
ensemblingJobActiveOption := service.EnsemblingJobListOptions{
259264
EnsemblerID: options.EnsemblerID,
260265
Statuses: []models.Status{
@@ -298,6 +303,11 @@ func (c EnsemblersController) deleteInactiveRouterVersion(options EnsemblersPath
298303
return http.StatusOK, nil
299304
}
300305
func (c EnsemblersController) deleteInactiveEnsemblingJob(options EnsemblersPathOptions) (int, error) {
306+
// Batch ensembling is not enabled
307+
if c.EnsemblingJobService == nil {
308+
return http.StatusOK, nil
309+
}
310+
301311
ensemblingJobInactiveOption := service.EnsemblingJobListOptions{
302312
EnsemblerID: options.EnsemblerID,
303313
Statuses: []models.Status{

api/turing/api/ensemblers_api_test.go

+31-1
Original file line numberDiff line numberDiff line change
@@ -889,6 +889,36 @@ func TestEnsemblerController_DeleteEnsembler(t *testing.T) {
889889
},
890890
expected: InternalServerError("failed to delete the ensembler", "failed to delete"),
891891
},
892+
"success | batch ensembling is not enabled": {
893+
vars: RequestVars{
894+
"project_id": {"2"},
895+
"ensembler_id": {"2"},
896+
},
897+
ensemblerSvc: func() service.EnsemblersService {
898+
ensemblerSvc := &mocks.EnsemblersService{}
899+
ensemblerSvc.
900+
On("FindByID", models.ID(2), service.EnsemblersFindByIDOptions{
901+
ProjectID: models.NewID(2),
902+
}).
903+
Return(original, nil)
904+
ensemblerSvc.
905+
On("Delete", original).
906+
Return(nil)
907+
return ensemblerSvc
908+
},
909+
routerVersionsSvc: func() service.RouterVersionsService {
910+
routerVersionSvc := &mocks.RouterVersionsService{}
911+
routerVersionSvc.On("ListRouterVersionsWithFilter", mock.Anything).Return([]*models.RouterVersion{}, nil)
912+
913+
return routerVersionSvc
914+
},
915+
mlflowSvc: func() mlflow.Service {
916+
mlflowSvc := &mlflowMock.Service{}
917+
mlflowSvc.On("DeleteExperiment", mock.Anything, "1", true).Return(nil)
918+
return mlflowSvc
919+
},
920+
expected: Ok(models.ID(2)),
921+
},
892922
"success": {
893923
vars: RequestVars{
894924
"project_id": {"2"},
@@ -951,7 +981,7 @@ func TestEnsemblerController_DeleteEnsembler(t *testing.T) {
951981
ensemblingJobSvc = tt.ensemblingJobSvc()
952982
}
953983
var routerVersionsSvc service.RouterVersionsService
954-
if tt.ensemblingJobSvc != nil {
984+
if tt.routerVersionsSvc != nil {
955985
routerVersionsSvc = tt.routerVersionsSvc()
956986
}
957987

ui/src/ensembler/components/modal/DeleteEnsemblerModal.js

+6-1
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import { isEmpty } from "../../../utils/object";
77
import { ListEnsemblingJobsForEnsemblerTable } from "../table/ListEnsemblingJobsForEnsemblerTable";
88
import { ListRouterVersionsForEnsemblerTable } from "../table/ListRouterVersionsForEnsemblerTable";
99
import { EuiFieldText } from "@elastic/eui";
10+
import {useConfig} from "../../../config";
1011

1112
export const DeleteEnsemblerModal = ({
1213
onSuccess,
@@ -23,6 +24,10 @@ export const DeleteEnsemblerModal = ({
2324
const [deleteConfirmation, setDeleteConfirmation] = useState('')
2425
const [ensembler = {}, openModal, closeModal] = useEnsemblerModal(closeModalRef);
2526

27+
const {
28+
appConfig: { batchEnsemblingEnabled },
29+
} = useConfig();
30+
2631
useEffect(() => {
2732
// if ensembler is used by one of the component, immediately set can delete ensembler to false
2833
setCanDeleteEnsembler(!(ensemblerUsedByActiveEnsemblingJob || ensemblerUsedByActiveRouterVersion || ensemblerUsedByCurrentRouterVersion))
@@ -93,7 +98,7 @@ export const DeleteEnsemblerModal = ({
9398
</div>
9499
)}
95100
{/* Only show The Ensembling Table if ensembler is not used by current router version */}
96-
{!ensemblerUsedByCurrentRouterVersion && (
101+
{!ensemblerUsedByCurrentRouterVersion && batchEnsemblingEnabled && (
97102
<ListEnsemblingJobsForEnsemblerTable
98103
projectID={ensembler.project_id}
99104
ensemblerID={ensembler.id}

0 commit comments

Comments
 (0)