Great stuff ! I looked at your branch and the fix and the testcases look really neat :)
This community rocks ! Kristian 2016-06-14 2:57 GMT+02:00 Alexey Goncharuk <[email protected]>: > Kristian, > > Got it, thank you for reporting this. Your expectations are correct, there > is an issue with handling of SYNC rebalance mode for dynamically started > cache. If your cache was set in IgniteConfiguration, you would get correct > size without calling rebalance().get(); > > I created an issue [1] with a fix and currently waiting for CI results. If > all ok, the fix will be merged to master shortly. > > [1] https://issues.apache.org/jira/browse/IGNITE-3305 > > --AG > > 2016-06-13 11:38 GMT-07:00 Kristian Rosenvold <[email protected]>: >> >> Alexey, >> >> we were discussing what was happening in the 10-20 seconds while the >> cache was being replicated, to find out if any inconsistencies could >> occur in this window. So I started a first node with a known number of >> elements, say 1 million. The testcase I showed in the first code was >> then started as a second replicated node, also with SYNC mode. The >> assertion failed miserably, and neither did a "get" operation block. >> But I did not check what Denis said, that a "get" of an element >> existing in the other node would simply be satisfied by the remote; I >> only did a get for a non-existant element. And the size grew in the >> 10-20 seonds after starting the cache until it reached 1 million. >> >> >So either a cache was created by this call and it's size is equal to >> > zero, or it was created prior to this call >and cache size must be the same >> > on all nodes in SYNC mode. >> >> This is the latter case, but it does not appear to behave the way you >> describe. So the second node is basically *started* when the first >> node is up and running with its 1 million cache nodes. The only way I >> could ensure the consistency (I think) you're describing was by doing >> an explicit call to cache.rebalance().get() on the new node. >> >> Kristian >> >> >> 2016-06-13 20:03 GMT+02:00 Alexey Goncharuk <[email protected]>: >> > Kristian, >> > >> > I am a little bit confused by the example you provided in your first >> > e-mail. >> > From the code I see that you create a cache dynamically by calling >> > getOrCreateCache, and the next line asserts that cache size is equal to >> > a >> > knownRemoteCacheSize. This does not make sense to me because cache >> > creation >> > is a distributed operation and it is created on all nodes at once. So >> > either >> > a cache was created by this call and it's size is equal to zero, or it >> > was >> > created prior to this call and cache size must be the same on all nodes >> > in >> > SYNC mode. >> > >> > More specifically, SYNC rebalance mode means that Ignition.start() and >> > all >> > public Cache API calls will be blocked until after rebalancing for such >> > a >> > cache is finished. >> > >> > --AG > >
