Hi, Denis!

Previously, I answered Slava about implementation that I keep in mind, now it 
will be possible to add own warm-up strategy implementations. Which will be 
possible to implement in different ways. 

At the moment, I suggest implementing one "Load all" strategy, which will be 
effective if persistent storage is less than RAM.


28.07.2020, 19:46, "Denis Mekhanikov" <dmekhani...@gmail.com>:
> Kirill,
>
> That will be a great feature! Other popular databases already have it (e.g.
> Postgres: https://www.postgresql.org/docs/11/pgprewarm.html), so it's good
> that we're also going to have it in Ignite.
>
> What implementation of CacheWarmup interface do you have in mind? Will
> there be some preconfigured implementation, and will users be able to
> implement it themselves?
>
> Do you think it should be cache-based? I would say that a DataRegion-based
> warm-up would come more naturally. Page IDs that are loaded into the data
> region can be dumped periodically to disk and recovered on restarts. This
> is more or less how it works in Postgres.
> I'm afraid that if we make it cache-based, the implementation won't be that
> obvious. We already have an API for warmup that appeared to be pretty much
> impossible to apply in a useful way:
> https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/IgniteCache.html#preloadPartition-int-
> Let's make sure that our new tool for warming up is actually useful.
>
> Denis
>
> вт, 28 июл. 2020 г. в 09:17, Zhenya Stanilovsky <arzamas...@mail.ru.invalid
>> :
>
>>  Looks like we need additional func for static caches, for
>>  example: warmup(List<CacheConfiguration> cconf) it would be helpful for
>>  spring too.
>>
>>  >
>>  >------- Forwarded message -------
>>  >From: "Вячеслав Коптилин" < slava.kopti...@gmail.com >
>>  >To: dev@ignite.apache.org
>>  >Cc:
>>  >Subject: Re: [DISCUSSION] Cache warmup
>>  >Date: Mon, 27 Jul 2020 16:47:48 +0300
>>  >
>>  >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