Add ErrAlreadyExists

This commit is contained in:
Andrey Meshkov 2018-10-29 16:17:18 +03:00
parent 2b2a797cf7
commit abb51ddb8a
5 changed files with 18 additions and 16 deletions

7
.gitignore vendored
View File

@ -13,10 +13,5 @@ debug
/querylog.json.1 /querylog.json.1
# Test output # Test output
dnsfilter/dnsfilter.TestLotsOfRulesLotsOfHostsMemoryUsage1.pprof dnsfilter/dnsfilter.TestLotsOfRules*.pprof
dnsfilter/dnsfilter.TestLotsOfRulesLotsOfHostsMemoryUsage2.pprof
dnsfilter/dnsfilter.TestLotsOfRulesLotsOfHostsMemoryUsage3.pprof
dnsfilter/dnsfilter.TestLotsOfRulesMemoryUsage1.pprof
dnsfilter/dnsfilter.TestLotsOfRulesMemoryUsage2.pprof
dnsfilter/dnsfilter.TestLotsOfRulesMemoryUsage3.pprof
tests/top-1m.csv tests/top-1m.csv

View File

@ -731,12 +731,13 @@ func (filter *filter) update(now time.Time) (bool, error) {
} }
} else if len(line) != 0 { } else if len(line) != 0 {
err = d.AddRule(line, 0) err = d.AddRule(line, 0)
if err == dnsfilter.ErrInvalidSyntax { if err == dnsfilter.ErrAlreadyExists || err == dnsfilter.ErrInvalidSyntax {
continue continue
} }
if err != nil { if err != nil {
log.Printf("Couldn't add rule %s: %s", filter.URL, err) log.Printf("Cannot add rule %s from %s: %s", line, filter.URL, err)
return false, err // Just ignore invalid rules
continue
} }
rulesCount++ rulesCount++
} }

View File

@ -149,11 +149,13 @@ func setupPlugin(c *caddy.Controller) (*plug, error) {
text := scanner.Text() text := scanner.Text()
err = p.d.AddRule(text, uint32(i)) err = p.d.AddRule(text, uint32(i))
if err == dnsfilter.ErrInvalidSyntax { if err == dnsfilter.ErrAlreadyExists || err == dnsfilter.ErrInvalidSyntax {
continue continue
} }
if err != nil { if err != nil {
return nil, err log.Printf("Cannot add rule %s: %s", text, err)
// Just ignore invalid rules
continue
} }
count++ count++
} }

View File

@ -33,9 +33,12 @@ const defaultSafebrowsingURL = "http://%s/safebrowsing-lookup-hash.html?prefixes
const defaultParentalServer = "pctrl.adguard.com" const defaultParentalServer = "pctrl.adguard.com"
const defaultParentalURL = "http://%s/check-parental-control-hash?prefixes=%s&sensitivity=%d" const defaultParentalURL = "http://%s/check-parental-control-hash?prefixes=%s&sensitivity=%d"
// ErrInvalidSyntax is returned by AddRule when rule is invalid // ErrInvalidSyntax is returned by AddRule when the rule is invalid
var ErrInvalidSyntax = errors.New("dnsfilter: invalid rule syntax") var ErrInvalidSyntax = errors.New("dnsfilter: invalid rule syntax")
// ErrInvalidSyntax is returned by AddRule when the rule was already added to the filter
var ErrAlreadyExists = errors.New("dnsfilter: rule was already added")
// ErrInvalidParental is returned by EnableParental when sensitivity is not a valid value // ErrInvalidParental is returned by EnableParental when sensitivity is not a valid value
var ErrInvalidParental = errors.New("dnsfilter: invalid parental sensitivity, must be either 3, 10, 13 or 17") var ErrInvalidParental = errors.New("dnsfilter: invalid parental sensitivity, must be either 3, 10, 13 or 17")
@ -737,8 +740,7 @@ func (d *Dnsfilter) AddRule(input string, filterListID uint32) error {
d.storageMutex.RUnlock() d.storageMutex.RUnlock()
if exists { if exists {
// already added // already added
// TODO: Change the error type return ErrAlreadyExists
return ErrInvalidSyntax
} }
if !isValidRule(input) { if !isValidRule(input) {

View File

@ -261,7 +261,7 @@ func (d *Dnsfilter) checkAddRule(t *testing.T, rule string) {
func (d *Dnsfilter) checkAddRuleFail(t *testing.T, rule string) { func (d *Dnsfilter) checkAddRuleFail(t *testing.T, rule string) {
t.Helper() t.Helper()
err := d.AddRule(rule, 0) err := d.AddRule(rule, 0)
if err == ErrInvalidSyntax { if err == ErrInvalidSyntax || err == ErrAlreadyExists {
return return
} }
if err != nil { if err != nil {
@ -318,7 +318,7 @@ func loadTestRules(d *Dnsfilter) error {
for scanner.Scan() { for scanner.Scan() {
rule := scanner.Text() rule := scanner.Text()
err = d.AddRule(rule, 0) err = d.AddRule(rule, 0)
if err == ErrInvalidSyntax { if err == ErrInvalidSyntax || err == ErrAlreadyExists {
continue continue
} }
if err != nil { if err != nil {
@ -724,6 +724,7 @@ func BenchmarkAddRule(b *testing.B) {
err := d.AddRule(rule, 0) err := d.AddRule(rule, 0)
switch err { switch err {
case nil: case nil:
case ErrAlreadyExists: // ignore rules which were already added
case ErrInvalidSyntax: // ignore invalid syntax case ErrInvalidSyntax: // ignore invalid syntax
default: default:
b.Fatalf("Error while adding rule %s: %s", rule, err) b.Fatalf("Error while adding rule %s: %s", rule, err)
@ -743,6 +744,7 @@ func BenchmarkAddRuleParallel(b *testing.B) {
} }
switch err { switch err {
case nil: case nil:
case ErrAlreadyExists: // ignore rules which were already added
case ErrInvalidSyntax: // ignore invalid syntax case ErrInvalidSyntax: // ignore invalid syntax
default: default:
b.Fatalf("Error while adding rule %s: %s", rule, err) b.Fatalf("Error while adding rule %s: %s", rule, err)