(ctx context.Context, name string, keypath backend.KeyPath, data io.Reader, size int64, version backend.Version)
| 339 | } |
| 340 | |
| 341 | func (rw *Azure) WriteVersioned(ctx context.Context, name string, keypath backend.KeyPath, data io.Reader, size int64, version backend.Version) (backend.Version, error) { |
| 342 | // TODO use conditional if-match API |
| 343 | _, currentVersion, err := rw.ReadVersioned(ctx, name, keypath) |
| 344 | if err != nil && !errors.Is(err, backend.ErrDoesNotExist) { |
| 345 | return "", err |
| 346 | } |
| 347 | |
| 348 | level.Info(log.Logger).Log("msg", "WriteVersioned - fetching data", "currentVersion", currentVersion, "err", err, "version", version) |
| 349 | |
| 350 | // object does not exist - supplied version must be "0" |
| 351 | if errors.Is(err, backend.ErrDoesNotExist) && version != backend.VersionNew { |
| 352 | return "", backend.ErrVersionDoesNotMatch |
| 353 | } |
| 354 | if !errors.Is(err, backend.ErrDoesNotExist) && version != currentVersion { |
| 355 | return "", backend.ErrVersionDoesNotMatch |
| 356 | } |
| 357 | |
| 358 | err = rw.Write(ctx, name, keypath, data, size, nil) |
| 359 | if err != nil { |
| 360 | return "", err |
| 361 | } |
| 362 | |
| 363 | _, currentVersion, err = rw.ReadVersioned(ctx, name, keypath) |
| 364 | return currentVersion, err |
| 365 | } |
| 366 | |
| 367 | func (rw *Azure) DeleteVersioned(ctx context.Context, name string, keypath backend.KeyPath, version backend.Version) error { |
| 368 | keypath = backend.KeyPathWithPrefix(keypath, rw.cfg.Prefix) |
nothing calls this directly
no test coverage detected