Changeset 6786 for source/ariba/overlay


Ignore:
Timestamp:
Nov 2, 2009, 1:31:19 AM (15 years ago)
Author:
mies
Message:

Changed Data to Message conversion constructor in Message to explicit
Fixed some general bugs in Data: operator<<
Fixed bug in DHTMessage: allow unspecified key/values
Added local DHT message delivery
Adapted sources to work with gcc 4.4.1

Location:
source/ariba/overlay
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • source/ariba/overlay/BaseOverlay.cpp

    r6760 r6786  
    727727        sideport(&SideportListener::DEFAULT), started(false), counter(0) {
    728728        dht = new DHT();
     729        localDHT = new DHT();
    729730}
    730731
     
    19131914        if (msg->getType()==OverlayMsg::typeDHTData) {
    19141915                const ServiceID& service = msg->getService();
    1915                 logging_debug( "Received DHT data for service " << service.toString() );
     1916                logging_info( "Received DHT data for service " << service.toString() );
    19161917
    19171918                // delegate data message
     
    19401941
    19411942        case OverlayMsg::typeDHTGet: {
     1943                logging_info("DHT-Get: key=" << dhtMsg->getKey() );
    19421944                vector<Data> vect = dht->get(dhtMsg->getKey());
     1945                BOOST_FOREACH(const Data& d, vect)
     1946                        logging_info("DHT-Get: value=" << d);
    19431947                OverlayMsg omsg(*msg);
    19441948                omsg.swapRoles();
     
    19461950                DHTMessage dhtmsg(dhtMsg->getKey(), vect);
    19471951                omsg.encapsulate(&dhtmsg);
    1948                 this->send(&omsg, omsg.getDestinationNode());
     1952                dhtSend(&omsg, omsg.getDestinationNode());
    19491953                break;
    19501954        }
     
    19691973/// put a value to the DHT with a ttl given in seconds
    19701974void BaseOverlay::dhtPut( const Data& key, const Data& value, int ttl ) {
     1975
     1976        logging_info("DHT: putting key=" <<  key
     1977                        << " value=" << value
     1978                        << " ttl=" << ttl
     1979        );
     1980
     1981        // put into local data store (for refreshes)
     1982        localDHT->put(key,value,ttl);
     1983
    19711984        // calculate hash
    19721985        NodeID dest = NodeID::sha1(key.getBuffer(), key.getLength() / 8);
    1973         OverlayMsg msg(OverlayMsg::typeDHTPut);
    19741986        DHTMessage dhtmsg(key,value);
    19751987        dhtmsg.setTTL(ttl);
    1976         msg.setDestinationNode(dest);
     1988
     1989        OverlayMsg msg(OverlayMsg::typeDHTPut);
    19771990        msg.encapsulate( &dhtmsg );
    1978         send(&msg, dest);
     1991        dhtSend(&msg, dest);
    19791992}
    19801993
    19811994/// removes a key value pair from the DHT
    19821995void BaseOverlay::dhtRemove( const Data& key, const Data& value ) {
     1996        // remove from local data store
     1997        localDHT->remove(key,value);
     1998
    19831999        // calculate hash
    19842000        NodeID dest = NodeID::sha1(key.getBuffer(), key.getLength() / 8);
     2001        DHTMessage dhtmsg(key,value);
     2002
     2003        // send message
    19852004        OverlayMsg msg(OverlayMsg::typeDHTRemove);
    1986         DHTMessage dhtmsg(key,value);
    1987         msg.setDestinationNode(dest);
    19882005        msg.encapsulate( &dhtmsg );
    1989         send(&msg, dest);
     2006        dhtSend(&msg, dest);
    19902007}
    19912008
     
    19942011        // calculate hash
    19952012        NodeID dest = NodeID::sha1(key.getBuffer(), key.getLength() / 8);
     2013        DHTMessage dhtmsg(key);
     2014
     2015        // send message
    19962016        OverlayMsg msg(OverlayMsg::typeDHTRemove);
    1997         DHTMessage dhtmsg(key);
    1998         msg.setDestinationNode(dest);
    19992017        msg.encapsulate( &dhtmsg );
    2000         send(&msg, dest);
     2018        dhtSend(&msg, dest);
    20012019}
    20022020
    20032021/// requests data stored using key
    20042022void BaseOverlay::dhtGet( const Data& key, const ServiceID& service ) {
     2023        logging_info("DHT: trying to resolve key=" <<
     2024                        key << " for service=" << service.toString() );
     2025
    20052026        // calculate hash
    20062027        NodeID dest = NodeID::sha1(key.getBuffer(), key.getLength() / 8);
     2028        DHTMessage dhtmsg(key);
     2029
     2030        // send message
    20072031        OverlayMsg msg(OverlayMsg::typeDHTGet);
    2008         DHTMessage dhtmsg(key);
    2009         msg.setDestinationNode(dest);
    20102032        msg.setService(service);
    20112033        msg.encapsulate( &dhtmsg );
    2012         send(&msg, dest);
    2013 }
     2034        dhtSend(&msg, dest);
     2035}
     2036
     2037void BaseOverlay::dhtSend( OverlayMsg* msg, const NodeID& dest ) {
     2038        logging_info("DHT: sending message with key=" << dest.toString() );
     2039        msg->setSourceNode(this->nodeId);
     2040        msg->setDestinationNode(dest);
     2041
     2042        // local storage? yes-> put into DHT directly
     2043        if (overlayInterface->isClosestNodeTo(msg->getDestinationNode())) {
     2044                Data d = data_serialize(msg);
     2045                Message* m2 = new Message(d);
     2046                OverlayMsg* m3 = m2->decapsulate<OverlayMsg>();
     2047                handleDHTMessage(m3);
     2048                delete m2;
     2049                return;
     2050        }
     2051
     2052        // send message "normally"
     2053        send(msg, dest);
     2054}
     2055
    20142056
    20152057}} // namespace ariba, overlay
  • source/ariba/overlay/BaseOverlay.h

    r6266 r6786  
    506506
    507507        DHT* dht;
     508        DHT* localDHT;
    508509
    509510        void stabilizeDHT();
     511        void dhtSend( OverlayMsg* msg, const NodeID& dest );
    510512
    511513        // misc --------------------------------------------------------------------
  • source/ariba/overlay/messages/DHTMessage.h

    r6266 r6786  
    6262        X && ttl;
    6363
     64//      std::cout << "1" << std::endl;
     65
    6466        // key serialization
    65         uint16_t key_length = key.getLength();
     67        uint16_t key_length = key.isUnspecified() ? 0 : key.getLength();
    6668        X && key_length;
    6769        if (X.isDeserializer()) key.setLength( key_length );
    68         X && key;
     70
     71//      std::cout << "2 - " << key_length << std::endl;
     72        X && this->key;
     73//      std::cout << "2b" << std::endl;
    6974
    7075        // store number of values
     
    7277        X && num_values;
    7378
     79//      std::cout << "3" << std::endl;
     80
    7481        // value serialization
    7582        for (size_t i=0; i<num_values; i++) {
    76                 Data value = values[i];
    77                 uint16_t value_length = value.getLength();
     83//              std::cout << "4" << std::endl;
     84                Data value;
     85                if (X.isSerializer()) value = values[i];
     86                uint16_t value_length = value.isUnspecified() ? 0 : value.getLength();
    7887                X && value_length;
     88//              std::cout << "5" << std::endl;
    7989                if (X.isDeserializer()) value.setLength( value_length );
    8090                X && value;
     91//              std::cout << "6" << std::endl;
    8192                if (X.isDeserializer()) values.push_back(value);
    8293        }
Note: See TracChangeset for help on using the changeset viewer.