Hi Stan, Could you please elaborate more on this point "*but if cache configured with write-through or read-through modes enabled then data consistency between Ignite persistence and CacheStore is not guaranteed at all times*" .
If I have enabled ignite persistence and my cache is also read-through and write-through then why does it not guarantee 100% data consistency? Thanks, Prasad On Wed, Feb 21, 2018 at 7:29 PM, Stanislav Lukyanov <[email protected]> wrote: > Sorry, I wasn’t completely correct. Persistence and CacheStore can work > together, but if cache configured with write-through or read-through modes > enabled then data consistency between Ignite persistence and CacheStore is > not guaranteed at all times, so such configurations are usually avoided. > However, from what you’re saying it seems that you don’t need write-through > or read-through, so it should work fine. > > Your solution seems OK. If you only need a one-time setup I guess you > could also do it without a CacheStore and just get the data from Oracle and > put it into Ignite via putAll or DataStreamer. > > > > Thanks, > > Stan > > > > *From: *Prasad Bhalerao <[email protected]> > *Sent: *21 февраля 2018 г. 14:33 > *To: *[email protected] > *Subject: *Re: Using 3rd party DB together with native persistence (WAS: > GettingInvalid state exception when Persistance is enabled.) > > > > Hi Stan, > > > > Thank you for the reply. I will send different questions separately now > onwards. > > > > I do not understand what are you trying to say ( "*Ignite doesn’t support > using 3rd party DBs and native persistence with the same cache*" ) . > > > > If the persistence is enabled and if you create or load the cache from 3rd > party DB or any other source, data is always stored/backed in ignite native > persistence store. > > > > I have enable the persistence using IgniteConfiguration. I believe that > this configuration is global and so it is applicable to all the caches I > have created. As per my understanding, if persistence is enabled any cache > created will be stored/backed in ignite persistence store. > > So now if I load the data in cache from oracle or any other DB table, it > will be persisted in ignite native persistence file system. The point is I > want to load the cache from oracle tables only first time or when the cache > is empty. To load the cache from 3rd party DB I am using cache.loadCache > method. > > > > I am checking cache size, if the size is zero I call loadCache method. If > the cache is not empty it means that data is already loaded in previous > attempt so no need to call loadCache method. > > I just wanted to know if there is any better solution to achieve this. > > > > > > Thanks, > > Prasad > > > > On Wed, Feb 21, 2018 at 1:33 PM, Stanislav Lukyanov < > [email protected]> wrote: > > Hi Prasad, > > > > // Please send different questions separately – this way it’s easier to > answer and to search for existing answers > > > > > Also, I am loading the cache from oracle table using loadCache method. > If the persistence is enabled and if the data is already persisted, I want > to make sure that the cache is loaded from persisted data instead of > loading it from oracle table using loadCache. Can someone please advise how > this can be achieved? > > > > > > Ignite doesn’t support using 3rd party DBs and native persistence with the > same cache. > > If you need to use both, I’d suggest to create two caches, one backed by > Oracle and one with enabled Ignite persistence, and alternate between them > in your application code. > > > > Thanks, > > Stan > > > > *From: *Prasad Bhalerao <[email protected]> > *Sent: *20 февраля 2018 г. 15:24 > *To: *[email protected] > *Subject: *Getting Invalid state exception when Persistance is enabled. > > > > Hi, > > > > I am starting ignite node in server mode in intellij. I am starting only > one instance of it. I am using IgniteSpringBean to set configuration and > start the node as shown below. But when I enable persistence, I get > following exception. > > > > Caused by: java.lang.IllegalStateException: Ignite is in invalid state to > perform this operation. It either not started yet or has already being or > have stopped [ignite=null, cfg=null] > > > > As per the doc, IgniteSpringBean is responsible for starting the ignite. > So how to set node to active state in case this case? > > > > Also, I am loading the cache from oracle table using loadCache method. If > the persistence is enabled and if the data is already persisted, I want to > make sure that the cache is loaded from persisted data instead of loading > it from oracle table using loadCache. Can someone please advise how this > can be achieved? > > > > Code to config ignite and cache: > > > > @Bean > *public *IgniteSpringBean igniteInstance() { > IgniteSpringBean ignite = *new *IgniteSpringBean(); > *ignite.active(**true**);* > ignite.setConfiguration(getIgniteConfiguration()); > > *return *ignite; > } > > *private *IgniteConfiguration getIgniteConfiguration() { > > String HOST = *"127.0.0.1:47500..47509"*; > TcpDiscoveryVmIpFinder ipFinder = *new *TcpDiscoveryVmIpFinder(); > ipFinder.setAddresses(Collections.*singletonList*(HOST)); > > TcpDiscoverySpi discoSpi = *new *TcpDiscoverySpi(); > discoSpi.setIpFinder(ipFinder); > > IgniteConfiguration cfg = *new *IgniteConfiguration(); > cfg.setDiscoverySpi(discoSpi); > cfg.setIgniteInstanceName(*"springDataNode"*); > cfg.setPeerClassLoadingEnabled(*false*); > cfg.setRebalanceThreadPoolSize(4); > > * DataStorageConfiguration storageCfg = **new * > *DataStorageConfiguration(); > storageCfg.getDefaultDataRegionConfiguration().setPersistenceEnabled(**true* > *); cfg.setDataStorageConfiguration(storageCfg);* > > CacheConfiguration<IPRangeDataKey, IPV4RangeData> ipv4RangeCacheCfg = > *new *CacheConfiguration<>(*"IPV4RangeCache"*); > ipv4RangeCacheCfg.setAtomicityMode(CacheAtomicityMode.*TRANSACTIONAL*); > ipv4RangeCacheCfg.setWriteThrough(*false*); > ipv4RangeCacheCfg.setReadThrough(*false*); > ipv4RangeCacheCfg.setRebalanceMode(CacheRebalanceMode.*ASYNC*); > > ipv4RangeCacheCfg.setWriteSynchronizationMode(CacheWriteSynchronizationMode.*FULL_SYNC*); > ipv4RangeCacheCfg.setBackups(1); > Factory<IPV4RangeCacheDataLoader> storeFactory = > FactoryBuilder.*factoryOf*(IPV4RangeCacheDataLoader.*class*); > ipv4RangeCacheCfg.setCacheStoreFactory(storeFactory); > > cfg.setCacheConfiguration(ipv4RangeCacheCfg); > *return *cfg; > } > > > > Thanks, > > Prasad > > > > > > > > > > >
