Kirill, Thank you for driving this discussion and implementation.
A few points from my side: * Agree that it will be best to keep the strategy interface private because it will be very dependent on the persistent storage implementation. We would need to expose page IDs and types to public API, which is very restrictive. The configuration part obviously needs to be public, and ability to pull the strategy implementation from plugin is a good idea. * I was also thinking of adding the warmup configuration straight to the IgniteConfiguration, but I like Stan's idea of adding it to DataRegionConfiguration. No strong preference here. * I do not think we need to deprecate preloadPartition() method. One of the use-cases for this method was to process partitions sequentially while a node is running. This method is able to fetch the partition from disk much (from times to orders of magnitude) faster than sequential scan. * Being able to cancel the warmup during startup is a great feature. We should be able to support it from control.sh because the warmup runs before discovery which starts the last, so the control.sh handler should be already running.