Skip to main content

Oversim - Key Overlay Functions

Can be use to set message to NULL.Better not to skip defining the constructor.

Clear/delete messages in destructor using cancelAndDelete(). New version seems to be motivating to use a destructor so better not to skip.

void initializeOverlay(int stage)
Can be used to initialize the overlay node, read parameter values, set key, set statistic collectors, start timers, etc.
  • stage -  can be either MIN_STAGE_APP (this module is being created) or MAX_STAGE_APP (all modules were created). We typically need MIN_STAGE_APP to initialize application functions & variables.
void finishOverlay()
Called when module is terminating. Can be used to summarize stat. New OverSim version seems to be motivating us to delete messages in the destructor.

void joinOverlay()
Define what to do when a node is added to system. Can be used to establish connections with successor/predecessor & identify fingers in Chord. Also indicate to the simulator that overlay is now ready. 

NodeVector* findNode(const OverlayKey& key, int numRedundantNodes, int numSiblings)
Is called by message forwarding function to determine potential next hops, e.g., finger node selection in Chord can go here. If asking node is a sibling (i.e., root) for the key, it will reply with list of siblings order according their closeness to the key.
  • key - key to be located
  • numRedundantNodes -  Maximum number of next hop nodes to return
  • numSibling - number of siblings (potential nodes that could store the key) to return
bool isSiblingFor(const NodeHandle& node, const OverlayKey& key, int numSiblings, bool* err)
Am I the root, i.e.., node responsible for storing the given key?
  • node - Nodehandler of the node method is suppose to be called
  • key - key to be located
  • numSibling - number of siblings (potential nodes that could store key) being requested
  • err - return false if the range could not be determined
int getMaxNumSiblings()
Get the maximum number of siblings (nodes close to a key) that are maintained by this overlay. Used by isSiblingFor()


      Popular posts from this blog

      Python Code to Calculate Gini index/coefficient, Robin Hood index, & Lorenz curve

      Following Python code can be used to calculate Gini index, Gini coefficient, Robin Hood index, and points of Lorenz curve. Lorenz curve can be also plot if matplotlib is installed.
      It's based on the steps given by Peter Rosenmai.


      Other online tools:

      1. Building P2P Simulators with OverSim - Where to Begin

      This could be a series of blog posts about extending or developing your own OverSim applications & overlay networks. OverSim has a minimal tutorial on writing your own application & overlay network; however, it doesn't show the big picture. So, I'm wasting lots of time playing with code & trying to understand the rest. Good thing is, I like it more & more as I understand. You need to change/develop only a few things, but finding out which ones is a hell of a task. I hope this will not only make my life easy but also will be useful to new comers. Here's what you need to do: You need some background on OMNeT++ OverSim extend OMNeT++. But sometime it has its own way of doing things (to make your task even simple) so understand the differences.Develop several OMNeT++ simulators. TicToc is a good one to start with. Extend it as you imagine.Read Towards a Common API for Structured Peer-to-Peer Overlays, which is the basis for OvseSim's API. Here'…

      Describing Experimental/Simulation Setup

      Sometimes the results of a performance analysis may depend on the computers used and/or specific features of software/libraries. In such cases it is extremely important to describe the experimental/simulation set up in details. It enables others to repeat those experiments as well as check whether the results are rigorous, statistically sound, and unbiased. Unfortunately, "Simulation Setup" is the shortest section in many research papers where authors try to save space by cutting down as much as details. Here are some tips on what to include (in addition to describing the experimental/simulation setup) based on my experiences:
      Type of Simulation Are the results based on Experimentation, Emulation, or Simulation? If simulations also mention further details like whether it is Discrete Event, Montacarlo, Stochastic, or Deterministic simulation. Are the results for Steady, Dynamic, Starting/ramp-up, or Terminating state(s)?Number of Experiments/Simulations No of sampl…