Skip to content

Commit 54e703f

Browse files
Merge pull request #376 from ava-labs/always-send-chits
send current preferences even when fetching dependencies fails
2 parents 6e6e4c0 + bf2cbcd commit 54e703f

File tree

4 files changed

+19
-4
lines changed

4 files changed

+19
-4
lines changed

snow/engine/avalanche/convincer.go

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ type convincer struct {
1616
sender common.Sender
1717
vdr ids.ShortID
1818
requestID uint32
19+
sent bool
1920
abandoned bool
2021
deps ids.Set
2122
errs *wrappers.Errs
@@ -30,12 +31,16 @@ func (c *convincer) Fulfill(id ids.ID) {
3031
}
3132

3233
// Abandon this attempt to send chits.
33-
func (c *convincer) Abandon(ids.ID) { c.abandoned = true }
34+
func (c *convincer) Abandon(ids.ID) {
35+
c.abandoned = true
36+
c.Update()
37+
}
3438

3539
func (c *convincer) Update() {
36-
if c.abandoned || c.deps.Len() != 0 || c.errs.Errored() {
40+
if c.sent || c.errs.Errored() || (!c.abandoned && c.deps.Len() != 0) {
3741
return
3842
}
43+
c.sent = true
3944

4045
c.sender.Chits(c.vdr, c.requestID, c.consensus.Preferences().List())
4146
}

snow/engine/avalanche/transitive_test.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -727,6 +727,7 @@ func TestEngineAbandonResponse(t *testing.T) {
727727
sender.GetF = func(vID ids.ShortID, requestID uint32, vtxID ids.ID) {
728728
*reqID = requestID
729729
}
730+
sender.CantChits = false
730731

731732
if err := te.PullQuery(vdr, 0, vtx.ID()); err != nil {
732733
t.Fatal(err)
@@ -2341,6 +2342,7 @@ func TestEngineReissueAbortedVertex(t *testing.T) {
23412342

23422343
sender.GetF = nil
23432344
manager.ParseF = nil
2345+
sender.CantChits = false
23442346

23452347
if err := te.GetFailed(vdr, *requestID); err != nil {
23462348
t.Fatal(err)

snow/engine/snowman/convincer.go

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ type convincer struct {
1616
sender common.Sender
1717
vdr ids.ShortID
1818
requestID uint32
19+
sent bool
1920
abandoned bool
2021
deps ids.Set
2122
errs *wrappers.Errs
@@ -30,12 +31,16 @@ func (c *convincer) Fulfill(id ids.ID) {
3031
}
3132

3233
// Abandon this attempt to send chits.
33-
func (c *convincer) Abandon(ids.ID) { c.abandoned = true }
34+
func (c *convincer) Abandon(ids.ID) {
35+
c.abandoned = true
36+
c.Update()
37+
}
3438

3539
func (c *convincer) Update() {
36-
if c.abandoned || c.deps.Len() != 0 || c.errs.Errored() {
40+
if c.sent || c.errs.Errored() || (!c.abandoned && c.deps.Len() != 0) {
3741
return
3842
}
43+
c.sent = true
3944

4045
pref := []ids.ID{c.consensus.Preference()}
4146
c.sender.Chits(c.vdr, c.requestID, pref)

snow/engine/snowman/transitive_test.go

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1057,6 +1057,8 @@ func TestEngineAbandonQuery(t *testing.T) {
10571057
t.Fatalf("Should have blocked on request")
10581058
}
10591059

1060+
sender.CantChits = false
1061+
10601062
if err := te.GetFailed(vdr, *reqID); err != nil {
10611063
t.Fatal(err)
10621064
}
@@ -1306,6 +1308,7 @@ func TestEngineRetryFetch(t *testing.T) {
13061308

13071309
vm.CantGetBlock = true
13081310
sender.GetF = nil
1311+
sender.CantChits = false
13091312

13101313
if err := te.GetFailed(vdr, *reqID); err != nil {
13111314
t.Fatal(err)

0 commit comments

Comments
 (0)