diff --git a/pkg/apis/controller/experiments/v1beta1/experiment_types.go b/pkg/apis/controller/experiments/v1beta1/experiment_types.go index 71bb99eaa9f..2c8eb95a7a3 100644 --- a/pkg/apis/controller/experiments/v1beta1/experiment_types.go +++ b/pkg/apis/controller/experiments/v1beta1/experiment_types.go @@ -170,6 +170,7 @@ const ( LongRunning ResumePolicyType = "LongRunning" // FromVolume indicates that volume is attached to experiment's // suggestion. Suggestion data can be retained in the volume. + // When experiment is succeeded suggestion deployment and service are deleted. FromVolume ResumePolicyType = "FromVolume" ) diff --git a/pkg/apis/controller/suggestions/v1beta1/util.go b/pkg/apis/controller/suggestions/v1beta1/util.go index bb2ef736dfe..0455a1a10ff 100644 --- a/pkg/apis/controller/suggestions/v1beta1/util.go +++ b/pkg/apis/controller/suggestions/v1beta1/util.go @@ -90,26 +90,34 @@ func (suggestion *Suggestion) MarkSuggestionStatusCreated(reason, message string suggestion.setCondition(SuggestionCreated, v1.ConditionTrue, reason, message) } +// MarkSuggestionStatusRunning sets suggestion Running status. func (suggestion *Suggestion) MarkSuggestionStatusRunning(status v1.ConditionStatus, reason, message string) { - //suggestion.removeCondition(SuggestionRestarting) // When suggestion is restrating we need to remove succeeded status from suggestion. // That should happen only when ResumePolicy = FromVolume suggestion.removeCondition(SuggestionSucceeded) suggestion.setCondition(SuggestionRunning, status, reason, message) } +// MarkSuggestionStatusSucceeded sets suggestion Succeeded status to true. +// Suggestion can be succeeded only if ResumeExperiment = Never or ResumeExperiment = FromVolume func (suggestion *Suggestion) MarkSuggestionStatusSucceeded(reason, message string) { + + // When suggestion is Succeeded suggestion Running status is false runningCond := getCondition(suggestion, SuggestionRunning) + succeededReason := "Suggestion is succeeded" if runningCond != nil { - suggestion.setCondition(SuggestionRunning, v1.ConditionFalse, runningCond.Reason, runningCond.Message) + msg := "Suggestion is not running" + suggestion.setCondition(SuggestionRunning, v1.ConditionFalse, succeededReason, msg) } - // When suggestion is Succeeded deployment must be not ready + + // When suggestion is Succeeded suggestion DeploymentReady status is false deploymentReadyCond := getCondition(suggestion, SuggestionDeploymentReady) if deploymentReadyCond != nil { - suggestion.setCondition(SuggestionDeploymentReady, v1.ConditionFalse, deploymentReadyCond.Reason, deploymentReadyCond.Message) + msg := "Deployment is not ready" + suggestion.setCondition(SuggestionDeploymentReady, v1.ConditionFalse, succeededReason, msg) } - suggestion.setCondition(SuggestionSucceeded, v1.ConditionTrue, reason, message) + suggestion.setCondition(SuggestionSucceeded, v1.ConditionTrue, reason, message) } func (suggestion *Suggestion) MarkSuggestionStatusFailed(reason, message string) { diff --git a/pkg/controller.v1beta1/consts/const.go b/pkg/controller.v1beta1/consts/const.go index ebc1c7dd50d..562e2cf373f 100644 --- a/pkg/controller.v1beta1/consts/const.go +++ b/pkg/controller.v1beta1/consts/const.go @@ -149,12 +149,12 @@ const ( // UnavailableMetricValue is the value when metric was not reported or metric value can't be converted to float64 UnavailableMetricValue = "unavailable" - // DefaultSuggestionVolumeLocalPathPrefix is the default cluster local path for suggestion volume - // Whole local path = /tmp/katib/suggestions/- + // DefaultSuggestionVolumeLocalPathPrefix is the default cluster local path prefix for suggestion volume + // Full local path = /tmp/katib/suggestions/- DefaultSuggestionVolumeLocalPathPrefix = "/tmp/katib/suggestions/" - // DefaultSuggestionStorageClass is the default value for suggestion's volume storage class - DefaultSuggestionStorageClass = "katib-suggestion" + // DefaultSuggestionStorageClassName is the default value for suggestion's volume storage class name + DefaultSuggestionStorageClassName = "katib-suggestion" // DefaultSuggestionVolumeAccessMode is the default value for suggestion's volume access mode DefaultSuggestionVolumeAccessMode = corev1.ReadWriteOnce @@ -162,7 +162,7 @@ const ( // DefaultSuggestionVolumeStorage is the default value for suggestion's volume storage DefaultSuggestionVolumeStorage = "1Gi" - // ContainerSuggestionVolumeName is the name of volume that mounted on suggestion container + // ContainerSuggestionVolumeName is the volume name that mounted on suggestion container ContainerSuggestionVolumeName = "suggestion-volume" // DefaultContainerSuggestionVolumeMountPath is the default mount path in suggestion container diff --git a/pkg/controller.v1beta1/experiment/experiment_controller_test.go b/pkg/controller.v1beta1/experiment/experiment_controller_test.go index 60d4bcf6f56..d7382a6c6b4 100644 --- a/pkg/controller.v1beta1/experiment/experiment_controller_test.go +++ b/pkg/controller.v1beta1/experiment/experiment_controller_test.go @@ -234,7 +234,7 @@ func TestReconcileExperiment(t *testing.T) { mgrStopped.Wait() }() - // Create the Experiment object and expect the Reconcile and Deployment to be created + // Create the experiment object and expect the Reconcile and Deployment to be created err = c.Create(context.TODO(), instance) // The instance object may not be a valid object because it might be missing some required fields. // Please modify the instance object by adding required fields and then remove the following if statement. diff --git a/pkg/controller.v1beta1/experiment/experiment_util.go b/pkg/controller.v1beta1/experiment/experiment_util.go index 30d1bf80a8c..410a37f880f 100644 --- a/pkg/controller.v1beta1/experiment/experiment_util.go +++ b/pkg/controller.v1beta1/experiment/experiment_util.go @@ -155,11 +155,11 @@ func (r *ReconcileExperiment) restartSuggestion(instance *experimentsv1beta1.Exp return err } - logger.Info("Suggestion is restarting, suggestion status is not running") + logger.Info("Suggestion is restarting, suggestion Running status is false") suggestion := original.DeepCopy() - reason := "Experiment is restarting, suggestion deployment is not ready" + reason := "Experiment is restarting" msg := "Suggestion is not running" - // Mark suggestion status not running because deployment is not ready + // Mark suggestion status not running because experiment is restarting and suggestion deployment is not ready suggestion.MarkSuggestionStatusRunning(corev1.ConditionFalse, reason, msg) if err := r.UpdateSuggestionStatus(suggestion); err != nil { diff --git a/pkg/controller.v1beta1/suggestion/composer/composer.go b/pkg/controller.v1beta1/suggestion/composer/composer.go index b19a3574f8c..e4f4a14fe26 100644 --- a/pkg/controller.v1beta1/suggestion/composer/composer.go +++ b/pkg/controller.v1beta1/suggestion/composer/composer.go @@ -252,12 +252,12 @@ func (g *General) desiredContainer(s *suggestionsv1beta1.Suggestion, suggestionC } // DesiredVolume returns desired PVC and PV for suggestion. -// If StorageClassName != DefaultSuggestionStorageClass returns only PVC. +// If StorageClassName != DefaultSuggestionStorageClassName returns only PVC. func (g *General) DesiredVolume(s *suggestionsv1beta1.Suggestion) (*corev1.PersistentVolumeClaim, *corev1.PersistentVolume, error) { persistentVolumeName := s.Name + "-" + s.Namespace // TODO (andreyvelich): Enable to specify these values from Katib config - storageClassName := consts.DefaultSuggestionStorageClass + storageClassName := consts.DefaultSuggestionStorageClassName persistentVolumePath := consts.DefaultSuggestionVolumeLocalPathPrefix + persistentVolumeName volumeAccessModes := consts.DefaultSuggestionVolumeAccessMode @@ -291,7 +291,7 @@ func (g *General) DesiredVolume(s *suggestionsv1beta1.Suggestion) (*corev1.Persi var pv *corev1.PersistentVolume // Create PV with local hostPath by default - if storageClassName == consts.DefaultSuggestionStorageClass { + if storageClassName == consts.DefaultSuggestionStorageClassName { localLabel := map[string]string{"type": "local"} pv = &corev1.PersistentVolume{ @@ -300,7 +300,7 @@ func (g *General) DesiredVolume(s *suggestionsv1beta1.Suggestion) (*corev1.Persi Labels: localLabel, }, Spec: corev1.PersistentVolumeSpec{ - StorageClassName: consts.DefaultSuggestionStorageClass, + StorageClassName: consts.DefaultSuggestionStorageClassName, AccessModes: []corev1.PersistentVolumeAccessMode{ volumeAccessModes, },