utils: fix radb fetching lines too long for scanner buffer size, allow caching empty results
This commit is contained in:
@@ -163,7 +163,7 @@ func NewState(p policy.Policy, opt settings.Settings, settings policy.StateSetti
|
|||||||
}
|
}
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
if useCache && networkCache != nil && len(prefixes) > 0 {
|
if useCache && networkCache != nil {
|
||||||
var l []string
|
var l []string
|
||||||
for _, n := range prefixes {
|
for _, n := range prefixes {
|
||||||
l = append(l, n.String())
|
l = append(l, n.String())
|
||||||
|
|||||||
@@ -53,6 +53,9 @@ func (db *RADb) query(fn func(n int, record []byte) error, queries ...string) er
|
|||||||
|
|
||||||
scanner := bufio.NewScanner(conn)
|
scanner := bufio.NewScanner(conn)
|
||||||
scanner.Split(bufio.ScanLines)
|
scanner.Split(bufio.ScanLines)
|
||||||
|
// 16 MiB lines
|
||||||
|
const bufferSize = 1024 * 1024 * 16
|
||||||
|
scanner.Buffer(make([]byte, 0, bufferSize), bufferSize)
|
||||||
|
|
||||||
for _, q := range queries {
|
for _, q := range queries {
|
||||||
|
|
||||||
@@ -66,6 +69,7 @@ func (db *RADb) query(fn func(n int, record []byte) error, queries ...string) er
|
|||||||
|
|
||||||
for scanner.Scan() {
|
for scanner.Scan() {
|
||||||
buf := bytes.Trim(scanner.Bytes(), "\r\n")
|
buf := bytes.Trim(scanner.Bytes(), "\r\n")
|
||||||
|
fmt.Println(string(buf))
|
||||||
if bytes.HasPrefix(buf, []byte("%")) || bytes.Equal(buf, []byte("C")) {
|
if bytes.HasPrefix(buf, []byte("%")) || bytes.Equal(buf, []byte("C")) {
|
||||||
// end of record
|
// end of record
|
||||||
break
|
break
|
||||||
@@ -76,6 +80,10 @@ func (db *RADb) query(fn func(n int, record []byte) error, queries ...string) er
|
|||||||
}
|
}
|
||||||
n++
|
n++
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if scanner.Err() != nil {
|
||||||
|
return scanner.Err()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if len(queries) > 1 {
|
if len(queries) > 1 {
|
||||||
|
|||||||
Reference in New Issue
Block a user