Skip to content

Commit b067c6a

Browse files
authored
Merge pull request #11 from sachinkumargit/HYP-8063
Add support for mocking download and upload of cache
2 parents f67e53d + 35c4afe commit b067c6a

File tree

6 files changed

+42
-10
lines changed

6 files changed

+42
-10
lines changed

cache/cache.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,13 +20,13 @@ type Cache interface {
2020
// Rebuilder is an interface represents a rebuild action.
2121
type Rebuilder interface {
2222
// Rebuild rebuilds cache from the files provided with given paths.
23-
Rebuild(srcs []string) error
23+
Rebuild(srcs []string, mockDownloadUpload bool) error
2424
}
2525

2626
// Restorer is an interface represents a restore action.
2727
type Restorer interface {
2828
// Restore restores files from the cache provided with given paths.
29-
Restore(srcs []string) error
29+
Restore(srcs []string, mockDownloadUpload bool) error
3030
}
3131

3232
// Flusher is an interface represents a flush action.

cache/rebuilder.go

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ func NewRebuilder(logger log.Logger, s storage.Storage, a archive.Archive, g key
3535
}
3636

3737
// Rebuild rebuilds cache from the files provided with given paths.
38-
func (r rebuilder) Rebuild(srcs []string) error {
38+
func (r rebuilder) Rebuild(srcs []string, mockDownloadUpload bool) error {
3939
level.Info(r.logger).Log("msg", "rebuilding cache")
4040

4141
now := time.Now()
@@ -77,7 +77,7 @@ func (r rebuilder) Rebuild(srcs []string) error {
7777
go func(dst, src string) {
7878
defer wg.Done()
7979

80-
if err := r.rebuild(src, dst); err != nil {
80+
if err := r.rebuild(src, dst, mockDownloadUpload); err != nil {
8181
errs.Add(fmt.Errorf("upload from <%s> to <%s>, %w", src, dst, err))
8282
}
8383
}(dst, src)
@@ -95,7 +95,7 @@ func (r rebuilder) Rebuild(srcs []string) error {
9595
}
9696

9797
// rebuild pushes the archived file to the cache.
98-
func (r rebuilder) rebuild(src, dst string) error {
98+
func (r rebuilder) rebuild(src, dst string, mockDownloadUpload bool) error {
9999
src, err := filepath.Abs(filepath.Clean(src))
100100
if err != nil {
101101
return fmt.Errorf("clean source path, %w", err)
@@ -111,6 +111,9 @@ func (r rebuilder) rebuild(src, dst string) error {
111111

112112
level.Info(r.logger).Log("msg", "archiving directory", "src", src)
113113

114+
if mockDownloadUpload {
115+
return
116+
}
114117
written, err := r.a.Create([]string{src}, pw)
115118
if err != nil {
116119
if err := pw.CloseWithError(fmt.Errorf("archive write, pipe writer failed, %w", err)); err != nil {
@@ -126,6 +129,14 @@ func (r rebuilder) rebuild(src, dst string) error {
126129
sw := &statWriter{}
127130
tr := io.TeeReader(pr, sw)
128131

132+
if mockDownloadUpload {
133+
level.Debug(r.logger).Log(
134+
"msg", "archive created",
135+
"local", src,
136+
"remote", dst,
137+
)
138+
return nil
139+
}
129140
if err := r.s.Put(dst, tr); err != nil {
130141
err = fmt.Errorf("upload file, pipe reader failed, %w", err)
131142
if err := pr.CloseWithError(err); err != nil {

cache/restorer.go

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ func NewRestorer(logger log.Logger, s storage.Storage, a archive.Archive, g key.
3232
}
3333

3434
// Restore restores files from the cache provided with given paths.
35-
func (r restorer) Restore(dsts []string) error {
35+
func (r restorer) Restore(dsts []string, mockDownloadUpload bool) error {
3636
level.Info(r.logger).Log("msg", "restoring cache")
3737

3838
now := time.Now()
@@ -57,7 +57,7 @@ func (r restorer) Restore(dsts []string) error {
5757
go func(src, dst string) {
5858
defer wg.Done()
5959

60-
if err := r.restore(src, dst); err != nil {
60+
if err := r.restore(src, dst, mockDownloadUpload); err != nil {
6161
errs.Add(fmt.Errorf("download from <%s> to <%s>, %w", src, dst, err))
6262
}
6363
}(src, dst)
@@ -75,7 +75,7 @@ func (r restorer) Restore(dsts []string) error {
7575
}
7676

7777
// restore fetches the archived file from the cache and restores to the host machine's file system.
78-
func (r restorer) restore(src, dst string) error {
78+
func (r restorer) restore(src, dst string, mockDownloadUpload bool) error {
7979
var err error
8080

8181
pr, pw := io.Pipe()
@@ -86,6 +86,9 @@ func (r restorer) restore(src, dst string) error {
8686

8787
level.Info(r.logger).Log("msg", "downloading archived directory", "remote", src, "local", dst)
8888

89+
if mockDownloadUpload {
90+
return
91+
}
8992
if err := r.s.Get(src, pw); err != nil {
9093
if err := pw.CloseWithError(fmt.Errorf("get file from storage backend, pipe writer failed, %w", err)); err != nil {
9194
level.Error(r.logger).Log("msg", "pw close", "err", err)
@@ -95,6 +98,15 @@ func (r restorer) restore(src, dst string) error {
9598

9699
level.Info(r.logger).Log("msg", "extracting archived directory", "remote", src, "local", dst)
97100

101+
if mockDownloadUpload {
102+
level.Debug(r.logger).Log(
103+
"msg", "archive extracted",
104+
"local", dst,
105+
"remote", src,
106+
)
107+
return nil
108+
}
109+
98110
written, err := r.a.Extract(dst, pr)
99111
if err != nil {
100112
err = fmt.Errorf("extract files from downloaded archive, pipe reader failed, %w", err)

internal/plugin/config.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ type Config struct {
3333
Override bool
3434
CompressionLevel int
3535
StorageOperationTimeout time.Duration
36+
MockDownloadUpload bool
3637

3738
Mount []string
3839

internal/plugin/plugin.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -137,15 +137,15 @@ func (p *Plugin) Exec() error { // nolint: funlen,cyclop
137137

138138
// 5. Select mode
139139
if cfg.Rebuild {
140-
if err := c.Rebuild(p.Config.Mount); err != nil {
140+
if err := c.Rebuild(p.Config.Mount, cfg.MockDownloadUpload); err != nil {
141141
level.Debug(p.logger).Log("err", fmt.Sprintf("%+v\n", err))
142142

143143
return Error(fmt.Sprintf("[IMPORTANT] build cache, %+v\n", err))
144144
}
145145
}
146146

147147
if cfg.Restore {
148-
if err := c.Restore(p.Config.Mount); err != nil {
148+
if err := c.Restore(p.Config.Mount, cfg.MockDownloadUpload); err != nil {
149149
level.Debug(p.logger).Log("err", fmt.Sprintf("%+v\n", err))
150150

151151
return Error(fmt.Sprintf("[IMPORTANT] restore cache, %+v\n", err))

main.go

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -268,6 +268,12 @@ func main() {
268268
Value: true,
269269
EnvVars: []string{"PLUGIN_OVERRIDE"},
270270
},
271+
&cli.BoolFlag{
272+
Name: "mock-download-upload, mkdu",
273+
Usage: "skip downloading and uploading the cache, useful when you want to only display mocked cache logs",
274+
EnvVars: []string{"PLUGIN_SKIP_DOWNLOAD"},
275+
Value: false,
276+
},
271277
// CACHE-KEYS
272278
// REBUILD-KEYS
273279
// RESTORE-KEYS
@@ -560,6 +566,8 @@ func run(c *cli.Context) error {
560566
LocalRoot: c.String("local-root"),
561567
Override: c.Bool("override"),
562568

569+
MockDownloadUpload: c.Bool("mock-download-upload"),
570+
563571
StorageOperationTimeout: c.Duration("backend.operation-timeout"),
564572
FileSystem: filesystem.Config{
565573
CacheRoot: c.String("filesystem.cache-root"),

0 commit comments

Comments
 (0)