Igniters,
I'd like to discuss with you some thoughts about getting colocated data [1] from nodes via thin client (mostly the java thin client). - We do have partition awareness enabled for non-transactional data [2]. - We do have from now on partition awareness for caches with custom affinity functions [3]. - We do NOT have an option to execute a transactional operation on affinity node [4], however, I think it is possilbe to send a transactional get request over the affinity channels instead of the default one. The process execution on the thin client side may looks like: open transaction (colocated get request) -> set the right client context -> pick up the affinity node channel (instead of the default one) -> send the request over this channel right to the destination primaries. The interface improvement may looks like: IgniteClient { public void withAffinityNode(String cacheName, Object affKey); } IgniteClient affClient = Ignition.startClient(new ClientConfiguration() .setAddresses("node1_address:10800", "node2_address:10800", "node3_address:10800")) .withAffinityNode("person", "affKey"); try (ClientTransaction tx = affClient.transactions().txStart() ) { ClientCache<Integer, String> personCache = affClient.cache("person"); ClientCache<Integer, String> paymentsCache = affClient.cache("payments"); // personCache.get("affKey"); // paymentsCache.get(..); } catch (ClientException e) { // Ignore. } Additional benefits: - ScanQuery, SqlQuery with #setLocal(true) flag right on the required affinity channel; - ClientCompute task right on the required affinity channel; WDYT? [1] https://ignite.apache.org/docs/latest/data-modeling/affinity-collocation#affinity-colocation [2] https://ignite.apache.org/docs/latest/thin-clients/getting-started-with-thin-clients#partition-awareness [3] https://issues.apache.org/jira/browse/IGNITE-17316 [4] https://github.com/apache/ignite/blob/master/modules/core/src/main/java/org/apache/ignite/internal/client/thin/TcpClientCache.java#L994