keycloak
公開メンバ関数 | 非公開メンバ関数 | 全メンバ一覧
org.keycloak.cluster.infinispan.InfinispanClusterProviderFactory.ViewChangeListener クラス
org.keycloak.cluster.infinispan.InfinispanClusterProviderFactory.ViewChangeListener 連携図
Collaboration graph

公開メンバ関数

void viewChanged (ViewChangedEvent event)
 

非公開メンバ関数

Set< String > convertAddresses (Collection< Address > addresses)
 

詳解

関数詳解

◆ convertAddresses()

Set<String> org.keycloak.cluster.infinispan.InfinispanClusterProviderFactory.ViewChangeListener.convertAddresses ( Collection< Address >  addresses)
inlineprivate
240  {
241  return addresses.stream().map(new Function<Address, String>() {
242 
243  @Override
244  public String apply(Address address) {
245  return address.toString();
246  }
247 
248  }).collect(Collectors.toSet());
249  }

◆ viewChanged()

void org.keycloak.cluster.infinispan.InfinispanClusterProviderFactory.ViewChangeListener.viewChanged ( ViewChangedEvent  event)
inline
186  {
187  EmbeddedCacheManager cacheManager = event.getCacheManager();
188  Transport transport = cacheManager.getTransport();
189 
190  // Coordinator makes sure that entries for outdated nodes are cleaned up
191  if (transport != null && transport.isCoordinator()) {
192 
193  Set<String> newAddresses = convertAddresses(event.getNewMembers());
194  Set<String> removedNodesAddresses = convertAddresses(event.getOldMembers());
195  removedNodesAddresses.removeAll(newAddresses);
196 
197  if (removedNodesAddresses.isEmpty()) {
198  return;
199  }
200 
201  logger.debugf("Nodes %s removed from cluster. Removing tasks locked by this nodes", removedNodesAddresses.toString());
202 
203  Cache<String, Serializable> cache = cacheManager.getCache(InfinispanConnectionProvider.WORK_CACHE_NAME);
204 
205  Iterator<String> toRemove = cache.entrySet().stream().filter(new Predicate<Map.Entry<String, Serializable>>() {
206 
207  @Override
208  public boolean test(Map.Entry<String, Serializable> entry) {
209  if (!(entry.getValue() instanceof LockEntry)) {
210  return false;
211  }
212 
213  LockEntry lock = (LockEntry) entry.getValue();
214  return removedNodesAddresses.contains(lock.getNode());
215  }
216 
217  }).map(new Function<Map.Entry<String, Serializable>, String>() {
218 
219  @Override
220  public String apply(Map.Entry<String, Serializable> entry) {
221  return entry.getKey();
222  }
223 
224  }).iterator();
225 
226  while (toRemove.hasNext()) {
227  String rem = toRemove.next();
228  if (logger.isTraceEnabled()) {
229  logger.tracef("Removing task %s due it's node left cluster", rem);
230  }
231 
232  // If we have task in progress, it needs to be notified
234 
235  cache.remove(rem);
236  }
237  }
238  }
void taskFinished(String taskKey, boolean success)
Definition: InfinispanNotificationsManager.java:285
InfinispanNotificationsManager notificationsManager
Definition: InfinispanClusterProviderFactory.java:74
static final Logger logger
Definition: InfinispanClusterProviderFactory.java:63
Set< String > convertAddresses(Collection< Address > addresses)
Definition: InfinispanClusterProviderFactory.java:240

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