Skip to content

Commit

Permalink
Working paging
Browse files Browse the repository at this point in the history
  • Loading branch information
max-dfinity committed Aug 16, 2024
1 parent 1af36ac commit 425963d
Show file tree
Hide file tree
Showing 4 changed files with 82 additions and 21 deletions.
4 changes: 2 additions & 2 deletions rs/nns/governance/canister/canister.rs
Original file line number Diff line number Diff line change
Expand Up @@ -745,14 +745,14 @@ fn list_node_provider_rewards() {
fn list_node_provider_rewards_(
req: ListNodeProviderRewardsRequest,
) -> ListNodeProviderRewardsResponse {
let rewards = governance().list_node_provider_rewards(5, req.page);
let (next_page, rewards) = governance().list_node_provider_rewards(5, req.page);

ListNodeProviderRewardsResponse {
rewards: rewards
.into_iter()
.map(MonthlyNodeProviderRewards::from)
.collect(),
next_page: None,
next_page,
}
}

Expand Down
8 changes: 5 additions & 3 deletions rs/nns/governance/src/governance.rs
Original file line number Diff line number Diff line change
Expand Up @@ -4316,17 +4316,19 @@ impl Governance {
&self,
limit: u64,
page: Option<u32>,
) -> Vec<MonthlyNodeProviderRewards> {
) -> (Option<u32>, Vec<MonthlyNodeProviderRewards>) {
let limit = limit.min(MAX_LIST_NODE_PROVIDER_REWARDS_RESULTS);
list_node_provider_rewards(limit, page)
let (next_page, rewards) = list_node_provider_rewards(limit, page);
let rewards = rewards
.into_iter()
.map(|archived| match archived.version {
Some(archived_monthly_node_provider_rewards::Version::Version1(v1)) => {
v1.rewards.unwrap()
}
_ => panic!("Should not be possible!"),
})
.collect()
.collect();
(next_page, rewards)
}

pub fn get_most_recent_monthly_node_provider_rewards(
Expand Down
12 changes: 9 additions & 3 deletions rs/nns/governance/src/node_provider_rewards.rs
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@ pub(crate) fn latest_node_provider_rewards() -> Option<ArchivedMonthlyNodeProvid
pub(crate) fn list_node_provider_rewards(
limit: u64,
page: Option<u32>,
) -> Vec<ArchivedMonthlyNodeProviderRewards> {
) -> (Option<u32>, Vec<ArchivedMonthlyNodeProviderRewards>) {
use dfn_core::println;
let page = page.unwrap_or(0);

Expand All @@ -45,10 +45,16 @@ pub(crate) fn list_node_provider_rewards(
let len = log.len();
let end_range = len.saturating_sub(page as u64 * limit);
let start_range = end_range.saturating_sub(limit);
(start_range..end_range)
let rewards = (start_range..end_range)
.rev()
.flat_map(|index| log.get(index))
.collect()
.collect();

if start_range == 0 {
(None, rewards)
} else {
(Some(page + 1), rewards)
}
})
}

Expand Down
79 changes: 66 additions & 13 deletions rs/nns/integration_tests/src/node_provider_remuneration.rs
Original file line number Diff line number Diff line change
Expand Up @@ -190,13 +190,6 @@ fn test_list_node_provider_rewards() {
state_machine.advance_time(Duration::from_secs(ONE_MONTH_SECONDS + 1));
state_machine.advance_time(Duration::from_secs(60));
state_machine.tick();
state_machine.tick();
state_machine.tick();
state_machine.tick();
state_machine.tick();
state_machine.tick();
state_machine.tick();
state_machine.tick();

let rewards = nns_get_most_recent_monthly_node_provider_rewards(&state_machine).unwrap();

Expand All @@ -212,12 +205,72 @@ fn test_list_node_provider_rewards() {
);

assert_eq!(response.rewards.len(), 5);
//
// let received_ts: Vec<u64> = response.rewards.iter().map(|r| r.timestamp).collect();
// let expected_ts: Vec<u64> = minted_rewards.iter().map(|r| r.timestamp).collect();
//
// assert_eq!(received_ts, expected_ts[8..]);
assert_eq!(response.rewards, minted_rewards[8..]);

let received_ts: Vec<u64> = response.rewards.iter().map(|r| r.timestamp).collect();
let expected_ts: Vec<u64> = minted_rewards.iter().map(|r| r.timestamp).collect();

println!(
"{:?}",
expected_ts.iter().rev().cloned().collect::<Vec<_>>()
);

assert_eq!(
received_ts,
expected_ts[8..13]
.into_iter()
.rev()
.cloned()
.collect::<Vec<_>>()
);

// check rewards are as expected
assert_eq!(
response.rewards,
minted_rewards[8..13]
.into_iter()
.rev()
.cloned()
.collect::<Vec<_>>()
);
assert_eq!(response.next_page, Some(1));

let response = nns_list_node_provider_rewards(
&state_machine,
ListNodeProviderRewardsRequest {
page: response.next_page,
date_filter: None,
},
);

let received_ts: Vec<u64> = response.rewards.iter().map(|r| r.timestamp).collect();
assert_eq!(
received_ts,
expected_ts[3..8]
.into_iter()
.rev()
.cloned()
.collect::<Vec<_>>()
);
assert_eq!(response.next_page, Some(2));

let response = nns_list_node_provider_rewards(
&state_machine,
ListNodeProviderRewardsRequest {
page: response.next_page,
date_filter: None,
},
);

let received_ts: Vec<u64> = response.rewards.iter().map(|r| r.timestamp).collect();
assert_eq!(
received_ts,
expected_ts[0..3]
.into_iter()
.rev()
.cloned()
.collect::<Vec<_>>()
);
assert_eq!(response.next_page, None);
}
#[test]
fn test_automated_node_provider_remuneration() {
Expand Down

0 comments on commit 425963d

Please sign in to comment.