/** * Discovery event callback, executed from discovery thread. * * @param type Event type. * @param node Event node. * @param topVer Topology version. */ public void onDiscoveryEvent(int type, ClusterNode node, AffinityTopologyVersion topVer) { if (type == EVT_NODE_JOINED && !ctx.isDaemon()) { for (CacheGroupDescriptor desc : registeredCacheGrps.values()) { if (node.id().equals(desc.receivedFrom())) desc.receivedFromStartVersion(topVer); } for (DynamicCacheDescriptor desc : registeredCaches.values()) { if (node.id().equals(desc.receivedFrom())) desc.receivedFromStartVersion(topVer); } for (DynamicCacheDescriptor desc : registeredTemplates.values()) { if (node.id().equals(desc.receivedFrom())) desc.receivedFromStartVersion(topVer); } if (node.id().equals(ctx.discovery().localNode().id())) { if (gridData == null) { // First node starts. assert joinDiscoData != null; initStartCachesForLocalJoin(true, false); } } } }
/** * @param desc Cache group descriptor. * @param aff Affinity. * @param fut Exchange future. * @return {@code True} if local node can calculate affinity on it's own for this partition map exchange. */ private boolean canCalculateAffinity(CacheGroupDescriptor desc, GridAffinityAssignmentCache aff, GridDhtPartitionsExchangeFuture fut) { assert desc != null : aff.cacheOrGroupName(); // Do not request affinity from remote nodes if affinity function is not centralized. if (!aff.centralizedAffinityFunction()) return true; // If local node did not initiate exchange or local node is the only cache node in grid. Collection<ClusterNode> affNodes = fut.events().discoveryCache().cacheGroupAffinityNodes(aff.groupId()); return fut.cacheGroupAddedOnExchange(aff.groupId(), desc.receivedFrom()) || !fut.exchangeId().nodeId().equals(cctx.localNodeId()) || (affNodes.isEmpty() || (affNodes.size() == 1 && affNodes.contains(cctx.localNode()))); }
grpDesc.groupName(), grpDesc.groupId(), grpDesc.receivedFrom(), grpDesc.startTopologyVersion(), grpDesc.deploymentId(),
/** * Discovery event callback, executed from discovery thread. * * @param type Event type. * @param node Event node. * @param topVer Topology version. */ public void onDiscoveryEvent(int type, ClusterNode node, AffinityTopologyVersion topVer) { if (type == EVT_NODE_JOINED && !ctx.isDaemon()) { for (CacheGroupDescriptor desc : registeredCacheGrps.values()) { if (node.id().equals(desc.receivedFrom())) desc.receivedFromStartVersion(topVer); } for (DynamicCacheDescriptor desc : registeredCaches.values()) { if (node.id().equals(desc.receivedFrom())) desc.receivedFromStartVersion(topVer); } for (DynamicCacheDescriptor desc : registeredTemplates.values()) { if (node.id().equals(desc.receivedFrom())) desc.receivedFromStartVersion(topVer); } if (node.id().equals(ctx.discovery().localNode().id())) { if (gridData == null) { // First node starts. assert joinDiscoData != null; initStartCachesForLocalJoin(true, false); } } } }
/** * @param desc First descriptor. * @param desc0 Second descriptor. */ private void checkGroupDescriptorsData(CacheGroupDescriptor desc, CacheGroupDescriptor desc0) { assertEquals(desc.groupName(), desc0.groupName()); assertEquals(desc.sharedGroup(), desc0.sharedGroup()); assertEquals(desc.deploymentId(), desc0.deploymentId()); assertEquals(desc.receivedFrom(), desc0.receivedFrom()); assertEquals(desc.startTopologyVersion(), desc0.startTopologyVersion()); assertEquals(desc.config().getName(), desc0.config().getName()); assertEquals(desc.config().getGroupName(), desc0.config().getGroupName()); assertEquals(desc.caches(), desc0.caches()); }
(fut.cacheGroupAddedOnExchange(desc.groupId(), desc.receivedFrom()) && !enforcedCentralizedAssignment)) return;
desc.receivedFrom(), cacheType, cfg,
/** * @param desc Cache group descriptor. * @param aff Affinity. * @param fut Exchange future. * @return {@code True} if local node can calculate affinity on it's own for this partition map exchange. */ private boolean canCalculateAffinity(CacheGroupDescriptor desc, GridAffinityAssignmentCache aff, GridDhtPartitionsExchangeFuture fut) { assert desc != null : aff.cacheOrGroupName(); // Do not request affinity from remote nodes if affinity function is not centralized. if (!aff.centralizedAffinityFunction()) return true; // If local node did not initiate exchange or local node is the only cache node in grid. Collection<ClusterNode> affNodes = fut.events().discoveryCache().cacheGroupAffinityNodes(aff.groupId()); return fut.cacheGroupAddedOnExchange(aff.groupId(), desc.receivedFrom()) || !fut.exchangeId().nodeId().equals(cctx.localNodeId()) || (affNodes.isEmpty() || (affNodes.size() == 1 && affNodes.contains(cctx.localNode()))); }
grpDesc.groupName(), grpDesc.groupId(), grpDesc.receivedFrom(), grpDesc.startTopologyVersion(), grpDesc.deploymentId(),
desc.receivedFrom(), cacheType, cfg,