From 9ad7715a2925a71d689042a34493acc41e784092 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mika=C3=ABl=20Cluseau?= Date: Tue, 1 Jul 2025 22:20:58 +0200 Subject: [PATCH] remove cache, it's not useful in practice --- cmd/dkl-local-server/boot-img.go | 4 +- cmd/dkl-local-server/cas-cleaner.go | 77 -------------------------- cmd/dkl-local-server/main.go | 8 --- cmd/dkl-local-server/render-context.go | 31 ++++++----- cmd/dkl-local-server/ws-host.go | 1 - 5 files changed, 20 insertions(+), 101 deletions(-) delete mode 100644 cmd/dkl-local-server/cas-cleaner.go diff --git a/cmd/dkl-local-server/boot-img.go b/cmd/dkl-local-server/boot-img.go index ba95908..63d5c7d 100644 --- a/cmd/dkl-local-server/boot-img.go +++ b/cmd/dkl-local-server/boot-img.go @@ -83,7 +83,9 @@ func buildBootImgQemuConvert(out io.Writer, ctx *renderContext, format string) ( return }() - defer os.Remove(imgPath) + if imgPath != "" { + defer os.Remove(imgPath) + } if err != nil { return diff --git a/cmd/dkl-local-server/cas-cleaner.go b/cmd/dkl-local-server/cas-cleaner.go deleted file mode 100644 index d8b46a5..0000000 --- a/cmd/dkl-local-server/cas-cleaner.go +++ /dev/null @@ -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 -} diff --git a/cmd/dkl-local-server/main.go b/cmd/dkl-local-server/main.go index 6c54851..8096f22 100644 --- a/cmd/dkl-local-server/main.go +++ b/cmd/dkl-local-server/main.go @@ -5,14 +5,11 @@ import ( "log" "net/http" "os" - "path/filepath" restful "github.com/emicklei/go-restful" swaggerui "github.com/mcluseau/go-swagger-ui" "m.cluseau.fr/go/watchable/streamsse" - "novit.tech/direktil/pkg/cas" - dlshtml "novit.tech/direktil/local-server/html" "novit.tech/direktil/local-server/pkg/apiutils" ) @@ -30,8 +27,6 @@ var ( 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") - - casStore cas.Store ) func main() { @@ -68,9 +63,6 @@ func main() { os.Setenv("DLS_AUTO_UNLOCK", "") } - casStore = cas.NewDir(filepath.Join(*dataDir, "cache")) - go casCleaner() - apiutils.Setup(func() { registerWS(restful.DefaultContainer) }) diff --git a/cmd/dkl-local-server/render-context.go b/cmd/dkl-local-server/render-context.go index c97aa65..88b1b70 100644 --- a/cmd/dkl-local-server/render-context.go +++ b/cmd/dkl-local-server/render-context.go @@ -10,6 +10,7 @@ import ( "log" "net/http" "net/url" + "os" "path" "path/filepath" "text/template" @@ -35,12 +36,7 @@ type renderContext struct { } func renderCtx(w http.ResponseWriter, r *http.Request, ctx *renderContext, what string, - create func(out io.Writer, ctx *renderContext) error) error { - - tag, err := ctx.Tag() - if err != nil { - return err - } + create func(out io.Writer, ctx *renderContext) error) (err error) { 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 - content, meta, err := casStore.GetOrCreate(tag, what, func(out io.Writer) error { - log.Printf("building %s for %q", what, ctx.Host.Name) - return create(out, ctx) - }) - + outfile, err := os.CreateTemp("/tmp", "dls."+what+".") 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 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) { diff --git a/cmd/dkl-local-server/ws-host.go b/cmd/dkl-local-server/ws-host.go index 664de7a..9cb7a90 100644 --- a/cmd/dkl-local-server/ws-host.go +++ b/cmd/dkl-local-server/ws-host.go @@ -172,7 +172,6 @@ func renderHost(w http.ResponseWriter, r *http.Request, what string, host *local switch what { case "config": err = renderConfig(w, r, ctx, false) - case "config.json": err = renderConfig(w, r, ctx, true)