mirror of
https://github.com/aquasecurity/trivy.git
synced 2025-12-12 15:50:15 -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()
|
||||
|
||||
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
|
||||
func (s Server) ListenAndServe(serverCache cache.Cache, insecure bool) error {
|
||||
func (s Server) ListenAndServe(serverCache cache.Cache, insecure, skipDBUpdate bool) error {
|
||||
requestWg := &sync.WaitGroup{}
|
||||
dbUpdateWg := &sync.WaitGroup{}
|
||||
|
||||
@@ -56,7 +56,7 @@ func (s Server) ListenAndServe(serverCache cache.Cache, insecure bool) error {
|
||||
ctx := context.Background()
|
||||
for {
|
||||
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)
|
||||
}
|
||||
}
|
||||
@@ -121,9 +121,9 @@ func newDBWorker(dbClient dbFile.Operation) dbWorker {
|
||||
}
|
||||
|
||||
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...")
|
||||
needsUpdate, err := w.dbClient.NeedsUpdate(appVersion, false)
|
||||
needsUpdate, err := w.dbClient.NeedsUpdate(appVersion, skipDBUpdate)
|
||||
if err != nil {
|
||||
return xerrors.Errorf("failed to check if db needs an update")
|
||||
} else if !needsUpdate {
|
||||
|
||||
@@ -80,6 +80,14 @@ func Test_dbWorker_update(t *testing.T) {
|
||||
},
|
||||
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",
|
||||
needsUpdate: needsUpdate{
|
||||
@@ -137,7 +145,7 @@ func Test_dbWorker_update(t *testing.T) {
|
||||
|
||||
var dbUpdateWg, requestWg sync.WaitGroup
|
||||
err := w.update(context.Background(), tt.args.appVersion, cacheDir,
|
||||
&dbUpdateWg, &requestWg)
|
||||
tt.needsUpdate.input.skip, &dbUpdateWg, &requestWg)
|
||||
if tt.wantErr != "" {
|
||||
require.NotNil(t, err, tt.name)
|
||||
assert.Contains(t, err.Error(), tt.wantErr, tt.name)
|
||||
|
||||
Reference in New Issue
Block a user