For our case, we have a stateful instance associated with each user session, that actually handles user requests. That stateful instance is usually long-lived. In this case, we want the data for that instance to be stored on other nodes - at the dispatch stage, we choose a node to host the session such that it isn't in the primary or backup nodes for the selected partition. In the case we lose that node, we can always recover our state on a new node from the data stored.
Short-lived case is less interesting... in this case we dispatch to the primary node and thus there is affinity for doing the replay. Due to limitations in how cache groups work (whereby new caches still result in PME), we have our own implementation there for storing logically separated data in the same cache - we then have a garbage cleanup phase which can evaluate expired/terminated sessions and clean out the cache. That process is all done locally - in other words, a primary node is able to determine which sessions need cleaning and clean out the data all locally. -- Sent from: http://apache-ignite-developers.2346864.n4.nabble.com/