Package org.voltdb.compiler

Source Code of org.voltdb.compiler.ClusterCompiler

/* This file is part of VoltDB.
* Copyright (C) 2008-2010 VoltDB L.L.C.
*
* VoltDB 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.
*
* VoltDB 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 VoltDB.  If not, see <http://www.gnu.org/licenses/>.
*/
package org.voltdb.compiler;

import org.voltdb.catalog.Catalog;
import org.voltdb.catalog.Cluster;
import org.voltdb.catalog.Host;
import org.voltdb.catalog.Partition;
import org.voltdb.catalog.Site;

import edu.brown.catalog.ClusterConfiguration;
import edu.brown.catalog.FixCatalog;
import edu.brown.hstore.HStoreConstants;

public class ClusterCompiler
{
    /**
     * Add hosts, sites, and partitions to the catalog
     * @param catalog  The catalog to be modified
     * @param clusterConfig  The desired cluster configuration
     */
    static void compile(Catalog catalog, ClusterConfig clusterConfig)
    {
        // HACK!
        if (clusterConfig instanceof ClusterConfiguration) {
            FixCatalog.updateCatalog(catalog, (ClusterConfiguration)clusterConfig);
            return;
        }
       
        if (!clusterConfig.validate())
        {
            throw new RuntimeException(clusterConfig.getErrorMsg());
        }

        int hostCount = clusterConfig.getHostCount();
        int partitionCount = clusterConfig.getPartitionCount();
        int sitesPerHost = clusterConfig.getSitesPerHost();

        // add all the hosts
        Cluster cluster = catalog.getClusters().get("cluster");
        cluster.setNum_partitions(partitionCount);
        // set the address of the coordinator
        cluster.setLeaderaddress(clusterConfig.getLeaderAddress().trim());
        for (int i = 0; i < hostCount; i++) {
            Host host = cluster.getHosts().add(String.valueOf(i));
            host.setIpaddr("localhost"); // DEFAULT
        }

        // add all the partitions.
        for (int i = 0; i < partitionCount; ++i) {
            //cluster.getPartitions().add(String.valueOf(i));
        }

        // add all the sites
        int initiatorsPerHost = 1;
        int partitionCounter = -1;
        int nextInitiatorId = 1;
        int siteId = -1;
        for (int i = 0, cnt = (sitesPerHost * hostCount); i < cnt; i++) {

            int hostForSite = i / cnt;
            Host host = cluster.getHosts().get(String.valueOf(hostForSite));
            int hostId = Integer.parseInt(host.getTypeName());

//            int withinHostId = i % (sitesPerHost + initiatorsPerHost);

            //int siteId = hostId * VoltDB.SITES_TO_HOST_DIVISOR;// + withinHostId;

            Site site = cluster.getSites().add(String.valueOf(++siteId));
            site.setId(siteId);
            site.setHost(host);
            site.setProc_port(HStoreConstants.DEFAULT_PORT);
            site.setMessenger_port(HStoreConstants.DEFAULT_PORT + HStoreConstants.MESSENGER_PORT_OFFSET);
            site.setIsup(true);

            Partition part = site.getPartitions().add(String.valueOf(++partitionCounter));
            part.setId(partitionCounter);
//            System.err.println("[" + partitionCounter + "] " + CatalogUtil.getDisplayName(site) + " => " + CatalogUtil.getDisplayName(part));
//            System.err.println(CatalogUtil.debug(site));
        }
    }
}
TOP

Related Classes of org.voltdb.compiler.ClusterCompiler

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.