refactor for using repomaint
This commit is contained in:
@@ -18,7 +18,7 @@ func (s *Server) handlerRefresh(w http.ResponseWriter, req *http.Request) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
if err := s.c.Refresh(); err != nil {
|
if err := s.rs.Sync(); err != nil {
|
||||||
slog.Error("refresh failed", "err", err)
|
slog.Error("refresh failed", "err", err)
|
||||||
http.Error(w, "refresh failed", http.StatusInternalServerError)
|
http.Error(w, "refresh failed", http.StatusInternalServerError)
|
||||||
return
|
return
|
||||||
|
|||||||
@@ -11,6 +11,7 @@ import (
|
|||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
"github.com/ewpt3ch/pkgstash/internal/cache"
|
"github.com/ewpt3ch/pkgstash/internal/cache"
|
||||||
|
"github.com/ewpt3ch/pkgstash/internal/repomaint"
|
||||||
)
|
)
|
||||||
|
|
||||||
var (
|
var (
|
||||||
@@ -36,7 +37,10 @@ func newTestServer(t *testing.T, mirrorHandler http.HandlerFunc) (*httptest.Serv
|
|||||||
mirror := httptest.NewServer(mirrorHandler)
|
mirror := httptest.NewServer(mirrorHandler)
|
||||||
t.Cleanup(func() { mirror.Close() })
|
t.Cleanup(func() { mirror.Close() })
|
||||||
|
|
||||||
c, err := cache.NewCache(t.TempDir(), []string{mirror.URL + "/"}, []string{"core"})
|
croot := t.TempDir()
|
||||||
|
mrepos := []string{"core"}
|
||||||
|
|
||||||
|
c, err := cache.NewCache(croot, []string{mirror.URL + "/"}, mrepos)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Fatalf("failed to create cache: %v", err)
|
t.Fatalf("failed to create cache: %v", err)
|
||||||
}
|
}
|
||||||
@@ -44,10 +48,15 @@ func newTestServer(t *testing.T, mirrorHandler http.HandlerFunc) (*httptest.Serv
|
|||||||
Port: "0",
|
Port: "0",
|
||||||
Token: "testtoken",
|
Token: "testtoken",
|
||||||
}
|
}
|
||||||
|
rs, err := repomaint.NewRepoSync(c, croot, mrepos)
|
||||||
|
if err != nil {
|
||||||
|
t.Fatalf("failed to create repomain: %v", err)
|
||||||
|
}
|
||||||
logLevel := new(slog.LevelVar)
|
logLevel := new(slog.LevelVar)
|
||||||
srv := &Server{
|
srv := &Server{
|
||||||
cfg: cfg,
|
cfg: cfg,
|
||||||
c: c,
|
c: c,
|
||||||
|
rs: rs,
|
||||||
logLevel: logLevel,
|
logLevel: logLevel,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+9
-1
@@ -12,11 +12,13 @@ import (
|
|||||||
"time"
|
"time"
|
||||||
|
|
||||||
"github.com/ewpt3ch/pkgstash/internal/cache"
|
"github.com/ewpt3ch/pkgstash/internal/cache"
|
||||||
|
"github.com/ewpt3ch/pkgstash/internal/repomaint"
|
||||||
)
|
)
|
||||||
|
|
||||||
type Server struct {
|
type Server struct {
|
||||||
cfg *Config
|
cfg *Config
|
||||||
c *cache.Cache
|
c *cache.Cache
|
||||||
|
rs *repomaint.RepoSync
|
||||||
logLevel *slog.LevelVar
|
logLevel *slog.LevelVar
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -58,9 +60,15 @@ func main() {
|
|||||||
}
|
}
|
||||||
defer c.Close() //nolint:errcheck // best effort cleanup on exit
|
defer c.Close() //nolint:errcheck // best effort cleanup on exit
|
||||||
|
|
||||||
|
rs, err := repomaint.NewRepoSync(c, cfg.CacheRoot, cfg.MirroredRepos)
|
||||||
|
if err != nil {
|
||||||
|
slog.Error("failed to create repomaint", "err", err)
|
||||||
|
}
|
||||||
|
|
||||||
srv := &Server{
|
srv := &Server{
|
||||||
cfg: cfg,
|
cfg: cfg,
|
||||||
c: c,
|
c: c,
|
||||||
|
rs: rs,
|
||||||
logLevel: logLevel,
|
logLevel: logLevel,
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -69,7 +77,7 @@ func main() {
|
|||||||
mux.HandleFunc("POST /api/refresh", srv.handlerRefresh)
|
mux.HandleFunc("POST /api/refresh", srv.handlerRefresh)
|
||||||
mux.HandleFunc("POST /api/loglevel", srv.handlerLogLevel)
|
mux.HandleFunc("POST /api/loglevel", srv.handlerLogLevel)
|
||||||
|
|
||||||
if err := srv.c.Refresh(); err != nil {
|
if err := srv.c.FetchDB(); err != nil {
|
||||||
slog.Error("failed to refesh db files", "err", err)
|
slog.Error("failed to refesh db files", "err", err)
|
||||||
//nolint:errcheck //already exiting
|
//nolint:errcheck //already exiting
|
||||||
_ = c.Close() // best effort cleanup on exit
|
_ = c.Close() // best effort cleanup on exit
|
||||||
|
|||||||
Vendored
+3
-3
@@ -2,21 +2,21 @@ package cache
|
|||||||
|
|
||||||
import "path/filepath"
|
import "path/filepath"
|
||||||
|
|
||||||
func (c *Cache) Refresh() error {
|
func (c *Cache) FetchDB() error {
|
||||||
if !c.refreshMu.TryLock() {
|
if !c.refreshMu.TryLock() {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
defer c.refreshMu.Unlock()
|
defer c.refreshMu.Unlock()
|
||||||
|
|
||||||
for _, repo := range c.cfg.mirroredRepos {
|
for _, repo := range c.cfg.mirroredRepos {
|
||||||
if err := c.refreshDB(repo); err != nil {
|
if err := c.fetchDB(repo); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *Cache) refreshDB(repo string) error {
|
func (c *Cache) fetchDB(repo string) error {
|
||||||
dbFile := repo + ".db.tar.gz"
|
dbFile := repo + ".db.tar.gz"
|
||||||
dbPath := filepath.Join(repo, "os/x86_64", dbFile)
|
dbPath := filepath.Join(repo, "os/x86_64", dbFile)
|
||||||
_, _, err := c.getStream(dbPath)
|
_, _, err := c.getStream(dbPath)
|
||||||
|
|||||||
Reference in New Issue
Block a user