Great! Then I proceed to ticket 
https://issues.apache.org/jira/browse/IGNITE-13345.

10.08.2020, 16:30, "Stanislav Lukyanov" <stanlukya...@gmail.com>:
> All of this looks awesome, covers the use cases I know about.
> Thanks!
>
> Stan
>
>>  On 10 Aug 2020, at 15:39, ткаленко кирилл <tkalkir...@yandex.ru> wrote:
>>
>>  Hi, Stan again :-)
>>
>>  I suggest adding a little more flexibility to configuration:
>>  1)Add default warm-up configuration for all regions into 
>> org.apache.ignite.configuration.DataStorageConfiguration#setDefaultWarmUpConfiguration
>>  2)Add a NoOp strategy for turning off heating of a specific region
>>
>>  Thus, when starting warm-up, region configuration is taken at beginning, 
>> and if it is not present, it is taken from default. And if we don't want to 
>> warm up region, we set NoOp.
>>
>>  10.08.2020, 10:20, "ткаленко кирилл" <tkalkir...@yandex.ru>:
>>>  Hi, Stan!
>>>
>>>  As a result of personal correspondence I realized that you are right about 
>>> making changes:
>>>  1)Move warm-up configuration to 
>>> org.apache.ignite.configuration.DataRegionConfiguration#setWarmUpConfiguration;
>>>  2)Start warming up for each region sequentially;
>>>  3)Improving warm-up interface:
>>>
>>>  package org.apache.ignite.internal.processors.cache.warmup;
>>>
>>>  import org.apache.ignite.IgniteCheckedException;
>>>  import org.apache.ignite.configuration.WarmUpConfiguration;
>>>  import org.apache.ignite.internal.GridKernalContext;
>>>  import org.apache.ignite.internal.processors.cache.persistence.DataRegion;
>>>
>>>  /**
>>>   * Interface for warming up.
>>>   */
>>>  public interface WarmUpStrategy<T extends WarmUpConfiguration> {
>>>      /**
>>>       * Returns configuration class for mapping to strategy.
>>>       *
>>>       * @return Configuration class.
>>>       */
>>>      Class<T> configClass();
>>>
>>>      /**
>>>       * Warm up.
>>>       *
>>>       * @param kernalCtx Kernal context.
>>>       * @param cfg Warm-up configuration.
>>>       * @param region Data region.
>>>       * @throws IgniteCheckedException if faild.
>>>       */
>>>      void warmUp(GridKernalContext kernalCtx, T cfg, DataRegion region) 
>>> throws IgniteCheckedException;
>>>
>>>      /**
>>>       * Closing warm up.
>>>       *
>>>       * @throws IgniteCheckedException if faild.
>>>       */
>>>      void close() throws IgniteCheckedException;
>>>  }
>>>
>>>  4)Add a command to "control.sh", to stop current warm-up and cancel all 
>>> others: --warm-up stop
>>>  5)The "load all" strategy will work as long as there is enough RAM and 
>>> index pages will also take priority.
>>>
>>>  04.08.2020, 13:29, "ткаленко кирилл" <tkalkir...@yandex.ru>:
>>>>   Hi, Slava!
>>>>
>>>>   Thank you for looking at the offer and making fair comments.
>>>>
>>>>   I personally discussed with Anton and Alexey because they are author and 
>>>> sponsor of "IEP-40" and we found out that point 2 in it is no longer 
>>>> relevant and it can be removed.
>>>>   I suggest implementing point 3, since it may be independent of point 1. 
>>>> Also, the warm-up will always start after restore phase, without 
>>>> subscribing to events.
>>>>
>>>>   You are right this should be mentioned in the documentation and javadoc.
>>>>>    This means that the user's thread, which starts Ignite via
>>>>>    Ignition.start(), will wait for ana additional step - cache warm-up.
>>>>>    I think this fact has to be clearly mentioned in our documentation (at
>>>>>    Javadocat least) because this step can be time-consuming.
>>>>
>>>>   My suggestion for implementation:
>>>>   1)Adding a marker interface 
>>>> "org.apache.ignite.configuration.WarmUpConfiguration" for configuring 
>>>> cache warming;
>>>>   2)Set only one configuration via 
>>>> "org.apache.ignite.configuration.IgniteConfiguration#setWarmUpConfiguration";
>>>>   3)Add an internal warm-up interface that will start in [1] after [2];
>>>>
>>>>   package org.apache.ignite.internal.processors.cache.warmup;
>>>>
>>>>   import org.apache.ignite.IgniteCheckedException;
>>>>   import org.apache.ignite.configuration.WarmUpConfiguration;
>>>>   import org.apache.ignite.internal.GridKernalContext;
>>>>
>>>>   /**
>>>>    * Interface for warming up.
>>>>    */
>>>>   public interface WarmUpStrategy<T extends WarmUpConfiguration> {
>>>>       /**
>>>>        * Returns configuration class for mapping to strategy.
>>>>        *
>>>>        * @return Configuration class.
>>>>        */
>>>>       Class<T> configClass();
>>>>
>>>>       /**
>>>>        * Warm up.
>>>>        *
>>>>        * @param kernalCtx Kernal context.
>>>>        * @param cfg Warm-up configuration.
>>>>        * @throws IgniteCheckedException if faild.
>>>>        */
>>>>       void warmUp(GridKernalContext kernalCtx, T cfg) throws 
>>>> IgniteCheckedException;
>>>>   }
>>>>
>>>>   4)Adding an internal plugin extension for add own strategies;
>>>>
>>>>   package org.apache.ignite.internal.processors.cache.warmup;
>>>>
>>>>   import java.util.Collection;
>>>>   import org.apache.ignite.plugin.Extension;
>>>>
>>>>   /**
>>>>    * Interface for getting warm-up strategies from plugins.
>>>>    */
>>>>   public interface WarmUpStrategySupplier extends Extension {
>>>>       /**
>>>>        * Getting warm-up strategies.
>>>>        *
>>>>        * @return Warm-up strategies.
>>>>        */
>>>>       Collection<WarmUpStrategy> strategies();
>>>>   }
>>>>
>>>>   5)Add a "Load all" strategy that will load everything to memory as long 
>>>> as there is space in it. This strategy is suitable if the persistent 
>>>> storage is less than RAM.
>>>>
>>>>   Any objections or comments?
>>>>
>>>>   [1] - 
>>>> org.apache.ignite.internal.processors.cache.GridCacheProcessor.CacheRecoveryLifecycle#afterLogicalUpdatesApplied
>>>>   [2] - 
>>>> org.apache.ignite.internal.processors.cache.GridCacheProcessor.CacheRecoveryLifecycle#restorePartitionStates
>>>>
>>>>   27.07.2020, 16:48, "Вячеслав Коптилин" <slava.kopti...@gmail.com>:
>>>>>    Hello Kirill,
>>>>>
>>>>>    Thanks a lot for driving this activity. If I am not mistaken, this
>>>>>    discussion relates to IEP-40.
>>>>>
>>>>>>     I suggest adding a warmup phase after recovery here [1] after [2], 
>>>>>> before
>>>>>
>>>>>    discovery.
>>>>>    This means that the user's thread, which starts Ignite via
>>>>>    Ignition.start(), will wait for ana additional step - cache warm-up.
>>>>>    I think this fact has to be clearly mentioned in our documentation (at
>>>>>    Javadocat least) because this step can be time-consuming.
>>>>>
>>>>>>     I suggest adding a new interface:
>>>>>
>>>>>    I would change it a bit. First of all, it would be nice to place this
>>>>>    interface to a public package and get rid of using GridCacheContext,
>>>>>    which is an internal class and it should not leak to the public API in 
>>>>> any
>>>>>    case.
>>>>>    Perhaps, this parameter is not needed at all or we should add some 
>>>>> public
>>>>>    abstraction instead of internal class.
>>>>>
>>>>>    package org.apache.ignite.configuration;
>>>>>
>>>>>    import org.apache.ignite.IgniteCheckedException;
>>>>>    import org.apache.ignite.lang.IgniteFuture;
>>>>>
>>>>>    public interface CacheWarmupper {
>>>>>        /**
>>>>>         * Warmup cache.
>>>>>         *
>>>>>         * @param cachename Cache name.
>>>>>         * @return Future cache warmup.
>>>>>         * @throws IgniteCheckedException If failed.
>>>>>         */
>>>>>        IgniteFuture<?> warmup(String cachename) throws 
>>>>> IgniteCheckedException;
>>>>>    }
>>>>>
>>>>>    Thanks,
>>>>>    S.
>>>>>
>>>>>    пн, 27 июл. 2020 г. в 15:03, ткаленко кирилл <tkalkir...@yandex.ru>:
>>>>>
>>>>>>     Now, after restarting node, we have only cold caches, which at first
>>>>>>     requests to them will gradually load data from disks, which can slow 
>>>>>> down
>>>>>>     first calls to them.
>>>>>>     If node has more RAM than data on disk, then they can be loaded at 
>>>>>> start
>>>>>>     "warmup", thereby solving the issue of slowdowns during first calls 
>>>>>> to
>>>>>>     caches.
>>>>>>
>>>>>>     I suggest adding a warmup phase after recovery here [1] after [2], 
>>>>>> before
>>>>>>     descovery.
>>>>>>
>>>>>>     I suggest adding a new interface:
>>>>>>
>>>>>>     package org.apache.ignite.internal.processors.cache;
>>>>>>
>>>>>>     import org.apache.ignite.IgniteCheckedException;
>>>>>>     import org.apache.ignite.internal.IgniteInternalFuture;
>>>>>>     import org.jetbrains.annotations.Nullable;
>>>>>>
>>>>>>     /**
>>>>>>      * Interface for warming up cache.
>>>>>>      */
>>>>>>     public interface CacheWarmup {
>>>>>>         /**
>>>>>>          * Warmup cache.
>>>>>>          *
>>>>>>          * @param cacheCtx Cache context.
>>>>>>          * @return Future cache warmup.
>>>>>>          * @throws IgniteCheckedException if failed.
>>>>>>          */
>>>>>>         @Nullable IgniteInternalFuture<?> process(GridCacheContext 
>>>>>> cacheCtx)
>>>>>>     throws IgniteCheckedException;
>>>>>>     }
>>>>>>
>>>>>>     Which will allow to warm up caches in parallel and asynchronously. 
>>>>>> Warmup
>>>>>>     phase will end after all IgniteInternalFuture for all caches isDone.
>>>>>>
>>>>>>     Also adding the ability to customize via methods:
>>>>>>     
>>>>>> org.apache.ignite.configuration.IgniteConfiguration#setDefaultCacheWarmup
>>>>>>     org.apache.ignite.configuration.CacheConfiguration#setCacheWarmup
>>>>>>
>>>>>>     Which will allow for each cache to set implementation of cache 
>>>>>> warming up,
>>>>>>     both for a specific cache, and for all if necessary.
>>>>>>
>>>>>>     I suggest adding an implementation of SequentialWarmup that will use 
>>>>>> [3].
>>>>>>
>>>>>>     Questions, suggestions, comments?
>>>>>>
>>>>>>     [1] -
>>>>>>     
>>>>>> org.apache.ignite.internal.processors.cache.GridCacheProcessor.CacheRecoveryLifecycle#afterLogicalUpdatesApplied
>>>>>>     [2] -
>>>>>>     
>>>>>> org.apache.ignite.internal.processors.cache.GridCacheProcessor.CacheRecoveryLifecycle#restorePartitionStates
>>>>>>     [3] -
>>>>>>     
>>>>>> org.apache.ignite.internal.processors.cache.IgniteCacheOffheapManager.CacheDataStore#preload

Reply via email to