MCPcopy
hub / github.com/containerd/containerd / echo

Method echo

core/transfer/local/transfer.go:115–135  ·  view source on GitHub ↗

echo is mostly used for testing, it implements an import->export which is a no-op which only roundtrips the bytes.

(ctx context.Context, i transfer.ImageImporter, e transfer.ImageExportStreamer, tops *transfer.Config)

Source from the content-addressed store, hash-verified

113// echo is mostly used for testing, it implements an import->export which is
114// a no-op which only roundtrips the bytes.
115func (ts *localTransferService) echo(ctx context.Context, i transfer.ImageImporter, e transfer.ImageExportStreamer, tops *transfer.Config) error {
116 iis, ok := i.(transfer.ImageImportStreamer)
117 if !ok {
118 return fmt.Errorf("echo requires access to raw stream: %w", errdefs.ErrNotImplemented)
119 }
120 r, _, err := iis.ImportStream(ctx)
121 if err != nil {
122 return err
123 }
124 wc, _, err := e.ExportStream(ctx)
125 if err != nil {
126 return err
127 }
128
129 // TODO: Use fixed buffer? Send write progress?
130 _, err = io.Copy(wc, r)
131 if werr := wc.Close(); werr != nil && err == nil {
132 err = werr
133 }
134 return err
135}
136
137// WithLease attaches a lease on the context
138func (ts *localTransferService) withLease(ctx context.Context, opts ...leases.Opt) (context.Context, func(context.Context) error, error) {

Callers 1

TransferMethod · 0.95

Calls 4

CopyMethod · 0.80
ImportStreamMethod · 0.65
ExportStreamMethod · 0.65
CloseMethod · 0.65

Tested by

no test coverage detected