remove cache, it's not useful in practice

This commit is contained in:
Mikaël Cluseau
2025-07-01 22:20:58 +02:00
parent 5c91736202
commit 9ad7715a29
5 changed files with 20 additions and 101 deletions

View File

@ -83,7 +83,9 @@ func buildBootImgQemuConvert(out io.Writer, ctx *renderContext, format string) (
return return
}() }()
defer os.Remove(imgPath) if imgPath != "" {
defer os.Remove(imgPath)
}
if err != nil { if err != nil {
return return

View File

@ -1,77 +0,0 @@
package main
import (
"flag"
"log"
"sort"
"time"
)
var (
cacheCleanDelay = flag.Duration("cache-clean-delay", 10*time.Minute, "Time between cache cleanups")
)
func casCleaner() {
for range time.Tick(*cacheCleanDelay) {
if !wPublicState.Get().Store.Open {
continue
}
err := cleanCAS()
if err != nil {
log.Print("warn: couldn't clean cache: ", err)
}
}
}
func cleanCAS() error {
cfg, err := readConfig()
if err != nil {
return nil
}
activeTags := make([]string, len(cfg.Hosts))
for i, host := range cfg.Hosts {
// FIXME ugly hack, same as in dir2config
cfg, err := readConfig()
if err != nil {
return err
}
ctx, err := newRenderContext(host, cfg)
if err != nil {
return err
}
tag, err := ctx.Tag()
if err != nil {
return err
}
activeTags[i] = tag
}
tags, err := casStore.Tags()
if err != nil {
return err
}
sort.Strings(activeTags)
for _, tag := range tags {
idx := sort.SearchStrings(activeTags, tag)
if idx < len(activeTags) && activeTags[idx] == tag {
continue
}
// tag is not present in active tags
log.Print("cache cleaner: removing tag ", tag)
if err := casStore.Remove(tag); err != nil {
log.Printf("cache cleaner: failed to remove tag %s: %v", tag, err)
}
}
return nil
}

View File

@ -5,14 +5,11 @@ import (
"log" "log"
"net/http" "net/http"
"os" "os"
"path/filepath"
restful "github.com/emicklei/go-restful" restful "github.com/emicklei/go-restful"
swaggerui "github.com/mcluseau/go-swagger-ui" swaggerui "github.com/mcluseau/go-swagger-ui"
"m.cluseau.fr/go/watchable/streamsse" "m.cluseau.fr/go/watchable/streamsse"
"novit.tech/direktil/pkg/cas"
dlshtml "novit.tech/direktil/local-server/html" dlshtml "novit.tech/direktil/local-server/html"
"novit.tech/direktil/local-server/pkg/apiutils" "novit.tech/direktil/local-server/pkg/apiutils"
) )
@ -30,8 +27,6 @@ var (
keyFile = flag.String("tls-key", etcDir+"/server.key", "Server TLS key") keyFile = flag.String("tls-key", etcDir+"/server.key", "Server TLS key")
autoUnlock = flag.String("auto-unlock", "", "Auto-unlock store (testing only!) env: DLS_AUTO_UNLOCK") autoUnlock = flag.String("auto-unlock", "", "Auto-unlock store (testing only!) env: DLS_AUTO_UNLOCK")
casStore cas.Store
) )
func main() { func main() {
@ -68,9 +63,6 @@ func main() {
os.Setenv("DLS_AUTO_UNLOCK", "") os.Setenv("DLS_AUTO_UNLOCK", "")
} }
casStore = cas.NewDir(filepath.Join(*dataDir, "cache"))
go casCleaner()
apiutils.Setup(func() { apiutils.Setup(func() {
registerWS(restful.DefaultContainer) registerWS(restful.DefaultContainer)
}) })

View File

@ -10,6 +10,7 @@ import (
"log" "log"
"net/http" "net/http"
"net/url" "net/url"
"os"
"path" "path"
"path/filepath" "path/filepath"
"text/template" "text/template"
@ -35,12 +36,7 @@ type renderContext struct {
} }
func renderCtx(w http.ResponseWriter, r *http.Request, ctx *renderContext, what string, func renderCtx(w http.ResponseWriter, r *http.Request, ctx *renderContext, what string,
create func(out io.Writer, ctx *renderContext) error) error { create func(out io.Writer, ctx *renderContext) error) (err error) {
tag, err := ctx.Tag()
if err != nil {
return err
}
ctx.CmdLine = r.URL.Query().Get(cmdlineParam.Data().Name) ctx.CmdLine = r.URL.Query().Get(cmdlineParam.Data().Name)
@ -49,19 +45,26 @@ func renderCtx(w http.ResponseWriter, r *http.Request, ctx *renderContext, what
} }
// get it or create it // get it or create it
content, meta, err := casStore.GetOrCreate(tag, what, func(out io.Writer) error { outfile, err := os.CreateTemp("/tmp", "dls."+what+".")
log.Printf("building %s for %q", what, ctx.Host.Name)
return create(out, ctx)
})
if err != nil { if err != nil {
return err return
}
defer os.Remove(outfile.Name())
log.Printf("building %s for %q", what, ctx.Host.Name)
err = create(outfile, ctx)
if err != nil {
return
} }
// serve it // serve it
log.Printf("sending %s for %q", what, ctx.Host.Name) log.Printf("sending %s for %q", what, ctx.Host.Name)
http.ServeContent(w, r, what, meta.ModTime(), content)
return nil outfile.Seek(0, io.SeekStart)
io.Copy(w, outfile)
return
} }
func sslConfigFromLocalConfig(cfg *localconfig.Config) (sslCfg *cfsslconfig.Config, err error) { func sslConfigFromLocalConfig(cfg *localconfig.Config) (sslCfg *cfsslconfig.Config, err error) {

View File

@ -172,7 +172,6 @@ func renderHost(w http.ResponseWriter, r *http.Request, what string, host *local
switch what { switch what {
case "config": case "config":
err = renderConfig(w, r, ctx, false) err = renderConfig(w, r, ctx, false)
case "config.json": case "config.json":
err = renderConfig(w, r, ctx, true) err = renderConfig(w, r, ctx, true)