Drain the entire compute budget (#12478)
This commit is contained in:
parent
baeba41cfd
commit
d00453f747
|
@ -286,8 +286,9 @@ pub struct MockComputeMeter {
|
||||||
}
|
}
|
||||||
impl ComputeMeter for MockComputeMeter {
|
impl ComputeMeter for MockComputeMeter {
|
||||||
fn consume(&mut self, amount: u64) -> Result<(), InstructionError> {
|
fn consume(&mut self, amount: u64) -> Result<(), InstructionError> {
|
||||||
|
let exceeded = self.remaining < amount;
|
||||||
self.remaining = self.remaining.saturating_sub(amount);
|
self.remaining = self.remaining.saturating_sub(amount);
|
||||||
if self.remaining == 0 {
|
if exceeded {
|
||||||
return Err(InstructionError::ComputationalBudgetExceeded);
|
return Err(InstructionError::ComputationalBudgetExceeded);
|
||||||
}
|
}
|
||||||
Ok(())
|
Ok(())
|
||||||
|
|
|
@ -287,8 +287,9 @@ mod tests {
|
||||||
}
|
}
|
||||||
impl ComputeMeter for MockComputeMeter {
|
impl ComputeMeter for MockComputeMeter {
|
||||||
fn consume(&mut self, amount: u64) -> Result<(), InstructionError> {
|
fn consume(&mut self, amount: u64) -> Result<(), InstructionError> {
|
||||||
|
let exceeded = self.remaining < amount;
|
||||||
self.remaining = self.remaining.saturating_sub(amount);
|
self.remaining = self.remaining.saturating_sub(amount);
|
||||||
if self.remaining == 0 {
|
if exceeded {
|
||||||
return Err(InstructionError::ComputationalBudgetExceeded);
|
return Err(InstructionError::ComputationalBudgetExceeded);
|
||||||
}
|
}
|
||||||
Ok(())
|
Ok(())
|
||||||
|
|
|
@ -1269,7 +1269,7 @@ mod tests {
|
||||||
let addr = string.as_ptr() as *const _ as u64;
|
let addr = string.as_ptr() as *const _ as u64;
|
||||||
|
|
||||||
let compute_meter: Rc<RefCell<dyn ComputeMeter>> =
|
let compute_meter: Rc<RefCell<dyn ComputeMeter>> =
|
||||||
Rc::new(RefCell::new(MockComputeMeter { remaining: 4 }));
|
Rc::new(RefCell::new(MockComputeMeter { remaining: 3 }));
|
||||||
let log = Rc::new(RefCell::new(vec![]));
|
let log = Rc::new(RefCell::new(vec![]));
|
||||||
let logger: Rc<RefCell<dyn Logger>> =
|
let logger: Rc<RefCell<dyn Logger>> =
|
||||||
Rc::new(RefCell::new(MockLogger { log: log.clone() }));
|
Rc::new(RefCell::new(MockLogger { log: log.clone() }));
|
||||||
|
|
|
@ -187,8 +187,9 @@ pub struct ThisComputeMeter {
|
||||||
}
|
}
|
||||||
impl ComputeMeter for ThisComputeMeter {
|
impl ComputeMeter for ThisComputeMeter {
|
||||||
fn consume(&mut self, amount: u64) -> Result<(), InstructionError> {
|
fn consume(&mut self, amount: u64) -> Result<(), InstructionError> {
|
||||||
|
let exceeded = self.remaining < amount;
|
||||||
self.remaining = self.remaining.saturating_sub(amount);
|
self.remaining = self.remaining.saturating_sub(amount);
|
||||||
if self.remaining == 0 {
|
if exceeded {
|
||||||
return Err(InstructionError::ComputationalBudgetExceeded);
|
return Err(InstructionError::ComputationalBudgetExceeded);
|
||||||
}
|
}
|
||||||
Ok(())
|
Ok(())
|
||||||
|
|
Loading…
Reference in New Issue