Public Member Functions | Private Attributes

RecursiveLookup Class Reference

#include <RecursiveLookup.h>

Inheritance diagram for RecursiveLookup:
RpcListener AbstractLookup

List of all members.

Public Member Functions

 RecursiveLookup (BaseOverlay *overlay, RoutingType routingType, const RecursiveLookupConfiguration &config, bool appLookup)
virtual ~RecursiveLookup ()
 Virtual destructor.
virtual void lookup (const OverlayKey &key, int numSiblings=1, int hopCountMax=0, int retries=0, LookupListener *listener=NULL)
 Lookup siblings for a key.
virtual const NodeVectorgetResult () const
 Returns the result of the lookup.
virtual bool isValid () const
 Returns true, if the lookup was successful.
virtual void abortLookup ()
 Aborts a running lookup.
virtual uint32_t getAccumulatedHops () const
 Returns the total number of hops for all lookup paths.
void handleRpcTimeout (BaseCallMessage *msg, const TransportAddress &dest, cPolymorphic *context, int rpcId, const OverlayKey &destKey)
void handleRpcResponse (BaseResponseMessage *msg, cPolymorphic *context, int rpcId, simtime_t rtt)

Private Attributes

BaseOverlayoverlay
LookupListenerlistener
uint32_t nonce
bool valid
NodeVector siblings
RoutingType routingType
int redundantNodes
int numRetries
bool appLookup

Detailed Description

Definition at line 48 of file RecursiveLookup.h.


Constructor & Destructor Documentation

RecursiveLookup::RecursiveLookup ( BaseOverlay overlay,
RoutingType  routingType,
const RecursiveLookupConfiguration config,
bool  appLookup 
)

Definition at line 31 of file RecursiveLookup.cc.

RecursiveLookup::~RecursiveLookup (  )  [virtual]

Virtual destructor.

Definition at line 44 of file RecursiveLookup.cc.

{
    if (listener != NULL) {
        delete listener;
        listener = NULL;
    }

    overlay->removeLookup(this);
}


Member Function Documentation

void RecursiveLookup::abortLookup (  )  [virtual]

Aborts a running lookup.

This method aborts a running lookup without calling the listener and delete the lookup object.

Implements AbstractLookup.

Definition at line 82 of file RecursiveLookup.cc.

{
    overlay->cancelRpcMessage(nonce);

    delete this;
}

uint32_t RecursiveLookup::getAccumulatedHops (  )  const [virtual]

Returns the total number of hops for all lookup paths.

Returns:
The accumulated number of hops.

Implements AbstractLookup.

Definition at line 89 of file RecursiveLookup.cc.

{
    //throw new cRuntimeError("RecursiveLookup is asked for # accumulated hops!");
    return 0; //TODO hopCount in findNodeCall/Response ?
}

const NodeVector & RecursiveLookup::getResult (  )  const [virtual]

Returns the result of the lookup.

Returns:
The result node vector.

Implements AbstractLookup.

Definition at line 72 of file RecursiveLookup.cc.

{
    return siblings;
}

void RecursiveLookup::handleRpcResponse ( BaseResponseMessage msg,
cPolymorphic *  context,
int  rpcId,
simtime_t  rtt 
)

Definition at line 112 of file RecursiveLookup.cc.

{
    FindNodeResponse* findNodeResponse = check_and_cast<FindNodeResponse*>(msg);

    if (findNodeResponse->getSiblings() &&
        findNodeResponse->getClosestNodesArraySize() > 0) {
        valid = true;
        for (uint32_t i = 0; i < findNodeResponse->getClosestNodesArraySize();
             i++) {
            siblings.push_back(findNodeResponse->getClosestNodes(i));
        }
    }

//    std::cout << "RecursiveLookup::handleRpcResponse() "
//              << findNodeResponse->getClosestNodesArraySize() << std::endl;

    // inform listener
    if (listener != NULL) {
        listener->lookupFinished(this);
        listener = NULL;
    }
    delete this;
}

void RecursiveLookup::handleRpcTimeout ( BaseCallMessage msg,
const TransportAddress dest,
cPolymorphic *  context,
int  rpcId,
const OverlayKey destKey 
)

Definition at line 95 of file RecursiveLookup.cc.

{
    //TODO retry
    valid = false;

    // inform listener
    if (listener != NULL) {
        listener->lookupFinished(this);
        listener = NULL;
    }

    delete this;
}

bool RecursiveLookup::isValid (  )  const [virtual]

Returns true, if the lookup was successful.

Returns:
true, if the lookup was successful.

Implements AbstractLookup.

Definition at line 77 of file RecursiveLookup.cc.

{
    return valid;
}

void RecursiveLookup::lookup ( const OverlayKey key,
int  numSiblings = 1,
int  hopCountMax = 0,
int  retries = 0,
LookupListener listener = NULL 
) [virtual]

Lookup siblings for a key.

Parameters:
key The key to lookup
numSiblings Number of siblings to lookup
hopCountMax Maximum hop count
retries Number of retries if lookup fails
listener Listener to inform, when the lookup is done

Implements AbstractLookup.

Definition at line 54 of file RecursiveLookup.cc.

{
    this->listener = listener;

    FindNodeCall* call = new FindNodeCall("FindNodeCall");
    if (appLookup) call->setStatType(APP_LOOKUP_STAT);
    else call->setStatType(MAINTENANCE_STAT);
    call->setLookupKey(key);
    call->setNumRedundantNodes(redundantNodes);
    call->setNumSiblings(numSiblings);
    call->setBitLength(FINDNODECALL_L(call));

    nonce = overlay->sendRouteRpcCall(OVERLAY_COMP, key, call, NULL,
                                      routingType, -1, retries, -1, this);
}


Member Data Documentation

Definition at line 110 of file RecursiveLookup.h.

Referenced by lookup().

uint32_t RecursiveLookup::nonce [private]

Definition at line 104 of file RecursiveLookup.h.

Referenced by abortLookup(), and lookup().

Definition at line 109 of file RecursiveLookup.h.

Definition at line 102 of file RecursiveLookup.h.

Referenced by abortLookup(), lookup(), and ~RecursiveLookup().

Definition at line 108 of file RecursiveLookup.h.

Referenced by lookup().

Definition at line 107 of file RecursiveLookup.h.

Referenced by lookup().

Definition at line 106 of file RecursiveLookup.h.

Referenced by getResult(), and handleRpcResponse().

bool RecursiveLookup::valid [private]

Definition at line 105 of file RecursiveLookup.h.

Referenced by handleRpcResponse(), handleRpcTimeout(), isValid(), and RecursiveLookup().


The documentation for this class was generated from the following files: