One thing that just occurred to me for the DefaultIgniteConfiguration. you
can actually just intercept the bean when it's created. This should let us
use the enable flag from ignite-core for ignite-cache without the
additional flag.

@Singleton
public class IgniteConfigurationFactoryInterceptor implements
BeanCreatedEventListener<DefaultIgniteConfiguration> {
    @Override
    public IgniteConfiguration
onCreated(BeanCreatedEvent<DefaultIgniteConfiguration> event) {
        IgniteConfiguration configuration = event.getBean();
        configuration.setIgniteInstanceName("instance-a");
        return configuration;
    }
}


On Wed, Aug 26, 2020 at 11:31 AM Denis Magda <dma...@apache.org> wrote:

> Michael,
>
> Looks terrific! I went ahead and grouped the configuration samples by a
> client type:
> https://cwiki.apache.org/confluence/display/IGNITE/Micronaut+Integration
>
> As you see, the "Ignite Thin Client" section is blank for now. Would you
> mind filling it with configuration options following the format taken for
> the thick client?
>
> Ping me here once you're ready to review the API and implementation of the
> ignite-caching module.
>
> -
> Denis
>
>
> On Tue, Aug 25, 2020 at 9:16 PM Michael Pollind <mpoll...@gmail.com>
> wrote:
>
> > Here is a sample project I threw together and I've also updated the wiki
> > just a bit. working on updating the documentation on the micronaut end.
> >
> > https://cwiki.apache.org/confluence/display/IGNITE/Micronaut+Integration
> > https://github.com/pollend/micronaut-ignite-sample
> >
> > On Mon, Aug 24, 2020 at 6:57 PM Michael Pollind <mpoll...@gmail.com>
> > wrote:
> >
> > >
> > >
> > > yea, I'm not sure about ignite-cache config. splitting it into two
> > modules
> > > seems kind of overly complicated, but I also don't really like the
> random
> > > boolean flag. here is the tweaks from the config your provider:
> > > https://github.com/pollend/micronaut-ignite/pull/2
> > >
> > > kind of strange that there are not getters for the
> > > TcpDiscoveryKubernetesIpFinder but there is enough to verify that the
> > > correct ipfinder was set from the unit test i've written.
> > >
> > > static ip finder
> > >
> > > "ignite.enabled"                                    : true,
> > > "ignite.communication-spi.local-port"               : "localhost:1800",
> > > "ignite.discovery-spi.static-ip-finder.enabled"     : "true",
> > > "ignite.discovery-spi.static-ip-finder.addresses[0]": "127.0.0.1:47500
> ",
> > > "ignite.discovery-spi.static-ip-finder.addresses[1]": "127.0.0.1:47501
> ",
> > >
> > > kubernetties ip finder
> > >
> > > "ignite.enabled"                                     : true,
> > > "ignite.communication-spi.local-port"                :
> "localhost:1800",
> > > "ignite.discovery-spi.kubernetes-ip-finder.enabled"  : "true",
> > > "ignite.discovery-spi.kubernetes-ip-finder.namespace": "HelloWorld"
> > >
> > >
> > >
> > >
> > >
> > > On Mon, Aug 24, 2020 at 6:16 PM Denis Magda <dma...@apache.org> wrote:
> > >
> > >> Michael,
> > >>
> > >> I was thinking over the idea of splitting the ignite-cache module in
> two
> > >> (one for a thick-client based connection and the other for thin client
> > >> connections), and would try to avoid this route if possible.
> > >>
> > >> With the @CacheConfig annotation, Micronaut developers can create a
> > >> generic
> > >> implementation that is agnostic to the Ignite connectivity methods,
> > which
> > >> is good. While internally, the ignite-cache implementation can decide
> > what
> > >> Ignite Cache API to use (the thick or thin client one, depends on the
> > type
> > >> of a client you started with our auto-configuration feature). Let’s
> > >> discuss
> > >> all the existing issues here and jump on another call to finalize a
> > >> solution if needed.
> > >>
> > >> Denis
> > >>
> > >> On Monday, August 24, 2020, Denis Magda <dma...@apache.org> wrote:
> > >>
> > >> > Michael,
> > >> >
> > >> > Great progress, thanks for your patience. I went ahead and pushed
> some
> > >> > changes to your working branch. As you'll see, those changes do some
> > >> minor
> > >> > tweaks in the DefaultIgniteThinClientConfiguration class and add
> > Static
> > >> > with Kubernetes IP finders to the DefaultIgniteConfiguration class.
> > The
> > >> > IgniteConfigurationSpec fails for now, but I think we'll figure how
> to
> > >> > modify the test on the call today.
> > >> >
> > >> > Also, let's decide if we want to configure IgniteCaches via the
> > >> Micronaut
> > >> > configuration. If an application needs to create any caches, it can
> do
> > >> this
> > >> > dynamically after an Ignite instance is started.
> > >> >
> > >> > -
> > >> > Denis
> > >> >
> > >> >
> > >> > On Sat, Aug 22, 2020 at 1:15 PM Michael Pollind <mpoll...@gmail.com
> >
> > >> > wrote:
> > >> >
> > >> > The way i've gone about providing dependencies is that these can be
> > >> > provided through a factory.
> > >> >
> > >> > @Bean
> > >> > @Named("default")
> > >> > @Primary
> > >> > public IgniteConfiguration
> > >> igniteConfiguration(DefaultIgniteConfiguration configuration,
> > >> >
> > >> Collection<DefaultCacheConfiguration> cacheConfigurations,
> > >> >
> > >> Collection<PluginProvider> providers,
> > >> >
> > >> Collection<DefaultExecutorConfiguration> executorConfigurations,
> > >> >
> > >> Optional<PlatformConfiguration> platformConfigurations,
> > >> >
> Optional<CollisionSpi>
> > >> collisionSpi,
> > >> >
> > >> Collection<LoadBalancingSpi> loadBalancingSpis,
> > >> >
> Collection<FailoverSpi>
> > >> failoverSpis,
> > >> >                                                @ConsistencyId
> > >> Optional<Serializable> consistencyId,
> > >> >                                                @IgniteLifecycle
> > >> Collection<LifecycleBean> lifecycleBeans) {
> > >> >
> >  configuration.setCacheConfiguration(cacheConfigurations.toArray(new
> > >> CacheConfiguration[0]))
> > >> >         .setPluginProviders(providers.toArray(new
> PluginProvider[0]))
> > >> >         .setExecutorConfiguration(executorConfigurations.toArray(new
> > >> ExecutorConfiguration[0]))
> > >> >
>  .setPlatformConfiguration(platformConfigurations.orElse(null))
> > >> >         .setFailoverSpi(failoverSpis.toArray(new FailoverSpi[0]))
> > >> >         .setLoadBalancingSpi(loadBalancingSpis.toArray(new
> > >> LoadBalancingSpi[0]))
> > >> >         .setConsistentId(consistencyId.orElse(null))
> > >> >         .setLifecycleBeans(lifecycleBeans.toArray(new
> > LifecycleBean[0]))
> > >> >         .setCollisionSpi(collisionSpi.orElse(null));
> > >> >     return configuration;
> > >> > }
> > >> >
> > >> >
> > >> > On Sat, Aug 22, 2020 at 8:37 AM Michael Pollind <mpoll...@gmail.com
> >
> > >> > wrote:
> > >> >
> > >> > here is an updated example what the yaml looks like now.
> > >> >
> > >> > ignite:
> > >> >     enabled: true
> > >> >     comunication-spi:
> > >> >         local-port: 5555
> > >> >     cache-configurations:
> > >> >     - accounts:
> > >> >         table-name: ACCOUNTS
> > >> >         key-type: String
> > >> >     - books:
> > >> >         table-name: BOOKS
> > >> >         key-type: String
> > >> >
> > >> > On Fri, Aug 21, 2020 at 10:28 PM Michael Pollind <
> mpoll...@gmail.com>
> > >> > wrote:
> > >> >
> > >> > micronaut will only inject into a nested object if its static and
> > nested
> > >> > in a class. Its a separate final class so it will not work in this
> > >> case. So
> > >> > DataRegionConfiguration will not get set from the environment. This
> > is a
> > >> > working example but this can be adjusted.  I guess it would have to
> be
> > >> > setup like DefaultIgniteConfiguration.
> DefaultDataStorageConfiguration
> > >> > and a nested EachProperty? Lets try have a minimum working setup and
> > >> then
> > >> > add in the missing configurations as we go?
> > >> >
> > >> > @ConfigurationBuilder(value = "dataStorageConfiguration", excludes =
> > >> "dataRegionConfigurations")
> > >> > final DataStorageConfiguration dataStorageConfiguration = new
> > >> DataStorageConfiguration();
> > >> >
> > >> > @EachProperty("dataRegionConfigurations")
> > >> > public static class DefaultDataRegionConfiguration {
> > >> >     @ConfigurationBuilder()
> > >> >     DataRegionConfiguration dataRegionConfiguration = new
> > >> DataRegionConfiguration();
> > >> >
> > >> >     public DataRegionConfiguration getDataRegionConfiguration() {
> > >> >         return dataRegionConfiguration;
> > >> >     }
> > >> > }
> > >> >
> > >> >
> > >> >
> > >> >
> > >> > On Fri, Aug 21, 2020 at 7:08 PM Michael Pollind <mpoll...@gmail.com
> >
> > >> > wrote:
> > >> >
> > >> > Dennis,
> > >> >
> > >> > oh, so I made those adjustments. I must have missed it because that
> > >> didn't
> > >> > occur to me. So DefaultIgniteConfiguration is fine, but
> > >> ClientConfiguration
> > >> > is a final class so that can't be extended from. This PR is starting
> > to
> > >> > shape up from my perspective, I just need to update the
> documentation.
> > >> The
> > >> > other thing I did was add a flag for the associated cache to use
> > >> > micronuat-cache. umm, I'll play with this a bit and see If I can
> work
> > >> out
> > >> > something better. ignite.enabled can be false but you can provide
> your
> > >> own
> > >> > bean in place but that doesn't seem quite right.
> > >> >
> > >> > [image: image.png]
> > >> >
> > >> >
> > >> > https://github.com/micronaut-projects/micronaut-ignite/pull/33
> > >> >
> > >> > On Fri, Aug 21, 2020 at 6:29 PM Denis Magda <dma...@apache.org>
> > wrote:
> > >> >
> > >> > Michael,
> > >> >
> > >> > Thanks, for verifying.
> > >> >
> > >> > I've tried extending ClientConfiguration but couldn't get the
> > >> > > getters/setters working with ConfigurationBuilder. Instead they
> are
> > >> just
> > >> > > placed into wrapper classes.
> > >> >
> > >> >
> > >> > Have a look at how Hazelcast implemented the default configuration
> for
> > >> its
> > >> > thin client by extending ClientConfig class of Hazelcast core:
> > >> > https://github.com/micronaut-projects/micronaut-cache/blob/
> > >> > master/cache-hazelcast/src/main/java/io/micronaut/cache/hazelcast/
> > >> > HazelcastClientConfiguration.java
> > >> >
> > >> > Some observations. After extending ClientConfig, their Micronaut's
> > >> > HazelcastClientConfiguration exposes the following configuration
> > >> > parameteres:
> > >> >
> > >> >    - Some fields of primitive types that belong to the parent
> > >> ClientConfig
> > >> >    class. They do this by adding this - *includes = {"properties",
> > >> >    "instanceName", "labels", "userContext", "clusterName"}*
> > >> >    - ClientNetworkConfig, ConnectionRetryConfig, SocketOptions
> > >> properties
> > >> >    (that exist in the parent ClientConfig class) can not be
> inherited
> > as
> > >> >    above. Thus, they define those with @ConfigurationBuilder
> manually.
> > >> >
> > >> > As a result, their implementation is simple and compact, and here
> is a
> > >> > final list of configuration properties:
> > >> > https://micronaut-projects.github.io/micronaut-cache/
> > >> >
> > >>
> > snapshot/guide/#io.micronaut.cache.hazelcast.HazelcastClientConfiguration
> > >> >
> > >> > Could you check if we can follow a similar approach? Let's start
> with
> > >> the
> > >> > thin client. It's much simpler.
> > >> >
> > >> >
> > >> > > yea, will need to
> > >> > > setup a way for a user to provide their own bean because there is
> no
> > >> way
> > >> > a
> > >> > > full configuration could be covered but I haven't quite worked
> that
> > >> out
> > >> > > yet.
> > >> >
> > >> >
> > >> > That will be outstanding and fit well the design. Let me know if you
> > >> need
> > >> > me to help to figure out how to do that with Micronaut.
> > >> >
> > >> >
> > >> > -
> > >> > Denis
> > >> >
> > >> >
> > >> > On Fri, Aug 21, 2020 at 5:52 PM Michael Pollind <mpoll...@gmail.com
> >
> > >> > wrote:
> > >> >
> > >> > > Dennis,
> > >> > >
> > >> > > This is what I came up with with some of the suggestions:
> > >> > >
> > >> > > https://github.com/micronaut-projects/micronaut-ignite/blob/
> > >> > 3e1529ca4a40c2eb00793e344a36bb48d2a7d3fe/ignite-core/src/
> > >> >
> > main/java/io/micronaut/ignite/configuration/DefaultIgniteConfiguration.
> > >> > java
> > >> > > and
> > >> > >
> > >> > > https://github.com/micronaut-projects/micronaut-ignite/blob/
> > >> > 3e1529ca4a40c2eb00793e344a36bb48d2a7d3fe/ignite-core/src/
> > >> >
> > >>
> >
> main/java/io/micronaut/ignite/configuration/DefaultCacheConfiguration.java
> > >> > >
> > >> > > test cases:
> > >> > >
> > >> > > https://github.com/micronaut-projects/micronaut-ignite/blob/
> > >> > 3e1529ca4a40c2eb00793e344a36bb48d2a7d3fe/ignite-core/src/
> > >> > test/groovy/io/micronaut/ignite/IgniteConfigurationSpec.groovy
> > >> > >
> > >> > > I've tried extending ClientConfiguration but couldn't get the
> > >> > > getters/setters working with ConfigurationBuilder. Instead they
> are
> > >> just
> > >> > > placed into wrapper classes. Anyways, I don't think
> > >> ConfigurationProperty
> > >> > > is supposed to work this way. Also note the table in the
> > >> documentation is
> > >> > > generated and without a way to exclude things I don't think this
> > will
> > >> > work
> > >> > > cleanly. The other thing I wanted to do was nest @EachProperty in
> a
> > >> > single
> > >> > > @ConfigurationProperties but that doesn't work with how stuff gets
> > >> > resolved
> > >> > > (https://github.com/micronaut-projects/micronaut-core/issues/3938
> ).
> > >> so
> > >> > the
> > >> > > cachConfiguration is in another class. This is kind of a first
> > working
> > >> > > example so this will need to be adjusted quite a bit. yea, will
> need
> > >> to
> > >> > > setup a way for a user to provide their own bean because there is
> no
> > >> way
> > >> > a
> > >> > > full configuration could be covered but I haven't quite worked
> that
> > >> out
> > >> > > yet.
> > >> > >
> > >> > > If this is ok then I can do another pass on the confluence.
> > >> > >
> > >> > > On Fri, Aug 21, 2020 at 1:55 PM Denis Magda <dma...@apache.org>
> > >> wrote:
> > >> > >
> > >> > > > Michael,
> > >> > > >
> > >> > > > Finally, I figured out Micronaut configuration specificities.
> What
> > >> > > confused
> > >> > > > me before, is that even though the beans configuration in
> > Micronaut
> > >> > looks
> > >> > > > quite similar to the Spring Boot approach, the former automates
> a
> > >> lot
> > >> > > with
> > >> > > > the help of reflection in runtime. That's how our default Spring
> > >> Boot
> > >> > > > configuration looks
> > >> > > > <
> > >> > > >
> > >> > > https://github.com/apache/ignite-extensions/blob/master/
> > >> > modules/spring-boot-thin-client-autoconfigure-ext/src/
> > >> > main/java/org/apache/ignite/springframework/boot/autoconfigure/
> > >> > IgniteClientConfigurer.java
> > >> > > > >
> > >> > > > like. And that's enough to let the users define any possible
> > >> property
> > >> > of
> > >> > > an
> > >> > > > IgniteConfiguration instance as per this example
> > >> > > > <
> > >> > > >
> > >> > > https://apacheignite-mix.readme.io/docs/spring-boot#
> > >> > set-ignite-up-via-spring-boot-configuration
> > >> > > > >.
> > >> > > > The upside of the reflection.
> > >> > > >
> > >> > > > Anyway, let's go back to our world. That's what I would suggest.
> > >> > > >
> > >> > > > *Ignite Thin Client*
> > >> > > >
> > >> > > >
> > >> > > >    - Let's create DefaultThinClientConfiguration that *extends*
> > >> > Ignite's
> > >> > > >    ClientConfiguration
> > >> > > >    <
> > >> > > >
> > >> > > https://github.com/apache/ignite/blob/master/modules/
> > >> > core/src/main/java/org/apache/ignite/configuration/
> > >> > ClientConfiguration.java
> > >> > > > >.
> > >> > > >    Once done, it will be possible to configure most of
> > >> > > ClientConfiguration
> > >> > > >    settings which are primitive types. (guess that's how you
> were
> > >> doing
> > >> > > > that
> > >> > > >    before I joined the review)
> > >> > > >    - Some fields of the ClientConfiguration class are of custom
> > >> > > >    non-primitive types and should be added into the
> > >> > > >    DefaultThinClientConfiguration explicitly via the
> > >> > > @ConfigurationBuilder
> > >> > > >    annotation. Those fields are *sslType, sslProtocol,
> > >> > > >     sslCtxFactory, txCfg*.
> > >> > > >
> > >> > > > Apart from the DefaultThinClientConfiguration, can we support
> > >> another
> > >> > > > configuration approach when a ClientConfiguration bean is
> created
> > >> > > > programmatically in the source code and the integration uses
> that
> > >> bean
> > >> > to
> > >> > > > initialize an instance of the thin client (instead of
> > >> > > > using DefaultThinClientConfiguration that requires to set the
> > >> > properties
> > >> > > > via YAML,etc.). For instance, that's how the ClientConfiguration
> > >> bean
> > >> > is
> > >> > > > created programmatically in Spring Boot
> > >> > > > <
> > >> > > >
> > >> > >
> > >>
> https://apacheignite-mix.readme.io/docs/spring-boot#set-thin-client-up-
> > >> > programmatically
> > >> > > > >and
> > >> > > > our integration uses it to initialize an Ignite object.
> > >> > > >
> > >> > > > *Ignite Node (server or thick client)*
> > >> > > >
> > >> > > > Obviously, this one is trickier due to the numerous
> configuration
> > >> > > > parameters of the IgniteConfiguration class
> > >> > > > <
> > >> > > >
> > >> > > https://github.com/apache/ignite/blob/master/modules/
> > >> > core/src/main/java/org/apache/ignite/configuration/
> > >> > IgniteConfiguration.java
> > >> > > > >
> > >> > > > .
> > >> > > >
> > >> > > > So, as you suggested before, we need to select the most
> frequently
> > >> used
> > >> > > > configuration parameters and add them to the
> > >> DefaultIgniteConfiguration
> > >> > > > with @ConfigurationBuilder annotation. However, it seems
> > reasonable
> > >> if
> > >> > > > DefaultIgniteConfiguration will extend Ignite's
> > IgniteConfiguration
> > >> (so
> > >> > > > that we don't need to list parameters of primitive types). Based
> > on
> > >> my
> > >> > > > experience, I would add the following settings of custom
> > >> non-primitive
> > >> > > > types:
> > >> > > >
> > >> > > >    - TcpDiscoverySpi
> > >> > > >    <
> > >> > > >
> > >> > >
> > https://github.com/apache/ignite/blob/f4b30f7f1e736845ffa8eaf2d8aa17
> > >> >
> > >>
> >
> 1700a928eb/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/
> > >> > TcpDiscoverySpi.java
> > >> > > > >
> > >> > > > with
> > >> > > >    all its fields of primitive types (this should be done
> easily,
> > >> > right,
> > >> > > >    without copy-paste?) and its ipFinder field. In the
> beginning,
> > I
> > >> > would
> > >> > > > only
> > >> > > >    support setting TcpDiscoveryVmIpFinder
> > >> > > >    <
> > >> > > >
> > >> > >
> > https://github.com/apache/ignite/blob/f4b30f7f1e736845ffa8eaf2d8aa17
> > >> > 1700a928eb/modules/core/src/main/java/org/apache/ignite/
> > >> > spi/discovery/tcp/ipfinder/vm/TcpDiscoveryVmIpFinder.java
> > >> > > > >
> > >> > > > and
> > >> > > >    KubernetesIpFinder
> > >> > > >    <
> > >> > > >
> > >> > >
> > https://github.com/apache/ignite/blob/f4b30f7f1e736845ffa8eaf2d8aa17
> > >> > 1700a928eb/modules/kubernetes/src/main/java/org/apache/
> > >> > ignite/spi/discovery/tcp/ipfinder/kubernetes/
> > >> > TcpDiscoveryKubernetesIpFinder.java
> > >> > > > >via
> > >> > > >    the DefaultIgniteConfiguration.
> > >> > > >    - DataStorageConfiguration
> > >> > > >    <
> > >> > > >
> > >> > >
> > https://github.com/apache/ignite/blob/f4b30f7f1e736845ffa8eaf2d8aa17
> > >> >
> 1700a928eb/modules/core/src/main/java/org/apache/ignite/configuration/
> > >> > DataStorageConfiguration.java
> > >> > > > >
> > >> > > > including
> > >> > > >    its DataStorageConfiguration.dataRegions property.
> > >> > > >    - TcpCommunicationSpi
> > >> > > >    <
> > >> > > >
> > >> > >
> > https://github.com/apache/ignite/blob/f4b30f7f1e736845ffa8eaf2d8aa17
> > >> > 1700a928eb/modules/core/src/main/java/org/apache/ignite/
> > >> > spi/communication/tcp/TcpCommunicationSpi.java
> > >> > > > >
> > >> > > > with
> > >> > > >    its fields of primitive types. Again, here is I'm assuming
> that
> > >> we
> > >> > can
> > >> > > > do
> > >> > > >    this avoiding copy-pasting. Either through
> > @ConfigurationBuilder
> > >> > > > (include)
> > >> > > >    or inheritence.
> > >> > > >
> > >> > > > If the user wants to configure any settings unsupported by
> > >> > > > DefaultIgniteConfiguration then, there should be a way to create
> > an
> > >> > > > IgniteConfiguration bean programmatically and use it to
> initialize
> > >> an
> > >> > > > Ignite instance (instead of DefaultIgniteConfiguration).
> > >> > > >
> > >> > > > What's your thinking? Let me know if I'm still missing
> something.
> > >> > > > -
> > >> > > > Denis
> > >> > > >
> > >> > > >
> > >> > > > On Wed, Aug 19, 2020 at 8:49 PM Saikat Maitra <
> > >> saikat.mai...@gmail.com
> > >> > >
> > >> > > > wrote:
> > >> > > >
> > >> > > > > Hi Michael, Denis
> > >> > > > >
> > >> > > > > I was looking into tiering options for ehcache[1] and network
> > >> options
> > >> > > for
> > >> > > > > Hazelcast[2]  and I am thinking we can implement something
> > >> similar to
> > >> > > > > configure CommunicationSpi
> > >> > > > >
> > >> > > > >
> > >> > > > > [1]
> > >> > > > >
> > >> > > > >
> > >> > > >
> > >> > > https://micronaut-projects.github.io/micronaut-cache/
> > >> > snapshot/guide/#ehcache
> > >> > > > > [2]
> > >> > > > >
> > >> > > > >
> > >> > > >
> > >> > > https://micronaut-projects.github.io/micronaut-cache/
> > >> > snapshot/guide/#hazelcast
> > >> > > > >
> > >> > > > > Let me know what you think.
> > >> > > > >
> > >> > > > > Regards,
> > >> > > > > Saikat
> > >> > > > >
> > >> > > > >
> > >> > > > >
> > >> > > > >
> > >> > > > > On Wed, Aug 19, 2020 at 7:09 PM Michael Pollind <
> > >> mpoll...@gmail.com>
> > >> > > > > wrote:
> > >> > > > >
> > >> > > > > > A lot of this was just figured out through experimentation.
> > You
> > >> can
> > >> > > ask
> > >> > > > > > questions in the micronaut gitter:
> > >> > > > > > https://gitter.im/micronautfw/questions
> > >> > > > > > . Micronaut documentation is pretty comprehensive:
> > >> > > > > > https://docs.micronaut.io/latest/guide/index.html. look for
> > >> > > > EachProperty
> > >> > > > > > and ConfigurationProperty. you can also hunt through the
> > current
> > >> > > > existing
> > >> > > > > > micronaut modules and find how those configuration items are
> > >> setup.
> > >> > > > There
> > >> > > > > > is also the unit test cases in micronaut-core which have
> been
> > >> > pretty
> > >> > > > > > helpful in the past in working out how some of these
> > annotations
> > >> > work
> > >> > > > in
> > >> > > > > > practice.
> > >> > > > > >
> > >> > > > > > On Wed, Aug 19, 2020 at 4:50 PM Denis Magda <
> > dma...@apache.org>
> > >> > > wrote:
> > >> > > > > >
> > >> > > > > > > Michael,
> > >> > > > > > >
> > >> > > > > > > Alright, then the question on the possible quantity of
> > Ignite
> > >> > > > instances
> > >> > > > > > is
> > >> > > > > > > settled - the integration will allow to auto-configure a
> > >> single
> > >> > > > > instance
> > >> > > > > > > only.
> > >> > > > > > >
> > >> > > > > > > Give me a couple of days to look into the configuration
> > >> matters
> > >> > of
> > >> > > > > > > DefaultIgniteConfiguration and see what I can suggest.
> Could
> > >> you
> > >> > > > > > recommend
> > >> > > > > > > any materials (or sources) that on Micronaut configuration
> > >> > > specifies
> > >> > > > > > > (through YAML and programmatically via source code)?
> > >> > > > > > >
> > >> > > > > > > Denis
> > >> > > > > > >
> > >> > > > > > > On Wednesday, August 19, 2020, Michael Pollind <
> > >> > mpoll...@gmail.com
> > >> > > >
> > >> > > > > > wrote:
> > >> > > > > > >
> > >> > > > > > > > I don't think micronaut will be able to infer the
> > >> > > communicationSpi,
> > >> > > > > so
> > >> > > > > > > you
> > >> > > > > > > > need to define it separately as follows:
> > >> > > > > > > >
> https://github.com/pollend/micronaut-ignite/blob/feature/
> > >> > > > > > > >
> > >> > > >
> > >> rework-1/ignite-core/src/main/java/io/micronaut/ignite/configuration/
> > >> > > > > > > > DefaultIgniteConfiguration.java#L40-L43.
> > >> > > > > > > > With this setup the configuration should look pretty
> much
> > >> like
> > >> > > the
> > >> > > > > > > > spring-boot sample you showed me:
> > >> > > > > > > > https://apacheignite-mix.readme.io/docs/spring-boot#
> > >> > > > > > > > set-ignite-up-via-spring-boot-configuration.
> > >> > > > > > > > I agree it should make the configuration easier with
> just
> > >> > > allowing
> > >> > > > a
> > >> > > > > > > single
> > >> > > > > > > > instance and it matches up well with spring-boot
> > >> configuration:
> > >> > > > > > > > https://docs.micronaut.io/latest/api/io/micronaut/
> > >> > > > > > > > context/annotation/Requires.html.
> > >> > > > > > > > Since its mostly a niche usecase then having that as the
> > >> > default
> > >> > > > use
> > >> > > > > > case
> > >> > > > > > > > seems pretty ideal to me. the definition will work as
> > >> follows:
> > >> > > > > > > >
> > >> > > > > > > > ignite:
> > >> > > > > > > >   enable true
> > >> > > > > > > >   ignite-instance-name: name
> > >> > > > > > > >   communication-spi:
> > >> > > > > > > >     local-port: 5555
> > >> > > > > > > >   data-storage-configuration:
> > >> > > > > > > >   ...
> > >> > > > > > > >   cache-configurations:
> > >> > > > > > > >    - name: accounts
> > >> > > > > > > >      queryEntities:
> > >> > > > > > > >      - tableName: NAME
> > >> > > > > > > >        ...
> > >> > > > > > > >    - ...
> > >> > > > > > > > ignite-thin:
> > >> > > > > > > >   enable: false
> > >> > > > > > > >   instance-name: name
> > >> > > > > > > >
> > >> > > > > > > >
> > >> > > > > > > > Micronaut has some mechanism to enforce the presence of
> > >> > something
> > >> > > > > that
> > >> > > > > > > > should suffice for this usecase:
> > >> > > > > > > > https://docs.micronaut.io/latest/api/io/micronaut/
> > >> > > > > > > > context/annotation/Requires.html
> > >> > > > > > > >
> > >> > > > > > > >
> > >> > > > > > > > On Wed, Aug 19, 2020 at 2:45 PM Denis Magda <
> > >> dma...@apache.org
> > >> > >
> > >> > > > > wrote:
> > >> > > > > > > >
> > >> > > > > > > > > Michael,
> > >> > > > > > > > >
> > >> > > > > > > > >
> > >> > > > > > > > > > The current way I have it setup is the primary bean
> is
> > >> used
> > >> > > by
> > >> > > > > > > default
> > >> > > > > > > > so
> > >> > > > > > > > > > you won't be able to use micronaut-cache with
> anything
> > >> but
> > >> > > the
> > >> > > > > > > default
> > >> > > > > > > > > > bean. I guess one can override the other if the
> > >> > configuration
> > >> > > > is
> > >> > > > > > > > present.
> > >> > > > > > > > >
> > >> > > > > > > > >
> > >> > > > > > > > > The more I'm thinking the more I'm convinced that we
> > >> > shouldn't
> > >> > > > > bother
> > >> > > > > > > > about
> > >> > > > > > > > > the auto-configuration of several Ignite instances.
> As I
> > >> said
> > >> > > > > before,
> > >> > > > > > > > > that's an occasional use case. Furthermore, Micronout
> is
> > >> > > designed
> > >> > > > > for
> > >> > > > > > > > > micro-services and serverless functions and I can
> hardly
> > >> > think
> > >> > > > of a
> > >> > > > > > use
> > >> > > > > > > > > case when a micro-service or function would need to
> boot
> > >> up
> > >> > > > several
> > >> > > > > > > > Ignite
> > >> > > > > > > > > clients. What if we let to auto-configure a single
> > Ignite
> > >> > > > instance
> > >> > > > > > per
> > >> > > > > > > > > application process? What's your view on this? It will
> > >> > > > > significantly
> > >> > > > > > > > > simplify the design and implementation of integration.
> > If
> > >> > > anybody
> > >> > > > > > needs
> > >> > > > > > > > > several Ignite instances, then he can instantiate them
> > >> > > manually.
> > >> > > > > > > > >
> > >> > > > > > > > > By default the
> > >> > > > > > > > > > thick client instance will replace the thin-client
> > >> > > DynamicCache
> > >> > > > > if
> > >> > > > > > > that
> > >> > > > > > > > > > would be ok?
> > >> > > > > > > > >
> > >> > > > > > > > >
> > >> > > > > > > > > If you agree on my proposal above, then I would simply
> > >> > disallow
> > >> > > > > > > > > auto-starting more than one Ignite instance (let it
> be a
> > >> > thick
> > >> > > or
> > >> > > > > > thin
> > >> > > > > > > > > client). For example, if a thick client is already
> > >> started,
> > >> > > then
> > >> > > > > > throw
> > >> > > > > > > an
> > >> > > > > > > > > exception on an attempt to initialize a thin client
> (and
> > >> vice
> > >> > > > > versa).
> > >> > > > > > > As
> > >> > > > > > > > > for thick vs. thin client usage in relation to
> > Micronaut,
> > >> I
> > >> > > would
> > >> > > > > > > > recommend
> > >> > > > > > > > > using the thin client if Micronaut is deployed in a
> > >> > serverless
> > >> > > > > > function
> > >> > > > > > > > > (the thin client connects to the cluster faster),
> while
> > >> for
> > >> > > > > > > > micro-services
> > >> > > > > > > > > you can use both types of clients.
> > >> > > > > > > > >
> > >> > > > > > > > > The main reason why I was using the spring bean
> > definition
> > >> > was
> > >> > > > > mainly
> > >> > > > > > > for
> > >> > > > > > > > > > convenience and I'm not sure what fields are the
> most
> > >> > > relevant.
> > >> > > > > > > > >
> > >> > > > > > > > >
> > >> > > > > > > > > Ok, seems that I'm missing some important point about
> > >> > > Micronaut.
> > >> > > > > Let
> > >> > > > > > me
> > >> > > > > > > > > double-check the following with you.
> > >> > > > > > > > >
> > >> > > > > > > > > Assume these are the only fields of the
> > >> > > > DefaultIgniteConfiguration:
> > >> > > > > > > > >
> > >> > > > > > > > > private final String name;
> > >> > > > > > > > >
> > >> > > > > > > > > @ConfigurationBuilder()
> > >> > > > > > > > > private IgniteConfiguration igniteConfiguration = new
> > >> > > > > > > > > IgniteConfiguration();
> > >> > > > > > > > >
> > >> > > > > > > > >
> > >> > > > > > > > > Will I be able to set up the communicationSpi bean
> below
> > >> > > without
> > >> > > > > > having
> > >> > > > > > > > it
> > >> > > > > > > > > as a field of the DefaultIgniteConfiguration? Are you
> > >> > getting a
> > >> > > > > > > > > NullPointerException?
> > >> > > > > > > > >
> > >> > > > > > > > > ignite:
> > >> > > > > > > > >     name: some_name
> > >> > > > > > > > >     igniteConfiguration:
> > >> > > > > > > > >         communicationSpi:
> > >> > > > > > > > >             {redefining some fields of the SPI}
> > >> > > > > > > > > -
> > >> > > > > > > > > Denis
> > >> > > > > > > > >
> > >> > > > > > > > >
> > >> > > > > > > > > On Wed, Aug 19, 2020 at 12:17 AM Michael Pollind <
> > >> > > > > mpoll...@gmail.com
> > >> > > > > > >
> > >> > > > > > > > > wrote:
> > >> > > > > > > > >
> > >> > > > > > > > > > Here is the initial setup that I quickly threw
> > together
> > >> > along
> > >> > > > > with
> > >> > > > > > > some
> > >> > > > > > > > > > example test cases. I feel like this might get a
> > little
> > >> > > > > complicated
> > >> > > > > > > > but I
> > >> > > > > > > > > > think it's doable.
> > >> > > > > > > > > >
> > >> > > > > > > > > >
> > >> > > > > > > > > >
> > >> > > > > > > > >
> > https://github.com/pollend/micronaut-ignite/blob/feature/
> > >> > > > > > > >
> > >> > > >
> > >> rework-1/ignite-core/src/main/java/io/micronaut/ignite/configuration/
> > >> > > > > > > > DefaultIgniteConfiguration.java
> > >> > > > > > > > > > along with some relevant test:
> > >> > > > > > > > > >
> > >> > > > > > > > >
> > https://github.com/pollend/micronaut-ignite/blob/feature/
> > >> > > > > > > >
> rework-1/ignite-core/src/test/groovy/io/micronaut/ignite/
> > >> > > > > > > > IgniteConfigurationSpec.groovy#L55-L73
> > >> > > > > > > > > >
> > >> > > > > > > > > > On Tue, Aug 18, 2020 at 11:49 PM Michael Pollind <
> > >> > > > > > mpoll...@gmail.com
> > >> > > > > > > >
> > >> > > > > > > > > > wrote:
> > >> > > > > > > > > >
> > >> > > > > > > > > >>
> > >> > > > > > > > > >>
> > >> > > > > > > > > >> The main reason why I was using the spring bean
> > >> definition
> > >> > > was
> > >> > > > > > > mainly
> > >> > > > > > > > > for
> > >> > > > > > > > > >> convenience and I'm not sure what fields are the
> most
> > >> > > > relevant.
> > >> > > > > > Will
> > >> > > > > > > > > have
> > >> > > > > > > > > >> to be kind of specific since the configuration
> might
> > >> get a
> > >> > > > > little
> > >> > > > > > > > > >> complicated. The other thing you can do is use
> > >> > > > > > > > > >>
> > >> > > > > > > > >
> https://docs.micronaut.io/latest/api/io/micronaut/core/
> > >> > > > > > > > convert/format/MapFormat.html
> > >> > > > > > > > > >> which will just map fields and values and you can
> > pass
> > >> > that
> > >> > > to
> > >> > > > > > > > somewhere
> > >> > > > > > > > > >> else to be manage it.
> > >> > > > > > > > > >>
> > >> > > > > > > > > >> so you will need to do something like this as
> > follows:
> > >> > > > > > > > > >>
> > >> > > > > > > > > >> private final String name;
> > >> > > > > > > > > >> @ConfigurationBuilder()
> > >> > > > > > > > > >> private IgniteConfiguration igniteConfiguration =
> new
> > >> > > > > > > > > IgniteConfiguration();
> > >> > > > > > > > > >> @ConfigurationBuilder(value = "communicationSpi")
> > >> > > > > > > > > >> private TcpCommunicationSpi communicationSpi = new
> > >> > > > > > > > > TcpCommunicationSpi();
> > >> > > > > > > > > >>
> > >> > > > > > > > > >> [image: image.png]
> > >> > > > > > > > > >>
> > >> > > > > > > > > >>
> > >> > > > > > > > > >> On Tue, Aug 18, 2020 at 11:05 PM Michael Pollind <
> > >> > > > > > > mpoll...@gmail.com>
> > >> > > > > > > > > >> wrote:
> > >> > > > > > > > > >>
> > >> > > > > > > > > >>> Its whatever is setup by default when the object
> is
> > >> > > > declared. I
> > >> > > > > > > think
> > >> > > > > > > > > we
> > >> > > > > > > > > >>> will have to define multiple ConfigurationBuilders
> > If
> > >> i'm
> > >> > > not
> > >> > > > > > > > mistaken
> > >> > > > > > > > > for
> > >> > > > > > > > > >>> the IgniteConfiguration.  you don't need to
> provide
> > >> the
> > >> > > name
> > >> > > > > > since
> > >> > > > > > > > > that is
> > >> > > > > > > > > >>> provided by the key for each configuration under
> > >> > > > EachProperty.
> > >> > > > > > The
> > >> > > > > > > > > name is
> > >> > > > > > > > > >>> the qualified name that refers to that bean and
> also
> > >> the
> > >> > > same
> > >> > > > > > > > > qualifier for
> > >> > > > > > > > > >>> the Ignite instance. For the most part will just
> use
> > >> the
> > >> > > > > primary
> > >> > > > > > > bean
> > >> > > > > > > > > for
> > >> > > > > > > > > >>> most part. I think you can only have one cache
> > >> instance
> > >> > > > active
> > >> > > > > > at a
> > >> > > > > > > > > time.
> > >> > > > > > > > > >>> The current way I have it setup is the primary
> bean
> > is
> > >> > used
> > >> > > > by
> > >> > > > > > > > default
> > >> > > > > > > > > so
> > >> > > > > > > > > >>> you won't be able to use micronaut-cache with
> > anything
> > >> > but
> > >> > > > the
> > >> > > > > > > > default
> > >> > > > > > > > > >>> bean. I guess one can override the other if the
> > >> > > configuration
> > >> > > > > is
> > >> > > > > > > > > present.
> > >> > > > > > > > > >>> One problem I see is micronaut-cache. We can only
> > use
> > >> one
> > >> > > > > > instance
> > >> > > > > > > of
> > >> > > > > > > > > >>> DynamicCache but I need to verify how that works
> > >> again.
> > >> > By
> > >> > > > > > default
> > >> > > > > > > > the
> > >> > > > > > > > > >>> thick client instance will replace the thin-client
> > >> > > > DynamicCache
> > >> > > > > > if
> > >> > > > > > > > that
> > >> > > > > > > > > >>> would be ok?
> > >> > > > > > > > > >>>
> > >> > > > > > > > > >>> ignite:
> > >> > > > > > > > > >>>   thick-clients:
> > >> > > > > > > > > >>>    default: <--- primary bean
> > >> > > > > > > > > >>>      ...
> > >> > > > > > > > > >>>    second-bean:
> > >> > > > > > > > > >>>     ...
> > >> > > > > > > > > >>>  thin-clients:
> > >> > > > > > > > > >>>    default: <--- primary bean
> > >> > > > > > > > > >>>     ...
> > >> > > > > > > > > >>>    second-bean:
> > >> > > > > > > > > >>>    ....
> > >> > > > > > > > > >>>
> > >> > > > > > > > > >>>
> > >> > > > > > > > > >>>
> > >> > > > > > > > > >>>
> > >> > > > > > > > > https://docs.micronaut.io/latest/api/io/micronaut/
> > >> > > > > > > > context/annotation/Requires.html
> > >> > > > > > > > > >>>
> > >> > > > > > > > > >>> On Tue, Aug 18, 2020 at 10:13 PM Denis Magda <
> > >> > > > > dma...@apache.org>
> > >> > > > > > > > > wrote:
> > >> > > > > > > > > >>>
> > >> > > > > > > > > >>>> >
> > >> > > > > > > > > >>>> > oh, so we probably don't need to work with
> > multiple
> > >> > > > > instances.
> > >> > > > > > > > This
> > >> > > > > > > > > >>>> is what
> > >> > > > > > > > > >>>> > I have in the current master branch.
> > >> > > > > > > > > >>>>
> > >> > > > > > > > > >>>>
> > >> > > > > > > > > >>>> In most cases, people start a single instance of
> a
> > >> thick
> > >> > > or
> > >> > > > > thin
> > >> > > > > > > > > client
> > >> > > > > > > > > >>>> per
> > >> > > > > > > > > >>>> application. The clients are multi-threaded and
> can
> > >> > > utilize
> > >> > > > > all
> > >> > > > > > > the
> > >> > > > > > > > > CPUs
> > >> > > > > > > > > >>>> effectively. However, it's not harmful to have
> the
> > >> > ability
> > >> > > > to
> > >> > > > > > > > > configure
> > >> > > > > > > > > >>>> several clients per application. As far as I
> > >> understand,
> > >> > > > > > Micronaut
> > >> > > > > > > > > >>>> distinguishes clients per the
> > >> > > > "IgniteClientConfiguration.name"
> > >> > > > > > > > > property,
> > >> > > > > > > > > >>>> right?
> > >> > > > > > > > > >>>>
> > >> > > > > > > > > >>>> So what defaults are set for IgniteConfiguration?
> > >> > > > > > > > > >>>>
> > >> > > > > > > > > >>>>
> > >> > > > > > > > > >>>> Does it matter to Micronaut what those defaults
> > are?
> > >> By
> > >> > > > > looking
> > >> > > > > > at
> > >> > > > > > > > the
> > >> > > > > > > > > >>>> IgniteThinClientConfiguration
> > >> > > > > > > > > >>>> <
> > >> > > > > > > > > >>>>
> > >> > > > > > > > >
> https://micronaut-projects.github.io/micronaut-ignite/
> > >> > > > > > > > snapshot/api/io/micronaut/ignite/configuration/
> > >> > > > > > > > IgniteThinClientConfiguration.html
> > >> > > > > > > > > >>>> >,
> > >> > > > > > > > > >>>> that defines
> > >> > > > > org.apache.ignite.configuration.ClientConfiguration
> > >> > > > > > > > > >>>> property
> > >> > > > > > > > > >>>> (under the name of "configuration"), I see that
> > >> > Micronaut
> > >> > > > > could
> > >> > > > > > > > > >>>> introspect
> > >> > > > > > > > > >>>> all the fields of the ClientConfiguration and
> > >> prepared
> > >> > > these
> > >> > > > > > > > > properties
> > >> > > > > > > > > >>>> table
> > >> > > > > > > > > >>>> <
> > >> > > > > > > > > >>>>
> > >> > > > > > > > >
> https://micronaut-projects.github.io/micronaut-ignite/
> > >> > > > > > > > snapshot/guide/#io.micronaut.ignite.configuration.
> > >> > > > > > > > IgniteThinClientConfiguration
> > >> > > > > > > > > >>>> >.
> > >> > > > > > > > > >>>> For me, it means that whenever I am configuring
> the
> > >> thin
> > >> > > > > client
> > >> > > > > > > in a
> > >> > > > > > > > > >>>> YAML
> > >> > > > > > > > > >>>> file, Micronaut will create an instance of the
> > >> > > > > > ClientConfiguration
> > >> > > > > > > > > >>>> (Ignite
> > >> > > > > > > > > >>>> sets the defaults), and then I can override some
> > >> > settings
> > >> > > > such
> > >> > > > > > as
> > >> > > > > > > > > >>>> "addresses" or "enablePartitionAwareness". Does
> > this
> > >> > sound
> > >> > > > > > > accurate
> > >> > > > > > > > > >>>> concerning Micronaut?
> > >> > > > > > > > > >>>>
> > >> > > > > > > > > >>>> Jumping back to the IgniteConfiguration, I would
> > just
> > >> > swap
> > >> > > > the
> > >> > > > > > > > "path"
> > >> > > > > > > > > >>>> that
> > >> > > > > > > > > >>>> is the String with the "config" that is
> > >> > > IgniteConfiguration.
> > >> > > > > > Then
> > >> > > > > > > > let
> > >> > > > > > > > > >>>> Ignite take care of the IgniteConfiguration
> > defaults
> > >> and
> > >> > > > > allow a
> > >> > > > > > > > > >>>> developer
> > >> > > > > > > > > >>>> to override some defaults (such as
> > >> discoverySPI.ipFinder
> > >> > > or
> > >> > > > > > memory
> > >> > > > > > > > > >>>> settings). Just in case, you can find
> > >> > IgniteConfiguration
> > >> > > > > > defaults
> > >> > > > > > > > > here
> > >> > > > > > > > > >>>> <
> > >> > > > > > > > > >>>>
> > >> > > > > > > > > https://github.com/apache/ignite/blob/master/modules/
> > >> > > > > > > > core/src/main/java/org/apache/ignite/configuration/
> > >> > > > > > > > IgniteConfiguration.java
> > >> > > > > > > > > >>>> >
> > >> > > > > > > > > >>>> .
> > >> > > > > > > > > >>>>
> > >> > > > > > > > > >>>> -
> > >> > > > > > > > > >>>> Denis
> > >> > > > > > > > > >>>>
> > >> > > > > > > > > >>>>
> > >> > > > > > > > > >>>> On Tue, Aug 18, 2020 at 8:59 PM Michael Pollind <
> > >> > > > > > > mpoll...@gmail.com
> > >> > > > > > > > >
> > >> > > > > > > > > >>>> wrote:
> > >> > > > > > > > > >>>>
> > >> > > > > > > > > >>>> > oh, so we probably don't need to work with
> > multiple
> > >> > > > > instances.
> > >> > > > > > > > This
> > >> > > > > > > > > >>>> is what
> > >> > > > > > > > > >>>> > I have in the current master branch. I believe
> I
> > >> was
> > >> > > > > > originally
> > >> > > > > > > > > >>>> trying to
> > >> > > > > > > > > >>>> > set-up the configuration with the default
> ignite
> > >> > > instance
> > >> > > > > but
> > >> > > > > > > > found
> > >> > > > > > > > > I
> > >> > > > > > > > > >>>> > couldn't cover enough of the configuration. So
> > what
> > >> > > > defaults
> > >> > > > > > are
> > >> > > > > > > > set
> > >> > > > > > > > > >>>> for
> > >> > > > > > > > > >>>> > IgniteConfiguration? some of those factory
> items
> > >> can't
> > >> > > be
> > >> > > > > > > covered
> > >> > > > > > > > > >>>> with how
> > >> > > > > > > > > >>>> > micronaut sets up configurations.
> > >> > @ConfigurationProperty
> > >> > > > can
> > >> > > > > > > only
> > >> > > > > > > > be
> > >> > > > > > > > > >>>> > defined on a known factory, there are ways to
> > have
> > >> > > > multiple
> > >> > > > > > > > > factories
> > >> > > > > > > > > >>>> and
> > >> > > > > > > > > >>>> > label them optional but that easily gets
> > >> overwhelming.
> > >> > > In
> > >> > > > > > this
> > >> > > > > > > > > >>>> situation
> > >> > > > > > > > > >>>> > providing your own bean would probably be more
> > >> ideal
> > >> > in
> > >> > > > this
> > >> > > > > > > > > >>>> situation when
> > >> > > > > > > > > >>>> > I think about it.  I was worrying that I
> wouldn't
> > >> be
> > >> > > able
> > >> > > > to
> > >> > > > > > > cover
> > >> > > > > > > > > >>>> enough
> > >> > > > > > > > > >>>> > of the configuration with
> > >> > > > > > > > > >>>> >
> > >> > > > > > > > > >>>> > ignite:  enabled: true  thin-clients:
> default:
> > >> > > > > > address:
> > >> > > > > > > > >   -
> > >> > > > > > > > > >>>> > "127.0.0.1:10800"      - "127.0.0.1:10801"
> > >> > > > > > > > > >>>> >
> > >> > > > > > > > > >>>> >     thin-client-2:
> > >> > > > > > > > > >>>> >       address:      - "127.0.0.1:10800"
> - "
> > >> > > > > > 127.0.0.1:10801
> > >> > > > > > > "
> > >> > > > > > > > > >>>> >
> > >> > > > > > > > > >>>> >
> > >> > > > > > > > > >>>> > you can see it in the current snapshot
> > >> documentation:
> > >> > > > > > > > > >>>> >
> > >> > > > > > > > >
> > >> > > > > >
> > >> > >
> > https://micronaut-projects.github.io/micronaut-ignite/snapshot/guide/
> > >> > > > > > > > > >>>> >
> > >> > > > > > > > > >>>> > On Tue, Aug 18, 2020 at 4:16 PM Denis Magda <
> > >> > > > > > dma...@apache.org>
> > >> > > > > > > > > >>>> wrote:
> > >> > > > > > > > > >>>> >
> > >> > > > > > > > > >>>> > > Michael, thanks for filling out the wiki
> page.
> > >> > > > > > > > > >>>> > >
> > >> > > > > > > > > >>>> > > I'm looking at the Auto-Configuration wiki
> > >> section
> > >> > and
> > >> > > > the
> > >> > > > > > > > current
> > >> > > > > > > > > >>>> > version
> > >> > > > > > > > > >>>> > > of the io.micronaut.ignite.configuration.
> > >> > > > > > > > IgniteClientConfiguration
> > >> > > > > > > > > >>>> > > <
> > >> > > > > > > > > >>>> > >
> > >> > > > > > > > > >>>> >
> > >> > > > > > > > > >>>>
> > >> > > > > > > > >
> https://github.com/micronaut-projects/micronaut-ignite/
> > >> > > > > > > >
> > >> > > > > >
> > >> > > > blob/master/ignite-core/src/main/java/io/micronaut/ignite/
> > >> > configuration/
> > >> > > > > > > > IgniteClientConfiguration.java
> > >> > > > > > > > > >>>> > > >
> > >> > > > > > > > > >>>> > > class,
> > >> > > > > > > > > >>>> > > and wonder if we can perform the following
> > >> changes:
> > >> > > > > > > > > >>>> > >
> > >> > > > > > > > > >>>> > >    1. Rename the IgniteClientConfiguration to
> > >> > > > > > > > IgniteConfiguration
> > >> > > > > > > > > >>>> (or, to
> > >> > > > > > > > > >>>> > >    avoid ambiguity, even to
> > >> > DefaultIgniteConfiguration
> > >> > > > as
> > >> > > > > > it's
> > >> > > > > > > > > done
> > >> > > > > > > > > >>>> for
> > >> > > > > > > > > >>>> > the
> > >> > > > > > > > > >>>> > >    Mongo driver
> > >> > > > > > > > > >>>> > >    <
> > >> > > > > > > > > >>>> > >
> > >> > > > > > > > > >>>> >
> > >> > > > > > > > > >>>>
> > >> > > > > > > > >
> https://micronaut-projects.github.io/micronaut-mongodb/
> > >> > > > > > > > latest/api/io/micronaut/configuration/mongo/reactive/
> > >> > > > > > > > DefaultMongoConfiguration.html
> > >> > > > > > > > > >>>> > > >).
> > >> > > > > > > > > >>>> > >    The rationale for this change is that the
> > >> > > developers
> > >> > > > > > might
> > >> > > > > > > > need
> > >> > > > > > > > > >>>> to
> > >> > > > > > > > > >>>> > > start an embedded
> > >> > > > > > > > > >>>> > >    Ignite server node
> > >> > > > > > > > > >>>> > >    <
> > >> > > > > > > > > >>>> > >
> > >> > > > > > > > > >>>> >
> > >> > > > > > > > > >>>>
> > >> > > > > > > > >
> > https://www.gridgain.com/docs/latest/installation-guide/
> > >> > > > > > > > deployment-modes#embedded-deployment
> > >> > > > > > > > > >>>> > > >.
> > >> > > > > > > > > >>>> > >    So, I would not limit the integration
> scope
> > to
> > >> > the
> > >> > > > > Ignite
> > >> > > > > > > > > clients
> > >> > > > > > > > > >>>> > only.
> > >> > > > > > > > > >>>> > >    2. Presently,
> > >> > > > > > > > > >>>> > >
> > >> > > > > io.micronaut.ignite.configuration.IgniteClientConfiguration
> > >> > > > > > > > > >>>> > >    supports two parameters - the "name" and
> > >> "path".
> > >> > I
> > >> > > > > would
> > >> > > > > > > > > replace
> > >> > > > > > > > > >>>> the
> > >> > > > > > > > > >>>> > > "path"
> > >> > > > > > > > > >>>> > >    parameter with the "config" one that
> > >> instantiates
> > >> > > > > > > > > >>>> > >    org.apache.ignite.IgniteConfiguration. If
> we
> > >> do
> > >> > > that,
> > >> > > > > > then
> > >> > > > > > > > the
> > >> > > > > > > > > >>>> > > developers
> > >> > > > > > > > > >>>> > >    will be able to set any property of the
> > >> > > > > > IgniteConfiguration
> > >> > > > > > > > > >>>> straight
> > >> > > > > > > > > >>>> > in
> > >> > > > > > > > > >>>> > > the
> > >> > > > > > > > > >>>> > >    main YAML file. See how it's done for the
> > >> Ignite
> > >> > > > Spring
> > >> > > > > > > Boot
> > >> > > > > > > > > >>>> > >    Auto-Configuration
> > >> > > > > > > > > >>>> > >    <
> > >> > > > > > > > > >>>> > >
> > >> > > > > > > > > >>>> >
> > >> > > > > > > > > >>>>
> > >> > > > > > > > > https://apacheignite-mix.readme.io/docs/spring-boot#
> > >> > > > > > > > set-ignite-up-via-spring-boot-configuration
> > >> > > > > > > > > >>>> > > >.
> > >> > > > > > > > > >>>> > >    Guess, we can do the same with Micronaut.
> > >> > > > > > > > > >>>> > >    3. If the previous modification is
> feasible,
> > >> > then I
> > >> > > > > would
> > >> > > > > > > > > rework
> > >> > > > > > > > > >>>> the
> > >> > > > > > > > > >>>> > >    Ignite thin client configuration
> similarly,
> > >> > taking
> > >> > > > our
> > >> > > > > > > Spring
> > >> > > > > > > > > >>>> Boot
> > >> > > > > > > > > >>>> > >    integration for the thin client
> > >> > > > > > > > > >>>> > >    <
> > >> > > > > > > > > >>>> > >
> > >> > > > > > > > > >>>> >
> > >> > > > > > > > > >>>>
> > >> > > > > > > > > https://apacheignite-mix.readme.io/docs/spring-boot#
> > >> > > > > > > > set-thin-client-up-via-spring-boot-configuration
> > >> > > > > > > > > >>>> > > >
> > >> > > > > > > > > >>>> > >    as a reference. As I see, the current
> > version
> > >> of
> > >> > > > > > > > > >>>> > >    IgniteThinClientConfiguration
> > >> > > > > > > > > >>>> > >    <
> > >> > > > > > > > > >>>> > >
> > >> > > > > > > > > >>>> >
> > >> > > > > > > > > >>>>
> > >> > > > > > > > >
> https://github.com/micronaut-projects/micronaut-ignite/
> > >> > > > > > > >
> > >> > > > > >
> > >> > > > blob/master/ignite-core/src/main/java/io/micronaut/ignite/
> > >> > configuration/
> > >> > > > > > > > IgniteThinClientConfiguration.java
> > >> > > > > > > > > >>>> > > >
> > >> > > > > > > > > >>>> > > already
> > >> > > > > > > > > >>>> > >    adopts this approach. I would only rename
> > >> > > > > "configuration"
> > >> > > > > > > to
> > >> > > > > > > > > >>>> "config",
> > >> > > > > > > > > >>>> > > and
> > >> > > > > > > > > >>>> > >    remove the "transaction" field since you
> can
> > >> pass
> > >> > > the
> > >> > > > > > > > > >>>> transactional
> > >> > > > > > > > > >>>> > >    settings via the YAML following the format
> > >> below:
> > >> > > > > > > > > >>>> > >
> > >> > > > > > > > > >>>> > > ignite-thin-client:
> > >> > > > > > > > > >>>> > >     name:
> > >> > > > > > > > > >>>> > >     config:
> > >> > > > > > > > > >>>> > >         addresses: <IP_addresses>
> > >> > > > > > > > > >>>> > >         partitionAwarenessEnabled: true
> > >> > > > > > > > > >>>> > >         transactionConfiguration:
> > >> > > > > > > > > >>>> > >             defaultTxConcurrency:...
> > >> > > > > > > > > >>>> > >             defaultTxTimeout
> > >> > > > > > > > > >>>> > >
> > >> > > > > > > > > >>>> > > -
> > >> > > > > > > > > >>>> > > Denis
> > >> > > > > > > > > >>>> > >
> > >> > > > > > > > > >>>> > >
> > >> > > > > > > > > >>>> > > On Mon, Aug 17, 2020 at 6:50 PM Michael
> > Pollind <
> > >> > > > > > > > > mpoll...@gmail.com
> > >> > > > > > > > > >>>> >
> > >> > > > > > > > > >>>> > > wrote:
> > >> > > > > > > > > >>>> > >
> > >> > > > > > > > > >>>> > > > oh, that makes more sense. so those methods
> > get
> > >> > > > wrapped
> > >> > > > > > > into a
> > >> > > > > > > > > >>>> > > > micronaut-aop intercept. Below I've listed
> > the
> > >> > > > relevant
> > >> > > > > > > > sections
> > >> > > > > > > > > >>>> of
> > >> > > > > > > > > >>>> > code
> > >> > > > > > > > > >>>> > > > that would handle each annotation along
> with
> > >> the
> > >> > > > methods
> > >> > > > > > > that
> > >> > > > > > > > > get
> > >> > > > > > > > > >>>> > called
> > >> > > > > > > > > >>>> > > > from the ignite branch I'm working from.
> > >> Hopefully
> > >> > > > this
> > >> > > > > > > helps.
> > >> > > > > > > > > >>>> The key
> > >> > > > > > > > > >>>> > is
> > >> > > > > > > > > >>>> > > > specified from the CacheConfig annotation
> but
> > >> this
> > >> > > can
> > >> > > > > be
> > >> > > > > > > > > changed
> > >> > > > > > > > > >>>> if
> > >> > > > > > > > > >>>> > > there
> > >> > > > > > > > > >>>> > > > is a better way to represent the key. By
> > >> default
> > >> > it
> > >> > > > uses
> > >> > > > > > > this
> > >> > > > > > > > > >>>> > > > DefaultCacheKeyGenerator(
> > >> > > > > > > > > >>>> > > >
> > >> > > > > > > > > >>>> > > >
> > >> > > > > > > > > >>>> > >
> > >> > > > > > > > > >>>> >
> > >> > > > > > > > > >>>>
> > >> > > > > > > > >
> > >> https://github.com/micronaut-projects/micronaut-cache/blob/
> > >> > > > > > > > master/cache-core/src/main/java/io/micronaut/cache/
> > >> > interceptor/
> > >> > > > > > > > DefaultCacheKeyGenerator.java
> > >> > > > > > > > > >>>> > > > ).
> > >> > > > > > > > > >>>> > > >
> > >> > > > > > > > > >>>> > > >
> > >> > > > > > > > > >>>> > > > I also finished up this document on sunday:
> > >> > > > > > > > > >>>> > > >
> > >> > > > > > > > > >>>> >
> > >> > > > > > > > > >>>>
> > >> > > > > > > > >
> > >> > > > > > >
> > >> > > > >
> > >> > >
> > >>
> > https://cwiki.apache.org/confluence/display/IGNITE/Micronaut+Integration
> > >> > > > > > > > > >>>> > > .
> > >> > > > > > > > > >>>> > > > Any suggestions with what I could expand on
> > and
> > >> > how
> > >> > > > this
> > >> > > > > > > could
> > >> > > > > > > > > be
> > >> > > > > > > > > >>>> > > adjusted.
> > >> > > > > > > > > >>>> > > >
> > >> > > > > > > > > >>>> > > > Cacheable:
> > >> > > > > > > > > >>>> > > >
> > >> > > > > > > > > >>>> > > > For Cacheable it will run a get and issue a
> > >> put if
> > >> > > the
> > >> > > > > > value
> > >> > > > > > > > is
> > >> > > > > > > > > >>>> not
> > >> > > > > > > > > >>>> > > present
> > >> > > > > > > > > >>>> > > > in the cache.
> > >> > > > > > > > > >>>> > > >
> > >> > > > > > > > > >>>> > > > -> micronaut-cache:
> > >> > > > > > > > > >>>> > > >
> > >> > > > > > > > > >>>> > > >
> > >> > > > > > > > > >>>> > >
> > >> > > > > > > > > >>>> >
> > >> > > > > > > > > >>>>
> > >> > > > > > > > >
> > >> https://github.com/micronaut-projects/micronaut-cache/blob/
> > >> > > > > > > > master/cache-core/src/main/java/io/micronaut/cache/
> > >> > > > > > > > interceptor/CacheInterceptor.java#L163-L170
> > >> > > > > > > > > >>>> > > > -> ignite-cache:
> > >> > > > > > > > > >>>> > > >   get:
> > >> > > > > > > > > >>>> > > >
> > >> > > > > > > > > >>>> > > >
> > >> > > > > > > > > >>>> > >
> > >> > > > > > > > > >>>> >
> > >> > > > > > > > > >>>>
> > >> > > > > > > > >
> > https://github.com/pollend/micronaut-ignite/blob/feature/
> > >> > > > > > > > rework/ignite-cache/src/main/java/io/micronaut/ignite/
> > >> > > > > > > > IgniteSyncCache.java#L60-L70
> > >> > > > > > > > > >>>> > > >
> > >> > > > > > > > > >>>> > > > CachePut:
> > >> > > > > > > > > >>>> > > >
> > >> > > > > > > > > >>>> > > > For cache put it will invalidate if the
> > return
> > >> is
> > >> > > null
> > >> > > > > > else
> > >> > > > > > > it
> > >> > > > > > > > > >>>> will
> > >> > > > > > > > > >>>> > > issue a
> > >> > > > > > > > > >>>> > > > put. I think there might be a mistake in my
> > >> code
> > >> > > > > because I
> > >> > > > > > > use
> > >> > > > > > > > > >>>> > > putIfAbsent
> > >> > > > > > > > > >>>> > > > for both cases. I need to investigate that
> > >> closer
> > >> > > and
> > >> > > > > > write
> > >> > > > > > > > some
> > >> > > > > > > > > >>>> > > additional
> > >> > > > > > > > > >>>> > > > test cases to verify the behaviour.
> > >> > > > > > > > > >>>> > > >
> > >> > > > > > > > > >>>> > > > --> micronaut-cache:
> > >> > > > > > > > > >>>> > > >
> > >> > > > > > > > > >>>> > > >
> > >> > > > > > > > > >>>> > >
> > >> > > > > > > > > >>>> >
> > >> > > > > > > > > >>>>
> > >> > > > > > > > >
> > >> https://github.com/micronaut-projects/micronaut-cache/blob/
> > >> > > > > > > > master/cache-core/src/main/java/io/micronaut/cache/
> > >> > > > > > > > interceptor/CacheInterceptor.java#L510-L525
> > >> > > > > > > > > >>>> > > > -> ignite-cache:
> > >> > > > > > > > > >>>> > > > put:
> > >> > > > > > > > > >>>> > > >
> > >> > > > > > > > > >>>> > > >
> > >> > > > > > > > > >>>> > >
> > >> > > > > > > > > >>>> >
> > >> > > > > > > > > >>>>
> > >> > > > > > > > >
> > https://github.com/pollend/micronaut-ignite/blob/feature/
> > >> > > > > > > > rework/ignite-cache/src/main/java/io/micronaut/ignite/
> > >> > > > > > > > IgniteSyncCache.java#L83-L88
> > >> > > > > > > > > >>>> > > > invalidate:
> > >> > > > > > > > > >>>> > > >
> > >> > > > > > > > > >>>> > > >
> > >> > > > > > > > > >>>> > >
> > >> > > > > > > > > >>>> >
> > >> > > > > > > > > >>>>
> > >> > > > > > > > >
> > https://github.com/pollend/micronaut-ignite/blob/feature/
> > >> > > > > > > > rework/ignite-cache/src/main/java/io/micronaut/ignite/
> > >> > > > > > > > IgniteSyncCache.java#L91-L95
> > >> > > > > > > > > >>>> > > >
> > >> > > > > > > > > >>>> > > > CacheInvalidate:
> > >> > > > > > > > > >>>> > > >
> > >> > > > > > > > > >>>> > > > for cache invalidation it will just be
> > removed
> > >> by
> > >> > > the
> > >> > > > > key.
> > >> > > > > > > > > >>>> > > >
> > >> > > > > > > > > >>>> > > > --> micronaut-cache:
> > >> > > > > > > > > >>>> > > >
> > >> > > > > > > > > >>>> > > >
> > >> > > > > > > > > >>>> > >
> > >> > > > > > > > > >>>> >
> > >> > > > > > > > > >>>>
> > >> > > > > > > > >
> > >> https://github.com/micronaut-projects/micronaut-cache/blob/
> > >> > > > > > > > master/cache-core/src/main/java/io/micronaut/cache/
> > >> > > > > > > > interceptor/CacheInterceptor.java#L590-L596
> > >> > > > > > > > > >>>> > > > -> ignite-cache:
> > >> > > > > > > > > >>>> > > > invalidate:
> > >> > > > > > > > > >>>> > > >
> > >> > > > > > > > > >>>> > > >
> > >> > > > > > > > > >>>> > >
> > >> > > > > > > > > >>>> >
> > >> > > > > > > > > >>>>
> > >> > > > > > > > >
> > https://github.com/pollend/micronaut-ignite/blob/feature/
> > >> > > > > > > > rework/ignite-cache/src/main/java/io/micronaut/ignite/
> > >> > > > > > > > IgniteSyncCache.java#L91-L95
> > >> > > > > > > > > >>>> > > >
> > >> > > > > > > > > >>>> > > >
> > >> > > > > > > > > >>>> > > >
> > >> > > > > > > > > >>>> > > > On Mon, Aug 17, 2020 at 5:23 PM Saikat
> > Maitra <
> > >> > > > > > > > > >>>> saikat.mai...@gmail.com
> > >> > > > > > > > > >>>> > >
> > >> > > > > > > > > >>>> > > > wrote:
> > >> > > > > > > > > >>>> > > >
> > >> > > > > > > > > >>>> > > > > Hi Michael,
> > >> > > > > > > > > >>>> > > > >
> > >> > > > > > > > > >>>> > > > > In the Example Cacheable Object you are
> > using
> > >> > > > > @CachePut,
> > >> > > > > > > > > >>>> @Cacheable
> > >> > > > > > > > > >>>> > > > > annotations and @CacheInvalidate
> > annotations
> > >> > and I
> > >> > > > was
> > >> > > > > > > > trying
> > >> > > > > > > > > to
> > >> > > > > > > > > >>>> > > > understand
> > >> > > > > > > > > >>>> > > > > when user use these annotation then what
> > >> would
> > >> > be
> > >> > > > the
> > >> > > > > > > > > underlying
> > >> > > > > > > > > >>>> > Ignite
> > >> > > > > > > > > >>>> > > > > operation that will happen? and how those
> > >> > > operations
> > >> > > > > are
> > >> > > > > > > > > >>>> performed?
> > >> > > > > > > > > >>>> > > > >
> > >> > > > > > > > > >>>> > > > > An example like when user call this below
> > >> method
> > >> > > > then
> > >> > > > > > how
> > >> > > > > > > > the
> > >> > > > > > > > > >>>> result
> > >> > > > > > > > > >>>> > of
> > >> > > > > > > > > >>>> > > > > getValue is cached?
> > >> > > > > > > > > >>>> > > > >
> > >> > > > > > > > > >>>> > > > > @Cacheable
> > >> > > > > > > > > >>>> > > > >     int getValue(String name) {
> > >> > > > > > > > > >>>> > > > >         return
> > >> counters.computeIfAbsent(name, {
> > >> > 0
> > >> > > })
> > >> > > > > > > > > >>>> > > > >     }
> > >> > > > > > > > > >>>> > > > >
> > >> > > > > > > > > >>>> > > > >
> > >> > > > > > > > > >>>> > > > > Regards,
> > >> > > > > > > > > >>>> > > > > Saikat
> > >> > > > > > > > > >>>> > > > >
> > >> > > > > > > > > >>>> > > > > On Sat, Aug 15, 2020 at 7:21 PM Michael
> > >> Pollind
> > >> > <
> > >> > > > > > > > > >>>> mpoll...@gmail.com>
> > >> > > > > > > > > >>>> > > > > wrote:
> > >> > > > > > > > > >>>> > > > >
> > >> > > > > > > > > >>>> > > > > > when you mean these annotations do you
> > mean
> > >> > this
> > >> > > > > would
> > >> > > > > > > > need
> > >> > > > > > > > > >>>> to be
> > >> > > > > > > > > >>>> > > > > > implemented in ignite?
> > >> > > > > > > > > >>>> > > > > >
> > >> > > > > > > > > >>>> > > > > > The project at the moment is split into
> > >> > multiple
> > >> > > > > > > modules.
> > >> > > > > > > > > >>>> > > ignite-core,
> > >> > > > > > > > > >>>> > > > > > ignite-cache, etc ... The plan was to
> > also
> > >> > have
> > >> > > > > > > > ignite-data
> > >> > > > > > > > > >>>> but
> > >> > > > > > > > > >>>> > that
> > >> > > > > > > > > >>>> > > > will
> > >> > > > > > > > > >>>> > > > > > take a bit of work to get working
> > correctly
> > >> > but
> > >> > > > the
> > >> > > > > > > basic
> > >> > > > > > > > > >>>> config is
> > >> > > > > > > > > >>>> > > > > mostly
> > >> > > > > > > > > >>>> > > > > > done. The plan is also to verify the
> API
> > >> > > described
> > >> > > > > in
> > >> > > > > > > the
> > >> > > > > > > > > >>>> wiki and
> > >> > > > > > > > > >>>> > > make
> > >> > > > > > > > > >>>> > > > > > sure this is what would work best. At
> the
> > >> > moment
> > >> > > > I'm
> > >> > > > > > > > missing
> > >> > > > > > > > > >>>> an
> > >> > > > > > > > > >>>> > > > > > implementation for the thin-cache and
> how
> > >> that
> > >> > > > would
> > >> > > > > > fit
> > >> > > > > > > > > into
> > >> > > > > > > > > >>>> this
> > >> > > > > > > > > >>>> > > > > scheme.
> > >> > > > > > > > > >>>> > > > > > I've removed it due to the added
> > complexity
> > >> > but
> > >> > > > I'm
> > >> > > > > > sure
> > >> > > > > > > > > >>>> something
> > >> > > > > > > > > >>>> > > > could
> > >> > > > > > > > > >>>> > > > > be
> > >> > > > > > > > > >>>> > > > > > arranged that would work.
> > >> > > > > > > > > >>>> > > > > >
> > >> > > > > > > > > >>>> > > > > > For Ignite-cache, I have it as a
> separate
> > >> > module
> > >> > > > > that
> > >> > > > > > > can
> > >> > > > > > > > be
> > >> > > > > > > > > >>>> > > optionally
> > >> > > > > > > > > >>>> > > > > > included in a micronaut project where
> > this
> > >> > > module
> > >> > > > > also
> > >> > > > > > > > has a
> > >> > > > > > > > > >>>> > > dependency
> > >> > > > > > > > > >>>> > > > > on
> > >> > > > > > > > > >>>> > > > > > micronaut-cache. The AsyncCache and
> > >> SyncCache
> > >> > > are
> > >> > > > > the
> > >> > > > > > > two
> > >> > > > > > > > > >>>> > interfaces
> > >> > > > > > > > > >>>> > > > that
> > >> > > > > > > > > >>>> > > > > > micronaut-cache defines. There are two
> > >> ways to
> > >> > > > > define
> > >> > > > > > > the
> > >> > > > > > > > > >>>> > > > implementation,
> > >> > > > > > > > > >>>> > > > > > you can either provide beans for
> > AsyncCache
> > >> > and
> > >> > > > > > > SyncCache
> > >> > > > > > > > > but
> > >> > > > > > > > > >>>> they
> > >> > > > > > > > > >>>> > > also
> > >> > > > > > > > > >>>> > > > > > define a DynamicCacheManager that will
> > use
> > >> the
> > >> > > > name
> > >> > > > > of
> > >> > > > > > > the
> > >> > > > > > > > > >>>> instance
> > >> > > > > > > > > >>>> > > to
> > >> > > > > > > > > >>>> > > > > > refer to the name of the cache used. In
> > the
> > >> > > > > > > documentation
> > >> > > > > > > > I
> > >> > > > > > > > > >>>> believe
> > >> > > > > > > > > >>>> > > for
> > >> > > > > > > > > >>>> > > > > > Teracotta you give a list of caches you
> > >> want
> > >> > and
> > >> > > >
> > >> >
> > >> >
> > >>
> > >> --
> > >> -
> > >> Denis
> > >>
> > >
> >
>

Reply via email to