Instead, provide a variant of instrumentedResponseWriter that does not
implement CloseNotifier, and use that when necessary. In
copyFullPayload, log instead of panicing when we encounter something
that doesn't implement CloseNotifier.
This is more complicated than I'd like, but it's necessary because
instrumentedResponseWriter must not embed CloseNotifier unless there's
really a CloseNotifier to embed.
Signed-off-by: Aaron Lehmann <aaron.lehmann@docker.com>
with a new `proxy` section in the configuration file.
Create a new registry type which delegates storage to a proxyBlobStore
and proxyManifestStore. These stores will pull through data if not present
locally. proxyBlobStore takes care not to write duplicate data to disk.
Add a scheduler to cleanup expired content. The scheduler runs as a background
goroutine. When a blob or manifest is pulled through from the remote registry,
an entry is added to the scheduler with a TTL. When the TTL expires the
scheduler calls a pre-specified function to remove the fetched resource.
Add token authentication to the registry middleware. Get a token at startup
and preload the credential store with the username and password supplied in the
config file.
Allow resumable digest functionality to be disabled at runtime and disable
it when the registry is a pull through cache.
Signed-off-by: Richard Scothern <richard.scothern@gmail.com>
- Upgrade docker-compose to 1.3.3 to work around
https://github.com/docker/compose/issues/1314
- Change run.sh to run the Docker container in the foreground so that
the exit code is propagated.
Signed-off-by: Aaron Lehmann <aaron.lehmann@docker.com>
- Add a command line argument to run_multiversion.sh which has it start
a docker daemon. This allows it to run directly inside an outermost
docker-integration container instead of running outside all containers.
- Install Docker 1.7.1 intead of 1.7.0-rc1 in the docker-integration
container. 1.7.0 has a bug that prevents "docker cp" from working
properly.
Signed-off-by: Aaron Lehmann <aaron.lehmann@docker.com>
This channel never gets written to, but this only means that the mock
ResponseWriter will never signal a premature disconnect.
Based on feedback from #763.
Signed-off-by: Aaron Lehmann <aaron.lehmann@docker.com>
registry/storage/blob_test.go:149: arg d for printf verb %s of wrong type: github.com/docker/distribution.Descriptor
Signed-off-by: Doug Davis <dug@us.ibm.com>
It's necessary to compile the code first; otherwise go vet silently
fails to load imports.
Fixes#807.
Signed-off-by: Aaron Lehmann <aaron.lehmann@docker.com>
The response code isn't actually sent to the client, because the
connection has already closed by this point. But it causes the status
code to appear as 499 in the logs instead of 0.
Signed-off-by: Aaron Lehmann <aaron.lehmann@docker.com>
When a client disconnects without completing a HTTP request, we were
attempting to process the partial request, which usually leads to a 400
error. These errors can pollute the logs and make it more difficult to
track down real bugs.
This change uses CloseNotifier to detect disconnects. In combination
with checking Content-Length, we can detect a disconnect before sending
the full payload, and avoid logging a 400 error.
This logic is only applied to PUT, POST, and PATCH endpoints, as these
are the places where disconnects during a request are most likely to
happen.
Signed-off-by: Aaron Lehmann <aaron.lehmann@docker.com>
Support for exposing the CloseNotifier interface was just recently added
to its logging handler wrappers. This is needed for #597.
Signed-off-by: Aaron Lehmann <aaron.lehmann@docker.com>