Package edu.brown.designer.placement

Source Code of edu.brown.designer.placement.TransformTransactionTraces$TxnPartition

package edu.brown.designer.placement;

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

import org.apache.log4j.Logger;
import org.voltdb.catalog.Database;

import edu.brown.hstore.HStoreConstants;
import edu.brown.statistics.ObjectHistogram;
import edu.brown.utils.FileUtil;
import edu.brown.utils.PartitionEstimator;
import edu.brown.utils.PartitionSet;
import edu.brown.workload.QueryTrace;
import edu.brown.workload.TransactionTrace;

public class TransformTransactionTraces {

    private static final Logger LOG = Logger.getLogger(TransformTransactionTraces.class);

    static class TxnPartition {
        int basePartition;
        List<PartitionSet> partitions = new ArrayList<PartitionSet>();

        public TxnPartition(int basePartition) {
            this.basePartition = basePartition;
        }

        public List<PartitionSet> getPartitions() {
            return partitions;
        }

        public String toString() {
            StringBuilder sb = new StringBuilder();
            sb.append("base partition: " + String.valueOf(basePartition) + " ");
            for (PartitionSet batch : partitions) {
                for (Integer partition_id : batch) {
                    sb.append(String.valueOf(partition_id) + " ");
                }
            }
            return sb.toString();
        }
    }

    public static void transform(List<TransactionTrace> txn_traces, PartitionEstimator est, Database catalogDb) {
        ObjectHistogram<String> hist = new ObjectHistogram<String>();
        List<TxnPartition> al_txn_partitions = new ArrayList<TxnPartition>();
        // Map<String, Integer> txn_partition_counts = new HashMap<String,
        // Integer>();
        TxnPartition txn_partitions;

        for (TransactionTrace trace : txn_traces) {
            int base_partition = HStoreConstants.NULL_PARTITION_ID;
            try {
                base_partition = est.getBasePartition(trace);
            } catch (Exception e1) {
                // TODO Auto-generated catch block
                e1.printStackTrace();
            }
            txn_partitions = new TxnPartition(base_partition);
            // int batch = 0;
            for (Integer batch_id : trace.getBatchIds()) {
                // list of query traces
                PartitionSet query_partitions = new PartitionSet();
                for (QueryTrace qt : trace.getBatches().get(batch_id)) {
                    try {
                        est.getAllPartitions(query_partitions, qt, base_partition);
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                }
                txn_partitions.getPartitions().add(query_partitions);
                // batch++;
            }
            if (!hist.contains(txn_partitions.toString())) {
                hist.put(txn_partitions.toString(), 1);
            } else {
                long count = hist.get(txn_partitions.toString());
                count++;
                hist.put(txn_partitions.toString(), count);
            }
            al_txn_partitions.add(txn_partitions);
        }
        LOG.info("Partition Histogram");
        LOG.info(hist.toString());
        writeFile(al_txn_partitions);
        // for (TxnPartition tp : al_txn_partitions) {
        // LOG.info(tp.toString());
        // }
    }

    /**
     * File format like the following: # of batches # of transactions base
     * partition [partitions batch 0 touches] [partitions batch 1 touches] ...
     * ... [partitions batch n touches] EOF
     *
     * @param xact_partitions
     */
    public static void writeFile(List<TxnPartition> xact_partitions) {
        assert (xact_partitions.size() > 0);
        TxnPartition xact_partition = xact_partitions.get(0);
        StringBuilder sb = new StringBuilder();
        sb.append(xact_partition.getPartitions().size() + " " + xact_partitions.size() + "\n");
        for (TxnPartition txn_partition : xact_partitions) {
            sb.append(txn_partition.basePartition + "\n");
            for (PartitionSet partition_set : txn_partition.getPartitions()) {
                for (Integer p_id : partition_set) {
                    sb.append(p_id + " ");
                }
                sb.append("\n");
            }
        }
        try {
            FileUtil.writeStringToFile("/home/sw47/Desktop/transaction.trace", sb.toString()); // FIXME
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

    }
}
TOP

Related Classes of edu.brown.designer.placement.TransformTransactionTraces$TxnPartition

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.