diff --git a/magicblock-committor-service/src/tasks/args_task.rs b/magicblock-committor-service/src/tasks/args_task.rs index fdb05a7b6..e7293f7bb 100644 --- a/magicblock-committor-service/src/tasks/args_task.rs +++ b/magicblock-committor-service/src/tasks/args_task.rs @@ -85,7 +85,7 @@ impl BaseTask for ArgsTask { } } - fn optimize( + fn try_optimize_tx_size( self: Box, ) -> Result, Box> { match self.task_type { diff --git a/magicblock-committor-service/src/tasks/buffer_task.rs b/magicblock-committor-service/src/tasks/buffer_task.rs index 375622833..7001f8bac 100644 --- a/magicblock-committor-service/src/tasks/buffer_task.rs +++ b/magicblock-committor-service/src/tasks/buffer_task.rs @@ -70,7 +70,7 @@ impl BaseTask for BufferTask { } /// No further optimizations - fn optimize( + fn try_optimize_tx_size( self: Box, ) -> Result, Box> { // Since the buffer in BufferTask doesn't contribute to the size of diff --git a/magicblock-committor-service/src/tasks/mod.rs b/magicblock-committor-service/src/tasks/mod.rs index 732dd5be4..e7d1616a7 100644 --- a/magicblock-committor-service/src/tasks/mod.rs +++ b/magicblock-committor-service/src/tasks/mod.rs @@ -75,8 +75,9 @@ pub trait BaseTask: Send + Sync + DynClone + LabelValue { /// Gets instruction for task execution fn instruction(&self, validator: &Pubkey) -> Instruction; - /// Optimizes Task strategy if possible, otherwise returns itself - fn optimize( + /// Optimize for transaction size so that more instructions can be buddled together in a single + /// transaction. Return Ok(new_tx_optimized_task), else Err(self) if task cannot be optimized. + fn try_optimize_tx_size( self: Box, ) -> Result, Box>; diff --git a/magicblock-committor-service/src/tasks/task_strategist.rs b/magicblock-committor-service/src/tasks/task_strategist.rs index 4814118ef..974f33324 100644 --- a/magicblock-committor-service/src/tasks/task_strategist.rs +++ b/magicblock-committor-service/src/tasks/task_strategist.rs @@ -171,7 +171,8 @@ impl TaskStrategist { persistor: &Option

, ) -> TaskStrategistResult { // Attempt optimizing tasks themselves(using buffers) - if Self::optimize_strategy(&mut tasks)? <= MAX_ENCODED_TRANSACTION_SIZE + if Self::try_optimize_tx_size_if_needed(&mut tasks)? + <= MAX_ENCODED_TRANSACTION_SIZE { // Persist tasks strategy if let Some(persistor) = persistor { @@ -268,9 +269,11 @@ impl TaskStrategist { ) } - /// Optimizes set of [`TaskDeliveryStrategy`] to fit [`MAX_ENCODED_TRANSACTION_SIZE`] - /// Returns size of tx after optimizations - fn optimize_strategy( + /// Optimizes tasks so as to bring the transaction size within the limit [`MAX_ENCODED_TRANSACTION_SIZE`] + /// Returns Ok(size of tx after optimizations) else Err(SignerError). + /// Note that the returned size, though possibly optimized one, may still not be under + /// the limit MAX_ENCODED_TRANSACTION_SIZE. The caller needs to check and make decision accordingly. + fn try_optimize_tx_size_if_needed( tasks: &mut [Box], ) -> Result { // Get initial transaction size @@ -325,7 +328,7 @@ impl TaskStrategist { let tmp_task = Box::new(tmp_task) as Box; std::mem::replace(&mut tasks[index], tmp_task) }; - match task.optimize() { + match task.try_optimize_tx_size() { // If we can decrease: // 1. Calculate new tx size & ix size // 2. Insert item's data back in the heap @@ -619,7 +622,7 @@ mod tests { as Box, // Larger task ]; - let _ = TaskStrategist::optimize_strategy(&mut tasks); + let _ = TaskStrategist::try_optimize_tx_size_if_needed(&mut tasks); // The larger task should have been optimized first assert!(matches!(tasks[0].strategy(), TaskStrategy::Args)); assert!(matches!(tasks[1].strategy(), TaskStrategy::Buffer));