discovery+switch: apply zero forwarding policy updates in-memory as well as on disk
In this commit, we fix a bug where if a user updates a forwarding policy to be zero, the update will be applied to the policy correctly on-disk, but not in-memory. We solve this issue by having the gossiper return the list of on-disk updated policies and passing these policies to the switch, so the switch can assume that zero-valued fields are intentional and not just uninitialized.
This commit is contained in:
1 parent
2cf10ada0f
commit
8ce7f82da0
6 files changed
+109
-100
No files matched your search
@@ -3391,8 +3391,14 @@ func TestPropagateChanPolicyUpdate(t *testing.T) {
|
||||
// the channel ann proof from the first channel in order to have it be
|
||||
// marked as private channel.
|
||||
firstChanID := channelsToAnnounce[0].localChanAnn.ShortChannelID
|
||||
for _, batch := range channelsToAnnounce {
|
||||
sendLocalMsg(t, ctx, batch.localChanAnn, localKey)
|
||||
for i, batch := range channelsToAnnounce {
|
||||
// channelPoint ensures that each channel policy in the map
|
||||
// returned by PropagateChanPolicyUpdate has a unique key. Since
|
||||
// the map is keyed by wire.OutPoint, we want to ensure that
|
||||
// each channel has a unique channel point.
|
||||
channelPoint := ChannelPoint(wire.OutPoint{Index: uint32(i)})
|
||||
|
||||
sendLocalMsg(t, ctx, batch.localChanAnn, localKey, channelPoint)
|
||||
sendLocalMsg(t, ctx, batch.chanUpdAnn1, localKey)
|
||||
sendLocalMsg(t, ctx, batch.nodeAnn1, localKey)
|
||||
|
||||
@@ -3430,11 +3436,19 @@ out:
|
||||
newPolicy := routing.ChannelPolicy{
|
||||
TimeLockDelta: newTimeLockDelta,
|
||||
}
|
||||
err = ctx.gossiper.PropagateChanPolicyUpdate(newPolicy)
|
||||
newChanPolicies, err := ctx.gossiper.PropagateChanPolicyUpdate(newPolicy)
|
||||
if err != nil {
|
||||
t.Fatalf("unable to chan policies: %v", err)
|
||||
}
|
||||
|
||||
// Ensure that the updated channel policies are as expected.
|
||||
for _, dbPolicy := range newChanPolicies {
|
||||
if dbPolicy.TimeLockDelta != uint16(newPolicy.TimeLockDelta) {
|
||||
t.Fatalf("wrong delta: expected %v, got %v",
|
||||
newPolicy.TimeLockDelta, dbPolicy.TimeLockDelta)
|
||||
}
|
||||
}
|
||||
|
||||
// Two channel updates should now be broadcast, with neither of them
|
||||
// being the channel our first private channel.
|
||||
for i := 0; i < numChannels-1; i++ {
|
||||
|
||||
Reference in new issue
Block a user