From 8c4930dc2c3f3edf3f1a862a99dd3cb5730c50cb Mon Sep 17 00:00:00 2001 From: bthari Date: Wed, 24 Jul 2024 16:26:14 +0700 Subject: [PATCH] fix merged env vars, new vars should overwrite the old one (#595) # Description When user want to deploy and add the environment variables of Merlin model's endpoint, instead of overwriting the old environment variables with the new variables, both of the variables will be [appended instead](https://github.com/caraml-dev/merlin/blob/5b37909b8ee3972469f2fd2a4677596af78c7f99/api/service/version_endpoint_service.go#L235). E.g. - Current endpoint's vars: `A = false` - New endpoint's vars: `B = true` - Final deployed endpoint's vars: `A = false, B = true` These changes are intended to fix it, so when user updates the endpoint environment variables, it will overwrite the old environment variables. # Modifications Modify the `override` function, which is use to override left endpoint with right endpoint, so it will replace the environment variables of the left (old) version endpoint with right (new) version endpoint's environment variables. # Tests # Checklist - [x] Added PR label - [x] Added unit test, integration, and/or e2e tests - [x] Tested locally - [ ] Updated documentation - [ ] Update Swagger spec if the PR introduce API changes - [ ] Regenerated Golang and Python client if the PR introduces API changes # Release Notes ```release-note deploying or redeploying model's endpoint with environment variables will now replace all old environment variables with new ones ``` Co-authored-by: bthari.smartnastiti --- api/service/version_endpoint_service.go | 4 ++-- api/service/version_endpoint_service_test.go | 18 ++++++++++++++++++ 2 files changed, 20 insertions(+), 2 deletions(-) diff --git a/api/service/version_endpoint_service.go b/api/service/version_endpoint_service.go index ca5d34a47..ea34264a0 100644 --- a/api/service/version_endpoint_service.go +++ b/api/service/version_endpoint_service.go @@ -231,8 +231,8 @@ func (k *endpointService) override(left *models.VersionEndpoint, right *models.V // override env vars // Configure environment variables for Pyfunc model - if len(right.EnvVars) > 0 { - left.EnvVars = models.MergeEnvVars(left.EnvVars, right.EnvVars) + if right.EnvVars != nil { + left.EnvVars = right.EnvVars } // override protocol diff --git a/api/service/version_endpoint_service_test.go b/api/service/version_endpoint_service_test.go index 2ee382640..3853eef5e 100644 --- a/api/service/version_endpoint_service_test.go +++ b/api/service/version_endpoint_service_test.go @@ -669,6 +669,12 @@ func TestDeployEndpoint(t *testing.T) { CPURequest: resource.MustParse("1"), MemoryRequest: resource.MustParse("1Gi"), }, + EnvVars: models.EnvVars{ + { + Name: "TF_MODEL_NAME", + Value: "saved_model.pb", + }, + }, Logger: &models.Logger{ Model: &models.LoggerConfig{ Enabled: true, @@ -697,6 +703,12 @@ func TestDeployEndpoint(t *testing.T) { CPURequest: resource.MustParse("1"), MemoryRequest: resource.MustParse("1Gi"), }, + EnvVars: models.EnvVars{ + { + Name: "NUM_OF_ITERATION", + Value: "1", + }, + }, Logger: &models.Logger{ Model: &models.LoggerConfig{ Enabled: true, @@ -723,6 +735,12 @@ func TestDeployEndpoint(t *testing.T) { CPURequest: resource.MustParse("1"), MemoryRequest: resource.MustParse("1Gi"), }, + EnvVars: models.EnvVars{ + { + Name: "NUM_OF_ITERATION", + Value: "1", + }, + }, Logger: &models.Logger{ DestinationURL: loggerDestinationURL, Model: &models.LoggerConfig{