1
Fork 0

Fix bug where max_concurrent_tasks for...

scanner queue would be initialized to 0.
This commit is contained in:
viktorstrate 2020-09-24 17:52:53 +02:00
parent 6dc9345a96
commit bbff25973e
3 changed files with 25 additions and 18 deletions

View File

@ -1,4 +1,4 @@
ALTER TABLE site_info
ADD COLUMN IF NOT EXISTS periodic_scan_interval int(8) NOT NULL DEFAULT 0,
ADD COLUMN IF NOT EXISTS concurrent_workers int(8) NOT NULL DEFAULT 3;
ADD COLUMN IF NOT EXISTS periodic_scan_interval int(8) NOT NULL,
ADD COLUMN IF NOT EXISTS concurrent_workers int(8) NOT NULL;

View File

@ -2,16 +2,27 @@ package models
import (
"database/sql"
"github.com/pkg/errors"
)
func initializeSiteInfoRow(db *sql.DB) error {
_, err := db.Exec("INSERT INTO site_info (initial_setup) VALUES (true)")
func initializeSiteInfoRow(db *sql.DB) (*SiteInfo, error) {
_, err := db.Exec("INSERT INTO site_info (initial_setup, periodic_scan_interval, concurrent_workers) VALUES (true, 0, 3)")
if err != nil {
return err
return nil, errors.Wrap(err, "initialize site_info row")
}
return nil
siteInfo := &SiteInfo{}
row := db.QueryRow("SELECT * FROM site_info")
if err := row.Scan(&siteInfo.InitialSetup, &siteInfo.PeriodicScanInterval, &siteInfo.ConcurrentWorkers); err != nil {
return nil, errors.Wrap(err, "get site_info row after initialization")
}
return siteInfo, nil
}
// GetSiteInfo gets the site info row from the database, and creates it if it does not exist
func GetSiteInfo(db *sql.DB) (*SiteInfo, error) {
rows, err := db.Query("SELECT * FROM site_info")
defer rows.Close()
@ -19,25 +30,19 @@ func GetSiteInfo(db *sql.DB) (*SiteInfo, error) {
return nil, err
}
var initialSetup bool
var periodicScanInterval int
var concurrentWorkers int
siteInfo := &SiteInfo{}
if !rows.Next() {
// Entry does not exist
if err := initializeSiteInfoRow(db); err != nil {
siteInfo, err = initializeSiteInfoRow(db)
if err != nil {
return nil, err
}
initialSetup = true
} else {
if err := rows.Scan(&initialSetup, &periodicScanInterval, &concurrentWorkers); err != nil {
if err := rows.Scan(&siteInfo.InitialSetup, &siteInfo.PeriodicScanInterval, &siteInfo.ConcurrentWorkers); err != nil {
return nil, err
}
}
return &SiteInfo{
InitialSetup: initialSetup,
PeriodicScanInterval: periodicScanInterval,
ConcurrentWorkers: concurrentWorkers,
}, nil
return siteInfo, nil
}

View File

@ -48,6 +48,8 @@ func InitializeScannerQueue(db *sql.DB) error {
concurrentWorkers = site_info.ConcurrentWorkers
}
log.Printf("Initializing scanner queue with %d workers", concurrentWorkers)
global_scanner_queue = ScannerQueue{
idle_chan: make(chan bool, 1),
in_progress: make([]ScannerJob, 0),
@ -78,7 +80,7 @@ func (queue *ScannerQueue) startBackgroundWorker() {
<-queue.idle_chan
log.Println("Queue waiting for lock")
queue.mutex.Lock()
log.Println("Queue running")
log.Printf("Queue running: in_progress: %d, max_tasks: %d, queue_len: %d\n", len(queue.in_progress), queue.settings.max_concurrent_tasks, len(queue.up_next))
for len(queue.in_progress) < queue.settings.max_concurrent_tasks && len(queue.up_next) > 0 {
log.Println("Queue starting job")