No description
Find a file
Stephen J Day 9f0c8d6616 Implement notification endpoint webhook dispatch
This changeset implements webhook notification endpoints for dispatching
registry events. Repository instances can be decorated by a listener that
converts calls into context-aware events, using a bridge. Events generated in
the bridge are written to a sink. Implementations of sink include a broadcast
and endpoint sink which can be used to configure event dispatch. Endpoints
represent a webhook notification target, with queueing and retries built in.
They can be added to a Broadcaster, which is a simple sink that writes a block
of events to several sinks, to provide a complete dispatch mechanism.

The main caveat to the current approach is that all unsent notifications are
inmemory. Best effort is made to ensure that notifications are not dropped, to
the point where queues may back up on faulty endpoints. If the endpoint is
fixed, the events will be retried and all messages will go through.

Internally, this functionality is all made up of Sink objects. The queuing
functionality is implemented with an eventQueue sink and retries are
implemented with retryingSink. Replacing the inmemory queuing with something
persistent should be as simple as replacing broadcaster with a remote queue and
that sets up the sinks to be local workers listening to that remote queue.

Metrics are kept for each endpoint and exported via expvar. This may not be a
permanent appraoch but should provide enough information for troubleshooting
notification problems.

Signed-off-by: Stephen J Day <stephen.day@docker.com>
2015-02-03 13:30:20 -08:00
api/v2 Merge pull request #121 from stevvooe/address-layer-upload-errors 2015-02-03 11:48:34 -08:00
auth Remove exported StringSet type and collections package 2015-01-05 18:21:03 -08:00
client [Client] Fix error in parsing of 'Range' header. 2015-02-03 00:34:38 +03:00
cmd Add native TLS support to registry 2015-02-02 14:38:47 -08:00
configuration Add native TLS support to registry 2015-02-02 14:38:47 -08:00
digest Handle empty blob files more appropriately 2015-02-02 13:01:49 -08:00
doc Remove erroneous error code on layer upload delete 2015-01-29 20:44:22 -08:00
Godeps Updates goamz dependency from crowdmob->AdRoll 2015-02-02 11:03:20 -08:00
manifest Add payload and signatures method to SignedManifest 2015-02-03 13:30:20 -08:00
open-design Initial open-design proposal 2014-11-10 09:39:20 -08:00
project Adds pre-commit hook, hook config script, and a README 2014-12-15 18:09:11 -08:00
registry Handle empty blob files more appropriately 2015-02-02 13:01:49 -08:00
storage Implement notification endpoint webhook dispatch 2015-02-03 13:30:20 -08:00
storagedriver Merge pull request #130 from stevvooe/path-names-escaped 2015-02-03 11:24:45 -08:00
testutil Move testutil package to top-level 2015-01-05 16:53:13 -08:00
version Move version printing to version package 2015-01-29 18:32:16 -08:00
.drone.yml Fix goverall 2014-11-22 10:17:14 -08:00
.gitignore Report version in registry binary 2015-01-29 18:32:01 -08:00
.mailmap Autogenerate AUTHORS file for distribution repo 2015-01-14 16:25:27 -08:00
AUTHORS Update AUTHORS file 2015-01-29 15:30:53 -08:00
circle.yml Move to godep 2015-01-22 15:52:46 -08:00
CONTRIBUTING.md Initial open-design proposal 2014-11-10 09:39:20 -08:00
doc.go Move registry package out of repo root 2015-01-06 10:40:22 -08:00
Dockerfile Update Dockerfile to use Makefile to build binary 2015-01-29 18:32:16 -08:00
LICENSE Initial commit 2014-12-22 15:49:26 -08:00
MAINTAINERS Add Stephen Day to maintainers file 2015-01-28 10:31:54 -08:00
Makefile Quote argument in Makefile clean target 2015-01-30 11:13:45 -08:00
README.md Clarify maturity of this 2015-01-12 11:10:13 -08:00

Notice: This repository hosts experimental components that are currently under heavy and fast-paced development, not-ready for public consumption. If you are looking for the stable registry, please head over to docker/docker-registry instead.

Distribution

The Docker toolset to pack, ship, store, and deliver content.

Planned content for this repository:

  • Distribution related specifications
    • Image format
    • JSON registry API
  • Registry implementation: a Golang implementation of the JSON API
  • Client libraries to consume conforming implementations of the JSON API

Ongoing open sprint

What is an open sprint?

The open sprint is a focused effort of a small group of people to kick-off a new project, while commiting to becoming maintainers of the resulting work.

Having a dedicated team work on the subject doesn't mean that you, the community, cannot contribute! We need your input to make the best use of the sprint, and focus our work on what matters for you. For this particular topic:

  • Come discuss on IRC: #docker-distribution on FreeNode
  • Come read and participate in the Google Groups
  • Submit your ideas, and upvote those you think matter the most on Google Moderator

Goal of the distribution sprint

Design a professional grade and extensible content distribution system, that allow users to:

  • Enjoy an efficient, secured and reliable way to store, manage, package and exchange content
  • Hack/roll their own on top of healthy open-source components
  • Implement their own home made solution through good specs, and solid extensions mechanism.

Schedule and expected output

The Open Sprint will start on Monday December 29th, and end on Friday January 16th.

What we want to achieve as a result is:

  • Tactical fixes of today's frustrations in the existing Docker codebase

  • Laying the base of a new distribution subsystem, living independently, and with a well defined group of maintainers. This is the purpose of this repository, which aims at hosting:

    • A specification of the v2 image format
    • A specification of the JSON/HTTP protocol
    • Server-side Go implementation of the v2 registry
    • Client-side Go packages to consume this new API
    • Standalone binaries providing content distribution functionalities outside of Docker
  • Constraints for interface provided by Distribution to Core:

    • The distribution repository is a collection of tools for packaging and shipping content with Docker
    • All tools are usable primarily as standalone command-line tools. They may also expose bindings in one or more programming languages. Typically the first available language is Go, but that is not automatically true and more languages will be supported over time
    • The distribution repository is still under incubation, any code layout, interface and name may change before it gets included in a stable release of Docker

How will this integrate with Docker engine?

Building awesome, independent, and well maintained distribution tools should give Docker core maintainers enough incentive to switch to the newly develop subsystem. We make no assumptions on a given date or milestone as urgency should be fixed through docker/docker#9784, and in order to maintain focus on producing a top quality alternative.

Relevant documents