bcacheup: add --deep_check_galactic flag for ensuring that all references are properly uploaded
This commit is contained in:
parent
1be0098156
commit
78d3689dfe
1 changed files with 19 additions and 7 deletions
|
@ -32,6 +32,7 @@ import (
|
||||||
var (
|
var (
|
||||||
blobURLFlag = flag.String("cache_url", "", "Cache URL")
|
blobURLFlag = flag.String("cache_url", "", "Cache URL")
|
||||||
stateSummaryIntervalFlag = flag.Duration("state_summary_interval", 10*time.Second, "Time between state summary outputs.")
|
stateSummaryIntervalFlag = flag.Duration("state_summary_interval", 10*time.Second, "Time between state summary outputs.")
|
||||||
|
deepCheckGalacticFlag = flag.Bool("deep_check_galactic", false, "Ensure that all references are available in the cache before skipping, rather than just checking that the path itself is available.")
|
||||||
)
|
)
|
||||||
|
|
||||||
var (
|
var (
|
||||||
|
@ -160,6 +161,7 @@ type uploader struct {
|
||||||
st stateTracker
|
st stateTracker
|
||||||
|
|
||||||
uploadSF singleflight.Group
|
uploadSF singleflight.Group
|
||||||
|
deepCheckGalactic bool // if true, don't skip if this item is already present; always check the references to make sure they exist too.
|
||||||
}
|
}
|
||||||
|
|
||||||
type byteCounterWriter struct{ n uint64 }
|
type byteCounterWriter struct{ n uint64 }
|
||||||
|
@ -314,15 +316,19 @@ func (u *uploader) uploadRefs(ctx context.Context, current string, refs []string
|
||||||
func (u *uploader) upload(ctx context.Context, path string) error {
|
func (u *uploader) upload(ctx context.Context, path string) error {
|
||||||
u.st.SetState(path, stateCheckingShouldUpload)
|
u.st.SetState(path, stateCheckingShouldUpload)
|
||||||
|
|
||||||
if ok, err := u.shouldUpload(ctx, path); err != nil {
|
shouldUploadThis, err := u.shouldUpload(ctx, path)
|
||||||
|
if err != nil {
|
||||||
u.st.SetState(path, stateFailed)
|
u.st.SetState(path, stateFailed)
|
||||||
return fmt.Errorf("determining if we should upload %v: %w", path, err)
|
return fmt.Errorf("determining if we should upload %v: %w", path, err)
|
||||||
} else if !ok {
|
}
|
||||||
|
if !shouldUploadThis && !u.deepCheckGalactic {
|
||||||
u.st.SetState(path, stateSkipped)
|
u.st.SetState(path, stateSkipped)
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if shouldUploadThis {
|
||||||
log.Printf("Uploading %v", path)
|
log.Printf("Uploading %v", path)
|
||||||
|
}
|
||||||
|
|
||||||
ni, err := u.store.NARInfo(path)
|
ni, err := u.store.NARInfo(path)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
@ -336,6 +342,11 @@ func (u *uploader) upload(ctx context.Context, path string) error {
|
||||||
return fmt.Errorf("uploading references for %v: %w", path, err)
|
return fmt.Errorf("uploading references for %v: %w", path, err)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if !shouldUploadThis {
|
||||||
|
u.st.SetState(path, stateSkipped)
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
u.st.SetState(path, stateUploadingContent)
|
u.st.SetState(path, stateUploadingContent)
|
||||||
if !ni.NarHash.Valid() {
|
if !ni.NarHash.Valid() {
|
||||||
u.st.SetState(path, stateFailed)
|
u.st.SetState(path, stateFailed)
|
||||||
|
@ -430,6 +441,7 @@ func main() {
|
||||||
bucket: bucket,
|
bucket: bucket,
|
||||||
store: store,
|
store: store,
|
||||||
storePath: "/nix/store",
|
storePath: "/nix/store",
|
||||||
|
deepCheckGalactic: *deepCheckGalacticFlag,
|
||||||
}
|
}
|
||||||
|
|
||||||
go func() {
|
go func() {
|
||||||
|
|
Loading…
Reference in a new issue