1
0
mirror of https://github.com/docker/docs.git synced 2026-11-12 16:32:36 +03:00
Commit Graph

47845 Commits

Author SHA1 Message Date
Stephen Day
ace71ea9c9 Merge pull request #519 from stevvooe/blob-service-refactor
Refactor Blob Service API
2015-05-15 17:52:15 -07:00
Xian Chaobo
e555e8f021 merge volumes-from integration tests
Signed-off-by: Xian Chaobo <xianchaobo@huawei.com>
2015-05-16 08:22:17 +08:00
Stephen J Day
593bbccdb5 Refactor Blob Service API
This PR refactors the blob service API to be oriented around blob descriptors.
Identified by digests, blobs become an abstract entity that can be read and
written using a descriptor as a handle. This allows blobs to take many forms,
such as a ReadSeekCloser or a simple byte buffer, allowing blob oriented
operations to better integrate with blob agnostic APIs (such as the `io`
package). The error definitions are now better organized to reflect conditions
that can only be seen when interacting with the blob API.

The main benefit of this is to separate the much smaller metadata from large
file storage. Many benefits also follow from this. Reading and writing has
been separated into discrete services. Backend implementation is also
simplified, by reducing the amount of metadata that needs to be picked up to
simply serve a read. This also improves cacheability.

"Opening" a blob simply consists of an access check (Stat) and a path
calculation. Caching is greatly simplified and we've made the mapping of
provisional to canonical hashes a first-class concept. BlobDescriptorService
and BlobProvider can be combined in different ways to achieve varying effects.

Recommend Review Approach
-------------------------

This is a very large patch. While apologies are in order, we are getting a
considerable amount of refactoring. Most changes follow from the changes to
the root package (distribution), so start there. From there, the main changes
are in storage. Looking at (*repository).Blobs will help to understand the how
the linkedBlobStore is wired. One can explore the internals within and also
branch out into understanding the changes to the caching layer. Following the
descriptions below will also help to guide you.

To reduce the chances for regressions, it was critical that major changes to
unit tests were avoided. Where possible, they are left untouched and where
not, the spirit is hopefully captured. Pay particular attention to where
behavior may have changed.

Storage
-------

The primary changes to the `storage` package, other than the interface
updates, were to merge the layerstore and blobstore. Blob access is now
layered even further. The first layer, blobStore, exposes a global
`BlobStatter` and `BlobProvider`. Operations here provide a fast path for most
read operations that don't take access control into account. The
`linkedBlobStore` layers on top of the `blobStore`, providing repository-
scoped blob link management in the backend. The `linkedBlobStore` implements
the full `BlobStore` suite, providing access-controlled, repository-local blob
writers. The abstraction between the two is slightly broken in that
`linkedBlobStore` is the only channel under which one can write into the global
blob store. The `linkedBlobStore` also provides flexibility in that it can act
over different link sets depending on configuration. This allows us to use the
same code for signature links, manifest links and blob links.  Eventually, we
will fully consolidate this storage.

The improved cache flow comes from the `linkedBlobStatter` component
of `linkedBlobStore`. Using a `cachedBlobStatter`, these combine together to
provide a simple cache hierarchy that should streamline access checks on read
and write operations, or at least provide a single path to optimize. The
metrics have been changed in a slightly incompatible way since the former
operations, Fetch and Exists, are no longer relevant.

The fileWriter and fileReader have been slightly modified to support the rest
of the changes. The most interesting is the removal of the `Stat` call from
`newFileReader`. This was the source of unnecessary round trips that were only
present to look up the size of the resulting reader. Now, one must simply pass
in the size, requiring the caller to decide whether or not the `Stat` call is
appropriate. In several cases, it turned out the caller already had the size
already. The `WriterAt` implementation has been removed from `fileWriter`,
since it is no longer required for `BlobWriter`, reducing the number of paths
which writes may take.

Cache
-----

Unfortunately, the `cache` package required a near full rewrite. It was pretty
mechanical in that the cache is oriented around the `BlobDescriptorService`
slightly modified to include the ability to set the values for individual
digests. While the implementation is oriented towards caching, it can act as a
primary store. Provisions are in place to have repository local metadata, in
addition to global metadata. Fallback is implemented as a part of the storage
package to maintain this flexibility.

One unfortunate side-effect is that caching is now repository-scoped, rather
than global. This should have little effect on performance but may increase
memory usage.

Handlers
--------

The `handlers` package has been updated to leverage the new API. For the most
part, the changes are superficial or mechanical based on the API changes. This
did expose a bug in the handling of provisional vs canonical digests that was
fixed in the unit tests.

Configuration
-------------

One user-facing change has been made to the configuration and is updated in
the associated documentation. The `layerinfo` cache parameter has been
deprecated by the `blobdescriptor` cache parameter. Both are equivalent and
configuration files should be backward compatible.

Notifications
-------------

Changes the `notification` package are simply to support the interface
changes.

Context
-------

A small change has been made to the tracing log-level. Traces have been moved
from "info" to "debug" level to reduce output when not needed.

Signed-off-by: Stephen J Day <stephen.day@docker.com>
2015-05-15 17:05:18 -07:00
Michael Crosby
115b11ae69 Merge pull request #13222 from calavera/plugins_infra
Remote plugins plumbing.
2015-05-15 16:37:55 -07:00
Victor Vieux
1f5d66d1f1 fix match
Signed-off-by: Victor Vieux <victorvieux@gmail.com>
2015-05-15 16:28:39 -07:00
John Howard
6c187b8b4b Windows: No unix_socket.go
Signed-off-by: John Howard <jhoward@microsoft.com>
2015-05-15 15:49:02 -07:00
Madhu Venugopal
ba3bcf0537 Allow to call back when a plugin is loaded.
Signed-off-by: Madhu Venugopal <madhu@docker.com>
2015-05-15 13:50:44 -07:00
Andrea Luzzardi
3e4e74c5a1 store: Close channels in case of errors in Watch/WatchTree.
Signed-off-by: Andrea Luzzardi <aluzzardi@gmail.com>
2015-05-15 13:37:51 -07:00
Andrea Luzzardi
2cdca520d9 store/consul: Watch() should work even if the key doesn't exist.
Signed-off-by: Andrea Luzzardi <aluzzardi@gmail.com>
2015-05-15 13:37:51 -07:00
Andrea Luzzardi
c77f7332a0 store: Fixes to etcd and zk WatchTree
Signed-off-by: Andrea Luzzardi <aluzzardi@gmail.com>
2015-05-15 13:37:51 -07:00
Andrea Luzzardi
7d7e4aee13 store: Watch: Use channels instead of callbacks.
This gets rid of `CancelWatch*` functions and its usage is much simpler.

Signed-off-by: Andrea Luzzardi <aluzzardi@gmail.com>
2015-05-15 13:37:51 -07:00
Alexandre Beslic
a30c2ae680 Merge pull request #795 from aluzzardi/store-cleanup
Store cleanup
2015-05-15 13:37:14 -07:00
Ahmet Alp Balkan
1630ed97ac Introduce daemon event 'tag' upon image tagging
Signed-off-by: Ahmet Alp Balkan <ahmetalpbalkan@gmail.com>
2015-05-15 20:21:59 +00:00
Evan Hazlett
15e022219f Merge pull request #1172 from nathanleclaire/ssh_timeout_fixup
Move over to real retries method
2015-05-15 16:14:51 -04:00
unclejack
d6a545a989 builder/internals: set up network as bridge
Signed-off-by: Cristian Staretu <cristian.staretu@gmail.com>
2015-05-15 22:58:21 +03:00
Xian Chaobo
b94d6baf2b fix #807: support --volumes-from rw/ro
Signed-off-by: Xian Chaobo <xianchaobo@huawei.com>
2015-05-16 03:01:41 +08:00
Alexander Morozov
27b77464d8 Merge pull request #13232 from Microsoft/10662-zfs
Windows: No ZFS graphdriver
2015-05-15 11:51:48 -07:00
Alexander Morozov
0db7365c66 Merge pull request #13221 from duglin/ReenableDebug
add link between -D and --log-level=debug back in
2015-05-15 11:45:44 -07:00
David Calavera
b785e5091f Merge pull request #13086 from shishir-a412ed/docker_root_execdriver
root dir for execdriver (/var/run/docker) should be configurable
2015-05-15 11:16:12 -07:00
Alexander Morozov
88127ce475 Merge pull request #13246 from unclejack/refactor_statscollector
daemon/stats_collector: refactor getSystemCpuUsage
2015-05-15 11:06:47 -07:00
David Calavera
839d64ffb1 Remote plugins plumbing.
Signed-off-by: David Calavera <david.calavera@gmail.com>
2015-05-15 11:04:58 -07:00
Nathan LeClaire
e4785ad879 Move over to real retries method
Signed-off-by: Nathan LeClaire <nathan.leclaire@gmail.com>
2015-05-15 10:39:39 -07:00
Michael Crosby
520955b1cf Merge pull request #13236 from vieux/revert_time_change
Revert "Fix inconsistent date formats in API"
2015-05-15 10:32:03 -07:00
Evan Hazlett
48c033e271 Merge pull request #1140 from nathanleclaire/new_scp
Implement docker-machine scp
2015-05-15 13:21:37 -04:00
John Howard
0bdeef94c7 Make which cross binary fails clearer
Signed-off-by: John Howard <jhoward@microsoft.com>
2015-05-15 09:25:13 -07:00
Alexander Morozov
5d2ef30a38 Merge pull request #13251 from cpuguy83/13233_fix_log_follow_goroutine_check
Extend sleep/timeout for ngoroutine check
2015-05-15 08:57:25 -07:00
Brian Goff
248e5a4c83 Merge pull request #13220 from Microsoft/10662-sysinfo
Windows: Refactor sysinfo for compilation
2015-05-15 10:53:55 -04:00
Brian Goff
2c8eba14df Merge pull request #13243 from coolljt0725/remove_redundant_log
Cleanup:Remove redundant log in pkg/pidfile/pidfile.go
2015-05-15 10:13:19 -04:00
Brian Goff
f207322c0a Extend sleep/timeout for ngoroutine check
In cases where this is failing it's ok to have the test take extra time,
but we don't want it to fail because of some race/performance
differences between systems.
So make the timeout go to 30s and double the sleep time in between
checks so it's not pounding the daemon quite so fast.

Originally I couldn't make this test fail (pre-change), but changed
graphdrivers and saw a failure pretty quickly.
This change seems to smooth that out.

Signed-off-by: Brian Goff <cpuguy83@gmail.com>
2015-05-15 09:54:43 -04:00
Shishir Mahajan
8b2c6cb072 root dir for execdriver (/var/run/docker) should be configurable
Signed-off-by: Shishir Mahajan <shishir.mahajan@redhat.com>
2015-05-15 09:30:36 -04:00
Aanand Prasad
862971cffa Fix race condition in docker-compose run
We shouldn't start the container before handing it off to dockerpty -
dockerpty will start it after attaching, which is the correct order.
Otherwise the container might exit before we attach to it, which can
lead to weird bugs.

Signed-off-by: Aanand Prasad <aanand.prasad@gmail.com>
2015-05-15 12:16:24 +01:00
Lei Jitang
0204ecdf70 Fix incorrect document storage-opt
Signed-off-by: Lei Jitang <leijitang@huawei.com>
2015-05-15 19:13:07 +08:00
unclejack
25f776451e daemon/stats_collector: refactor getSystemCpuUsage
Signed-off-by: Cristian Staretu <cristian.staretu@gmail.com>
2015-05-15 12:22:50 +03:00
Xian Chaobo
ada8208157 remove retry in test
Signed-off-by: Xian Chaobo <xianchaobo@huawei.com>
2015-05-15 05:12:22 -04:00
Xian Chaobo
4af3e30f64 Fix:#748 add refresh container
Signed-off-by: Xian Chaobo <xianchaobo@huawei.com>
2015-05-15 04:46:02 -04:00
Lei Jitang
60e5c273cf Remove redundant log in pkg/pidfile/pidfile.go
Signed-off-by: Lei Jitang <leijitang@huawei.com>
2015-05-15 15:26:00 +08:00
Andrea Luzzardi
60cfbc89c2 store: fix gofmt
Signed-off-by: Andrea Luzzardi <aluzzardi@gmail.com>
2015-05-15 00:23:38 -07:00
Qiang Huang
478d86a5f5 kr/pty: vendor upstream 5cf931ef8f
Signed-off-by: Qiang Huang <h.huangqiang@huawei.com>
2015-05-15 15:22:16 +08:00
Andrea Luzzardi
0f61855877 store: Get rid of "discovery" log messages
Signed-off-by: Andrea Luzzardi <aluzzardi@gmail.com>
2015-05-14 22:35:14 -07:00
Andrea Luzzardi
924bde48e7 store: Get rid of structs.go as it only contains errors/config
Signed-off-by: Andrea Luzzardi <aluzzardi@gmail.com>
2015-05-14 22:29:33 -07:00
Andrea Luzzardi
a897fa04d5 store: Watch/WatchTree: Removed unused params
Signed-off-by: Andrea Luzzardi <aluzzardi@gmail.com>
2015-05-14 22:25:26 -07:00
Andrea Luzzardi
2c1040971a store: Move initialize type next to initializers.
Signed-off-by: Andrea Luzzardi <aluzzardi@gmail.com>
2015-05-14 22:10:19 -07:00
Andrea Luzzardi
f87505e2e7 store: KVEntry -> KVPair
Signed-off-by: Andrea Luzzardi <aluzzardi@gmail.com>
2015-05-14 22:00:27 -07:00
Andrea Luzzardi
895484ec2a store: WatchRange -> WatchTree
Signed-off-by: Andrea Luzzardi <aluzzardi@gmail.com>
2015-05-14 21:58:02 -07:00
Andrea Luzzardi
1d3aa013db store: DeleteRange -> DeleteTree
Signed-off-by: Andrea Luzzardi <aluzzardi@gmail.com>
2015-05-14 21:58:02 -07:00
Andrea Luzzardi
6f41eabdae store: GetRange -> List
Signed-off-by: Andrea Luzzardi <aluzzardi@gmail.com>
2015-05-14 21:58:02 -07:00
Andrea Luzzardi
1638907485 store: Fix etcd atomic operations.
- The TTL was set to 5 by error (I guess)
- There is no need to check the response, the operation fails.

Signed-off-by: Andrea Luzzardi <aluzzardi@gmail.com>
2015-05-14 21:58:02 -07:00
Andrea Luzzardi
bd18f27bda store: Refactor Atomic operations to use KVEntry.
Signed-off-by: Andrea Luzzardi <aluzzardi@gmail.com>
2015-05-14 21:58:02 -07:00
Andrea Luzzardi
93ad39c079 store: Use KVEntry in Get() for consistency with GetRange()
Signed-off-by: Andrea Luzzardi <aluzzardi@gmail.com>
2015-05-14 21:58:02 -07:00
Andrea Luzzardi
d4bdb10d35 store: Make KVEntry a struct rather than an interface.
Signed-off-by: Andrea Luzzardi <aluzzardi@gmail.com>
2015-05-14 21:58:02 -07:00