?? readme
字號:
Updated: June 9, 2005A Makefile is provided that works on our RedHat 9 based cluster with gcc 3.2.2.Typing 'make APPNAME="NameOfYourService"' will build all the evaluation programs. This currently includes: demoMeridian a stand-alone Meridian process demoPinger a client program that asks a Meridian node to ping a target demoClosest a client program that retrieves the closest Meridian node to a set of targets demoMultiConst a client program that retrieves a Meridian node that satisfies multiple latency constraints to different targetsThe easiest way to add Meridian to your project is to include the meridian.hheader and create a meridian object which encapulates all of the necessary state. A call to the start() method will cause the object to fork off a childprocess that handles incoming Meridian request. Calling stop() or deleting the meridian object will kill the Meridian child process. Follow the sample programDemoMeridian.cpp for more detailed instructions. To issue closest node discovery queries, follow the DemoClosestSearch.cpp sampleprogram. The process basically consists of creating the desired packet object, serializing it to a RealPacket using the object's createRealPacket() method, sending off the RealPacket to the Meridian node, and wait for responses that can be parsed using the static parse() method in each packet type. The DemoMultiConstraint.cpp file demonstrates how to issue multi-constraint queries.Meridian is packaged together into libMeridian.a. However, a BLAS library isalso required to build (https://sourceforge.net/projects/math-atlas), as is libqhull (http://www.qhull.org), libg2c, libresolv, and zlib.NOTES:- Firewall support has not been extensively tested. We don't have access to a lot of geographically diverse firewalled nodes to test with. - Currently, if a firewalled host's rendavous node fails, the firewalled host's Meridian child process will gracefully terminate. The program needs to manually restart the meridian object with another rendavous node.- Firewalled nodes are treated as secondary citizens. They do not participate in the ring management protocol, which means non-firewalled nodes are always chosen ahead of firewalled nodes as ring members. This is due to firewalled nodes' inability to measure their latency to another firewalled node. This further restricts firewalled nodes to only have non-firewalled nodes as ring members.- Meridian as described in the paper uses PUSH gossip, along with retrieving all the peers of its seed nodes to bootstrap. In our current implementation, the bootstrap part is not in place, as it works well in practice without it. However, without the boostrap, there exists some uncommon pathological cases where certain nodes in highly dense areas may end up only having outlinks to the seed nodes. The ring management protocol makes this very uncommon, and this can almost be completly mitigated by choosing the closest current Meridian node as one of the seeds. One alternative that is provided is to use PUSHPULL instead of PUSH gossip, which addresses all the pathological cases, and can be turned on by adding the -DGOSSIP_PUSHPULL compile flag.- Currently, we make the assumption that IP addresses are 32-bit throughout the program. Any questions regarding Meridian can be sent to Bernard at bwong@cs.cornell.edu.More information about Meridian can be found at http://www.cs.cornell.edu/~bwong/meridianRegards,BernardUpdated August 13, 2005The Meridian Query Language (MQL) has been added to the Meridian distribution. MQL is a C/Python-like lanuguage that is safe, interpreted, dynamically-typed and polymorphic. It is sufficiently general to express the different protocolsdescribed in our SIGCOMM paper, and hopefully is general enough to expressmany other network location queries.The file closestNode.b is an example of program written in MQL, and performsthe closest node discovery and central leader election protocol. It can betested by running: demoMQL closestNode.bdemoMQL is a standalone MQL interpreter, used primarily for testing and debugging. It does not take any command line parameters, but simply startsexecuting from the main function of the provided query. The program DSLLauncher can be used to issue queries without running a local interpreterand without a main function in the query, and the DSLLauncher.cpp can serveas an example on how to issue queries within a user application.NOTES:- I used the C grammar found at http://www.lysator.liu.se/c/ANSI-C-grammar-y.html http://www.lysator.liu.se/c/ANSI-C-grammar-l.html as a reference during the development of MQL.- The codebase related to MQL is a little rough around the edges in readability. I will try to clean it up and restructure some of it in future releasesMore information about the syntax and libraries associated with MQL can befound at: http://www.cs.cornell.edu/People/egs/meridian/dsldescription.phpRegards,BernardUpdated September 4, 2005ICMP probes has been added, and can be turned on with the compile flag -DPLANET_LAB_SUPPORTThe demo applications has been modified to support ICMP, as well as the MQL interpreter with the addition of the library function get_distance_icmp.Note that ICMP support requires the Meridian process to have root privilegein order to create the necessary raw socket. The ICMP code has only been tested on PlanetLab.Regards,BernardUpdated March 30, 2006The Meridian library now uses the autoconf/autoscan/automake toolchain toimprove the robustness of the build process.To build and setup Meridian, simply go ./configure make APPNAME="NameOfYourService" make install and the binaries and headers will be installed into the bin and includedirectory respectively. The packages that Meridian requires have changed slightly. The packagedependencies are now the following: atlas openssl curl gfortran qhull bind zlib The build has been tested on FC4, with gcc 4.0.1, flex 2.5.4, and bison 2.0. Ubuntu 4 packages flex 2.5.31, which breaks the build process (this wasfirst noted by Leandro Navarro). His fix for the problem is copied below.> leandro@bastian:~/pl/Meridian/src$ make APPNAME="sodx"> flex -oMQL.flex.cpp MQL.lex> g++ -c -I. -I../extinc -O2 -Wall -DGOSSIP_PUSHPULL -DMERIDIAN_DSL> -DPLANET_LAB_SUPPORT -DAPPNAME="sodx" -I. -o MQL.flex.o MQL.flex.cpp> /usr/include/FlexLexer.h:112: error: redefinition of 'class yyFlexLexer'> /usr/include/FlexLexer.h:112: error: previous definition of 'class> yyFlexLexer'> make: *** [MQL.flex.o] Error 1> rm MQL.flex.cpp>> I could not find initially the problem since MQL.flex.cpp was removed by> the Makefile.> In that file I found in the beginning:>> /* The c++ scanner is a mess. The FlexLexer.h header file relies on the> * following macro.> */> #define yyFlexLexer yyFlexLexer> When I commented this line, it worked !!This looks like a bug in flex, or perhaps there has been a major interfacechange in the new version. I'll try to find a better workaround for the nextversion of the Meridian library. Currently, I suggest sticking with flex 2.5.4.Flex 2.5.33 is also available now, perhaps this problem may have been addressed. Please e-mail me at bwong@cs.cornell.edu for any suggestions, questions or problems, I'll be happy to help.Regards,Bernard
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -