MCPcopy
hub / github.com/minio/minio-go / PutObjectsSnowball

Method PutObjectsSnowball

api-putobject-snowball.go:109–246  ·  view source on GitHub ↗

PutObjectsSnowball will put multiple objects with a single put call. A (compressed) TAR file will be created which will contain multiple objects. The key for each object will be used for the destination in the specified bucket. Total size should be < 5TB. This function blocks until 'objs' is closed

(ctx context.Context, bucketName string, opts SnowballOptions, objs <-chan SnowballObject)

Source from the content-addressed store, hash-verified

107// Total size should be < 5TB.
108// This function blocks until 'objs' is closed and the content has been uploaded.
109func (c *Client) PutObjectsSnowball(ctx context.Context, bucketName string, opts SnowballOptions, objs <-chan SnowballObject) (err error) {
110 err = opts.Opts.validate(c)
111 if err != nil {
112 return err
113 }
114 var tmpWriter io.Writer
115 var getTmpReader func() (rc readSeekCloser, sz int64, err error)
116 if opts.InMemory {
117 b := bytes.NewBuffer(nil)
118 tmpWriter = b
119 getTmpReader = func() (readSeekCloser, int64, error) {
120 return nopReadSeekCloser{bytes.NewReader(b.Bytes())}, int64(b.Len()), nil
121 }
122 } else {
123 f, err := os.CreateTemp("", "s3-putsnowballobjects-*")
124 if err != nil {
125 return err
126 }
127 name := f.Name()
128 tmpWriter = f
129 var once sync.Once
130 defer once.Do(func() {
131 f.Close()
132 })
133 defer os.Remove(name)
134 getTmpReader = func() (readSeekCloser, int64, error) {
135 once.Do(func() {
136 f.Close()
137 })
138 f, err := os.Open(name)
139 if err != nil {
140 return nil, 0, err
141 }
142 st, err := f.Stat()
143 if err != nil {
144 return nil, 0, err
145 }
146 return f, st.Size(), nil
147 }
148 }
149 flush := func() error { return nil }
150 if !opts.Compress {
151 if !opts.InMemory {
152 // Insert buffer for writes.
153 buf := bufio.NewWriterSize(tmpWriter, 1<<20)
154 flush = buf.Flush
155 tmpWriter = buf
156 }
157 } else {
158 s2c := s2.NewWriter(tmpWriter, s2.WriterBetterCompression())
159 flush = s2c.Close
160 defer s2c.Close()
161 tmpWriter = s2c
162 }
163 t := tar.NewWriter(tmpWriter)
164
165objectLoop:
166 for {

Callers 1

mainFunction · 0.80

Calls 7

PutObjectMethod · 0.95
LenMethod · 0.80
DoMethod · 0.80
StatMethod · 0.80
validateMethod · 0.45
CloseMethod · 0.45
RemoveMethod · 0.45

Tested by

no test coverage detected