package async
Install
dune-project
Dependency
Authors
Maintainers
Sources
sha256=3edbaa62a7ea910da0d5c06974da9b2b7e14a9e2648596bc7c9f09c89970b5f8
doc/CHANGES.html
Release v0.17.0
Changes in
Async:- Fix a segfault that occasionally manifests in the pingpong benchmark
Changes in
Async_rpc:Add a new version of the
Async_rpcwire protocol:- Clients and servers now exchange
Versioned_rpcmenus up-front instead of needing to request it via a special RPC, and bin shape digests are included in the menu to allow for clients and servers to check compatibility at runtime. - Clients and servers can exchange a user-provided identification string
Authorization_failurewas added as an additional structured RPC error type, as well asUnknownto cover future cases
- Clients and servers now exchange
- Add an argument to rpc creator functions to specify how
Async_rpcshould determine whether the result of the RPC was a success or error. This information is exposed inTracing_event.t's viaAsync_rpc_kernel.Async_rpc_kernel_private.Connection.events, which is intended to be used by observability libraries to generate metrics and traces from RPC activity. - Add a note in
Rpc_transportpointing out that reducing reader/writer buffer sizes can have unexpected effects due to differences in how the the buffers get allocated if they're under or over the threshold to use mmap. - Add
Connection.serve_unixfor serving specifically on unix domain sockets which supports extracting the peer's credentials for authentication. - Add the ability to enable dumping RPC message buffers on deserialization errors. This functionality is intended to help debugging cases where invalid messages are being received on an RPC connection and where it's unclear where the corruption is happening.
- Mention the
ASYNC_RPC_MAX_MESSAGE_SIZEenv var in the error messages for overly large messages. - Fix a bug where an exception getting raised from trying to write an response would get caught and attempted to be written again as an error instead of allowing it to propagate to close the connection.
Changes in
Async_quickcheck:- Added
Async_quickcheck.async_test_or_error, for getting aResult.t` with the failing input and the error when the test fails.
- Added
Changes in
Persistent_connection:- Take
Eventout of the functor and parameterize it so that it's easier to write generic functions that operate on events. - Add
Make'which allows for using a custom error type instead ofError.t.
- Take
Changes in
Unpack_sequence:- Allow specifying a
size_budgetfor the pipe when callingUnpack_sequence.unpack_into_pipe.
- Allow specifying a
Release v0.16.0
Update
Async_command.with_options:- Add optional
behave_nicely_in_pipelineparameter - If true, calls
Writer.behave_nicely_in_pipeline()when the command starts - Default value is true
- Add optional
Update
Async_quickcheck.async_testfunction:- Add optional
sizesparameter to specify a sequence of sizes for generated test data - Add optional
shrinkerparameter to provide a custom shrinker for the test data - Add optional
shrink_attemptsparameter to control the number of attempts at shrinking test data
- Add optional
- Changes in
Async_rpc.Rpc:
- Change
handshake_timeoutparameter type fromTime.Span.ttoTime_float.Span.t. - Remove
on_handshake_errortype fromRpc.Connectionto simplify the interface
Changes in
Async_rpc.Rpc_transport:- Add
writer_buffer_sizeparameter toRpc_transport.of_fd
- Add
Add new function to
Rpc_transport_low_latency.Reader.With_internal_reader:read_one_message_bin_prot_without_buffering- Similar to
Rpc_kernel.Transport.Reader.read_one_message_bin_prot - Reads only the necessary bytes for a single bin prot message from the underlying file descriptor
- Similar to
Changes in
Lock_file_async.Flock:Flock.lock_exnandFlock.locknow have optionalexclusiveandclose_on_execparametersexclusivecontrols exclusive access to the lockclose_on_execspecifies whether to close the lock when executing a new program
Update functions in
Flockmodule inLock_file_async:- Added an optional
exclusiveparameter, enabling shared locks when set to false (previously exclusive locks only) - Add optional
close_on_execparameter to control if the lock is closed on exec
- Added an optional
Changes in
Persistent_connection:retry_delayandhandshake_timeoutchanged fromTime.Span.ttoTime_float.Span.t
Changes in
Unpack_sequence:Added a new function:
Unpack_sequence.unpack_iter_with_pushback- Similar to
unpack_iter, but waits forpushbackafter unpacking every chunk
- Similar to
Old pre-v0.15 changelogs (very likely stale and incomplete)
git version
- Added a new (single-module) library
async.log_extended, extendingAsync.LogwithConsoleandSyslogsubmodules. - Improved Async scheduler fairness by calling Thread.yield every cycle, which releases the OCaml lock if any other OCaml threads are waiting to acquire it.
- Added a new (single-module) library
async.unpack_sequence, for efficiently unpacking a sequence of packed values coming from astring Pipe.Reader.tor aReader.t. - Increased Unix.listen's default backlog from 10 to 64, to reduce occurrences of TCP clients getting Unexpected EOF errors when the listening server is busy.
- Added an optional argument to Pipe functions fold and iter so they can consider a value flushed when it is processed by the supplied ~f rather than when it is read out of the pipe.
Weak_hashtblwas moved into its own libraryWeak_hashtbl_async, which is released as part of the async package.- Added function
Tcp.Server.close_finished_and_handlers_determined.
v0.10
- Moved
Persistent_connectiontoAsync_kernel, so that it can be used in javascript. - Improved
Log.Outputto write, flush, rotate, or close allLog.Output.ts, even if one raises - Added
Async.print_sfor pretty printing a sexp to stdout. - Removed a per-cycle allocation from the scheduler.
- Fixed
Reader.load_bin_protto always returnErrorwhen there is an error, rather than returnErrorin some situations and raise in others. - Improved the behavior of shutdown when there are errors.
- Added
Scheduler.may_sleep_for_thread_fairness, an opt-in configuration that improves thread fairness. - Added to
Sys.file_existsfunction afollow_symlinksoptional argument. - Fixed the Async scheduler so that for top-level unhandled exceptions, it runs
at_exitfunctions once, not twice. - For
Writer.open_file, exposed the syscall optional argument. - Exposed
Async.ifprintf, which had previously been mistakenly shadowed even though it doesn't block. - Unified
Synchronous_time_source.tandTime_source.t, into a single data structure, allowing one to convert between them as needed. This involved substantive changes to Async's clock. - Added function
Time_source.timing_wheel_now. - Added stable types for
Log.LevelandLog.Output.format. - Improved shutdown function so that when shutdown is forced (i.e.
at_shutdownhandlers time out), it callsPervasives.exit, which runsat_exithandlers. This improvesCommand.asyncin this situation, due to its use of anat_exithandler to print errors. - Improved
Process.run's error message whenworking_diris missing. - Fixed
Rpc.Connection.createso that it doesn't raise on a failed handshake. - Significantly improved the performance of
Log.printfwhen the log message won't be printed, by usingifprintfto avoid constructing the message. - Added
Socket.AddressfunctionsInet.to_sockaddrandUnix.to_sockaddr, the type specialized versions ofSocket.Address.to_sockaddr. - Added
Socket.bind_inet, which is like bind, but restricted to Inet addresses and does not return aDeferred.t. ChangedUdp.bindandbind_anyto not return aDeferred.t. - Added to
File_tail.createan optional?throttleargument so that one can use a custom throttle andmax_concurrent_jobsrather than a global throttle with a fixedmax_concurrent_jobs. - Renamed
TcpandRpc'svia_local_interfaceandvia_local_portarguments asbind_to_addressandbind_to_port. - Made
Tcp.Server.createandcreate_sock's~on_handler_errorargument mandatory. - In
Tcp.Server, stopped callingon_handler_errorforWritererror frominner_monitor, which only indicated that the client likely closed the connection before all the bytes could be written. - Renamed
Command.asyncasasync_specandCommand.async'asasync. We want to encourage the use ofCommand.Paramand discourage the use ofCommand.Spec. - Changed
Asyncso that in tests it uses synchronous output. - Changed
Async's default max number of open file descriptors from8_192to the minimum of32_768andulimit -n -H. - In the Async scheduler's main loop, avoided calling
Time_ns.nowandLinux_ext.Timerfd.set_afterunless they are needed. This saves about 50ns per cycle. - Moved
Tcpfunctions for specifying where to connect and where to listen into submodules:Where_to_connectandWhere_to_listen - Changed
Tcp.to_host_and_portfrom taking a string and int toTcp.Where_to_connect.of_host_and_port, taking aHost_and_port.t - Changed
Rpc.Connection.clientto take aTcp.Where_to_connect.tinstead of~host ~port. - Changed
Synchronous_time_source.Event.abortto return a variant type, in the same style asTime_source.Event.abort. Addedabort_exnandabort_if_possible, also in the same style asTime_source.Event. - Added function
Scheduler.long_cycles, which returns the stream of cycles whose duration exceeds a user-supplied time span. This is more efficient thancycle_times, because it only allocates a stream element when there is a long cycle, rather than on every cycle. - Made internal libraries stdless:
Async_unix,Async_extra. - Changed
Udp.recvfrom_loopandread_loopfunctions to return a variantClosed | Stoppedrather thanunit. - Extended the
Unix.Inet_addrmodule's interface to includeCore.Unix.Inet_addr's interface.
v0.9
113.43.00
- Added some expect tests of
Monitor, in particularMonitor.handle_errors. - Added a benchmark of
Monitor.try_with.
113.33.00
Keep up to date with interface changes in Async_kernel, Async_extra and Async_unix.
113.24.00
Keep up to date with interface changes in Async_kernel, Async_extra and Async_unix.
113.00.00
Added
Async.Std.Printfmodule so that one doesn't unintentionally use blockingCore.Std.Printffunctions in an Async program.There was much pre-existing code that did this via:
: open Core.Std : open Async.Std
Async.Std.Printfdefines blocking functions (e.gprintf,eprintf) to cause a type error, but leaves Async-friendly functions (e.g.sprintf,ksprintf) untouched.Replaced uses of
Printf.*, withCore.Std.Printf.*where needed.
112.35.00
- Include some previously-omitted benchmarks
112.24.00
Keep up to date with interface changes in Async_kernel, Async_extra and Async_unix.
112.17.00
Added tests and updated examples
112.01.00
- update tests
111.25.00
- add a dns example
111.11.00
- Updated the sound.ml example
109.53.00
- Bump version number
109.14.00
Added function
Monitor.kill, which kills a monitor and all its descendants.This prevents any jobs from ever running in the monitor again.
109.09.00
- Switched
Async.Std's toplevel bindings forDeferred.Or_error'sbindandmapto useDeferred.Result. This allows them to be used with any'errortype, rather than justError.t.
109.05.00
- Added
val _squelch_unused_module_warning_toAsync.Std.