Because FreePastry is a research project used for a variety of purposes, there are a lot of "knobs" that can be adjusted. We have attempted to tune these knobs for the most common configurations, but over the years we have had requests to adjust various aspects of FreePastry for the developer/researcher's unique purposes. Thus we decided it would be useful to have a central place for all of these kinds of configurations rather than adjusting constants in the code. To make this as useful as possible, FreePastry's paramter system has the following capabilities:
Every PastryNode has access to the Environment. To read a parameter, FreePastry calls environment.getParameters().getXXX("parameter_name")
. A parameter can be of various types including ints, strings, and InetAddresses. See the JavaDoc for Parameters for more information.
Most applications use the default constructor for the Environment. This will load a "default" parameter file from the jar called freepastry.params. If java can find a file in the working directory called "user.params" it will load this as the mutable parameter store. Any values in this file will overwrite the default configurations stored in the jar.
Note:If you want to use a different mutable parameters filename than "user.params", you can use the single argument constructor of Environment. If you wish to have additional defaults in your application, you can call the 2 argument constructor of the Environment.
If your application uses the default Environment constructor, it will search for a user.params file in the working directory. If it finds one, it will use it.
Thus if you want to add/modify the parameter "external_address" and set it to "123.45.67.89:1234" do the following.
1) Create a text file named user.params in your working directory.
2) Add the following line to freepastry.params
external_address = 123.45.67.89:1234
Before building (with ant), edit the file located in the source distribution in jars/freepastry.params
. The documentation for the parameters is in the file.
Right after you create the Environment, call getParameters().setXXX("param_name");
Thus if you want to add/modify the parameter "external_address" and set it to "123.45.67.89:1234" do the following.
Environment env = new Environment(); env.getParameters().setInetSocketAddress("external_address",new InetSocketAddress(InetAddress.getByName("123.45.67.89"),1234));