Commit Graph

2912 Commits

Author SHA1 Message Date
Arnaud Porterie c24d4e8ab4 Merge pull request #20734 from cpuguy83/fix_flakey_test
Fix flakey TestStatsAllNewContainersAdded
2016-02-27 07:52:18 -08:00
David Calavera df2b74188e Merge pull request #20699 from calavera/remove_static_error_declarations
Remove static errors from errors package.
2016-02-26 16:30:12 -08:00
Brian Goff efd281d6eb Fix flakey TestStatsAllNewContainersAdded
Signed-off-by: Brian Goff <cpuguy83@gmail.com>
2016-02-26 16:52:36 -05:00
David Calavera a793564b25 Remove static errors from errors package.
Moving all strings to the errors package wasn't a good idea after all.

Our custom implementation of Go errors predates everything that's nice
and good about working with errors in Go. Take as an example what we
have to do to get an error message:

```go
func GetErrorMessage(err error) string {
	switch err.(type) {
	case errcode.Error:
		e, _ := err.(errcode.Error)
		return e.Message

	case errcode.ErrorCode:
		ec, _ := err.(errcode.ErrorCode)
		return ec.Message()

	default:
		return err.Error()
	}
}
```

This goes against every good practice for Go development. The language already provides a simple, intuitive and standard way to get error messages, that is calling the `Error()` method from an error. Reinventing the error interface is a mistake.

Our custom implementation also makes very hard to reason about errors, another nice thing about Go. I found several (>10) error declarations that we don't use anywhere. This is a clear sign about how little we know about the errors we return. I also found several error usages where the number of arguments was different than the parameters declared in the error, another clear example of how difficult is to reason about errors.

Moreover, our custom implementation didn't really make easier for people to return custom HTTP status code depending on the errors. Again, it's hard to reason about when to set custom codes and how. Take an example what we have to do to extract the message and status code from an error before returning a response from the API:

```go
	switch err.(type) {
	case errcode.ErrorCode:
		daError, _ := err.(errcode.ErrorCode)
		statusCode = daError.Descriptor().HTTPStatusCode
		errMsg = daError.Message()

	case errcode.Error:
		// For reference, if you're looking for a particular error
		// then you can do something like :
		//   import ( derr "github.com/docker/docker/errors" )
		//   if daError.ErrorCode() == derr.ErrorCodeNoSuchContainer { ... }

		daError, _ := err.(errcode.Error)
		statusCode = daError.ErrorCode().Descriptor().HTTPStatusCode
		errMsg = daError.Message

	default:
		// This part of will be removed once we've
		// converted everything over to use the errcode package

		// FIXME: this is brittle and should not be necessary.
		// If we need to differentiate between different possible error types,
		// we should create appropriate error types with clearly defined meaning
		errStr := strings.ToLower(err.Error())
		for keyword, status := range map[string]int{
			"not found":             http.StatusNotFound,
			"no such":               http.StatusNotFound,
			"bad parameter":         http.StatusBadRequest,
			"conflict":              http.StatusConflict,
			"impossible":            http.StatusNotAcceptable,
			"wrong login/password":  http.StatusUnauthorized,
			"hasn't been activated": http.StatusForbidden,
		} {
			if strings.Contains(errStr, keyword) {
				statusCode = status
				break
			}
		}
	}
```

You can notice two things in that code:

1. We have to explain how errors work, because our implementation goes against how easy to use Go errors are.
2. At no moment we arrived to remove that `switch` statement that was the original reason to use our custom implementation.

This change removes all our status errors from the errors package and puts them back in their specific contexts.
IT puts the messages back with their contexts. That way, we know right away when errors used and how to generate their messages.
It uses custom interfaces to reason about errors. Errors that need to response with a custom status code MUST implementent this simple interface:

```go
type errorWithStatus interface {
	HTTPErrorStatusCode() int
}
```

This interface is very straightforward to implement. It also preserves Go errors real behavior, getting the message is as simple as using the `Error()` method.

I included helper functions to generate errors that use custom status code in `errors/errors.go`.

By doing this, we remove the hard dependency we have eeverywhere to our custom errors package. Yes, you can use it as a helper to generate error, but it's still very easy to generate errors without it.

Please, read this fantastic blog post about errors in Go: http://dave.cheney.net/2014/12/24/inspecting-errors

Signed-off-by: David Calavera <david.calavera@gmail.com>
2016-02-26 15:49:09 -05:00
David Calavera e330d0749c Merge pull request #20703 from riyazdf/notary-v0.2.0-vendor
Vendor in notary v0.2.0
2016-02-26 08:53:07 -08:00
Brian Goff c47674efda Merge pull request #20428 from jfrazelle/generate-conversion
generate seccomp profile convert type
2016-02-26 10:28:23 -05:00
Brian Goff 6748cc10ac Merge pull request #20655 from hqhq/hq_fix_update_memoryswap
Fix problems when update swap memory
2016-02-25 22:28:53 -05:00
David Calavera d8b6e62f50 Merge pull request #20580 from BrianBland/crossRepoPushRetry
Improve auth fallback behavior for cross-repository push
2016-02-25 16:37:04 -08:00
Sebastiaan van Stijn 5cb4693300 Merge pull request #20673 from Microsoft/jjh/testkill
Windows CI: Port TestKill*
2016-02-26 01:11:51 +01:00
Riyaz Faizullabhoy 84dc2d9e70 Vendor in notary v0.2.0
Signed-off-by: Riyaz Faizullabhoy <riyaz.faizullabhoy@docker.com>
2016-02-25 13:40:00 -08:00
Tibor Vass 6fa5576e30 Merge pull request #20697 from tiborvass/tls-remote-daemon-tests
Support TLS remote test daemon
2016-02-25 16:16:40 -05:00
Tibor Vass f4a1e3db99 Support TLS remote test daemon
This will allow us to have a windows-to-linux CI, where the linux host
can be anywhere, connecting with TLS.

Signed-off-by: Tibor Vass <tibor@docker.com>
2016-02-25 14:12:17 -05:00
Vincent Demeester 21c8511123 Fix TestExecApiStartWithDetach on WindowsTP4
Signed-off-by: Vincent Demeester <vincent@sbr.pm>
2016-02-25 14:27:22 +01:00
Sebastiaan van Stijn 7cf03700f8 Merge pull request #20679 from Microsoft/jjh/testrestart
Windows CI: Port docker_cli_restart_test.go
2016-02-25 10:17:25 +01:00
Sebastiaan van Stijn ca7ce05e81 Merge pull request #20677 from Microsoft/jjh/testclilogs
Windows CI: Port docker_cli_logs_test.go
2016-02-25 09:38:23 +01:00
Vincent Demeester 0ad04242b4 Merge pull request #20682 from cpuguy83/fix_volplugin_panics
Fix panic when plugin responds with null volume
2016-02-25 09:32:54 +01:00
Vincent Demeester 9f1ad7850c Merge pull request #20674 from Microsoft/jjh/testlogsapi
Windows CI: Port TestLogsAPI*
2016-02-25 09:11:15 +01:00
Vincent Demeester abfc480f4b Merge pull request #20664 from Microsoft/jjh/busyboxtop
Windows CI: Integrity check for busybox top
2016-02-25 09:09:37 +01:00
John Howard 10bd587d77 Windows CI: Port docker_cli_logs_test.go
Signed-off-by: John Howard <jhoward@microsoft.com>
2016-02-24 20:19:48 -08:00
David Calavera cee4ff1c4a Merge pull request #20647 from coolljt0725/fix_20638
Fix exec start api with detach and AttachStdin at same time. fixes #2…
2016-02-24 20:17:15 -08:00
Brian Bland 1d3480f9ba Improve fallback behavior for cross-repository push
Attempt layer mounts from up to 3 source repositories, possibly
falling back to a standard blob upload for cross repository pushes.
Addresses compatiblity issues with token servers which do not grant
multiple repository scopes, resulting in an authentication failure for
layer mounts, which would otherwise cause the push to terminate with an
error.

Signed-off-by: Brian Bland <brian.bland@docker.com>
2016-02-24 19:13:35 -08:00
Lei Jitang fb0ac1afd9 Fix exec start api with detach and AttachStdin at same time. fixes #20638
Signed-off-by: Lei Jitang <leijitang@huawei.com>
2016-02-24 21:04:44 -05:00
Brian Goff 96c79a1934 Fix panic when plugin responds with null volume
In cases where the a plugin responds with both a null or empty volume
and a null or empty Err, the daemon would panic.
This is because we assumed the idiom if `err` is nil, then `v` must not
be but in reality the plugin may return whatever it wants and we want to
make sure it doesn't harm the daemon.

Signed-off-by: Brian Goff <cpuguy83@gmail.com>
2016-02-24 20:45:38 -05:00
John Howard 281c1ced6d Windows CI: Port docker_cli_restart_test.go
Signed-off-by: John Howard <jhoward@microsoft.com>
2016-02-24 15:21:56 -08:00
John Howard 00f65ae810 Windows CI: Port TestLogsAPI*
Signed-off-by: John Howard <jhoward@microsoft.com>
2016-02-24 13:43:52 -08:00
John Howard 03e2ff322b Windows CI: Port TestKill*
Signed-off-by: John Howard <jhoward@microsoft.com>
2016-02-24 13:33:25 -08:00
John Howard 6a931c3590 Windows CI: Integrity check for busybox top
Signed-off-by: John Howard <jhoward@microsoft.com>
2016-02-24 11:00:47 -08:00
Arnaud Porterie 467c8b1a6a Merge pull request #20637 from Microsoft/jjh/fixteststartattachmultiplecontainers
Windows CI: Fix TestStartAttachMultipleContainers
2016-02-24 08:46:00 -08:00
Sebastiaan van Stijn 5fdfb2985b Merge pull request #20619 from Microsoft/jjh/useraccounts
Windows: Updates for virtual user account
2016-02-24 13:48:27 +01:00
Sebastiaan van Stijn 034a1a8dfd Merge pull request #20017 from calavera/expose_volumes_in_ps
Add mounts to docker ps.
2016-02-24 11:08:21 +01:00
Qiang Huang fa3b197157 Restore container configs when update failed
Signed-off-by: Qiang Huang <h.huangqiang@huawei.com>
2016-02-24 14:23:48 +08:00
Qiang Huang 8ae6f6ac28 Support update swap memory only
We should support update swap memory without memory.

Signed-off-by: Qiang Huang <h.huangqiang@huawei.com>
2016-02-24 13:36:47 +08:00
John Howard ef9f13af3d Windows CI: Fix TestStartAttachMultipleContainers
Signed-off-by: John Howard <jhoward@microsoft.com>
2016-02-23 16:24:35 -08:00
Christopher Jones 3abf2a7741 Fix flaky OOM tests
If cgroup swap memory limit isn't enabled, then
the -m flag doesn't work and the container that is created for
both of these tests is very large. Because we are trying to run the
containers out of memory, this takes a very long time and causes the
tests to fail most of the time.

Follow-up to #17913

Signed-off-by: Christopher Jones <tophj@linux.vnet.ibm.com>
2016-02-23 15:26:26 -05:00
Arnaud Porterie 0a7755ab4e Fix flaky TestExec
The container started with `-d` as part of the test requires a `waitRun`
to ensure it is actually running before attempting any other operation.

Signed-off-by: Arnaud Porterie <arnaud.porterie@docker.com>
2016-02-23 09:51:09 -08:00
John Howard 800c9e81ea Windows: Updates for virtual user account
Signed-off-by: John Howard <jhoward@microsoft.com>
2016-02-23 09:47:52 -08:00
David Calavera bd4fb00fb6 Add mounts to docker ps.
- Allow to filter containers by volume with `--filter volume=name` and `filter volume=/dest`.
- Show their names in the list with the custom format `{{ .Mounts }}`.

Signed-off-by: David Calavera <david.calavera@gmail.com>
2016-02-23 12:10:24 -05:00
David Calavera 9d882cbb44 Merge pull request #20581 from stweil/master
Fix some typos in comments and strings
2016-02-23 08:20:53 -08:00
Wen Cheng Ma 8474bbff45 Fix typo
Signed-off-by: Wen Cheng Ma <wenchma@cn.ibm.com>
2016-02-23 17:27:55 +08:00
Stefan Weil 2eee613326 Fix some typos in comments and strings
Most of them were found and fixed by codespell.

Signed-off-by: Stefan Weil <sw@weilnetz.de>
2016-02-22 20:27:15 +01:00
Phil Estes 4781d5c4fb Unskip authz events test after fixes
Now that the various fixes are all committed, let's see if this gets
less flaky now.

Docker-DCO-1.1-Signed-off-by: Phil Estes <estesp@linux.vnet.ibm.com> (github: estesp)
2016-02-20 20:19:54 -06:00
Antonio Murdaca 076b3558fc Merge pull request #20509 from estesp/cleanup-authz-test
Clean up authz integration-cli test
2016-02-20 12:10:29 +01:00
Zhang Wei ff3ea4c90f Update RestartPolicy of container
Add `--restart` flag for `update` command, so we can change restart
policy for a container no matter it's running or stopped.

Signed-off-by: Zhang Wei <zhangwei555@huawei.com>
2016-02-20 17:06:32 +08:00
Tibor Vass 3d65e7126c Merge pull request #20446 from estesp/fix-userns-cp
Fix copy chown settings to not default to real root
2016-02-19 19:45:44 -05:00
Phil Estes fe015c5ce0 Allow post-start load of busybox to remove restarts
The restarts in the authz plugin test suite seems to be causing
flakiness in CI, and can be avoided by separating the daemon start and
busybox image load.

Docker-DCO-1.1-Signed-off-by: Phil Estes <estesp@linux.vnet.ibm.com> (github: estesp)
2016-02-19 18:44:36 -06:00
Arnaud Porterie b9195cd6d4 Merge pull request #20464 from cpuguy83/fix_events_flakiness
Fix events test flakiness.
2016-02-19 15:39:27 -08:00
Antonio Murdaca 11435b674b
add seccomp default profile fix tests
Signed-off-by: Antonio Murdaca <runcom@redhat.com>
Signed-off-by: Jessica Frazelle <acidburn@docker.com>
2016-02-19 13:32:54 -08:00
Brian Goff 0e72550c5b Merge pull request #20383 from HackToday/addsort
Make network ls output order
2016-02-19 15:42:48 -05:00
Brian Goff 48701888c2 Merge pull request #20389 from HackToday/addvolumesupport
Make volume ls output order
2016-02-19 15:41:34 -05:00
Arnaud Porterie 6e0f873f05 Temporarily skip TestAuthZPluginAllowEventStream
Signed-off-by: Arnaud Porterie <arnaud.porterie@docker.com>
2016-02-19 10:32:05 -08:00