Skip to content

Commit

Permalink
Archival Support: Remove configurable support for catching up from "a…
Browse files Browse the repository at this point in the history
…rchivers" (algorand#5920)

Co-authored-by: John Jannotti <[email protected]>
  • Loading branch information
gmalouf and jannotti authored Jan 25, 2024
1 parent 2e41eef commit 8631960
Show file tree
Hide file tree
Showing 12 changed files with 227 additions and 406 deletions.
19 changes: 5 additions & 14 deletions catchup/catchpointService.go
Original file line number Diff line number Diff line change
Expand Up @@ -806,20 +806,11 @@ func (cs *CatchpointCatchupService) initDownloadPeerSelector() {
}

func (cs *CatchpointCatchupService) makeCatchpointPeerSelector() *peerSelector {
if cs.config.EnableCatchupFromArchiveServers {
return makePeerSelector(
cs.net,
[]peerClass{
{initialRank: peerRankInitialFirstPriority, peerClass: network.PeersPhonebookArchivers},
{initialRank: peerRankInitialSecondPriority, peerClass: network.PeersPhonebookRelays},
})
} else {
return makePeerSelector(
cs.net,
[]peerClass{
{initialRank: peerRankInitialFirstPriority, peerClass: network.PeersPhonebookRelays},
})
}
return makePeerSelector(
cs.net,
[]peerClass{
{initialRank: peerRankInitialFirstPriority, peerClass: network.PeersPhonebookRelays},
})
}

// checkLedgerDownload sends a HEAD request to the ledger endpoint of peers to validate the catchpoint's availability
Expand Down
69 changes: 32 additions & 37 deletions catchup/peerSelector_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -134,7 +134,7 @@ func TestPeerSelector_RankPeer(t *testing.T) {
peerSelector := makePeerSelector(
makePeersRetrieverStub(func(options ...network.PeerOption) []network.Peer {
return peers
}), []peerClass{{initialRank: peerRankInitialFirstPriority, peerClass: network.PeersPhonebookArchivers}},
}), []peerClass{{initialRank: peerRankInitialFirstPriority, peerClass: network.PeersPhonebookArchivalNodes}},
)

psp, err := peerSelector.getNextPeer()
Expand Down Expand Up @@ -194,14 +194,14 @@ func TestPeerSelector_PeerDownloadRanking(t *testing.T) {
peerSelector := makePeerSelector(
makePeersRetrieverStub(func(options ...network.PeerOption) (peers []network.Peer) {
for _, opt := range options {
if opt == network.PeersPhonebookArchivers {
if opt == network.PeersPhonebookArchivalNodes {
peers = append(peers, peers1...)
} else {
peers = append(peers, peers2...)
}
}
return
}), []peerClass{{initialRank: peerRankInitialFirstPriority, peerClass: network.PeersPhonebookArchivers},
}), []peerClass{{initialRank: peerRankInitialFirstPriority, peerClass: network.PeersPhonebookArchivalNodes},
{initialRank: peerRankInitialSecondPriority, peerClass: network.PeersPhonebookRelays}},
)
archivalPeer, err := peerSelector.getNextPeer()
Expand Down Expand Up @@ -243,7 +243,7 @@ func TestPeerSelector_FindMissingPeer(t *testing.T) {
peerSelector := makePeerSelector(
makePeersRetrieverStub(func(options ...network.PeerOption) []network.Peer {
return []network.Peer{}
}), []peerClass{{initialRank: peerRankInitialFirstPriority, peerClass: network.PeersPhonebookArchivers}},
}), []peerClass{{initialRank: peerRankInitialFirstPriority, peerClass: network.PeersPhonebookArchivalNodes}},
)

poolIdx, peerIdx := peerSelector.findPeer(&peerSelectorPeer{mockHTTPPeer{address: "abcd"}, 0})
Expand All @@ -261,14 +261,14 @@ func TestPeerSelector_HistoricData(t *testing.T) {
peerSelector := makePeerSelector(
makePeersRetrieverStub(func(options ...network.PeerOption) (peers []network.Peer) {
for _, opt := range options {
if opt == network.PeersPhonebookArchivers {
if opt == network.PeersPhonebookArchivalNodes {
peers = append(peers, peers1...)
} else {
peers = append(peers, peers2...)
}
}
return
}), []peerClass{{initialRank: peerRankInitialFirstPriority, peerClass: network.PeersPhonebookArchivers},
}), []peerClass{{initialRank: peerRankInitialFirstPriority, peerClass: network.PeersPhonebookArchivalNodes},
{initialRank: peerRankInitialSecondPriority, peerClass: network.PeersPhonebookRelays}},
)

Expand Down Expand Up @@ -335,14 +335,14 @@ func TestPeerSelector_PeersDownloadFailed(t *testing.T) {
peerSelector := makePeerSelector(
makePeersRetrieverStub(func(options ...network.PeerOption) (peers []network.Peer) {
for _, opt := range options {
if opt == network.PeersPhonebookArchivers {
if opt == network.PeersPhonebookArchivalNodes {
peers = append(peers, peers1...)
} else {
peers = append(peers, peers2...)
}
}
return
}), []peerClass{{initialRank: peerRankInitialFirstPriority, peerClass: network.PeersPhonebookArchivers},
}), []peerClass{{initialRank: peerRankInitialFirstPriority, peerClass: network.PeersPhonebookArchivalNodes},
{initialRank: peerRankInitialSecondPriority, peerClass: network.PeersPhonebookRelays}},
)

Expand Down Expand Up @@ -411,14 +411,14 @@ func TestPeerSelector_Penalty(t *testing.T) {
peerSelector := makePeerSelector(
makePeersRetrieverStub(func(options ...network.PeerOption) (peers []network.Peer) {
for _, opt := range options {
if opt == network.PeersPhonebookArchivers {
if opt == network.PeersPhonebookArchivalNodes {
peers = append(peers, peers1...)
} else {
peers = append(peers, peers2...)
}
}
return
}), []peerClass{{initialRank: peerRankInitialFirstPriority, peerClass: network.PeersPhonebookArchivers},
}), []peerClass{{initialRank: peerRankInitialFirstPriority, peerClass: network.PeersPhonebookArchivalNodes},
{initialRank: peerRankInitialSecondPriority, peerClass: network.PeersPhonebookRelays}},
)

Expand Down Expand Up @@ -468,52 +468,47 @@ func TestPeerSelector_PeerDownloadDurationToRank(t *testing.T) {
peers2 := []network.Peer{&mockHTTPPeer{address: "b1"}, &mockHTTPPeer{address: "b2"}}
peers3 := []network.Peer{&mockHTTPPeer{address: "c1"}, &mockHTTPPeer{address: "c2"}}
peers4 := []network.Peer{&mockHTTPPeer{address: "d1"}, &mockHTTPPeer{address: "b2"}}
peers5 := []network.Peer{&mockHTTPPeer{address: "e1"}, &mockHTTPPeer{address: "b2"}}

peerSelector := makePeerSelector(
makePeersRetrieverStub(func(options ...network.PeerOption) (peers []network.Peer) {
for _, opt := range options {
if opt == network.PeersPhonebookArchivers {
if opt == network.PeersPhonebookRelays {
peers = append(peers, peers1...)
} else if opt == network.PeersPhonebookRelays {
peers = append(peers, peers2...)
} else if opt == network.PeersConnectedOut {
peers = append(peers, peers3...)
peers = append(peers, peers2...)
} else if opt == network.PeersPhonebookArchivalNodes {
peers = append(peers, peers4...)
peers = append(peers, peers3...)
} else { // PeersConnectedIn
peers = append(peers, peers5...)
peers = append(peers, peers4...)
}
}
return
}), []peerClass{{initialRank: peerRankInitialFirstPriority, peerClass: network.PeersPhonebookArchivers},
{initialRank: peerRankInitialSecondPriority, peerClass: network.PeersPhonebookRelays},
{initialRank: peerRankInitialThirdPriority, peerClass: network.PeersConnectedOut},
{initialRank: peerRankInitialFourthPriority, peerClass: network.PeersPhonebookArchivalNodes},
{initialRank: peerRankInitialFifthPriority, peerClass: network.PeersConnectedIn}},
}), []peerClass{
{initialRank: peerRankInitialFirstPriority, peerClass: network.PeersPhonebookRelays},
{initialRank: peerRankInitialSecondPriority, peerClass: network.PeersConnectedOut},
{initialRank: peerRankInitialThirdPriority, peerClass: network.PeersPhonebookArchivalNodes},
{initialRank: peerRankInitialFourthPriority, peerClass: network.PeersConnectedIn}},
)

_, err := peerSelector.getNextPeer()
require.NoError(t, err)

require.Equal(t, downloadDurationToRank(500*time.Millisecond, lowBlockDownloadThreshold, highBlockDownloadThreshold, peerRank0LowBlockTime, peerRank0HighBlockTime),
peerSelector.peerDownloadDurationToRank(&peerSelectorPeer{peers1[0], network.PeersPhonebookArchivers}, 500*time.Millisecond))
peerSelector.peerDownloadDurationToRank(&peerSelectorPeer{peers1[0], network.PeersPhonebookRelays}, 500*time.Millisecond))
require.Equal(t, downloadDurationToRank(500*time.Millisecond, lowBlockDownloadThreshold, highBlockDownloadThreshold, peerRank1LowBlockTime, peerRank1HighBlockTime),
peerSelector.peerDownloadDurationToRank(&peerSelectorPeer{peers2[0], network.PeersPhonebookRelays}, 500*time.Millisecond))
peerSelector.peerDownloadDurationToRank(&peerSelectorPeer{peers2[0], network.PeersConnectedOut}, 500*time.Millisecond))
require.Equal(t, downloadDurationToRank(500*time.Millisecond, lowBlockDownloadThreshold, highBlockDownloadThreshold, peerRank2LowBlockTime, peerRank2HighBlockTime),
peerSelector.peerDownloadDurationToRank(&peerSelectorPeer{peers3[0], network.PeersConnectedOut}, 500*time.Millisecond))
peerSelector.peerDownloadDurationToRank(&peerSelectorPeer{peers3[0], network.PeersPhonebookArchivalNodes}, 500*time.Millisecond))
require.Equal(t, downloadDurationToRank(500*time.Millisecond, lowBlockDownloadThreshold, highBlockDownloadThreshold, peerRank3LowBlockTime, peerRank3HighBlockTime),
peerSelector.peerDownloadDurationToRank(&peerSelectorPeer{peers4[0], network.PeersPhonebookArchivalNodes}, 500*time.Millisecond))
require.Equal(t, downloadDurationToRank(500*time.Millisecond, lowBlockDownloadThreshold, highBlockDownloadThreshold, peerRank4LowBlockTime, peerRank4HighBlockTime),
peerSelector.peerDownloadDurationToRank(&peerSelectorPeer{peers5[0], network.PeersConnectedIn}, 500*time.Millisecond))
peerSelector.peerDownloadDurationToRank(&peerSelectorPeer{peers4[0], network.PeersConnectedIn}, 500*time.Millisecond))

}

func TestPeerSelector_LowerUpperBounds(t *testing.T) {
partitiontest.PartitionTest(t)
t.Parallel()

classes := []peerClass{{initialRank: peerRankInitialFirstPriority, peerClass: network.PeersPhonebookArchivers},
classes := []peerClass{{initialRank: peerRankInitialFirstPriority, peerClass: network.PeersPhonebookArchivalNodes},
{initialRank: peerRankInitialSecondPriority, peerClass: network.PeersPhonebookRelays},
{initialRank: peerRankInitialThirdPriority, peerClass: network.PeersConnectedOut},
{initialRank: peerRankInitialFourthPriority, peerClass: network.PeersConnectedIn},
Expand All @@ -536,7 +531,7 @@ func TestPeerSelector_FullResetRequestPenalty(t *testing.T) {
partitiontest.PartitionTest(t)
t.Parallel()

class := peerClass{initialRank: 0, peerClass: network.PeersPhonebookArchivers}
class := peerClass{initialRank: 0, peerClass: network.PeersPhonebookArchivalNodes}
hs := makeHistoricStatus(10, class)
hs.push(5, 1, class)
require.Equal(t, 1, len(hs.requestGaps))
Expand All @@ -551,7 +546,7 @@ func TestPeerSelector_PenaltyBounds(t *testing.T) {
partitiontest.PartitionTest(t)
t.Parallel()

class := peerClass{initialRank: peerRankInitialThirdPriority, peerClass: network.PeersPhonebookArchivers}
class := peerClass{initialRank: peerRankInitialThirdPriority, peerClass: network.PeersPhonebookArchivalNodes}
hs := makeHistoricStatus(peerHistoryWindowSize, class)
for x := 0; x < 65; x++ {
r0 := hs.push(peerRank2LowBlockTime+50, uint64(x+1), class)
Expand All @@ -578,11 +573,11 @@ func TestPeerSelector_ClassUpperBound(t *testing.T) {
t.Parallel()

peers1 := []network.Peer{&mockHTTPPeer{address: "a1"}, &mockHTTPPeer{address: "a2"}}
pClass := peerClass{initialRank: peerRankInitialSecondPriority, peerClass: network.PeersPhonebookArchivers}
pClass := peerClass{initialRank: peerRankInitialSecondPriority, peerClass: network.PeersPhonebookArchivalNodes}
peerSelector := makePeerSelector(
makePeersRetrieverStub(func(options ...network.PeerOption) (peers []network.Peer) {
for _, opt := range options {
if opt == network.PeersPhonebookArchivers {
if opt == network.PeersPhonebookArchivalNodes {
peers = append(peers, peers1...)
}
}
Expand Down Expand Up @@ -613,11 +608,11 @@ func TestPeerSelector_ClassLowerBound(t *testing.T) {
t.Parallel()

peers1 := []network.Peer{&mockHTTPPeer{address: "a1"}, &mockHTTPPeer{address: "a2"}}
pClass := peerClass{initialRank: peerRankInitialSecondPriority, peerClass: network.PeersPhonebookArchivers}
pClass := peerClass{initialRank: peerRankInitialSecondPriority, peerClass: network.PeersPhonebookArchivalNodes}
peerSelector := makePeerSelector(
makePeersRetrieverStub(func(options ...network.PeerOption) (peers []network.Peer) {
for _, opt := range options {
if opt == network.PeersPhonebookArchivers {
if opt == network.PeersPhonebookArchivalNodes {
peers = append(peers, peers1...)
}
}
Expand Down Expand Up @@ -647,14 +642,14 @@ func TestPeerSelector_EvictionAndUpgrade(t *testing.T) {
peerSelector := makePeerSelector(
makePeersRetrieverStub(func(options ...network.PeerOption) (peers []network.Peer) {
for _, opt := range options {
if opt == network.PeersPhonebookArchivers {
if opt == network.PeersPhonebookArchivalNodes {
peers = append(peers, peers1...)
} else {
peers = append(peers, peers2...)
}
}
return
}), []peerClass{{initialRank: peerRankInitialFirstPriority, peerClass: network.PeersPhonebookArchivers},
}), []peerClass{{initialRank: peerRankInitialFirstPriority, peerClass: network.PeersPhonebookArchivalNodes},
{initialRank: peerRankInitialSecondPriority, peerClass: network.PeersPhonebookRelays}},
)

Expand Down
80 changes: 21 additions & 59 deletions catchup/service.go
Original file line number Diff line number Diff line change
Expand Up @@ -868,72 +868,34 @@ func (s *Service) roundIsNotSupported(nextRound basics.Round) bool {

func createPeerSelector(net network.GossipNode, cfg config.Local, pipelineFetch bool) *peerSelector {
var peerClasses []peerClass
if cfg.EnableCatchupFromArchiveServers {
if pipelineFetch {
if cfg.NetAddress != "" { // Relay node
peerClasses = []peerClass{
{initialRank: peerRankInitialFirstPriority, peerClass: network.PeersConnectedOut},
{initialRank: peerRankInitialSecondPriority, peerClass: network.PeersPhonebookArchivalNodes},
{initialRank: peerRankInitialThirdPriority, peerClass: network.PeersPhonebookArchivers},
{initialRank: peerRankInitialFourthPriority, peerClass: network.PeersPhonebookRelays},
{initialRank: peerRankInitialFifthPriority, peerClass: network.PeersConnectedIn},
}
} else {
peerClasses = []peerClass{
{initialRank: peerRankInitialFirstPriority, peerClass: network.PeersPhonebookArchivalNodes},
{initialRank: peerRankInitialSecondPriority, peerClass: network.PeersPhonebookArchivers},
{initialRank: peerRankInitialThirdPriority, peerClass: network.PeersConnectedOut},
{initialRank: peerRankInitialFourthPriority, peerClass: network.PeersPhonebookRelays},
}
if pipelineFetch {
if cfg.NetAddress != "" && cfg.EnableGossipService { // Relay node
peerClasses = []peerClass{
{initialRank: peerRankInitialFirstPriority, peerClass: network.PeersConnectedOut},
{initialRank: peerRankInitialSecondPriority, peerClass: network.PeersPhonebookArchivalNodes},
{initialRank: peerRankInitialThirdPriority, peerClass: network.PeersPhonebookRelays},
{initialRank: peerRankInitialFourthPriority, peerClass: network.PeersConnectedIn},
}
} else {
if cfg.NetAddress != "" { // Relay node
peerClasses = []peerClass{
{initialRank: peerRankInitialFirstPriority, peerClass: network.PeersConnectedOut},
{initialRank: peerRankInitialSecondPriority, peerClass: network.PeersConnectedIn},
{initialRank: peerRankInitialThirdPriority, peerClass: network.PeersPhonebookArchivalNodes},
{initialRank: peerRankInitialFourthPriority, peerClass: network.PeersPhonebookRelays},
{initialRank: peerRankInitialFifthPriority, peerClass: network.PeersPhonebookArchivers},
}
} else {
peerClasses = []peerClass{
{initialRank: peerRankInitialFirstPriority, peerClass: network.PeersConnectedOut},
{initialRank: peerRankInitialSecondPriority, peerClass: network.PeersPhonebookArchivalNodes},
{initialRank: peerRankInitialThirdPriority, peerClass: network.PeersPhonebookRelays},
{initialRank: peerRankInitialFourthPriority, peerClass: network.PeersPhonebookArchivers},
}
peerClasses = []peerClass{
{initialRank: peerRankInitialFirstPriority, peerClass: network.PeersPhonebookArchivalNodes},
{initialRank: peerRankInitialSecondPriority, peerClass: network.PeersConnectedOut},
{initialRank: peerRankInitialThirdPriority, peerClass: network.PeersPhonebookRelays},
}
}
} else {
if pipelineFetch {
if cfg.NetAddress != "" { // Relay node
peerClasses = []peerClass{
{initialRank: peerRankInitialFirstPriority, peerClass: network.PeersConnectedOut},
{initialRank: peerRankInitialSecondPriority, peerClass: network.PeersPhonebookArchivalNodes},
{initialRank: peerRankInitialThirdPriority, peerClass: network.PeersPhonebookRelays},
{initialRank: peerRankInitialFourthPriority, peerClass: network.PeersConnectedIn},
}
} else {
peerClasses = []peerClass{
{initialRank: peerRankInitialFirstPriority, peerClass: network.PeersPhonebookArchivalNodes},
{initialRank: peerRankInitialSecondPriority, peerClass: network.PeersConnectedOut},
{initialRank: peerRankInitialThirdPriority, peerClass: network.PeersPhonebookRelays},
}
if cfg.NetAddress != "" && cfg.EnableGossipService { // Relay node
peerClasses = []peerClass{
{initialRank: peerRankInitialFirstPriority, peerClass: network.PeersConnectedOut},
{initialRank: peerRankInitialSecondPriority, peerClass: network.PeersConnectedIn},
{initialRank: peerRankInitialThirdPriority, peerClass: network.PeersPhonebookArchivalNodes},
{initialRank: peerRankInitialFourthPriority, peerClass: network.PeersPhonebookRelays},
}
} else {
if cfg.NetAddress != "" { // Relay node
peerClasses = []peerClass{
{initialRank: peerRankInitialFirstPriority, peerClass: network.PeersConnectedOut},
{initialRank: peerRankInitialSecondPriority, peerClass: network.PeersConnectedIn},
{initialRank: peerRankInitialThirdPriority, peerClass: network.PeersPhonebookArchivalNodes},
{initialRank: peerRankInitialFourthPriority, peerClass: network.PeersPhonebookRelays},
}
} else {
peerClasses = []peerClass{
{initialRank: peerRankInitialFirstPriority, peerClass: network.PeersConnectedOut},
{initialRank: peerRankInitialSecondPriority, peerClass: network.PeersPhonebookArchivalNodes},
{initialRank: peerRankInitialThirdPriority, peerClass: network.PeersPhonebookRelays},
}
peerClasses = []peerClass{
{initialRank: peerRankInitialFirstPriority, peerClass: network.PeersConnectedOut},
{initialRank: peerRankInitialSecondPriority, peerClass: network.PeersPhonebookArchivalNodes},
{initialRank: peerRankInitialThirdPriority, peerClass: network.PeersPhonebookRelays},
}
}
}
Expand Down
Loading

0 comments on commit 8631960

Please sign in to comment.