carlos / platform Public

Clone
git clone https://amadan.net/carlos/platform

Plain git — no account needed to clone.

Download

Download this file

1package hostops
2
3import (
4 "context"
5 "errors"
6 "os"
7
8 "github.com/carlosframework/platform/internal/lease"
9 "github.com/carlosframework/platform/internal/release"
10)
11
12// A delete marker must stay until every data version below it is gone.
13// Removing it first could resurrect a failed Put's base bytes. The caller
14// must also hold the existing exclusive purge authority against recreation.
15func retiredRecordVersion(ctx context.Context, control release.Store, versions lease.VersionedStore, bucket, key, id string) error {
16 if _, _, err := control.Get(ctx, key); !errors.Is(err, os.ErrNotExist) {
17 if err != nil {
18 return err
19 }
20 return ErrPending
21 }
22 all, err := versions.ListVersions(ctx, bucket, key)
23 if err != nil {
24 return err
25 }
26 marker, data := false, false
27 for _, v := range all {
28 if v.Key != key {
29 continue
30 }
31 if v.VersionID == id {
32 marker = v.DeleteMarker
33 }
34 if !v.DeleteMarker {
35 data = true
36 }
37 }
38 if marker && data {
39 return ErrPending
40 }
41 return nil
42}
43