Kademlia маршрутный стол. Вставка нового контакта
Я пишу P2P-систему, основанную на подходе Kadelmia.
Мне бы очень хотелось узнать ваше мнение о следующем псевдокоде, который описывает процесс вставки нового контакта в таблицу маршрутизации (дерево).
Комментарий: константа maxDepth - это максимальная глубина дерева маршрутизации, а устаревший контакт - это контакт, у которого устаревший счетчик>= максимальный устаревший счетчик
void insert (Contact contact) {
/*
* Get bucket in which contact should be placed
*/
KBucket bucket = getBucket(conatact.getID());
/*
* Already known contact
*/
if (bucket.contains(contact)) {
bucket.update(contact);
return;
}
/*
* We have room for new contact
*/
if (!bucket.isFull()) {
bucket.put(contact)
return;
}
/*
* We have no room in bucket, try to any get stale contact
* If we have one, replace it with new contact
*/
Contact stale = bucket.getStaleContact();
if (stale != null) {
bucket.remove(stale);
bucket.put(contact);
return;
}
/* No room and no stale contact - try to split bucket */
/*
* Bucket covers local ID address space
*/
if (boucket.covers(localID) && bucket.depth < maxDepth) {
bucket.split();
insert (contact); //recursively
return;
}
/*
* Get K-th closes to local ID contact
*/
Conatct closest = getClosestContact(k)
/*
* Set flag to true if new contact closer to
* local ID than K-th closest contact
*/
boolean closer = localID.compareDistance(contact, closest) == -1;
/*
* New contact closer to local ID then K-th closest
*/
if (closer && bucket.depth < maxDepth) {
bucket.split();
insert (contact); //recursively
return;
}
/*
* We have no space in bucket and bucket cannot
* be split, so add new contact to cache
*/
bucket.getCache().put(contact);
return;
}