INWX: Enable concurrency support (#3856)

Tested dnscontrol with `CanConcur()` enabled and seems to work fine.
Read #2873 to see what to do, and hope below is the right way to test.

```text
$ go build -race -o dnscontrol-race
$ ./dnscontrol-race version
v4.27.2-0.20251127184623-cf6b870052c0+dirty

$ dnscontrol-race preview
CONCURRENTLY checking for 16 zone(s)
SERIALLY checking for 6 zone(s)
Serially checking for zone: "domainX.tld"
Serially checking for zone: "domainX.tld"
Serially checking for zone: "domainX.tld"
Serially checking for zone: "domainX.tld"
Serially checking for zone: "domainX.tld"
Serially checking for zone: "domainX.tld"
Waiting for concurrent checking(s) to complete...DONE
CONCURRENTLY gathering records of 16 zone(s)
SERIALLY gathering records of 6 zone(s)
Serially Gathering: "domainX.tld"
Serially Gathering: "domainX.tld"
Serially Gathering: "domainX.tld"
Serially Gathering: "domainX.tld"
Serially Gathering: "domainX.tld"
Serially Gathering: "domainX.tld"
Waiting for concurrent gathering(s) to complete...DONE
******************** Domain: domainX.tld
INFO#1: 4 records not being deleted because of NO_PURGE:
[...]
******************** Domain: domainX.tld
******************** Domain: domainX.tld
INFO#1: 4 records not being deleted because of NO_PURGE:
[...]
******************** Domain: domainX.tld
******************** Domain: domainX.tld
******************** Domain: domainX.tld
1 correction (PK-INWX)
INFO#1: 1 records not being deleted because of IGNORE*():
[...]
******************** Domain: domainX.tld
******************** Domain: domainX.tld
******************** Domain: domainX.tld
******************** Domain: domainX.tld
30 corrections (PK-INWX)
[...]
******************** Domain: domainX.tld
******************** Domain: domainX.tld
2 corrections (PK-INWX)
[...]
******************** Domain: domainX.tld
******************** Domain: domainX.tld
******************** Domain: domainX.tld
******************** Domain: domainX.tld
2 corrections (PK-INWX)
[...]
******************** Domain: domainX.tld
******************** Domain: domainX.tld
Done. 37 corrections.
```

Unfortunately INWX sandbox is sporadically still broken so `go test` is
of limited help:
```text
$ go test -v -verbose -profile INWX
=== RUN   TestDNSProviders
Testing Profile="INWX" (TYPE="INWX")
    helpers_test.go:122: INWX: Unable to login
--- FAIL: TestDNSProviders (30.03s)
=== RUN   TestDualProviders
Testing Profile="INWX" (TYPE="INWX")
    provider_test.go:50: Clearing everything
    provider_test.go:57: Adding test nameservers
    provider_test.go:44: #1:
        + CREATE dnscontrol-inwx.com NS ns1.example.com. ttl=300
    provider_test.go:44: #2:
        + CREATE dnscontrol-inwx.com NS ns2.example.com. ttl=300
    provider_test.go:60: Running again to ensure stability
    provider_test.go:76: Removing test nameservers
    provider_test.go:44: #1:
        - DELETE dnscontrol-inwx.com NS ns1.example.com. ttl=300
    provider_test.go:44: #2:
        - DELETE dnscontrol-inwx.com NS ns2.example.com. ttl=300
--- PASS: TestDualProviders (2.44s)
=== RUN   TestNameserverDots
Testing Profile="INWX" (TYPE="INWX")
=== RUN   TestNameserverDots/No_trailing_dot_in_nameserver
--- PASS: TestNameserverDots (0.30s)
    --- PASS: TestNameserverDots/No_trailing_dot_in_nameserver (0.00s)
=== RUN   TestDuplicateNameservers
Testing Profile="INWX" (TYPE="INWX")
    provider_test.go:145: Skipping. Deduplication logic is not implemented for this provider.
--- SKIP: TestDuplicateNameservers (0.35s)
FAIL
exit status 1
FAIL    github.com/StackExchange/dnscontrol/v4/integrationTest  33.127s
```
This commit is contained in:
Patrik Kernstock 2025-12-01 15:13:06 +01:00 committed by GitHub
parent ec9a9e23af
commit 6e42ccfb31
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 2 additions and 2 deletions

View file

@ -119,7 +119,7 @@ Jump to a table:
| [`HOSTINGDE`](hostingde.md) | ❔ | ✅ | ✅ | ✅ | | [`HOSTINGDE`](hostingde.md) | ❔ | ✅ | ✅ | ✅ |
| [`HUAWEICLOUD`](huaweicloud.md) | ❔ | ✅ | ✅ | ✅ | | [`HUAWEICLOUD`](huaweicloud.md) | ❔ | ✅ | ✅ | ✅ |
| [`INTERNETBS`](internetbs.md) | ❔ | ❔ | ❌ | ❔ | | [`INTERNETBS`](internetbs.md) | ❔ | ❔ | ❌ | ❔ |
| [`INWX`](inwx.md) | | ✅ | ✅ | ✅ | | [`INWX`](inwx.md) | | ✅ | ✅ | ✅ |
| [`JOKER`](joker.md) | ❌ | ❌ | ✅ | ✅ | | [`JOKER`](joker.md) | ❌ | ❌ | ✅ | ✅ |
| [`LINODE`](linode.md) | ❔ | ❌ | ❌ | ✅ | | [`LINODE`](linode.md) | ❔ | ❌ | ❌ | ✅ |
| [`LOOPIA`](loopia.md) | ❔ | ✅ | ❌ | ✅ | | [`LOOPIA`](loopia.md) | ❔ | ✅ | ❌ | ✅ |

View file

@ -51,7 +51,7 @@ var features = providers.DocumentationNotes{
// See providers/capabilities.go for the entire list of capabilities. // See providers/capabilities.go for the entire list of capabilities.
providers.CanAutoDNSSEC: providers.Can(), providers.CanAutoDNSSEC: providers.Can(),
providers.CanGetZones: providers.Can(), providers.CanGetZones: providers.Can(),
providers.CanConcur: providers.Unimplemented(), providers.CanConcur: providers.Can(),
providers.CanUseAlias: providers.Can(), providers.CanUseAlias: providers.Can(),
providers.CanUseCAA: providers.Can(), providers.CanUseCAA: providers.Can(),
providers.CanUseDS: providers.Unimplemented("DS records are only supported at the apex and require a different API call that hasn't been implemented yet."), providers.CanUseDS: providers.Unimplemented("DS records are only supported at the apex and require a different API call that hasn't been implemented yet."),