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