Ignore:
Timestamp:
Jul 24, 2009, 8:53:41 PM (15 years ago)
Author:
Christoph Mayer
Message:

merge from bootstrap branch

Location:
source/ariba/overlay/modules/chord
Files:
2 edited

Legend:

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

    r5151 r5316  
    6161        stabilize_counter = 0;
    6262        stabilize_finger = 0;
    63         bootstrapLink = LinkID::UNSPECIFIED;
    6463}
    6564
     
    112111void Chord::joinOverlay(const EndpointDescriptor& boot) {
    113112        logging_info( "joining Chord overlay structure through end-point " <<
    114                         (boot == EndpointDescriptor::UNSPECIFIED ?
    115                                         "local" : boot.toString()) );
     113                        (boot.isUnspecified() ? "local" : boot.toString()) );
    116114
    117115        // initiator? no->setup first link
    118         if (!(boot == EndpointDescriptor::UNSPECIFIED))
    119                 bootstrapLink = setup(boot);
     116        if (!boot.isUnspecified())
     117                bootstrapLinks.push_back( setup(boot) );
    120118
    121119        // timer for stabilization management
     
    176174}
    177175
    178 OverlayInterface::NodeList Chord::getKnownNodes() const {
     176OverlayInterface::NodeList Chord::getKnownNodes(bool deep) const {
    179177        OverlayInterface::NodeList nodelist;
    180         for (size_t i = 0; i < table->size(); i++)
    181                 if ((*table)[i]->ref_count != 0
    182                                 && !(*table)[i]->info.isUnspecified())
    183                         nodelist.push_back((*table)[i]->id);
     178
     179        if( deep ){
     180                // all nodes that I know, fingers, succ/pred
     181                for (size_t i = 0; i < table->size(); i++){
     182                        if ((*table)[i]->ref_count != 0
     183                                        && !(*table)[i]->info.isUnspecified())
     184                                nodelist.push_back((*table)[i]->id);
     185                }
     186        } else {
     187                // only succ and pred
     188                if( table->get_predesessor() != NULL )
     189                        nodelist.push_back( *(table->get_predesessor()) );
     190
     191                if( table->get_successor() != NULL )
     192                                        nodelist.push_back( *(table->get_successor()) );
     193        }
     194
    184195        return nodelist;
    185196}
     
    208219        }
    209220
    210         if (!bootstrapLink.isUnspecified() && lnk == bootstrapLink) {
     221        vector<LinkID>::iterator it = std::find(bootstrapLinks.begin(), bootstrapLinks.end(), lnk);
     222        if( it != bootstrapLinks.end() ) {
    211223                send_discovery_to(nodeid);
    212                 bootstrapLink = LinkID::UNSPECIFIED;
     224                bootstrapLinks.erase( it );
    213225        }
    214226}
  • source/ariba/overlay/modules/chord/Chord.h

    r5151 r5316  
    7676        int stabilize_counter;
    7777        int stabilize_finger;
    78         LinkID bootstrapLink;
     78        vector<LinkID> bootstrapLinks;
    7979        vector<NodeID> pending;
    8080
     
    120120
    121121        /// @see OverlayInterface.h
    122         virtual NodeList getKnownNodes() const;
     122        virtual NodeList getKnownNodes(bool deep = true) const;
    123123
    124124        /// @see CommunicationListener.h or @see OverlayInterface.h
Note: See TracChangeset for help on using the changeset viewer.