Ignore:
Timestamp:
May 26, 2009, 1:27:41 PM (16 years ago)
Author:
mies
Message:

fixed some minor bugs

File:
1 edited

Legend:

Unmodified
Added
Removed
  • source/ariba/overlay/modules/chord/Chord.cpp

    r3696 r3699  
    4949
    5050typedef chord_routing_table::item route_item;
    51 use_logging_cpp( Chord )
    52 ;
     51
     52use_logging_cpp( Chord );
    5353
    5454Chord::Chord(BaseOverlay& _baseoverlay, const NodeID& _nodeid,
     
    9595        cmsg.encapsulate(&dmsg);
    9696        msg.encapsulate(&cmsg);
    97         logging_debug("" << (int)cmsg.getType());
    9897        this->onMessage(&msg, NodeID::UNSPECIFIED, LinkID::UNSPECIFIED);
    9998}
     
    150149        OverlayInterface::NodeList nodelist;
    151150        for (size_t i = 0; i < table->size(); i++)
    152                 if ((*table)[i]->ref_count != 0) nodelist.push_back((*table)[i]->id);
     151                if ((*table)[i]->ref_count != 0
     152                                && !(*table)[i]->info.isUnspecified())
     153                        nodelist.push_back((*table)[i]->id);
    153154        return nodelist;
    154155}
     
    161162        route_item* item = table->insert(remote);
    162163
     164
     165        // item added to routing table?
     166        if (item != NULL) { // yes-> add to routing table
     167                logging_info("new routing neighbor: " << remote.toString()
     168                                << " with link " << lnk.toString());
     169                item->info = lnk;
     170        } else { // no-> add orphan entry to routing table
     171                logging_info("new orphan: " << remote.toString()
     172                                << " with link " << lnk.toString());
     173                table->insert_orphan(remote)->info = lnk;
     174        }
     175
    163176        if (!bootstrapLink.isUnspecified() && lnk == bootstrapLink) {
    164177                send_discovery_to(nodeid);
    165178                bootstrapLink = LinkID::UNSPECIFIED;
    166         }
    167 
    168         // item added to routing table?
    169         if (item != NULL) { // yes-> add to routing table
    170                 logging_debug("new routing neighbor: " << remote.toString() );
    171                 item->info = lnk;
    172         } else { // no-> add orphan entry to routing table
    173                 logging_debug("new orphan: " << remote.toString() );
    174                 table->insert_orphan(remote)->info = lnk;
    175179        }
    176180}
     
    312316                // leave
    313317        case M::leave: {
    314                 baseoverlay.dropLink(link);
     318                if (link!=LinkID::UNSPECIFIED) {
     319                        route_item* item = table->get(remote);
     320                        if (item!=NULL) item->info = LinkID::UNSPECIFIED;
     321                        table->remove(remote);
     322                        baseoverlay.dropLink(link);
     323                }
    315324                break;
    316325        }
     
    319328
    320329void Chord::eventFunction() {
     330        if (!LinkID::UNSPECIFIED.isUnspecified())
     331                logging_error("LinkID::UNSPECIFIED not unspecified!!!!");
    321332        stabilize_counter++;
    322333        if (stabilize_counter == 3) {
     334                size_t numNeighbors = 0;
     335                for (size_t i = 0; i < table->size(); i++) {
     336                        route_item* it = (*table)[i];
     337                        if (it->ref_count != 0 && !it->info.isUnspecified()) numNeighbors++;
     338                }
     339                logging_info("Running stabilization: #links="
     340                                << table->size() << " #neighbors=" << numNeighbors );
    323341                stabilize_counter = 0;
    324342                stabilize_finger = ((stabilize_finger+1) % table->get_finger_table_size() );
    325                 logging_debug("sending discovery message to my neighbors");
    326                 send_discovery_to(nodeid);
    327                 send_discovery_to(
    328                         table->get_finger_table(stabilize_finger).get_compare().get_center()
    329                 );
     343                logging_debug("Sending discovery message to my neighbors and fingers");
     344                NodeID disc1 = nodeid;
     345                NodeID disc2 =
     346                        table->get_finger_table(stabilize_finger).get_compare().get_center();
     347                send_discovery_to(disc1);
     348                if (disc1 != disc2) send_discovery_to(disc2);
    330349                orphan_removal_counter++;
    331350                if (orphan_removal_counter == 2) {
     351                        logging_info("Running orphan removal");
    332352                        orphan_removal_counter = 0;
    333353                        for (size_t i = 0; i < table->size(); i++) {
    334354                                route_item* it = (*table)[i];
    335355                                if (it->ref_count == 0 && !it->info.isUnspecified()) {
     356                                        logging_info("Dropping orphaned link " << it->info.toString() << " to " << it->id.toString());
    336357                                        baseoverlay.dropLink(it->info);
    337                                         logging_debug("dropping orphaned link " << it->info.toString() << " to " << it->id.toString());
     358                                        it->info = LinkID::UNSPECIFIED;
    338359                                }
    339360                        }
     
    341362        }
    342363        logging_debug("--- chord routing information ----------------------------------");
    343         logging_debug("predecessor: " << (table->get_predesessor()==NULL? "<none>" : table->get_predesessor()->toString()) );
     364        logging_debug("predecessor: " << (table->get_predesessor()==NULL? "<none>" :
     365                table->get_predesessor()->toString()) );
    344366        logging_debug("node_id    : " << nodeid.toString() );
    345         logging_debug("successor  : " << (table->get_successor()==NULL? "<none>" : table->get_successor()->toString()));
     367        logging_debug("successor  : " << (table->get_successor()==NULL? "<none>" :
     368                table->get_successor()->toString()));
    346369        logging_debug("----------------------------------------------------------------");
    347370}
Note: See TracChangeset for help on using the changeset viewer.