Changeset 5860


Ignore:
Timestamp:
Aug 11, 2009, 1:47:47 PM (15 years ago)
Author:
Christoph Mayer
Message:

networkinfo fix wenn socket kaputt geht, erfolgreich verwendete bootstrap infos speichern und wenn overlay verbindungen alle weg sind diese infos ausprobieren

Location:
source/ariba
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • source/ariba/communication/networkinfo/NetworkInformation.cpp

    r5638 r5860  
    9191                        logging_error( "getting interface list failed with: " <<
    9292                                                strerror(errno));
     93
     94                        // if the socket is bogus, try to get
     95                        // a new one for the next call
     96                        if(errno == EBADF){
     97                                close( infoSocket );
     98                                infoSocket = socket( AF_INET, SOCK_DGRAM, 0 );
     99                        }
     100
    93101                        return retlist;
    94102                }
  • source/ariba/overlay/BaseOverlay.cpp

    r5838 r5860  
    377377
    378378                // bootstrap against ourselfs
    379                 logging_debug("joining spovnet locally");
     379                logging_info("joining spovnet locally");
    380380
    381381                overlayInterface->joinOverlay();
     
    394394
    395395                // bootstrap against another node
    396                 logging_debug("joining spovnet remotely against " << bootstrapEp.toString());
     396                logging_info("joining spovnet remotely against " << bootstrapEp.toString());
    397397
    398398                const LinkID& lnk = bc->establishLink( bootstrapEp );
     
    10981098                                        // inform all registered services of the event
    10991099                                        BOOST_FOREACH( NodeListener* i, nodeListeners )
    1100                                         i->onJoinFailed( spovnetId );
     1100                                                i->onJoinFailed( spovnetId );
    11011101
    11021102                                        delete replyMsg;
     
    11101110                                overlayInterface->joinOverlay( replyMsg->getBootstrapEndpoint() );
    11111111
    1112                                 //record bootstrap ep as good endpoint to join
    1113                                 overlayBootstrap.recordJoin( replyMsg->getBootstrapEndpoint() );
    1114 
    11151112                                // update ovlvis
    11161113                                //ovl.visChangeNodeColor( ovlId, nodeId, OvlVis::NODE_COLORS_GREEN);
     
    11201117                                        i->onJoinCompleted( spovnetId );
    11211118
    1122                                 delete replyMsg;
    1123 
    11241119                        } else {
    11251120
     
    11281123                                overlayInterface->joinOverlay( replyMsg->getBootstrapEndpoint() );
    11291124
    1130                                 delete replyMsg;
    1131 
    11321125                        } // if( overlayInterface == NULL )
    11331126
     1127                        //record bootstrap ep as good endpoint to join
     1128                        overlayBootstrap.recordJoin( replyMsg->getBootstrapEndpoint() );
     1129
     1130                        delete replyMsg;
    11341131                        ret = true;
    11351132                        break;
  • source/ariba/overlay/OverlayBootstrap.cpp

    r5838 r5860  
    8888
    8989void OverlayBootstrap::handleSystemEvent(const SystemEvent& event){
    90         EventData* data = event.getData<EventData>();
     90        JoinData* data = event.getData<JoinData>();
    9191
    9292        // announcement for our spovnet
     
    129129        //
    130130
    131         EventData* data = new EventData();
     131        JoinData* data = new JoinData();
    132132        data->spovnetid = sid;
    133133        data->nodeid = nid;
     
    154154        boost::mutex::scoped_lock lock(lastJoinesMutex);
    155155
    156         EventData data;
     156        JoinData data;
    157157        data.spovnetid = spovnetid;
    158158        data.nodeid = nodeid;
    159159        data.endpoint = _ep;
    160160
    161         lastJoines.push_front(JoinData(data));
     161        logging_info("recording bootstrap information " << data.endpoint.toString());
     162
     163        lastJoines.push_front(data);
    162164}
    163165
     
    175177        // we have overlay neighbors -> ok
    176178        if(overlay->getOverlayNeighbors().size() > 0) return;
     179
     180        logging_info("overlay not joined, checking for earlier used bootstrap information");
     181        EndpointDescriptor joinep = EndpointDescriptor::UNSPECIFIED();
    177182
    178183        // no overlay neighbors -> try out already
     
    185190
    186191                // use last used element and then put it into back
    187                 JoinData data = *i;
    188                 lastJoines.pop_front();
    189                 lastJoines.push_back(data);
     192                joinep = (*i).endpoint;
     193
     194                if(lastJoines.size() >= 2)
     195                        swap( *lastJoines.begin(), *(--(lastJoines.end())) );
    190196        }
    191197
    192         logging_info("no overlay connections detected, " <<
    193                                         "trying to join using old bootstrap information");
     198        logging_info("no overlay conenctivity detected, " <<
     199                                        "trying to join using old bootstrap information: " <<
     200                                        joinep.toString());
    194201
    195202        // try to join using this node, if the join is successfull
    196203        // the endpoint will again be inserted using recordJoin
    197         overlay->joinSpoVNet( spovnetid, data.data.endpoint );
     204        overlay->joinSpoVNet( spovnetid, joinep );
    198205}
    199206
     
    202209
    203210void OverlayBootstrap::WatchdogTimer::startWatchdog(){
    204         Timer::setInterval(2000);
     211        Timer::setInterval(5000);
    205212        Timer::start();
    206213}
  • source/ariba/overlay/OverlayBootstrap.h

    r5838 r5860  
    4444#include <ctime>
    4545#include <deque>
     46#include <algorithm>
    4647#include <boost/thread/mutex.hpp>
    4748#include "ariba/utility/logging/Logging.h"
     
    5657#include "ariba/utility/system/SystemEventType.h"
    5758
     59using std::swap;
    5860using std::deque;
    5961using std::string;
     
    9496
    9597private:
    96         class EventData {
     98        class JoinData {
    9799        public:
     100                JoinData() : spovnetid(), nodeid(), endpoint() {
     101                }
     102
     103                JoinData& operator=( const JoinData& rhs) {
     104                        spovnetid = rhs.spovnetid;
     105                        nodeid = rhs.nodeid;
     106                        endpoint = rhs.endpoint;
     107                }
     108
    98109                SpoVNetID spovnetid;
    99110                NodeID nodeid;
     
    106117        BaseOverlay* overlay;
    107118        string randname;
    108 
    109         class JoinData {
    110         public:
    111                 time_t timestamp;
    112                 EventData data;
    113 
    114                 JoinData(const EventData& _data){
    115                         timestamp = time(NULL);
    116                         data = _data;
    117                 }
    118 
    119                 JoinData(){
    120                         timestamp = time(NULL);
    121                 }
    122         };
    123119
    124120        class WatchdogTimer : public Timer {
Note: See TracChangeset for help on using the changeset viewer.