Commit Graph
3691 Commits
Author SHA1 Message Date
Evan HuntandWitold Kręcicki 3f736b4374 fixup! - Get rid of obsolete fields in ns_client structure - WiP - local address detection - WiP - XFR cancel 2019-11-05 12:54:45 +01:00
Evan HuntandWitold Kręcicki da5da14f36 fixup! - Get rid of obsolete fields in ns_client structure - WiP - local address detection - WiP - XFR cancel 2019-11-05 12:54:45 +01:00
Witold Kręcicki d44a0385f8 fixup! - Get rid of obsolete fields in ns_client structure - WiP - local address detection - WiP - XFR cancel 2019-11-05 12:54:45 +01:00
Witold Kręcicki 28f35351ad - Get rid of obsolete fields in ns_client structure
- WiP - local address detection
- WiP - XFR cancel
2019-11-05 12:54:45 +01:00
Witold Kręcicki 39104f766d Initialize atomics properly in isc_nm_start 2019-11-05 12:54:45 +01:00
Evan HuntandWitold Kręcicki f78d234ce3 remove isc_nm_paused(), it's no longer needed 2019-11-05 12:54:45 +01:00
Evan HuntandWitold Kręcicki fb160b071c fixup! Fix a race between isc_nm_start and nm_thread 2019-11-05 12:54:45 +01:00
Evan HuntandWitold Kręcicki 469e7e5a3e fixup! fixup! Define a new 'interlocked' status of netmgr - if it's active that means there's an operation that depends on many workers. No two such operation can be launched at once without risking a deadlock, so other ones must either wait or requeue. 2019-11-05 12:54:45 +01:00
Witold Kręcicki a8fda869a2 fixup! Define a new 'interlocked' status of netmgr - if it's active that means there's an operation that depends on many workers. No two such operation can be launched at once without risking a deadlock, so other ones must either wait or requeue. 2019-11-05 12:54:45 +01:00
Witold Kręcicki b29b2bfa2e Define a new 'interlocked' status of netmgr - if it's active
that means there's an operation that depends on many workers.
No two such operation can be launched at once without risking
a deadlock, so other ones must either wait or requeue.
2019-11-05 12:54:45 +01:00
Witold Kręcicki fdeb8c4f48 fixup! netmgr: don't try to send to a closed tcpdns socket 2019-11-05 12:54:45 +01:00
Witold Kręcicki e3ab21352a Fix a race between isc_nm_start and nm_thread 2019-11-05 12:54:45 +01:00
Witold Kręcicki 27593715b3 netmgr: empty the async event queue right before destroying it 2019-11-05 12:54:45 +01:00
Evan HuntandWitold Kręcicki 97da9703cd add missing atomic_exchange macro in mutexatomic.h 2019-11-05 12:54:45 +01:00
Witold Kręcicki 6dc0edad86 - Free all the pending async calls when the worker is exiting
- Add a hack to fix libuv not sending uv_close callback if nothing
  was in the workqueue
2019-11-05 12:54:45 +01:00
Evan HuntandWitold Kręcicki 395b9b50a3 re-enqueue stop listening events if network manager is pausing
it was still possible to deadlock between stop-listening and pause
events. this is now addressed by testing to see whether the manager is
in the process of pausing, and re-enqueueing stop-listening events
for later. the uv_run() loop is now terminated immediately after
uv_stop() is called, so that the re-enqueued stop-listeneing event
won't be processed until after the manager is unpaused.
2019-11-05 12:54:45 +01:00
Witold Kręcicki 4e1bdb2e63 - Always close listening sockets asynchronously, even if we're in the specific thread
- Export some lib/ns/client stuff for unit tests
- Fix lib/ns unit tests
2019-11-05 12:54:45 +01:00
Evan HuntandWitold Kręcicki b8e54a6ca4 don't assert in isc_task_pause() if the task is 'running'
there is a window of time after a task finishes running an event
before the task state is reset from 'running' to 'ready' or 'idle'.
previously, if the network manager ran ns__client_request() during
that time, isc_task_pause() would assert.
2019-11-05 12:54:45 +01:00
Witold Kręcicki d395a23335 fixup! Add atomic_exchange operations to stdatomics.h 2019-11-05 12:54:45 +01:00
Witold Kręcicki 26b19951ab fixup! Add atomic_exchange operations to stdatomics.h 2019-11-05 12:54:45 +01:00
Evan HuntandWitold Kręcicki 549c3a0111 use family AF_INET6 when creating UDP sockets for IPv6 addresses 2019-11-05 12:54:45 +01:00
Evan HuntandWitold Kręcicki 31fe4bbe7c lock manager when stopping workers, to prevent a possible shutdown deadlock 2019-11-05 12:54:45 +01:00
Evan HuntandWitold Kręcicki a0410678de Don't assert if there's left-over data after reading a DNS TCP message. 2019-11-05 12:54:45 +01:00
Evan HuntandWitold Kręcicki 6900793dba set the base pointer correctly when gluing TCP reads into a single message 2019-11-05 12:54:45 +01:00
Evan HuntandWitold Kręcicki 638a289ca9 Implement "maxudp" for netmgr so that the legacy test will pass. 2019-11-05 12:54:45 +01:00
Evan HuntandWitold Kręcicki 67211aa288 acquire manager lock before sending 'stoplisten' events to workers
this prevents a potential race between isc_nm_udp_stoplistening()
and isc_nm_pause() which could cause a server to deadlock.
2019-11-05 12:54:45 +01:00
Evan HuntandWitold Kręcicki 7bc1004f00 always reference the client->handle before ns_query_recurse()
this supercedes the experiment in commit eab6c2bff
("attach to nmhandle during zerottl refetch"), and ensures that
the client can't be reset before fetch_callback() is reached.
2019-11-05 12:54:45 +01:00
Evan HuntandWitold Kręcicki 44e7fec8a7 make "stoplisten" events asynchronous so we can issue them while paused
when reconfiguring a server we're in task exclusive mode, which
means the netmgr is paused. previously, when we issued "stoplistening"
events, we would wait for the worker thread to process the event
before proceeding. since that can't happen while paused, we could
hit a deadlock during reconfig if the listen-on addresses changed.
2019-11-05 12:54:45 +01:00
Evan HuntandWitold Kręcicki a5ca545f39 more fixes for handle reference counting
- ref handle in tcp_send_direct and tcp_send_cb
- unref handle when xfrout fails
- remove some unneeded unrefs in ns__client_request
2019-11-05 12:54:45 +01:00
Evan HuntandWitold Kręcicki 0e2154f980 style nits 2019-11-05 12:54:45 +01:00
Witold Kręcicki 7a677338ec Fix compilation issues in mutexatomics mode 2019-11-05 12:54:45 +01:00
Witold Kręcicki 3584565c4b netmgr: fixes for Windows:
- MSVC doesn't like empty {} initializers
 - Emulate stdalign.h on Windows with __declspec(align())
 - There's no usleep on Windows
 - Add missing symbols to libns.def and libisc.def
 - Proper use of SO_REUSE****
 - libuv detection in Configure
 - Minor fixes to the atomics code
2019-11-05 12:54:45 +01:00
Evan HuntandWitold Kręcicki 1b4bbebd11 eliminate isc_nm_shutdown in favor of isc_nm_detach 2019-11-05 12:54:45 +01:00
Evan HuntandWitold Kręcicki e457feb1e3 continue client/handle reference counting changes 2019-11-05 12:54:45 +01:00
Evan HuntandWitold Kręcicki 021848bca9 experiment: eliminate client reference counting; use nmhandler only 2019-11-05 12:54:45 +01:00
Evan HuntandWitold Kręcicki 669f659fe3 partial fix: improve socket and metmgr cleanup for orderly shudown
- when we attempt to shut down a parent socket, but its children
  still have active handles, the destruction is delayed, and previously
  it was never resumed. now, when the last handle for a child socket is
  detached, we check again whether the parent can be destroyed.
- the netmgr is not shut down until all references to it are detached.
2019-11-05 12:54:45 +01:00
Witold Kręcicki e3b597ffa7 Add atomic_exchange operations to stdatomics.h 2019-11-05 12:54:45 +01:00
Witold Kręcicki 7c35e1894f netmgr: translate libuv error codes to isc_result_t's 2019-11-05 12:54:45 +01:00
Witold Kręcicki e0fd7d883c netmgr: isc__nm_uverr2result function converting libuv errors to libisc errors 2019-11-05 12:54:45 +01:00
Evan HuntandWitold Kręcicki b25d42c3e5 count active handles in child sockets before destroying a parent socket 2019-11-05 12:54:45 +01:00
Evan HuntandWitold Kręcicki b0928cf610 finish some TODO's 2019-11-05 12:54:45 +01:00
Evan HuntandWitold Kręcicki e8203e3cee documentation and namespace cleanup
- document functions in netmgr.h and netmgr-int.h
- combine identical callback typedefs into one
- remove functions that were never called
- make functions called in only one file static
- rename isc__nm_handle_*() functions to isc__nm_async_*() to avoid
  confusion with the isc__nmhandle type.
2019-11-05 12:54:45 +01:00
Witold Kręcicki 09a3650ef2 netmgr: don't try to send to a closed tcpdns socket 2019-11-05 12:54:45 +01:00
Witold Kręcicki 6c239005ad netmgr: rename all 'socket' to 'sock', to avoid conflict with socket() 2019-11-05 12:54:45 +01:00
Witold Kręcicki 6938bca291 Address compilation errors - gcc overzealousness with empty initializers (C99 declares that those should be filled as static initializers), one uninitialized value 2019-11-05 12:54:45 +01:00
Witold Kręcicki 0246b46f06 netmgr test: mutex (and not atomics) based astack 2019-11-05 12:54:45 +01:00
Witold Kręcicki 54d420f391 netmgr:
- clean up isc_nmevent structures - make generic types and just typedef to them
 - fix atomic clang warnings in astack
 - add pause/resume read for TCP
 - add sequential (not-pipelining) support for TCPDNS
 - keep peer address in the socket for TCP connections, it's constant for a socket
2019-11-05 12:54:45 +01:00
Evan HuntandWitold Kręcicki 7a9fc7cf13 remove unused members of ns_client 2019-11-05 12:54:45 +01:00
Evan HuntandWitold Kręcicki 22795df7e5 reattach the nmhandle to the client when running a prefetch
this delays the destruction of the client object until after the
prefetch is finished.

also added some missing CTRACE logging in query.c, in the process of
diagnosing this error.
2019-11-05 12:54:45 +01:00
Evan HuntandWitold Kręcicki 9941edd286 add missing calls to isc_task_unpause()
also more style fixes
2019-11-05 12:54:45 +01:00