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; 
}

0 ответов

Другие вопросы по тегам