Commit graph

39970 commits

Author SHA1 Message Date
Evan Hunt
29cf7dceb7 modify dns_qp_findname_ancestor() to return found name
add a 'foundname' parameter to dns_qp_findname_ancestor(),
and use it to set the found name in dns_nametree.

this required adding a dns_qpkey_toname() function; that was
done by moving qp_test_keytoname() from the test library to qp.c.
added some more test cases and fixed bugs with the handling of
relative and empty names.
2023-09-28 07:01:13 +00:00
Evan Hunt
06ac957c4f Merge branch 'each-qp-benchmark' into 'main'
add a QP lookups benchmark

See merge request isc-projects/bind9!8345
2023-09-28 07:00:10 +00:00
Evan Hunt
e68a691904 add a "qplookups" benchmark test
this loads a file containing DNS names and measures the time it takes to:
1) iterate it,
2) look up each name with dns_qp_getname()
3) look up each name with dns_qp_findname_ancestor()
4) look up a modified name based on the name, to check performance
   when the name is not found.
2023-09-27 16:24:04 -07:00
Evan Hunt
d71ebd2086 minor cleanups
- removed some commented-out code
- cleaned up uses of pval and ival that were not needed
2023-09-27 13:05:05 -07:00
Evan Hunt
5259648b3f Merge branch '4338-fix-qpmulti-benchmark' into 'main'
fix the qpmulti benchmark

Closes #4338

See merge request isc-projects/bind9!8344
2023-09-27 19:35:20 +00:00
Evan Hunt
232f90f005 fixed the qpmulti benchmark
the refactoring of isc_job_run() and isc_async_run() in 9.19.12
intefered with the way the qpmulti benchmark uses uv_idle.
it has now been modified to use isc_job/isc_async instead.
2023-09-27 11:51:03 -07:00
Arаm Sаrgsyаn
f55488aa09 Merge branch '4335-xfrin_xmlrender-cleanup-path-issue' into 'main'
Resolve "CID 465814: Control flow issues (DEADCODE) in statschannel.c"

Closes #4335

See merge request isc-projects/bind9!8334
2023-09-27 11:19:51 +00:00
Aram Sargsyan
f9bcabff24 Fix return value and docs for dns_zone_getxfr()
When the given zone is not associated with a zone manager, the function
currently returns ISC_R_NOTFOUND, which is documented as the return
value for the case in which no incoming zone transfer is found.  Make
the function return ISC_R_FAILURE in such a case instead.

Also update the description of the function as the value it returns is
not meant to indicate whether an ongoing incoming transfer for the given
zone exists.  The boolean variables that the function sets via the
pointers provided as its parameters, combined with either keeping
'*xfrp' set to NULL or updating it to a valid pointer, can be used by
the caller to infer all the necessary information.
2023-09-27 10:03:40 +00:00
Aram Sargsyan
f1f863dd81 Fix error path issue in xfrin_xmlrender()
The TRY0 macro doesn't set the 'result' variable, so the error
log message is never printed. Remove the 'result' variable and
modify the function's control flow to be similar to the the
zone_xmlrender() function, with a separate error returning path.
2023-09-27 10:03:40 +00:00
Ondřej Surý
2a2eba74fc Merge branch 'ondrej/workaround-free_pools' into 'main'
Workaround compiler bug that optimizes setting .free_pools

See merge request isc-projects/bind9!8339
2023-09-26 13:11:44 +00:00
Ondřej Surý
ca912775a5
Workaround compiler bug that optimizes setting .free_pools
The .free_pools bitfield would not be set on some levels of
optimizations - workaround the compiler bug by reordering the setting
the .freepools in the initializer.
2023-09-26 14:59:39 +02:00
Arаm Sаrgsyаn
f494b21ce0 Merge branch '4332-data-race-in-dns_xfrin_getendserial' into 'main'
xfrin.c: use the statslock for more xfrin members

Closes #4332

See merge request isc-projects/bind9!8333
2023-09-26 12:57:33 +00:00
Aram Sargsyan
903a79f6ce Don't use the statslock in the destructor
Using the 'statslock' mutex in the destructor is useless, because
at this point there shouldn't be any other references to the
structure.
2023-09-26 12:23:10 +00:00
Aram Sargsyan
ed2f06ea4d Remove xfr->end
The structure member is populated only moments before its
destruction, and is not used anywhere, except for the
destructor. Use a local variable instead.
2023-09-26 12:23:10 +00:00
Aram Sargsyan
5067b83116 Use the statslock for more xfrin members
The 'end_serial' and some other members of the 'dns_xfrin_t'
structure can be accessed by the statistics channel, causing
a data race with the zone transfer process.

Use the existing 'statslock' mutex for protecting those members.
2023-09-26 12:23:10 +00:00
Mark Andrews
0d85492f6b Merge branch '4316-dynamic-update-refused-shortly-after-zone-was-thawed' into 'main'
Resolve "dynamic update refused shortly after zone was thawed"

Closes #4316

See merge request isc-projects/bind9!8310
2023-09-26 03:13:57 +00:00
Mark Andrews
e33dbd0cbd Document that reloading happens asynchronously 2023-09-26 02:43:51 +00:00
Mark Andrews
5b3238aa85 Wait for the test zone to finish re-loading
'rndc thaw' initiates asynchrous loading of all the zones
similar to 'rndc load'.  Wait for the test zone's load to
complete before testing that it is updatable again.
2023-09-26 02:43:51 +00:00
Mark Andrews
9ca06af4b9 Merge branch 'marka-placeholder' into 'main'
Add placeholder entry for [GL #4336]

See merge request isc-projects/bind9!8335
2023-09-26 00:48:33 +00:00
Mark Andrews
7084313b53 Add placeholder entry for [GL #4336] 2023-09-26 10:22:10 +10:00
Ondřej Surý
65c92d001c Merge branch '4325-reduce-isc_mempool-contention' into 'main'
Change dns_message_create() function to accept memory pools

Closes #4325

See merge request isc-projects/bind9!8330
2023-09-25 05:41:53 +00:00
Ondřej Surý
15cae8d473
Add CHANGES note for [GL #4325] 2023-09-24 18:07:40 +02:00
Ondřej Surý
f5af981831
Change dns_message_create() function to accept memory pools
Instead of creating new memory pools for each new dns_message, change
dns_message_create() method to optionally accept externally created
dns_fixedname_t and dns_rdataset_t memory pools.  This allows us to
preallocate the memory pools in ns_client and dns_resolver units for the
lifetime of dns_resolver_t and ns_clientmgr_t.
2023-09-24 18:07:40 +02:00
Ondřej Surý
759a977a67
Convert dns_message reference counting to ISC_REFCOUNT macros
Unify the dns_message reference counting to use ISC_REFCOUNT_{IMPL,DECL}
macros to reduce the code duplicity and add reference count tracing.
2023-09-24 10:09:04 +02:00
Ondřej Surý
3340c82b99
Improve isc_refcount with initializer and implicit destroy
Add ISC_REFCOUNT_INITIALIZER(x) macro and implicitly call
isc_refcount_destroy() in the ISC_REFCOUNT_IMPL() macros
to reduce code duplicities.
2023-09-24 10:08:56 +02:00
Arаm Sаrgsyаn
6adc0be124 Merge branch 'aram/statschannel-expose-precursory-soa-request-state' into 'main'
Add the "Refresh SOA" state for the incoming zone transfers and improve the "Duration" field

See merge request isc-projects/bind9!8305
2023-09-22 12:40:53 +00:00
Aram Sargsyan
e905a05b3e Add a CHANGES note for [GL !8305] 2023-09-22 11:47:26 +00:00
Aram Sargsyan
93088fbf8b Fix the incoming transfers' "Needs Refresh" state in stats channel
The "Needs Refresh" flag is exposed in two places in the statistics
channel: first - there is a state called "Needs Refresh", when the
process hasn't started yet, but the zone needs a refresh, and second
- there there is a field called "Additional Refresh Queued", when the
process is ongoing, but another refresh is queued for the same zone.

The DNS_ZONEFLG_NEEDREFRESH flag, however, is set only when there is
an ongoing zone transfer and a new notify is received. That is, the
flag is not set for the first case above.

In order to fix the issue, use the DNS_ZONEFLG_NEEDREFRESH flag only
when the zone transfer is running, otherwise, decide whether a zone
needs a refresh using its refresh and expire times.
2023-09-22 11:47:26 +00:00
Aram Sargsyan
621a1461d9 xfrin: rename XFRST_INITIALSOA to XFRST_ZONEXFRREQUEST
The XFRST_INITIALSOA state in the xfrin module is named like that,
because the first RR in a zone transfer must be SOA. However, the
name of the state is a bit confusing (especially when exposed to
the users with statistics channel), because it can be mistaken with
the refresh SOA request step, which takes place before the zone
transfer starts.

Rename the state to XFRST_ZONEXFRREQUEST (i.e. Zone Transfer Request).
During that step the state machine performs several operations -
establishing a connection, sending a request, and receiving/parsing
the first RR in the answer.
2023-09-22 11:47:26 +00:00
Aram Sargsyan
dee829d9dc Show the local and remote addresses for the "Refresh SOA" query
Currently in the statsistics channel's incoming zone transfers list
the local and remote addresses are shown only when the zone transfer
is already running. Since we have now introduced the "Refresh SOA"
state, which shows the state of the SOA query before the zone transfer
is started, this commit implements a feature to show the local and
remote addresses for the SOA query, when the state is "Refresh SOA".
2023-09-22 11:26:11 +00:00
Aram Sargsyan
979b86ecb9 Improve the "Duration (s)" field of the incoming xfers in stats channel
Improve the "Duration (s)" field, so that it can show the duration of
all the major states of an incoming zone transfer process, while they
are taking place. In particular, it will now show the duration of the
"Pending", "Refresh SOA" and "Deferred" states too, before the actual
zone transfer starts.
2023-09-22 11:24:49 +00:00
Aram Sargsyan
a3916e4ed2 Add the "Refresh SOA" state for the incoming zone transfers
With adding this state to the statistics channel, it can now show
the zone transfer in this state instead of as "Pending" when the
zone.c module is performing a refresh SOA request, before actually
starting the transfer process. This will help to understand
whether the process is waiting because of the rate limiter (i.e.
"Pending"), or the rate limiter is passed and it is now waiting for
the refresh SOA query to complete or time out.
2023-09-22 11:05:52 +00:00
Arаm Sаrgsyаn
9b6949e8ec Merge branch 'aram/statschannel-expose-xfrin-soa-transport' into 'main'
Expose the SOA query transport type used before/during XFR

See merge request isc-projects/bind9!8240
2023-09-22 10:59:30 +00:00
Aram Sargsyan
e92d1eeafc Check zone transfer transports in the statistics channel
Add two more secondary zones to ns3 to be transferred from ns1,
using its IPv6 address for which the 'tcp-only' is set to 'yes'.
Check the statistics channel's incoming zone transfers information
to confirm that the expected transports were used for each of the
SOA query cases (UDP, TCP, TLS), and also for zone transfers (TCP,
TLS).
2023-09-22 09:56:33 +00:00
Aram Sargsyan
8f4f82e018 Add a CHANGES note for [GL !8240] 2023-09-22 09:56:33 +00:00
Aram Sargsyan
8e2273afce Expose the SOA query transport type used before/during XFR
Add a new field in the incoming zone transfers section of the
statistics channel to show the transport used for the SOA request.

When the transfer is started beginning from the XFRST_SOAQUERY state,
it means that the SOA query will be performed by xfrin itself, using
the same transport. Otherwise, it means that the SOA query was already
performed by other means (e.g. by zone.c:soa_query()), and, in that
case, we use the SOA query transport type information passed by the
'soa_transport_type' argument, when the xfrin object was created.
2023-09-22 09:56:33 +00:00
Arаm Sаrgsyаn
2eb8afde52 Merge branch '3883-expose-data-about-transfers-in-progress' into 'main'
Draft: Implement exposing data about zone transfers in progress

Closes #3883

See merge request isc-projects/bind9!7984
2023-09-22 09:40:23 +00:00
Mark Andrews
a60e6837fb Wait for slow zone transfer to complete before ending test
This allows the statistics channel to be viewed in a browser while
the transfer is in progress.  Also set the transfer format to
one-answer to extend the amount of time the re-transfer takes.

When running the statschannel test on its own, use
<http://10.53.0.3:5304/xml/v3/xfrins> to see the output.

Note: the port is subject to future change.
2023-09-22 08:52:13 +00:00
Mark Andrews
bed4e36c86 Provide thread safe access to dns_xfrin_t state
dns_xfrin_t state may be accessed from different threads when
when reporting transfer state.  Ensure access is thread safe by
using atomics and locks where appropriate.
2023-09-22 08:52:13 +00:00
Aram Sargsyan
42f41f003e Add CHANGES and release notes for [GL #3883] 2023-09-22 08:52:12 +00:00
Aram Sargsyan
2f523462b8 Document zone transfers in statschannel
List the JSON and XML URLs in ARM for retrieving the incoming zone
transfers information from the statistics channel.
2023-09-22 08:51:45 +00:00
Aram Sargsyan
c929127b73 Add a test case for checking zone transfers in statschannel
Use the named -T transferslowly test options to slow down a zone
transfer from the primary server, and test that it's correctly
exposed in the statistics channel of the secondary server, while
it's in-progress.
2023-09-22 08:51:45 +00:00
Aram Sargsyan
3e65dc12f7 Implement exposing data about zone transfers in progress
The data about currently in-progress zone transfers is exposed
using the statistics channel in both XML and JSON formats.
2023-09-22 08:51:45 +00:00
Aram Sargsyan
bc12bcaf46 Implement various dns_xfrin_get*() functions
The information provided by those function will be needed and
used by the statistics channel in a follow-up commit.
2023-09-22 08:51:45 +00:00
Aram Sargsyan
826392f8c8 Implement dns_zone_getxfr()
The function is needed to get an attached xfrin and its current
state in statschannel.c for providing xfrin information in the
statistics channel.
2023-09-22 08:51:45 +00:00
Aram Sargsyan
35fc773632 dns_transport: use const arguments in getters when possible
In some dns_transport getter functions it's possible to use a
const dns_transport_t as the first argument instead of just
dns_transport_t. Convert the function prototypes to use const.
2023-09-22 08:51:45 +00:00
Ondřej Surý
baacd2af44 Merge branch '4327-minor-warning-about-ctype-h-function' into 'main'
Add semantic patch to explicitly cast chars to unsigned for ctype.h

Closes #4327

See merge request isc-projects/bind9!8325
2023-09-22 06:30:06 +00:00
Ondřej Surý
0e49a8422f Add CHANGES note for [GL #4327] 2023-09-22 08:29:17 +02:00
Ondřej Surý
29caa6d1f0 Explicitly cast chars to unsigned chars for <ctype.h> functions
Apply the semantic patch to catch all the places where we pass 'char' to
the <ctype.h> family of functions (isalpha() and friends, toupper(),
tolower()).
2023-09-22 08:29:17 +02:00
Ondřej Surý
5ec65ab5d0 Add semantic patch to explicitly cast chars to unsigned for ctype.h
Add a semantic patch to catch all the places where we pass 'char' to the
<ctype.h> family of functions (isalpha() and friends, toupper(),
tolower()).  While it generally works because the way how these
functions are constructed in the libc, it's safer to do the explicit
cast.
2023-09-22 08:29:17 +02:00