Description
Issue is found by QA, scenario:
- start one node with configuration for igfs (includes igfs data and meta caches)
- start second node without cache configuration, igfs data and meta caches start on this node
- try to use igfs, get error on second node:
Caused by: class org.apache.ignite.IgniteCheckedException: Failed to enlist new cache to existing transaction (cache configurations are not compatible) [activeCaches=[], cacheName=dataCache, cacheSystem=false, txSystem=true] at org.apache.ignite.internal.processors.cache.transactions.IgniteTxLocalAdapter.addActiveCache(IgniteTxLocalAdapter.java:3079) at org.apache.ignite.internal.processors.cache.distributed.dht.GridDhtTxLocalAdapter.addEntry(GridDhtTxLocalAdapter.java:463) at org.apache.ignite.internal.processors.cache.distributed.dht.GridDhtTxLocal.prepareAsync(GridDhtTxLocal.java:442)
Added simple test reproducing issue IgsfStartCacheTest.
When cache processor starts igfs caches specified in configuration then these caches are marked as 'system', but when caches are dynamically started on second node these caches do not have 'system' flag.
For me looks like GridCacheProcessor adds igfs and hadoop caches to 'sysCaches' collection to distinguish public caches and caches which can not be obtained from public API (e.g. Ignite.cache(cacheName)). But in code I see that for 'system' caches events are not recorded and 'utility cache pool' is used. I think 'utility cache pool' should not be used for igfs and hadoop caches.