Merge pull request #10235 from Abdulkbk/fix-externalip-retention-issue

lnd: fix externalip retention issue
This commit is contained in:
Yong authored and GitHub committed 2025-09-25 14:23:51 +08:00
commit f293566849
4 files changed
+37 -44

No files matched your search

+1 -1
View File
@@ -339,7 +339,7 @@ type Config struct {
RawRPCListeners []string `long:"rpclisten" description:"Add an interface/port/socket to listen for RPC connections"`
RawRESTListeners []string `long:"restlisten" description:"Add an interface/port/socket to listen for REST connections"`
RawListeners []string `long:"listen" description:"Add an interface/port to listen for peer connections"`
RawExternalIPs []string `long:"externalip" description:"Add an ip:port to the list of local addresses we claim to listen on to peers. If a port is not specified, the default (9735) will be used regardless of other parameters"`
RawExternalIPs []string `long:"externalip" description:"Add an ip:port (local addresses we listen on) to advertise to the network (default port 9735 is used if port is not specified). Note: Removing this option does not clear previously advertised addresses; remove them with 'lncli peers updatenodeannouncement --address_remove=host:port'."`
ExternalHosts []string `long:"externalhosts" description:"Add a hostname:port that should be periodically resolved to announce IPs for. If a port is not specified, the default (9735) will be used."`
RPCListeners []net.Addr
RESTListeners []net.Addr
+17 -26
View File
@@ -728,25 +728,7 @@ func testSelfNodeAnnouncementPersistence(ht *lntest.HarnessTest) {
}
assertUpdateNodeAnnouncementResponse(ht, response, expectedOps)
resp = alice.RPC.GetInfo()
assertNodeInfo(
resp, "alice", "#eeeeee", "192.168.1.10:8333",
"192.168.1.11:8333",
)
// Restart Alice.
ht.RestartNode(alice)
// After restarting, the node info should contain the values that were
// set in the update request since the updated values take precedence
// over the default values.
resp = alice.RPC.GetInfo()
assertNodeInfo(
resp, "alice", "#eeeeee", "192.168.1.10:8333",
"192.168.1.11:8333",
)
// Test that we can still remove an address.
// Test that we can remove an address.
removeAddrReq := &peersrpc.NodeAnnouncementUpdateRequest{
AddressUpdates: []*peersrpc.UpdateAddressAction{
{
@@ -761,6 +743,20 @@ func testSelfNodeAnnouncementPersistence(ht *lntest.HarnessTest) {
}
assertUpdateNodeAnnouncementResponse(ht, response, expectedOps)
resp = alice.RPC.GetInfo()
assertNodeInfo(
resp, "alice", "#eeeeee", "192.168.1.11:8333",
)
// Restart Alice.
ht.RestartNode(alice)
// After restarting, the node info should contain the values that were
// set in the update request since the updated values take precedence
// over the default values.
resp = alice.RPC.GetInfo()
assertNodeInfo(resp, "alice", "#eeeeee")
// Now we restart the node with custom values in the config.
lndArgs := []string{
"--externalip=192.168.1.12:8333",
@@ -772,16 +768,11 @@ func testSelfNodeAnnouncementPersistence(ht *lntest.HarnessTest) {
// Get the node info and verify that the values are the same as the
// ones we set in the config (and not the updated values).
// The addresses should be the same as the ones we set in the config
// plus the ones we set in the update request earlier.
resp = alice.RPC.GetInfo()
assertNodeInfo(
resp, "alice-updated", "#ffffff", "192.168.1.11:8333",
"192.168.1.12:8333", "192.168.1.13:8333",
resp, "alice-updated", "#ffffff", "192.168.1.12:8333",
"192.168.1.13:8333",
)
// The address we removed earlier should not be present.
require.Error(ht, assertAddrs(resp.Uris, "192.168.1.10:8333"))
}
// assertSyncType asserts that the peer has an expected syncType.
+15 -1
View File
@@ -212,6 +212,14 @@
; advertise your node, this value doesn't need to be set. Unless specified
; (with host:port notation), the default port (9735) will be added to the
; address.
;
; NOTE: If you previously set one or more `externalip` entries and later
; remove `externalip` entirely from the config, lnd will continue to advertise
; the last known addresses from the previous run (they are stored with your node
; information). To stop advertising them, remove those addresses explicitly
; using the peers RPC/CLI, for example:
; `lncli peers updatenodeannouncement --address_remove=1.2.3.4:9735`
; A restart is not required, a new node announcement will be broadcasted.
; externalip=
;
; Instead of explicitly stating your external IP address, you can also enable
@@ -553,13 +561,19 @@
; The alias your node will use, which can be up to 32 UTF-8 characters in
; length.
; Default:
; Default is the first 10-bytes of the node's pubkey.
;
; NOTE: If this is not set lnd will use the last known alias from the previous
; run.
; alias=
; Example:
; alias=My Lightning ☇
; The color of the node in hex format, used to customize node appearance in
; intelligence services.
;
; NOTE: If this is not set or is set to the default (#3399FF) lnd will use the
; last known color from the previous run.
; color=#3399FF
; The maximum duration that the server will wait before timing out reading
+4 -16
View File
@@ -5561,15 +5561,6 @@ func (s *server) setSelfNode(ctx context.Context, nodePub route.Vertex,
return fmt.Errorf("unable to normalize addresses: %w", err)
}
// To avoid having duplicate addresses, we'll only add addresses from
// the source node that are not already in our address list yet. We
// create this map for quick lookup.
addressMap := make(map[string]struct{}, len(addrs))
// Populate the map with the existing addresses.
for _, existingAddr := range addrs {
addressMap[existingAddr.String()] = struct{}{}
}
// Parse the color from config. We will update this later if the config
// color is not changed from default (#3399FF) and we have a value in
// the source node.
@@ -5606,13 +5597,10 @@ func (s *server) setSelfNode(ctx context.Context, nodePub route.Vertex,
alias = srcNode.Alias
}
// Append unique addresses from the source node to the address
// list.
for _, addr := range srcNode.Addresses {
if _, found := addressMap[addr.String()]; !found {
addrs = append(addrs, addr)
addressMap[addr.String()] = struct{}{}
}
// If the `externalip` is not specified in the config, it means
// `addrs` will be empty, we'll use the source node's addresses.
if len(s.cfg.ExternalIPs) == 0 {
addrs = srcNode.Addresses
}
case errors.Is(err, graphdb.ErrSourceNodeNotSet):