package ch.usi.da.paxos.old; /* * Copyright (c) 2013 Università della Svizzera italiana (USI) * * This file is part of URingPaxos. * * URingPaxos is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * URingPaxos is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with URingPaxos. If not, see <http://www.gnu.org/licenses/>. */ import java.io.BufferedReader; import java.io.FileReader; import java.io.IOException; import java.io.InputStream; import java.net.InetAddress; import java.net.InetSocketAddress; import java.net.SocketAddress; import java.util.HashMap; import java.util.Map; import java.util.Properties; import ch.usi.da.paxos.api.PaxosRole; /** * Name: Configuration<br> * Description: <br> * * Creation date: Apr 1, 2012<br> * $Id$ * * @author Samuel Benz benz@geoid.ch */ public class Configuration { /** * the group member addresses */ public static Map<PaxosRole,SocketAddress> groups = new HashMap<PaxosRole,SocketAddress>(); private static Properties conf = null; /** * Number of acceptors in the system */ public static int acceptor_count = 1; /** * Multicast interface */ public static String multicast_interface = "eth0"; /** * Zookeeper */ public static String zookeeper = "127.0.0.1:2181"; private Configuration(){ } /** * Get the quorum count you have to reach in this system * * @return quorum */ public static int getQuorum(){ return (int) Math.ceil((double)(acceptor_count+1)/2); } /** * Get all configurations * * @return all group addresses */ public static Map<PaxosRole,SocketAddress> getConfiguration(){ return groups; } /** * Get group address * * @param group name of the group * @return the group address */ public static InetSocketAddress getGroup(PaxosRole group){ return (InetSocketAddress)groups.get(group); } /** * Parse the file * * @param file * @throws IOException */ public static void read(String file) throws IOException{ BufferedReader input = new BufferedReader(new FileReader(file)); try { String line = null; while ((line = input.readLine()) != null) { if(!line.startsWith("#")){ String[] token = line.split("\\s+"); InetAddress ip = InetAddress.getByName(token[1]); int port = Integer.parseInt(token[2]); SocketAddress address = new InetSocketAddress(ip,port); if(token[0].toLowerCase().contains("accept")){ groups.put(PaxosRole.Acceptor,address); }else if(token[0].toLowerCase().contains("propose")){ groups.put(PaxosRole.Proposer,address); }else if(token[0].toLowerCase().contains("learn")){ groups.put(PaxosRole.Learner,address); }else if(token[0].toLowerCase().contains("lead")){ groups.put(PaxosRole.Leader,address); } } } } finally { input.close(); } if(conf == null){ conf = Configuration.getProperties(); } } /** * @return the multicast interface */ public static String getInterface(){ if(conf == null){ conf = Configuration.getProperties(); } return multicast_interface; } private static Properties getProperties() { Properties conf = new Properties(); InputStream in = Configuration.class.getClassLoader().getResourceAsStream("paxos.properties"); if (in != null) { try { conf.load(in); if(conf.containsKey("acceptor_count")){ acceptor_count = Integer.parseInt(conf.getProperty("acceptor_count")); } if(conf.containsKey("multicast_interface")){ multicast_interface = conf.getProperty("multicast_interface"); } if(conf.containsKey("zookeeper")){ zookeeper = conf.getProperty("zookeeper"); } } catch (IOException e) { e.printStackTrace(); } } return conf; } }