keycloak
公開メンバ関数 | 非公開メンバ関数 | 静的非公開メンバ関数 | 非公開変数類 | 静的非公開変数類 | 全メンバ一覧
org.keycloak.connections.infinispan.TopologyInfo クラス
org.keycloak.connections.infinispan.TopologyInfo 連携図
Collaboration graph

公開メンバ関数

 TopologyInfo (EmbeddedCacheManager cacheManager, Config.Scope config, boolean embedded)
 
String getMyNodeName ()
 
String getMySiteName ()
 
String toString ()
 
boolean amIOwner (Cache cache, Object key)
 
String getRouteName (Cache cache, Object key)
 

非公開メンバ関数

String generateNodeName ()
 
Address getOwnerAddress (Cache cache, Object key)
 

静的非公開メンバ関数

static org.jgroups.Address toJGroupsAddress (Address address)
 

非公開変数類

final String myNodeName
 
final String mySiteName
 
final boolean isGeneratedNodeName
 

静的非公開変数類

static final Logger logger = Logger.getLogger(TopologyInfo.class)
 

詳解

著者
Marek Posolda

構築子と解体子

◆ TopologyInfo()

org.keycloak.connections.infinispan.TopologyInfo.TopologyInfo ( EmbeddedCacheManager  cacheManager,
Config.Scope  config,
boolean  embedded 
)
inline
58  {
59  String siteName;
60  String nodeName;
61  boolean isGeneratedNodeName = false;
62 
63  if (!embedded) {
64  Transport transport = cacheManager.getTransport();
65  if (transport != null) {
66  nodeName = transport.getAddress().toString();
67  siteName = cacheManager.getCacheManagerConfiguration().transport().siteId();
68  if (siteName == null) {
69  siteName = System.getProperty(InfinispanConnectionProvider.JBOSS_SITE_NAME);
70  }
71  } else {
72  nodeName = System.getProperty(InfinispanConnectionProvider.JBOSS_NODE_NAME);
73  siteName = System.getProperty(InfinispanConnectionProvider.JBOSS_SITE_NAME);
74  }
75  if (nodeName == null || nodeName.equals("localhost")) {
76  isGeneratedNodeName = true;
77  nodeName = generateNodeName();
78  }
79  } else {
80  boolean clustered = config.getBoolean("clustered", false);
81 
82  nodeName = config.get("nodeName", System.getProperty(InfinispanConnectionProvider.JBOSS_NODE_NAME));
83  if (nodeName != null && nodeName.isEmpty()) {
84  nodeName = null;
85  }
86 
87  siteName = config.get("siteName", System.getProperty(InfinispanConnectionProvider.JBOSS_SITE_NAME));
88  if (siteName != null && siteName.isEmpty()) {
89  siteName = null;
90  }
91 
92  if (nodeName == null) {
93  if (!clustered) {
94  isGeneratedNodeName = true;
95  nodeName = generateNodeName();
96  } else {
97  throw new IllegalStateException("You must set jboss.node.name if you use clustered mode for InfinispanConnectionProvider");
98  }
99  }
100  }
101 
102  this.myNodeName = nodeName;
103  this.mySiteName = siteName;
104  this.isGeneratedNodeName = isGeneratedNodeName;
105  }
final boolean isGeneratedNodeName
Definition: TopologyInfo.java:55
final String myNodeName
Definition: TopologyInfo.java:50
String generateNodeName()
Definition: TopologyInfo.java:108
final String mySiteName
Definition: TopologyInfo.java:53

関数詳解

◆ amIOwner()

boolean org.keycloak.connections.infinispan.TopologyInfo.amIOwner ( Cache  cache,
Object  key 
)
inline

True if I am primary owner of the key in case of distributed caches. In case of local caches, always return true

131  {
132  Address myAddress = cache.getCacheManager().getAddress();
133  Address objectOwnerAddress = getOwnerAddress(cache, key);
134 
135  // NOTE: For scattered caches, this will always return true, which may not be correct. Need to review this if we add support for scattered caches
136  return Objects.equals(myAddress, objectOwnerAddress);
137  }
Address getOwnerAddress(Cache cache, Object key)
Definition: TopologyInfo.java:181

◆ generateNodeName()

String org.keycloak.connections.infinispan.TopologyInfo.generateNodeName ( )
inlineprivate
108  {
109  return InfinispanConnectionProvider.NODE_PREFIX + new SecureRandom().nextInt(1000000);
110  }

◆ getMyNodeName()

String org.keycloak.connections.infinispan.TopologyInfo.getMyNodeName ( )
inline
113  {
114  return myNodeName;
115  }
final String myNodeName
Definition: TopologyInfo.java:50

◆ getMySiteName()

String org.keycloak.connections.infinispan.TopologyInfo.getMySiteName ( )
inline
117  {
118  return mySiteName;
119  }
final String mySiteName
Definition: TopologyInfo.java:53

◆ getOwnerAddress()

Address org.keycloak.connections.infinispan.TopologyInfo.getOwnerAddress ( Cache  cache,
Object  key 
)
inlineprivate
181  {
182  DistributionManager dist = cache.getAdvancedCache().getDistributionManager();
183  Address address = (dist != null) && !cache.getCacheConfiguration().clustering().cacheMode().isScattered() ?
184  dist.getCacheTopology().getDistribution(key).primary() :
185  cache.getCacheManager().getAddress();
186 
187  return address;
188  }

◆ getRouteName()

String org.keycloak.connections.infinispan.TopologyInfo.getRouteName ( Cache  cache,
Object  key 
)
inline

Get route to be used as the identifier for sticky session. Return null if I am not able to find the appropriate route (or in case of local mode)

143  {
144  if (cache.getCacheConfiguration().clustering().cacheMode().isClustered() && isGeneratedNodeName) {
145  logger.warn("Clustered configuration used, but node name is not properly set. Make sure to start server with jboss.node.name property identifying cluster node");
146  }
147 
148  if (isGeneratedNodeName) {
149  return null;
150  }
151 
152  // Impl based on Wildfly sticky session algorithm for generating routes ( org.wildfly.clustering.web.infinispan.session.InfinispanRouteLocator )
153  Address address = getOwnerAddress(cache, key);
154 
155  // Local mode
156  if (address == null || (address == LocalModeAddress.INSTANCE)) {
157  return myNodeName;
158  }
159 
160  org.jgroups.Address jgroupsAddress = toJGroupsAddress(address);
161  String name = NameCache.get(jgroupsAddress);
162 
163  // If no logical name exists, create one using physical address
164  if (name == null) {
165 
166  Transport transport = cache.getCacheManager().getTransport();
167  JChannel jgroupsChannel = ((JGroupsTransport) transport).getChannel();
168 
169  IpAddress ipAddress = (IpAddress) jgroupsChannel.down(new Event(Event.GET_PHYSICAL_ADDRESS, jgroupsAddress));
170  // Physical address might be null if node is no longer a member of the cluster
171  InetSocketAddress socketAddress = (ipAddress != null) ? new InetSocketAddress(ipAddress.getIpAddress(), ipAddress.getPort()) : new InetSocketAddress(0);
172  name = String.format("%s:%s", socketAddress.getHostString(), socketAddress.getPort());
173 
174  logger.debugf("Address not found in NameCache. Fallback to %s", name);
175  }
176 
177  return name;
178  }
static org.jgroups.Address toJGroupsAddress(Address address)
Definition: TopologyInfo.java:192
static final Logger logger
Definition: TopologyInfo.java:45
final boolean isGeneratedNodeName
Definition: TopologyInfo.java:55
final String myNodeName
Definition: TopologyInfo.java:50
Address getOwnerAddress(Cache cache, Object key)
Definition: TopologyInfo.java:181

◆ toJGroupsAddress()

static org.jgroups.Address org.keycloak.connections.infinispan.TopologyInfo.toJGroupsAddress ( Address  address)
inlinestaticprivate
192  {
193  if ((address == null) || (address == LocalModeAddress.INSTANCE)) return null;
194  if (address instanceof JGroupsAddress) {
195  JGroupsAddress jgroupsAddress = (JGroupsAddress) address;
196  return jgroupsAddress.getJGroupsAddress();
197  }
198  throw new IllegalArgumentException(address.toString());
199  }

◆ toString()

String org.keycloak.connections.infinispan.TopologyInfo.toString ( )
inline
123  {
124  return String.format("Node name: %s, Site name: %s", myNodeName, mySiteName);
125  }
final String myNodeName
Definition: TopologyInfo.java:50
final String mySiteName
Definition: TopologyInfo.java:53

メンバ詳解

◆ isGeneratedNodeName

final boolean org.keycloak.connections.infinispan.TopologyInfo.isGeneratedNodeName
private

◆ logger

final Logger org.keycloak.connections.infinispan.TopologyInfo.logger = Logger.getLogger(TopologyInfo.class)
staticprivate

◆ myNodeName

final String org.keycloak.connections.infinispan.TopologyInfo.myNodeName
private

◆ mySiteName

final String org.keycloak.connections.infinispan.TopologyInfo.mySiteName
private

このクラス詳解は次のファイルから抽出されました: