Also you need to sign the CLA since you add a commit to my branch. branch: https://github.com/pollend/micronaut-ignite/tree/feature/rework linked PR: https://github.com/micronaut-projects/micronaut-ignite/pull/33
-- Michael Pollind On Wed, Aug 26, 2020 at 3:29 PM Denis Magda <dma...@apache.org> wrote: > Could you share the full path to the branch? Don't want to pick a wrong one > accidentally. > > > - > Denis > > > On Wed, Aug 26, 2020 at 2:47 PM Michael Pollind <mpoll...@gmail.com> > wrote: > > > so that clears up the extra flag for micronaut-cache. just need to > > intercept the default IgniteConfiguration bean and update the > > configuration. if you pull my latest changes from the rework branch you > can > > look at the docs for that micronaut module. `./gradlew docs`. Finalizing > > the docs should be the last part of this. The configuration from my > > perspective seems pretty much there. Is there anything else that is > > missing? > > > > On Wed, Aug 26, 2020 at 1:31 PM Denis Magda <dma...@apache.org> wrote: > > > > > 👍 Nice catch! > > > > > > - > > > Denis > > > > > > > > > On Wed, Aug 26, 2020 at 12:16 PM Michael Pollind <mpoll...@gmail.com> > > > wrote: > > > > > > > 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 > > > > > > >> > > > > > > > > > > > > > > > > > > > > > > > > > > > >