public boolean trim(KBucket<T> kbucket, T toAdd) { List<T> e = new ArrayList<T>(kbucket.getEntries()); int sz = e.size(); // concurrency if (sz < _max) return true; T toRemove = e.get(_ctx.random().nextInt(sz)); kbucket.remove(toRemove); return true; } }
public boolean remove(T entry) { KBucket<T> kbucket; getReadLock(); try { kbucket = getBucket(entry); } finally { releaseReadLock(); } if (kbucket == null) // us return false; boolean removed = kbucket.remove(entry); return removed; }
public boolean trim(KBucket<NID> kbucket, NID toAdd) { long now = _ctx.clock().now(); if (kbucket.getLastChanged() > now - MIN_BUCKET_AGE) return false; Set<NID> entries = kbucket.getEntries(); for (NID nid : entries) { if (nid.lastSeen() < now - MAX_NODE_AGE) { if (kbucket.remove(nid)) return true; } } return entries.size() < _max; } }