Ignore:
Timestamp:
Nov 2, 2009, 1:31:19 AM (14 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

File:
1 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
Note: See TracChangeset for help on using the changeset viewer.