MCPcopy Index your code
hub / github.com/containerd/containerd / transition

Method transition

plugins/snapshots/devmapper/pool_device.go:177–213  ·  view source on GitHub ↗

transition invokes 'updateStateFn' callback to perform devmapper operation and reflects device state changes/errors in meta store. 'tryingState' will be set before invoking callback. If callback succeeded 'successState' will be set, otherwise error details will be recorded in meta store.

(ctx context.Context, deviceName string, tryingState DeviceState, successState DeviceState, updateStateFn func() error)

Source from the content-addressed store, hash-verified

175// 'tryingState' will be set before invoking callback. If callback succeeded 'successState' will be set, otherwise
176// error details will be recorded in meta store.
177func (p *PoolDevice) transition(ctx context.Context, deviceName string, tryingState DeviceState, successState DeviceState, updateStateFn func() error) error {
178 // Set device to trying state
179 uerr := p.metadata.UpdateDevice(ctx, deviceName, func(deviceInfo *DeviceInfo) error {
180 deviceInfo.State = tryingState
181 return nil
182 })
183
184 if uerr != nil {
185 return fmt.Errorf("failed to set device %q state to %q: %w", deviceName, tryingState, uerr)
186 }
187
188 var result []error
189
190 // Invoke devmapper operation
191 err := updateStateFn()
192
193 if err != nil {
194 result = append(result, err)
195 }
196
197 // If operation succeeded transition to success state, otherwise save error details
198 uerr = p.metadata.UpdateDevice(ctx, deviceName, func(deviceInfo *DeviceInfo) error {
199 if err == nil {
200 deviceInfo.State = successState
201 deviceInfo.Error = ""
202 } else {
203 deviceInfo.Error = err.Error()
204 }
205 return nil
206 })
207
208 if uerr != nil {
209 result = append(result, uerr)
210 }
211
212 return errors.Join(result...)
213}
214
215// CreateThinDevice creates new devmapper thin-device with given name and size.
216// Device ID for thin-device will be allocated from metadata store.

Callers 7

createDeviceMethod · 0.95
activateDeviceMethod · 0.95
createSnapshotMethod · 0.95
SuspendDeviceMethod · 0.95
ResumeDeviceMethod · 0.95
DeactivateDeviceMethod · 0.95
deleteDeviceMethod · 0.95

Calls 2

UpdateDeviceMethod · 0.80
ErrorMethod · 0.45

Tested by

no test coverage detected