Package edu.brown.benchmark.tpce.generators

Source Code of edu.brown.benchmark.tpce.generators.CETxnMixGenerator

package edu.brown.benchmark.tpce.generators;

import edu.brown.benchmark.tpce.util.EGenRandom;

public class CETxnMixGenerator {
    public CETxnMixGenerator( TDriverCETxnSettings driverCETxnSettings, BaseLogger logger ){
        this.driverCETxnSettings =  driverCETxnSettings;
        rnd = new EGenRandom(EGenRandom.RNG_SEED_BASE_TXN_MIX_GENERATOR );
        this.logger = logger;
        txnArrayCurrentIndex = 0;
        txnArray = null;
     }

    public CETxnMixGenerator( TDriverCETxnSettings driverCETxnSettings, long RNGSeed, BaseLogger logger ){
        this.driverCETxnSettings =  driverCETxnSettings;
        rnd = new EGenRandom(RNGSeed );
        this.logger = logger;
        txnArrayCurrentIndex = 0;
        txnArray = null;
     }

    public long  getRNGSeed(){
        return rnd.getSeed();
    }
   
    public void  setRNGSeed(long RNGSeed ){
        rnd.setSeed( RNGSeed );
    }
   
    public void  updateTunables( ){
        int   i;
        int   BrokerVolumeMixLimit;
        int   CustomerPositionMixLimit;
        int   MarketWatchMixLimit;
        int   SecurityDetailMixLimit;
        int   TradeLookupMixLimit;
        int   TradeOrderMixLimit;
        int   TradeStatusMixLimit;
        int   TradeUpdateMixLimit;
       
        transactionMixTotalCE = driverCETxnSettings.TxnMixGenerator_settings.cur_BrokerVolumeMixLevel +
                                 driverCETxnSettings.TxnMixGenerator_settings.cur_CustomerPositionMixLevel +
                                 driverCETxnSettings.TxnMixGenerator_settings.cur_MarketWatchMixLevel +
                                 driverCETxnSettings.TxnMixGenerator_settings.cur_SecurityDetailMixLevel +
                                 driverCETxnSettings.TxnMixGenerator_settings.cur_TradeLookupMixLevel +
                                 driverCETxnSettings.TxnMixGenerator_settings.cur_TradeOrderMixLevel +
                                 driverCETxnSettings.TxnMixGenerator_settings.cur_TradeStatusMixLevel +
                                 driverCETxnSettings.TxnMixGenerator_settings.cur_TradeUpdateMixLevel;
   
        TradeStatusMixLimit = driverCETxnSettings.TxnMixGenerator_settings.cur_TradeStatusMixLevel;
        MarketWatchMixLimit = driverCETxnSettings.TxnMixGenerator_settings.cur_MarketWatchMixLevel + TradeStatusMixLimit;
        SecurityDetailMixLimit = driverCETxnSettings.TxnMixGenerator_settings.cur_SecurityDetailMixLevel + MarketWatchMixLimit;
        CustomerPositionMixLimit = driverCETxnSettings.TxnMixGenerator_settings.cur_CustomerPositionMixLevel + SecurityDetailMixLimit;
        TradeOrderMixLimit = driverCETxnSettings.TxnMixGenerator_settings.cur_TradeOrderMixLevel + CustomerPositionMixLimit;
        TradeLookupMixLimit = driverCETxnSettings.TxnMixGenerator_settings.cur_TradeLookupMixLevel + TradeOrderMixLimit;
        TradeUpdateMixLimit = driverCETxnSettings.TxnMixGenerator_settings.cur_TradeUpdateMixLevel + TradeLookupMixLimit;
        BrokerVolumeMixLimit = driverCETxnSettings.TxnMixGenerator_settings.cur_BrokerVolumeMixLevel + TradeUpdateMixLimit;
   
        if (txnArray != null){
            txnArray = null;
        }
   
        txnArray = new char[transactionMixTotalCE];
      
        for (i = 0; i < TradeStatusMixLimit; ++i){
            txnArray[i] = TRADE_STATUS;
        }
        for (; i < MarketWatchMixLimit; ++i){
            txnArray[i] = MARKET_WATCH;
        }
        for (; i < SecurityDetailMixLimit; ++i){
            txnArray[i] = SECURITY_DETAIL;
        }
        for (; i < CustomerPositionMixLimit; ++i){
            txnArray[i] = CUSTOMER_POSITION;
        }
        for (; i < TradeOrderMixLimit; ++i){
            txnArray[i] = TRADE_ORDER;
        }
        for (; i < TradeLookupMixLimit; ++i){
            txnArray[i] = TRADE_LOOKUP;
        }
        for (; i < TradeUpdateMixLimit; ++i){
            txnArray[i] = TRADE_UPDATE;
        }
        for (; i < BrokerVolumeMixLimit; ++i){
            txnArray[i] = BROKER_VOLUME;
        }
   
        txnArrayCurrentIndex = 0;

        logger.sendToLogger(driverCETxnSettings.TxnMixGenerator_settings);
    }
   
    public int  generateNextTxnType(){
        int threshold = rnd.intRange( txnArrayCurrentIndex, transactionMixTotalCE - 1);
   
        char iTxnType = txnArray[threshold];

        txnArray[threshold] = txnArray[txnArrayCurrentIndex];
        txnArray[txnArrayCurrentIndex] = iTxnType;
   
        txnArrayCurrentIndex = (txnArrayCurrentIndex + 1) % transactionMixTotalCE;
   
        return iTxnType;
    }

    public static final int INVALID_TRANSACTION_TYPE = -1;
    public static final int SECURITY_DETAIL          =  0;
    public static final int BROKER_VOLUME            =  1;
    public static final int CUSTOMER_POSITION        =  2;
    public static final int MARKET_WATCH             =  3;
    public static final int TRADE_STATUS             =  4;
    public static final int TRADE_LOOKUP             =  5;
    public static final int TRADE_ORDER              =  6;
    public static final int TRADE_UPDATE             =  7;
    public static final int MARKET_FEED              =  8;
    public static final int TRADE_RESULT             =  9;
       
    private final TDriverCETxnSettings  driverCETxnSettings;
    private EGenRandom                  rnd;
    private BaseLogger                  logger;

    private int                         transactionMixTotalCE;
    private int                         txnArrayCurrentIndex;
    private char[]                      txnArray;
}
TOP

Related Classes of edu.brown.benchmark.tpce.generators.CETxnMixGenerator

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.