Ignore:
Timestamp:
Aug 4, 2009, 4:42:00 PM (15 years ago)
Author:
mies
Message:
 
Location:
source/ariba/overlay/modules/chord
Files:
2 edited

Legend:

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

    r5666 r5668  
    116116}
    117117
     118void Chord::discover_neighbors( const LinkID& lnk ) {
     119        {
     120                // send successor discovery
     121                ChordMessage cmsg(ChordMessage::discovery, nodeid, nodeid);
     122                Discovery dmsg;
     123                dmsg.setSourceEndpoint(&baseoverlay.getEndpointDescriptor());
     124                dmsg.setFollowType(Discovery::successor);
     125                dmsg.setTTL((uint8_t)2);
     126                cmsg.encapsulate(&dmsg);
     127                send(&dmsg, lnk);
     128        }
     129        {
     130                // send predecessor discovery
     131                ChordMessage cmsg(ChordMessage::discovery, nodeid, nodeid);
     132                Discovery dmsg;
     133                dmsg.setSourceEndpoint(&baseoverlay.getEndpointDescriptor());
     134                dmsg.setFollowType(Discovery::predecessor);
     135                dmsg.setTTL((uint8_t)2);
     136                cmsg.encapsulate(&dmsg);
     137                send(&dmsg, lnk);
     138        }
     139}
     140
     141
    118142void Chord::createOverlay() {
    119143}
     
    241265        vector<LinkID>::iterator it = std::find(bootstrapLinks.begin(), bootstrapLinks.end(), lnk);
    242266        if( it != bootstrapLinks.end() ) {
    243                 // send discovery over bootstrap
    244                 Message msg;
    245                 ChordMessage cmsg(ChordMessage::discovery, nodeid, nodeid);
    246                 Discovery dmsg;
    247                 dmsg.setSourceEndpoint(&baseoverlay.getEndpointDescriptor());
    248                 dmsg.setFollowType(Discovery::normal);
    249                 dmsg.setTTL((uint8_t) 4);
    250                 cmsg.encapsulate(&dmsg);
    251                 msg.encapsulate(&cmsg);
    252                 send(&msg, lnk);
     267                discover_neighbors( lnk );
    253268                bootstrapLinks.erase( it );
    254269        }
     
    366381                }
    367382
    368                         // successor mode: follow the successor until TTL is zero
     383                // successor mode: follow the successor until TTL is zero
    369384                case Discovery::successor:
    370385                case Discovery::predecessor: {
     
    435450                const NodeID disc2 = table->get_finger_table(stabilize_finger).get_compare().get_center();
    436451                send_discovery_to(disc1);
     452
     453                if (table->get_successor() != NULL) {
     454                        route_item* succ_item = table->get(*table->get_successor());
     455                        discover_neighbors(succ_item->info);
     456                }
     457
     458                // send predecessor message
     459                if (table->get_predesessor() != NULL) {
     460                        route_item* pred_item = table->get(*table->get_predesessor());
     461                        discover_neighbors(pred_item->info);
     462                }
     463
    437464                if (disc1 != disc2)
    438465                        send_discovery_to(disc2);
  • source/ariba/overlay/modules/chord/Chord.h

    r5646 r5668  
    8989        void send_discovery_to( const NodeID& destination, int ttl = 3 );
    9090
     91        void discover_neighbors( const LinkID& lnk );
     92
    9193public:
    9294        Chord(BaseOverlay& _baseoverlay, const NodeID& _nodeid,
     
    133135                        const LinkID& lnk = LinkID::UNSPECIFIED);
    134136
     137
     138
    135139        /// @see Timer.h
    136140        virtual void eventFunction();
Note: See TracChangeset for help on using the changeset viewer.