aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--sql/cache.go6
-rw-r--r--sql/logger.go7
2 files changed, 6 insertions, 7 deletions
diff --git a/sql/cache.go b/sql/cache.go
index 82259bc..9d5e536 100644
--- a/sql/cache.go
+++ b/sql/cache.go
@@ -30,7 +30,7 @@ type Cache struct {
// NewCache creates a new cache using client to persist entries.
func NewCache(client *Client, logger *log.Logger) *Cache {
c := &Cache{
- queue: make(chan query, 100),
+ queue: make(chan query, 1024),
client: client,
logger: logger,
}
@@ -38,7 +38,7 @@ func NewCache(client *Client, logger *log.Logger) *Cache {
return c
}
-// Close drains and persist queued requests in this cache.
+// Close consumes any outstanding queued requests and closes the cache.
func (c *Cache) Close() error {
c.wg.Wait()
return nil
@@ -99,6 +99,6 @@ func (c *Cache) readQueue() {
default:
c.logger.Printf("unhandled operation %d", q.op)
}
- c.wg.Add(-1)
+ c.wg.Done()
}
}
diff --git a/sql/logger.go b/sql/logger.go
index e226103..7890c54 100644
--- a/sql/logger.go
+++ b/sql/logger.go
@@ -40,13 +40,12 @@ type Entry struct {
func NewLogger(db *Client, mode int, ttl time.Duration, logger *log.Logger) *Logger {
l := &Logger{
db: db,
- queue: make(chan Entry, 100),
+ queue: make(chan Entry, 1024),
now: time.Now,
mode: mode,
logger: logger,
}
if mode != LogDiscard {
- l.wg.Add(1)
go l.readQueue(ttl)
}
return l
@@ -54,7 +53,6 @@ func NewLogger(db *Client, mode int, ttl time.Duration, logger *log.Logger) *Log
// Close consumes any outstanding log requests and closes the logger.
func (l *Logger) Close() error {
- close(l.queue)
l.wg.Wait()
return nil
}
@@ -70,6 +68,7 @@ func (l *Logger) Record(remoteAddr net.IP, hijacked bool, qtype uint16, question
if l.mode == LogHijacked && !hijacked {
return
}
+ l.wg.Add(1)
l.queue <- Entry{
Time: l.now(),
RemoteAddr: remoteAddr,
@@ -110,7 +109,6 @@ func (l *Logger) Get(n int) ([]Entry, error) {
}
func (l *Logger) readQueue(ttl time.Duration) {
- defer l.wg.Done()
for e := range l.queue {
if err := l.db.WriteLog(e.Time, e.RemoteAddr, e.Hijacked, e.Qtype, e.Question, e.Answers...); err != nil {
l.logger.Printf("write failed: %+v: %s", e, err)
@@ -121,5 +119,6 @@ func (l *Logger) readQueue(ttl time.Duration) {
l.logger.Printf("deleting log entries before %v failed: %s", t, err)
}
}
+ l.wg.Done()
}
}