Skip to content

Commit

Permalink
config/engine: distinct startContainerTimouts for windows/linux
Browse files Browse the repository at this point in the history
Test the start container time cost on windows instances with
various parameters (instance type, container memory, container
cpu, etc.), and set the default startContainerTimeouts value for
windows accordingly.

Also make the startContainerTimeouts configurable (via ECS_CONTAINER_START_TIMEOUT
environment variable) by users.
  • Loading branch information
haikuoliu committed Mar 30, 2018
1 parent d5fa92a commit eb9560b
Show file tree
Hide file tree
Showing 23 changed files with 138 additions and 46 deletions.
1 change: 1 addition & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
# Changelog

## 1.17.3-dev
* Enhancement - Distinct startContainerTimeouts for windows/linux, introduce a new environment variable `ECS_CONTAINER_START_TIMEOUT` to make it configurable [#1321](https://github.com/aws/amazon-ecs-agent/pull/1321)
* Enhancement - Add support for containers to inhereit ENI private DNS hostnames for `awsvpc` tasks [#1278](https://github.com/aws/amazon-ecs-agent/pull/1278)
* Enhancement - Expose task definition family and task definition revision in container metadata file [#1295](https://github.com/aws/amazon-ecs-agent/pull/1295)
* Enhancement - Fail image pulls if there's inactivity during image pull progress [#1290](https://github.com/aws/amazon-ecs-agent/pull/1290)
Expand Down
1 change: 1 addition & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -162,6 +162,7 @@ additional details on each available environment variable.
| `ECS_APPARMOR_CAPABLE` | `true` | Whether AppArmor is available on the container instance. | `false` | `false` |
| `ECS_ENGINE_TASK_CLEANUP_WAIT_DURATION` | 10m | Time to wait to delete containers for a stopped task. If set to less than 1 minute, the value is ignored. | 3h | 3h |
| `ECS_CONTAINER_STOP_TIMEOUT` | 10m | Time to wait for the container to exit normally before being forcibly killed. | 30s | 30s |
| `ECS_CONTAINER_START_TIMEOUT` | 10m | Timeout before giving up on starting a container. | 3m | 8m |
| `ECS_ENABLE_TASK_IAM_ROLE` | `true` | Whether to enable IAM Roles for Tasks on the Container Instance | `false` | `false` |
| `ECS_ENABLE_TASK_IAM_ROLE_NETWORK_HOST` | `true` | Whether to enable IAM Roles for Tasks when launched with `host` network mode on the Container Instance | `false` | `false` |
| `ECS_DISABLE_IMAGE_CLEANUP` | `true` | Whether to disable automated image cleanup for the ECS Agent. | `false` | `false` |
Expand Down
37 changes: 34 additions & 3 deletions agent/config/config.go
Original file line number Diff line number Diff line change
Expand Up @@ -55,8 +55,8 @@ const (
// clean up task's containers.
DefaultTaskCleanupWaitDuration = 3 * time.Hour

// DefaultDockerStopTimeout specifies the value for container stop timeout duration
DefaultDockerStopTimeout = 30 * time.Second
// defaultDockerStopTimeout specifies the value for container stop timeout duration
defaultDockerStopTimeout = 30 * time.Second

// DefaultImageCleanupTimeInterval specifies the default value for image cleanup duration. It is used to
// remove the images pulled by agent.
Expand Down Expand Up @@ -288,6 +288,8 @@ func environmentConfig() (Config, error) {

dockerStopTimeout := getDockerStopTimeout()

containerStartTimeout := getContainerStartTimeout()

cgroupPath := os.Getenv("ECS_CGROUP_PATH")

taskCleanupWaitDuration := parseEnvVariableDuration("ECS_ENGINE_TASK_CLEANUP_WAIT_DURATION")
Expand Down Expand Up @@ -385,6 +387,7 @@ func environmentConfig() (Config, error) {
TaskIAMRoleEnabled: taskIAMRoleEnabled,
TaskCPUMemLimit: taskCPUMemLimitEnabled,
DockerStopTimeout: dockerStopTimeout,
ContainerStartTimeout: containerStartTimeout,
CredentialsAuditLogFile: credentialsAuditLogFile,
CredentialsAuditLogDisabled: credentialsAuditLogDisabled,
TaskIAMRoleEnabledForNetworkHost: taskIAMRoleEnabledForNetworkHost,
Expand Down Expand Up @@ -423,12 +426,34 @@ func getDockerStopTimeout() time.Duration {
parsedStopTimeout := parseEnvVariableDuration("ECS_CONTAINER_STOP_TIMEOUT")
if parsedStopTimeout >= minimumDockerStopTimeout {
dockerStopTimeout = parsedStopTimeout
// if the ECS_CONTAINER_STOP_TIMEOUT is invalid or empty, then the parsedStopTimeout
// will be 0, in this case we should return a 0,
// because the DockerStopTimeout will merge with the DefaultDockerStopTimeout,
// only when the DockerStopTimeout is empty
} else if parsedStopTimeout != 0 {
// if the configured ECS_CONTAINER_STOP_TIMEOUT is smaller than minimumDockerStopTimeout,
// DockerStopTimeout will be set to minimumDockerStopTimeout
// if the ECS_CONTAINER_STOP_TIMEOUT is 0, empty or an invalid value, then DockerStopTimeout
// will be set to defaultDockerStopTimeout during the config merge operation
dockerStopTimeout = minimumDockerStopTimeout
seelog.Warnf("Discarded invalid value for docker stop timeout, parsed as: %v", parsedStopTimeout)
}
return dockerStopTimeout
}

func getContainerStartTimeout() time.Duration {
var containerStartTimeout time.Duration
parsedStartTimeout := parseEnvVariableDuration("ECS_CONTAINER_START_TIMEOUT")
if parsedStartTimeout >= minimumContainerStartTimeout {
containerStartTimeout = parsedStartTimeout
// do the parsedStartTimeout != 0 check for the same reason as in getDockerStopTimeout()
} else if parsedStartTimeout != 0 {
containerStartTimeout = minimumContainerStartTimeout
seelog.Warnf("Discarded invalid value for container start timeout, parsed as: %v", parsedStartTimeout)
}
return containerStartTimeout
}

func getTaskCPUMemLimitEnabled() Conditional {
var taskCPUMemLimitEnabled Conditional
taskCPUMemLimitConfigString := os.Getenv("ECS_ENABLE_TASK_CPU_MEM_LIMIT")
Expand Down Expand Up @@ -563,7 +588,11 @@ func (cfg *Config) validateAndOverrideBounds() error {
}

if cfg.DockerStopTimeout < minimumDockerStopTimeout {
return fmt.Errorf("Invalid negative DockerStopTimeout: %v", cfg.DockerStopTimeout.String())
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 {
Expand Down Expand Up @@ -618,6 +647,7 @@ func (cfg *Config) String() string {
"ReservedMem: %v, "+
"TaskCleanupWaitDuration: %v, "+
"DockerStopTimeout: %v, "+
"ContainerStartTimeout: %v, "+
"TaskCPUMemLimit: %v, "+
"%s",
cfg.Cluster,
Expand All @@ -630,6 +660,7 @@ func (cfg *Config) String() string {
cfg.ReservedMemory,
cfg.TaskCleanupWaitDuration,
cfg.DockerStopTimeout,
cfg.ContainerStartTimeout,
cfg.TaskCPUMemLimit,
cfg.platformString(),
)
Expand Down
65 changes: 53 additions & 12 deletions agent/config/config_test.go
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
// Copyright 2014-2016 Amazon.com, Inc. or its affiliates. All Rights Reserved.
// Copyright 2014-2018 Amazon.com, Inc. or its affiliates. All Rights Reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License"). You may
// not use this file except in compliance with the License. A copy of the
Expand Down Expand Up @@ -69,6 +69,7 @@ func TestEnvironmentConfig(t *testing.T) {
defer setTestEnv("ECS_RESERVED_PORTS_UDP", "[42,99]")()
defer setTestEnv("ECS_RESERVED_MEMORY", "20")()
defer setTestEnv("ECS_CONTAINER_STOP_TIMEOUT", "60s")()
defer setTestEnv("ECS_CONTAINER_START_TIMEOUT", "5m")()
defer setTestEnv("ECS_AVAILABLE_LOGGING_DRIVERS", "[\""+string(dockerclient.SyslogDriver)+"\"]")()
defer setTestEnv("ECS_SELINUX_CAPABLE", "true")()
defer setTestEnv("ECS_APPARMOR_CAPABLE", "true")()
Expand All @@ -95,8 +96,10 @@ func TestEnvironmentConfig(t *testing.T) {
assert.Contains(t, conf.ReservedPortsUDP, uint16(42))
assert.Contains(t, conf.ReservedPortsUDP, uint16(99))
assert.Equal(t, uint16(20), conf.ReservedMemory)
expectedDuration, _ := time.ParseDuration("60s")
assert.Equal(t, expectedDuration, conf.DockerStopTimeout)
expectedDurationDockerStopTimeout, _ := time.ParseDuration("60s")
assert.Equal(t, expectedDurationDockerStopTimeout, conf.DockerStopTimeout)
expectedDurationContainerStartTimeout, _ := time.ParseDuration("5m")
assert.Equal(t, expectedDurationContainerStartTimeout, conf.ContainerStartTimeout)
assert.Equal(t, []dockerclient.LoggingDriver{dockerclient.SyslogDriver}, conf.AvailableLoggingDrivers)
assert.True(t, conf.PrivilegedDisabled)
assert.True(t, conf.SELinuxCapable, "Wrong value for SELinuxCapable")
Expand Down Expand Up @@ -195,23 +198,61 @@ func TestCheckpointWithoutECSDataDir(t *testing.T) {
func TestInvalidFormatDockerStopTimeout(t *testing.T) {
defer setTestRegion()()
defer setTestEnv("ECS_CONTAINER_STOP_TIMEOUT", "invalid")()
conf, err := environmentConfig()
ctrl := gomock.NewController(t)
mockEc2Metadata := mock_ec2.NewMockEC2MetadataClient(ctrl)
conf, err := NewConfig(mockEc2Metadata)
assert.NoError(t, err)
assert.Zero(t, conf.DockerStopTimeout, "Wrong value for DockerStopTimeout")
assert.Equal(t, conf.DockerStopTimeout, defaultDockerStopTimeout, "Wrong value for DockerStopTimeout")
}

func TestInvalideValueDockerStopTimeout(t *testing.T) {
func TestZeroValueDockerStopTimeout(t *testing.T) {
defer setTestRegion()()
defer setTestEnv("ECS_CONTAINER_STOP_TIMEOUT", "0s")()
ctrl := gomock.NewController(t)
mockEc2Metadata := mock_ec2.NewMockEC2MetadataClient(ctrl)
conf, err := NewConfig(mockEc2Metadata)
assert.NoError(t, err)
assert.Equal(t, conf.DockerStopTimeout, defaultDockerStopTimeout, "Wrong value for DockerStopTimeout")
}

func TestInvalidValueDockerStopTimeout(t *testing.T) {
defer setTestRegion()()
defer setTestEnv("ECS_CONTAINER_STOP_TIMEOUT", "-10s")()
conf, err := environmentConfig()
ctrl := gomock.NewController(t)
mockEc2Metadata := mock_ec2.NewMockEC2MetadataClient(ctrl)
conf, err := NewConfig(mockEc2Metadata)
assert.NoError(t, err)
assert.Zero(t, conf.DockerStopTimeout)
assert.Equal(t, conf.DockerStopTimeout, minimumDockerStopTimeout, "Wrong value for DockerStopTimeout")
}

func TestInvalidDockerStopTimeout(t *testing.T) {
conf := DefaultConfig()
conf.DockerStopTimeout = -1 * time.Second
assert.Error(t, conf.validateAndOverrideBounds(), "Should be error with negative DockerStopTimeout")
func TestInvalidFormatContainerStartTimeout(t *testing.T) {
defer setTestRegion()()
defer setTestEnv("ECS_CONTAINER_START_TIMEOUT", "invalid")()
ctrl := gomock.NewController(t)
mockEc2Metadata := mock_ec2.NewMockEC2MetadataClient(ctrl)
conf, err := NewConfig(mockEc2Metadata)
assert.NoError(t, err)
assert.Equal(t, conf.ContainerStartTimeout, defaultContainerStartTimeout, "Wrong value for ContainerStartTimeout")
}

func TestZeroValueContainerStartTimeout(t *testing.T) {
defer setTestRegion()()
defer setTestEnv("ECS_CONTAINER_START_TIMEOUT", "0s")()
ctrl := gomock.NewController(t)
mockEc2Metadata := mock_ec2.NewMockEC2MetadataClient(ctrl)
conf, err := NewConfig(mockEc2Metadata)
assert.NoError(t, err)
assert.Equal(t, conf.ContainerStartTimeout, defaultContainerStartTimeout, "Wrong value for ContainerStartTimeout")
}

func TestInvalidValueContainerStartTimeout(t *testing.T) {
defer setTestRegion()()
defer setTestEnv("ECS_CONTAINER_START_TIMEOUT", "-10s")()
ctrl := gomock.NewController(t)
mockEc2Metadata := mock_ec2.NewMockEC2MetadataClient(ctrl)
conf, err := NewConfig(mockEc2Metadata)
assert.NoError(t, err)
assert.Equal(t, conf.ContainerStartTimeout, minimumContainerStartTimeout, "Wrong value for ContainerStartTimeout")
}

func TestInvalidFormatParseEnvVariableUint16(t *testing.T) {
Expand Down
8 changes: 7 additions & 1 deletion agent/config/config_unix.go
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ package config

import (
"fmt"
"time"

"github.com/aws/amazon-ecs-agent/agent/engine/dockerclient"
)
Expand All @@ -31,6 +32,10 @@ const (
// Default cgroup memory system root path, this is the default used if the
// path has not been configured through ECS_CGROUP_PATH
defaultCgroupPath = "/sys/fs/cgroup"
// defaultContainerStartTimeout specifies the value for container start timeout duration
defaultContainerStartTimeout = 3 * time.Minute
// minimumContainerStartTimeout specifies the minimum value for starting a container
minimumContainerStartTimeout = 45 * time.Second
)

// DefaultConfig returns the default configuration for Linux
Expand All @@ -45,7 +50,8 @@ func DefaultConfig() Config {
ReservedMemory: 0,
AvailableLoggingDrivers: []dockerclient.LoggingDriver{dockerclient.JSONFileDriver, dockerclient.NoneDriver},
TaskCleanupWaitDuration: DefaultTaskCleanupWaitDuration,
DockerStopTimeout: DefaultDockerStopTimeout,
DockerStopTimeout: defaultDockerStopTimeout,
ContainerStartTimeout: defaultContainerStartTimeout,
CredentialsAuditLogFile: defaultCredentialsAuditLogFile,
CredentialsAuditLogDisabled: false,
ImageCleanupDisabled: false,
Expand Down
3 changes: 2 additions & 1 deletion agent/config/config_unix_test.go
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
// +build !windows
// Copyright 2014-2017 Amazon.com, Inc. or its affiliates. All Rights Reserved.
// Copyright 2014-2018 Amazon.com, Inc. or its affiliates. All Rights Reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License"). You may
// not use this file except in compliance with the License. A copy of the
Expand Down Expand Up @@ -41,6 +41,7 @@ func TestConfigDefault(t *testing.T) {
assert.Equal(t, 5, len(cfg.ReservedPorts), "Default reserved ports set incorrectly")
assert.Equal(t, uint16(0), cfg.ReservedMemory, "Default reserved memory set incorrectly")
assert.Equal(t, 30*time.Second, cfg.DockerStopTimeout, "Default docker stop container timeout set incorrectly")
assert.Equal(t, 3*time.Minute, cfg.ContainerStartTimeout, "Default docker start container timeout set incorrectly")
assert.False(t, cfg.PrivilegedDisabled, "Default PrivilegedDisabled set incorrectly")
assert.Equal(t, []dockerclient.LoggingDriver{dockerclient.JSONFileDriver, dockerclient.NoneDriver},
cfg.AvailableLoggingDrivers, "Default logging drivers set incorrectly")
Expand Down
8 changes: 7 additions & 1 deletion agent/config/config_windows.go
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ package config

import (
"os"
"time"
"path/filepath"

"github.com/aws/amazon-ecs-agent/agent/engine/dockerclient"
Expand All @@ -41,6 +42,10 @@ const (
dnsPort = 53
// NetBIOS over TCP/IP
netBIOSPort = 139
// defaultContainerStartTimeout specifies the value for container start timeout duration
defaultContainerStartTimeout = 8 * time.Minute
// minimumContainerStartTimeout specifies the minimum value for starting a container
minimumContainerStartTimeout = 2 * time.Minute
)

// DefaultConfig returns the default configuration for Windows
Expand Down Expand Up @@ -73,7 +78,8 @@ func DefaultConfig() Config {
ReservedMemory: 0,
AvailableLoggingDrivers: []dockerclient.LoggingDriver{dockerclient.JSONFileDriver, dockerclient.NoneDriver, dockerclient.AWSLogsDriver},
TaskCleanupWaitDuration: DefaultTaskCleanupWaitDuration,
DockerStopTimeout: DefaultDockerStopTimeout,
DockerStopTimeout: defaultDockerStopTimeout,
ContainerStartTimeout: defaultContainerStartTimeout,
CredentialsAuditLogFile: filepath.Join(ecsRoot, defaultCredentialsAuditLogFile),
CredentialsAuditLogDisabled: false,
ImageCleanupDisabled: false,
Expand Down
3 changes: 2 additions & 1 deletion agent/config/config_windows_test.go
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
// !build windows
// Copyright 2014-2017 Amazon.com, Inc. or its affiliates. All Rights Reserved.
// Copyright 2014-2018 Amazon.com, Inc. or its affiliates. All Rights Reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License"). You may
// not use this file except in compliance with the License. A copy of the
Expand Down Expand Up @@ -38,6 +38,7 @@ func TestConfigDefault(t *testing.T) {
assert.Equal(t, 10, len(cfg.ReservedPorts), "Default reserved ports set incorrectly")
assert.Equal(t, uint16(0), cfg.ReservedMemory, "Default reserved memory set incorrectly")
assert.Equal(t, 30*time.Second, cfg.DockerStopTimeout, "Default docker stop container timeout set incorrectly")
assert.Equal(t, 8*time.Minute, cfg.ContainerStartTimeout, "Default docker start container timeout set incorrectly")
assert.False(t, cfg.PrivilegedDisabled, "Default PrivilegedDisabled set incorrectly")
assert.Equal(t, []dockerclient.LoggingDriver{dockerclient.JSONFileDriver, dockerclient.NoneDriver, dockerclient.AWSLogsDriver},
cfg.AvailableLoggingDrivers, "Default logging drivers set incorrectly")
Expand Down
5 changes: 4 additions & 1 deletion agent/config/types.go
Original file line number Diff line number Diff line change
Expand Up @@ -85,10 +85,13 @@ type Config struct {
// other than containers managed by ECS
ReservedMemory uint16

// DockerStopTimeout specifies the amount time before a SIGKILL is issued to
// DockerStopTimeout specifies the amount of time before a SIGKILL is issued to
// containers managed by ECS
DockerStopTimeout time.Duration

// ContainerStartTimeout specifies the amount of time to wait to start a container
ContainerStartTimeout time.Duration

// AvailableLoggingDrivers specifies the logging drivers available for use
// with Docker. If not set, it defaults to ["json-file","none"].
AvailableLoggingDrivers []dockerclient.LoggingDriver
Expand Down
5 changes: 3 additions & 2 deletions agent/engine/common_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@ import (

"github.com/aws/amazon-ecs-agent/agent/api"
"github.com/aws/amazon-ecs-agent/agent/credentials"
"github.com/aws/amazon-ecs-agent/agent/config"
"github.com/aws/amazon-ecs-agent/agent/engine/dockerclient"
"github.com/aws/amazon-ecs-agent/agent/statechange"
"github.com/aws/amazon-ecs-agent/agent/utils/ttime/mocks"
Expand Down Expand Up @@ -162,8 +163,8 @@ func validateContainerRunWorkflow(t *testing.T,
containerEventsWG.Done()
}()
}).Return(DockerContainerMetadata{DockerID: containerID})

client.EXPECT().StartContainer(containerID, startContainerTimeout).Do(
defaultConfig := config.DefaultConfig()
client.EXPECT().StartContainer(containerID, defaultConfig.ContainerStartTimeout).Do(
func(id string, timeout time.Duration) {
containerEventsWG.Add(1)
go func() {
Expand Down
5 changes: 2 additions & 3 deletions agent/engine/docker_client.go
Original file line number Diff line number Diff line change
Expand Up @@ -67,7 +67,6 @@ const (
LoadImageTimeout = 10 * time.Minute
pullImageTimeout = 2 * time.Hour
createContainerTimeout = 4 * time.Minute
startContainerTimeout = 3 * time.Minute
stopContainerTimeout = 30 * time.Second
removeContainerTimeout = 5 * time.Minute
inspectContainerTimeout = 30 * time.Second
Expand Down Expand Up @@ -531,8 +530,8 @@ func (dg *dockerGoClient) createContainer(ctx context.Context,

func (dg *dockerGoClient) StartContainer(id string, timeout time.Duration) DockerContainerMetadata {
// Create a context that times out after the 'timeout' duration
// This is defined by the const 'startContainerTimeout'. Injecting the 'timeout'
// makes it easier to write tests.
// This is defined by the const 'ContainerStartTimeout' in config. Injecting
// the 'timeout' makes it easier to write tests.
// Eventually, the context should be initialized from a parent root context
// instead of TODO.
ctx, cancel := context.WithTimeout(context.TODO(), timeout)
Expand Down
6 changes: 3 additions & 3 deletions agent/engine/docker_client_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -462,7 +462,7 @@ func TestStartContainer(t *testing.T) {
mockDocker.EXPECT().StartContainerWithContext("id", nil, gomock.Any()).Return(nil),
mockDocker.EXPECT().InspectContainerWithContext("id", gomock.Any()).Return(&docker.Container{ID: "id"}, nil),
)
metadata := client.StartContainer("id", startContainerTimeout)
metadata := client.StartContainer("id", defaultConfig.ContainerStartTimeout)
if metadata.Error != nil {
t.Error("Did not expect error")
}
Expand Down Expand Up @@ -804,7 +804,7 @@ func TestUsesVersionedClient(t *testing.T) {
mockDocker.EXPECT().StartContainerWithContext(gomock.Any(), gomock.Any(), gomock.Any()).Return(nil)
mockDocker.EXPECT().InspectContainerWithContext(gomock.Any(), gomock.Any()).Return(nil, errors.New("err"))

vclient.StartContainer("foo", startContainerTimeout)
vclient.StartContainer("foo", defaultConfig.ContainerStartTimeout)
}

func TestUnavailableVersionError(t *testing.T) {
Expand All @@ -823,7 +823,7 @@ func TestUnavailableVersionError(t *testing.T) {

factory.EXPECT().GetClient(dockerclient.DockerVersion("1.21")).Times(1).Return(nil, errors.New("Cannot get client"))

metadata := vclient.StartContainer("foo", startContainerTimeout)
metadata := vclient.StartContainer("foo", defaultConfig.ContainerStartTimeout)

if metadata.Error == nil {
t.Fatal("Expected error, didn't get one")
Expand Down
2 changes: 1 addition & 1 deletion agent/engine/docker_events_buffer_test.go
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
// +build !integration
// Copyright 2017 Amazon.com, Inc. or its affiliates. All Rights Reserved.
// Copyright 2017 - 2018 Amazon.com, Inc. or its affiliates. All Rights Reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License"). You may
// not use this file except in compliance with the License. A copy of the
Expand Down
2 changes: 1 addition & 1 deletion agent/engine/docker_image_manager_integ_test.go
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
// +build integration
// Copyright 2014-2017 Amazon.com, Inc. or its affiliates. All Rights Reserved.
// Copyright 2014-2018 Amazon.com, Inc. or its affiliates. All Rights Reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License"). You may
// not use this file except in compliance with the License. A copy of the
Expand Down
2 changes: 1 addition & 1 deletion agent/engine/docker_image_manager_test.go
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
// +build !integration
// Copyright 2014-2017 Amazon.com, Inc. or its affiliates. All Rights Reserved.
// Copyright 2014-2018 Amazon.com, Inc. or its affiliates. All Rights Reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License"). You may
// not use this file except in compliance with the License. A copy of the
Expand Down
Loading

0 comments on commit eb9560b

Please sign in to comment.