mirror of
https://github.com/aquasecurity/trivy.git
synced 2025-12-22 23:26:39 -08:00
feat(server): add support of skip-db-update flag for hot db update (#3416)
This commit is contained in:
@@ -55,5 +55,5 @@ func Run(ctx context.Context, opts flag.Options) (err error) {
|
|||||||
m.Register()
|
m.Register()
|
||||||
|
|
||||||
server := rpcServer.NewServer(opts.AppVersion, opts.Listen, opts.CacheDir, opts.Token, opts.TokenHeader, opts.DBRepository)
|
server := rpcServer.NewServer(opts.AppVersion, opts.Listen, opts.CacheDir, opts.Token, opts.TokenHeader, opts.DBRepository)
|
||||||
return server.ListenAndServe(cache, opts.Insecure)
|
return server.ListenAndServe(cache, opts.Insecure, opts.SkipDBUpdate)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -47,7 +47,7 @@ func NewServer(appVersion, addr, cacheDir, token, tokenHeader, dbRepository stri
|
|||||||
}
|
}
|
||||||
|
|
||||||
// ListenAndServe starts Trivy server
|
// ListenAndServe starts Trivy server
|
||||||
func (s Server) ListenAndServe(serverCache cache.Cache, insecure bool) error {
|
func (s Server) ListenAndServe(serverCache cache.Cache, insecure, skipDBUpdate bool) error {
|
||||||
requestWg := &sync.WaitGroup{}
|
requestWg := &sync.WaitGroup{}
|
||||||
dbUpdateWg := &sync.WaitGroup{}
|
dbUpdateWg := &sync.WaitGroup{}
|
||||||
|
|
||||||
@@ -56,7 +56,7 @@ func (s Server) ListenAndServe(serverCache cache.Cache, insecure bool) error {
|
|||||||
ctx := context.Background()
|
ctx := context.Background()
|
||||||
for {
|
for {
|
||||||
time.Sleep(updateInterval)
|
time.Sleep(updateInterval)
|
||||||
if err := worker.update(ctx, s.appVersion, s.cacheDir, dbUpdateWg, requestWg); err != nil {
|
if err := worker.update(ctx, s.appVersion, s.cacheDir, skipDBUpdate, dbUpdateWg, requestWg); err != nil {
|
||||||
log.Logger.Errorf("%+v\n", err)
|
log.Logger.Errorf("%+v\n", err)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -121,9 +121,9 @@ func newDBWorker(dbClient dbFile.Operation) dbWorker {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (w dbWorker) update(ctx context.Context, appVersion, cacheDir string,
|
func (w dbWorker) update(ctx context.Context, appVersion, cacheDir string,
|
||||||
dbUpdateWg, requestWg *sync.WaitGroup) error {
|
skipDBUpdate bool, dbUpdateWg, requestWg *sync.WaitGroup) error {
|
||||||
log.Logger.Debug("Check for DB update...")
|
log.Logger.Debug("Check for DB update...")
|
||||||
needsUpdate, err := w.dbClient.NeedsUpdate(appVersion, false)
|
needsUpdate, err := w.dbClient.NeedsUpdate(appVersion, skipDBUpdate)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return xerrors.Errorf("failed to check if db needs an update")
|
return xerrors.Errorf("failed to check if db needs an update")
|
||||||
} else if !needsUpdate {
|
} else if !needsUpdate {
|
||||||
|
|||||||
@@ -80,6 +80,14 @@ func Test_dbWorker_update(t *testing.T) {
|
|||||||
},
|
},
|
||||||
args: args{appVersion: "1"},
|
args: args{appVersion: "1"},
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
name: "skip update",
|
||||||
|
needsUpdate: needsUpdate{
|
||||||
|
input: needsUpdateInput{appVersion: "1", skip: true},
|
||||||
|
output: needsUpdateOutput{needsUpdate: false},
|
||||||
|
},
|
||||||
|
args: args{appVersion: "1"},
|
||||||
|
},
|
||||||
{
|
{
|
||||||
name: "NeedsUpdate returns an error",
|
name: "NeedsUpdate returns an error",
|
||||||
needsUpdate: needsUpdate{
|
needsUpdate: needsUpdate{
|
||||||
@@ -137,7 +145,7 @@ func Test_dbWorker_update(t *testing.T) {
|
|||||||
|
|
||||||
var dbUpdateWg, requestWg sync.WaitGroup
|
var dbUpdateWg, requestWg sync.WaitGroup
|
||||||
err := w.update(context.Background(), tt.args.appVersion, cacheDir,
|
err := w.update(context.Background(), tt.args.appVersion, cacheDir,
|
||||||
&dbUpdateWg, &requestWg)
|
tt.needsUpdate.input.skip, &dbUpdateWg, &requestWg)
|
||||||
if tt.wantErr != "" {
|
if tt.wantErr != "" {
|
||||||
require.NotNil(t, err, tt.name)
|
require.NotNil(t, err, tt.name)
|
||||||
assert.Contains(t, err.Error(), tt.wantErr, tt.name)
|
assert.Contains(t, err.Error(), tt.wantErr, tt.name)
|
||||||
|
|||||||
Reference in New Issue
Block a user