lnd/docs/release-notes/release-notes-0.17.0.md
Olaoluwa Osuntokun 01c64712a3
multi: ensure link is always torn down due to db failures, add exponential back off for sql-kvdb failures (#7927)
* lnwallet: fix log output msg

The log message is off by one.

* htlcswitch: fail channel when revoking it fails.

When the revocation of a channel state fails after receiving a new
CommitmentSigned msg we have to fail the channel otherwise we
continue with an unclean state.

* docs: update release-docs

* htlcswitch: tear down connection if revocation processing fails

If we couldn't revoke due to a DB error, then we want to also tear down
the connection, as we don't want the other party to continue to send
updates. That may lead to de-sync'd state an eventual force close.
Otherwise, the database might be able to recover come the next
reconnection attempt.

* kvdb: use sql.LevelSerializable for all backends

In this commit, we modify the default isolation level to be
`sql.LevelSerializable. This is the strictness isolation type for
postgres. For sqlite, there's only ever a single writer, so this doesn't
apply directly.

* kvdb/sqlbase: add randomized exponential backoff for serialization failures

In this commit, we add randomized exponential backoff for serialization
failures. For postgres, we''ll his this any time a transaction set fails
to be linearized. For sqlite, we'll his this if we have many writers
trying to grab the write lock at time same time, manifesting as a
`SQLITE_BUSY` error code.

As is, we'll retry up to 10 times, waiting a minimum of 50 miliseconds
between each attempt, up to 5 seconds without any delay at all. For
sqlite, this is also bounded by the busy timeout set, which applies on
top of this retry logic (block for busy timeout seconds, then apply this
back off logic).

* docs/release-notes: add entry for sqlite/postgres tx retry

---------

Co-authored-by: ziggie <ziggie1984@protonmail.com>
2023-08-30 16:48:00 -07:00

14 KiB

Release Notes

Bug Fixes

New Features

Functional Enhancements

Protocol Features

  • This release marks the first release that includes the new musig2-based taproot channel type. As new protocol feature hasn't yet been finalized, users must enable taproot channels with a new flag: --protocol.simple-taproot-chans. Once enabled, user MUST use the explicit channel type to request the taproot channel type (pending support by the remote peer). For lncli openchannel, --channel_type=taproot should be used.

RPC Additions

None

lncli Additions

None

Improvements

Functional Updates

Watchtowers

Neutrino

Misc

RPC Updates

  • SendOutputs now adheres to the anchor channel reserve requirement.

  • Enforce provided fee rate is no less than the relay or minimum mempool fee when calling OpenChannel, CloseChannel, SendCoins, and SendMany.

  • The UpdateNodeAnnouncement API can no longer be used to set/unset protocol features that are defined by LND.

  • The neutrinorpc GetBlockHash has been deprecated. Endpoint has been moved to the chainrpc sub-server.

  • Custom node announcement feature bits can also be specified in config using the dev build tag and --protocol.custom-nodeann, --protocol.custom-init and --protocol.custom-invoice flags to set feature bits for various feature "sets", as defined in BOLT 9.

  • OpenChannel now accepts an optional memo argument for specifying a helpful note-to-self containing arbitrary useful information about the channel.

  • PendingOpenChannel now has the field funding_expiry_blocks that indicates the number of blocks until the funding transaction is considered expired.

  • gRPC keepalive parameters can now be set in the configuration. The lnd configuration settings grpc.server-ping-time and grpc.server-ping-timeout configure how often lnd pings its clients and how long a pong response is allowed to take. The default values for there settings are improved over the gRPC protocol internal default values, so most users won't need to change those. The grpc.client-ping-min-wait setting defines how often a client is allowed to ping lnd to check for connection healthiness. The lnd default value of 5 seconds is much lower than the previously used protocol internal value, which means clients can now check connection health more often. For this to be activated on the client side, gRPC clients are encouraged to set the keepalive setting on their end as well (using the grpc.keepalive_time_ms option in JavaScript or Python, or the equivalent setting in the gRPC library they are using, might be an environment variable or a different syntax depending on the programming language used) when creating long open streams over a network topology that might silently fail connections. A value of grpc.keepalive_time_ms=5100 is recommended on the client side (adding 100ms to account for slightly different clock speeds).

  • Fixed a bug where we didn't check for correct networks when submitting onchain transactions.

  • Fix non-deterministic behaviour in RPC calls for custom accounts. In theory, it should be only one custom account with a given name. However, due to a lack of check, users could have created custom accounts with various key scopes. The non-deterministic behaviours linked to this case are fixed, and users can no longer create two custom accounts with the same name.

  • OpenChannel adds a new utxo flag that allows the specification of multiple UTXOs as a basis for funding a channel opening.

  • The BatchOpenChannel message now supports all fields that are present in the OpenChannel message, except for the funding_shim and fundmax fields.

  • The WalletBalance RPC (lncli walletbalance) now supports showing the balance for a specific account.

lncli Updates

  • Added ability to use environment variables to override lncli global flags. Flags will have preference over environment variables.

  • The lncli sendcoins command now asks for manual confirmation when invoked on the command line. This can be skipped by adding the --force (or -f) flag, similar to how lncli payinvoice works. To not break any existing scripts the confirmation is also skipped if stdout is not a terminal/tty (e.g. when capturing the output in a shell script variable or piping the output to another program).

  • Add --unused to lncli newaddr command.

Code Health

Neutrino

Breaking Changes

None

Performance Improvements

None

Technical and Architectural Updates

BOLT Spec Updates

None

Testing

Database

Code Health

Tooling and Documentation

Contributors (Alphabetical Order)

  • Aljaz Ceru
  • BhhagBoseDK
  • Carla Kirk-Cohen
  • Daniel McNally
  • Elle Mouton
  • Erik Arvstedt
  • ErikEk
  • feelancer21
  • gabbyprecious
  • Guillermo Caracuel
  • Hampus Sjöberg
  • hieblmi
  • Jordi Montes
  • Keagan McClelland
  • Konstantin Nick
  • Lele Calo
  • Matt Morehouse
  • Maxwell Sayles
  • Michael Street
  • MG-ng
  • Olaoluwa Osuntokun
  • Oliver Gugger
  • Pierre Beugnet
  • Satarupa Deb
  • Shaurya Arora
  • Suheb
  • Torkel Rogstad
  • Yong Yu
  • ziggie1984
  • zx9r