func (cfg *Config) validateAndOverrideBounds() error {
	err := cfg.checkMissingAndDepreciated()
	if err != nil {
		return err
	}

	if cfg.DockerStopTimeout < minimumDockerStopTimeout {
		return fmt.Errorf("config: invalid value for docker container stop timeout: %v", cfg.DockerStopTimeout.String())
	}

	if cfg.ContainerStartTimeout < minimumContainerStartTimeout {
		return fmt.Errorf("config: invalid value for docker container start timeout: %v", cfg.ContainerStartTimeout.String())
	}
	var badDrivers []string
	for _, driver := range cfg.AvailableLoggingDrivers {
		_, ok := dockerclient.LoggingDriverMinimumVersion[driver]
		if !ok {
			badDrivers = append(badDrivers, string(driver))
		}
	}
	if len(badDrivers) > 0 {
		return errors.New("Invalid logging drivers: " + strings.Join(badDrivers, ", "))
	}

	// If a value has been set for taskCleanupWaitDuration and the value is less than the minimum allowed cleanup duration,
	// print a warning and override it
	if cfg.TaskCleanupWaitDuration < minimumTaskCleanupWaitDuration {
		seelog.Warnf("Invalid value for image cleanup duration, will be overridden with the default value: %s. Parsed value: %v, minimum value: %v.", DefaultTaskCleanupWaitDuration.String(), cfg.TaskCleanupWaitDuration, minimumTaskCleanupWaitDuration)
		cfg.TaskCleanupWaitDuration = DefaultTaskCleanupWaitDuration
	}

	if cfg.ImagePullInactivityTimeout < minimumImagePullInactivityTimeout {
		seelog.Warnf("Invalid value for image pull inactivity timeout duration, will be overridden with the default value: %s. Parsed value: %v, minimum value: %v.", defaultImagePullInactivityTimeout.String(), cfg.ImagePullInactivityTimeout, minimumImagePullInactivityTimeout)
		cfg.ImagePullInactivityTimeout = defaultImagePullInactivityTimeout
	}

	if cfg.ImageCleanupInterval < minimumImageCleanupInterval {
		seelog.Warnf("Invalid value for image cleanup duration, will be overridden with the default value: %s. Parsed value: %v, minimum value: %v.", DefaultImageCleanupTimeInterval.String(), cfg.ImageCleanupInterval, minimumImageCleanupInterval)
		cfg.ImageCleanupInterval = DefaultImageCleanupTimeInterval
	}

	if cfg.NumImagesToDeletePerCycle < minimumNumImagesToDeletePerCycle {
		seelog.Warnf("Invalid value for number of images to delete for image cleanup, will be overridden with the default value: %d. Parsed value: %d, minimum value: %d.", DefaultImageDeletionAge, cfg.NumImagesToDeletePerCycle, minimumNumImagesToDeletePerCycle)
		cfg.NumImagesToDeletePerCycle = DefaultNumImagesToDeletePerCycle
	}

	if cfg.TaskMetadataSteadyStateRate <= 0 || cfg.TaskMetadataBurstRate <= 0 {
		seelog.Warnf("Invalid values for rate limits, will be overridden with default values: %d,%d.", DefaultTaskMetadataSteadyStateRate, DefaultTaskMetadataBurstRate)
		cfg.TaskMetadataSteadyStateRate = DefaultTaskMetadataSteadyStateRate
		cfg.TaskMetadataBurstRate = DefaultTaskMetadataBurstRate
	}

	// check the PollMetrics specific configurations
	cfg.pollMetricsOverrides()

	cfg.platformOverrides()

	return nil
}
func (cfg *Config) validateAndOverrideBounds() error {
	err := cfg.checkMissingAndDepreciated()
	if err != nil {
		return err
	}

	if cfg.DockerStopTimeout < minimumDockerStopTimeout {
		return fmt.Errorf("config: invalid value for docker container stop timeout: %v", cfg.DockerStopTimeout.String())
	}

	if cfg.ContainerStartTimeout < minimumContainerStartTimeout {
		return fmt.Errorf("config: invalid value for docker container start timeout: %v", cfg.ContainerStartTimeout.String())
	}
	var badDrivers []string
	for _, driver := range cfg.AvailableLoggingDrivers {
		_, ok := dockerclient.LoggingDriverMinimumVersion[driver]
		if !ok {
			badDrivers = append(badDrivers, string(driver))
		}
	}
	if len(badDrivers) > 0 {
		return errors.New("Invalid logging drivers: " + strings.Join(badDrivers, ", "))
	}

	
	
	if cfg.TaskCleanupWaitDuration < minimumTaskCleanupWaitDuration {
		seelog.Warnf("Invalid value for image cleanup duration, will be overridden with the default value: %s. Parsed value: %v, minimum value: %v.", DefaultTaskCleanupWaitDuration.String(), cfg.TaskCleanupWaitDuration, minimumTaskCleanupWaitDuration)
		cfg.TaskCleanupWaitDuration = DefaultTaskCleanupWaitDuration
	}

	if cfg.ImagePullInactivityTimeout < minimumImagePullInactivityTimeout {
		seelog.Warnf("Invalid value for image pull inactivity timeout duration, will be overridden with the default value: %s. Parsed value: %v, minimum value: %v.", defaultImagePullInactivityTimeout.String(), cfg.ImagePullInactivityTimeout, minimumImagePullInactivityTimeout)
		cfg.ImagePullInactivityTimeout = defaultImagePullInactivityTimeout
	}

	if cfg.ImageCleanupInterval < minimumImageCleanupInterval {
		seelog.Warnf("Invalid value for image cleanup duration, will be overridden with the default value: %s. Parsed value: %v, minimum value: %v.", DefaultImageCleanupTimeInterval.String(), cfg.ImageCleanupInterval, minimumImageCleanupInterval)
		cfg.ImageCleanupInterval = DefaultImageCleanupTimeInterval
	}

	if cfg.NumImagesToDeletePerCycle < minimumNumImagesToDeletePerCycle {
		seelog.Warnf("Invalid value for number of images to delete for image cleanup, will be overridden with the default value: %d. Parsed value: %d, minimum value: %d.", DefaultImageDeletionAge, cfg.NumImagesToDeletePerCycle, minimumNumImagesToDeletePerCycle)
		cfg.NumImagesToDeletePerCycle = DefaultNumImagesToDeletePerCycle
	}

	if cfg.TaskMetadataSteadyStateRate <= 0 || cfg.TaskMetadataBurstRate <= 0 {
		seelog.Warnf("Invalid values for rate limits, will be overridden with default values: %d,%d.", DefaultTaskMetadataSteadyStateRate, DefaultTaskMetadataBurstRate)
		cfg.TaskMetadataSteadyStateRate = DefaultTaskMetadataSteadyStateRate
		cfg.TaskMetadataBurstRate = DefaultTaskMetadataBurstRate
	}

	
	cfg.pollMetricsOverrides()

	cfg.platformOverrides()

	return nil
}
func ( cfg * Config ) validateAndOverrideBounds ( ) error { err := cfg . checkMissingAndDepreciated ( ) if err != nil { return err } if cfg . DockerStopTimeout < minimumDockerStopTimeout { return fmt . Errorf ( " " , cfg . DockerStopTimeout . String ( ) ) } if cfg . ContainerStartTimeout < minimumContainerStartTimeout { return fmt . Errorf ( " " , cfg . ContainerStartTimeout . String ( ) ) } var badDrivers [ ] string for _ , driver := range cfg . AvailableLoggingDrivers { _ , ok := dockerclient . LoggingDriverMinimumVersion [ driver ] if ! ok { badDrivers = append ( badDrivers , string ( driver ) ) } } if len ( badDrivers ) > 0 { return errors . New ( " " + strings . Join ( badDrivers , " " ) ) } // If a value has been set for taskCleanupWaitDuration and the value is less than the minimum allowed cleanup duration, // print a warning and override it if cfg . TaskCleanupWaitDuration < minimumTaskCleanupWaitDuration { seelog . Warnf ( " " , DefaultTaskCleanupWaitDuration . String ( ) , cfg . TaskCleanupWaitDuration , minimumTaskCleanupWaitDuration ) cfg . TaskCleanupWaitDuration = DefaultTaskCleanupWaitDuration } if cfg . ImagePullInactivityTimeout < minimumImagePullInactivityTimeout { seelog . Warnf ( " " , defaultImagePullInactivityTimeout . String ( ) , cfg . ImagePullInactivityTimeout , minimumImagePullInactivityTimeout ) cfg . ImagePullInactivityTimeout = defaultImagePullInactivityTimeout } if cfg . ImageCleanupInterval < minimumImageCleanupInterval { seelog . Warnf ( " " , DefaultImageCleanupTimeInterval . String ( ) , cfg . ImageCleanupInterval , minimumImageCleanupInterval ) cfg . ImageCleanupInterval = DefaultImageCleanupTimeInterval } if cfg . NumImagesToDeletePerCycle < minimumNumImagesToDeletePerCycle { seelog . Warnf ( " " , DefaultImageDeletionAge , cfg . NumImagesToDeletePerCycle , minimumNumImagesToDeletePerCycle ) cfg . NumImagesToDeletePerCycle = DefaultNumImagesToDeletePerCycle } if cfg . TaskMetadataSteadyStateRate <= 0 || cfg . TaskMetadataBurstRate <= 0 { seelog . Warnf ( " " , DefaultTaskMetadataSteadyStateRate , DefaultTaskMetadataBurstRate ) cfg . TaskMetadataSteadyStateRate = DefaultTaskMetadataSteadyStateRate cfg . TaskMetadataBurstRate = DefaultTaskMetadataBurstRate } // check the PollMetrics specific configurations cfg . pollMetricsOverrides ( ) cfg . platformOverrides ( ) return nil }
// validateAndOverrideBounds performs validation over members of the Config struct
// and check the value against the minimum required value.
validateAndOverrideBounds performs validation over members of the Config struct and check the value against the minimum required value .