Package edu.brown.benchmark.tpce.generators

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

package edu.brown.benchmark.tpce.generators;

import java.util.List;

import org.voltdb.catalog.Table;

import edu.brown.benchmark.tpce.TPCEConstants;
import edu.brown.benchmark.tpce.TPCEConstants.eStatusTypeID;
import edu.brown.benchmark.tpce.generators.CustomerSelection.TierId;
import edu.brown.benchmark.tpce.util.*;
import edu.brown.benchmark.tpce.generators.TPCEGenerator.InputFile;

public class DM {
   
    private DriverGlobalSettings                       driverGlobalSettings;
    private DriverDMSettings                           driverDMSettings;

    private EGenRandom                                 rnd;
    private CustomerSelection                          customerSelection;
    private CustomerAccountsGenerator                  account;
    private SecurityHandler                            securities;
    private CompanyGenerator                           companies;
    private InputFileHandler                           taxRatesDivision;
    private InputFileHandler                           statusType;
    private long                                       securityCount;
    private long                                       companyCount;
    private long                                       startFromCompany;
    private int                                        divisionTaxCount;
    private long                                       startFromCustomer;
    private long                                       myCustomerCount;
    private int                                        dataMaintenanceTableNum;

    private TDataMaintenanceTxnInput                   txnInput;
    private TTradeCleanupTxnInput                      cleanupTxnInput;
    private DMSUTInterface                             sut;
    private BaseLogger                                 logger;

    public static final int                            iDataMaintenanceTableCount = 12;
   
    public static String DataMaintenanceTableName[] = {
        "ACCOUNT_PERMISSION",
        "ADDRESS",
        "COMPANY",
        "CUSTOMER",
        "CUSTOMER_TAXRATE",
        "DAILY_MARKET",
        "EXCHANGE",
        "FINANCIAL",
        "NEWS_ITEM",
        "SECURITY",
        "TAXRATE",
        "WATCH_ITEM"
    };

    private void autoSetRNGSeeds( long uniqueID ){
        int baseYear, baseMonth, baseDay, millisec;

        baseYear = EGenDate.getYear();
        baseMonth = EGenDate.getMonth();
        baseDay = EGenDate.getDay();
        millisec = (EGenDate.getHour() * EGenDate.MinutesPerHour + EGenDate.getMinute()) * EGenDate.SecondsPerMinute + EGenDate.getSecond();
        baseYear -= ( baseYear % 5 );

        long Seed;
        Seed = millisec / 100;
        Seed <<= 11;
        Seed += EGenDate.getDayNo(baseYear, baseMonth, baseDay) - EGenDate.getDayNo(baseYear, 1, 1);
        Seed <<= 33;
        rnd.setSeed( Seed );
        driverDMSettings.cur_RNGSeed = Seed;
    }

    private long  generateRandomCustomerId(){
        return rnd.int64Range(startFromCustomer,
                startFromCustomer + driverGlobalSettings.cur_iActiveCustomerCount - 1);
    }

    private long generateRandomCustomerAccountId(){
        long iCustomerId;
        TierId iCustomerTier;
        Object[] customerId;
        customerId = customerSelection.genRandomCustomer();
        iCustomerId = Long.parseLong(customerId[0].toString());
        iCustomerTier = (TierId)customerId[0];
        return( account.genRandomAccId(rnd, iCustomerId, iCustomerTier)[0]);
    }

    private long generateRandomCompanyId(){
        return rnd.int64Range(startFromCompany, startFromCompany + companyCount - 1);
    }

    private long generateRandomSecurityId(){
        return rnd.int64Range(0, securityCount-1);
    }

    private void initialize(){
        logger.sendToLogger(driverGlobalSettings);

        securityCount = SecurityHandler.getSecurityNum(myCustomerCount);
        companyCount = companies.getCompanyCount();
        startFromCompany = companies.generateCompId();
        divisionTaxCount = taxRatesDivision.getRecordsNum();
        startFromCustomer = TPCEConstants.DEFAULT_START_CUSTOMER_ID + TPCEConstants.IDENT_SHIFT;
    }

    public DM( DMSUTInterface pSUT, BaseLogger pLogger, TPCEGenerator inputFiles, long iConfiguredCustomerCount, long iActiveCustomerCount, int iScaleFactor, int iDaysOfInitialTrades, long uniqueID ){
             driverGlobalSettings = new DriverGlobalSettings( iConfiguredCustomerCount, iActiveCustomerCount, iScaleFactor, iDaysOfInitialTrades );
             driverDMSettings = new DriverDMSettings( uniqueID, 0 );
        rnd = new EGenRandom();
        customerSelection = new CustomerSelection(rnd, TPCEConstants.DEFAULT_START_CUSTOMER_ID, TPCEConstants.ACTIVECUSTOMERCOUNT);
        account = (CustomerAccountsGenerator)inputFiles.getTableGen(TPCEConstants.TABLENAME_CUSTOMER_ACCOUNT, null);
           
        securities = new SecurityHandler(inputFiles);
        companies = (CompanyGenerator)inputFiles.getTableGen(TPCEConstants.TABLENAME_COMPANY, null);
        taxRatesDivision = inputFiles.getInputFile(InputFile.TAXDIV);
        statusType = inputFiles.getInputFile(InputFile.STATUS);
        divisionTaxCount = 0;
        dataMaintenanceTableNum = 0;
        sut = pSUT;
        logger = pLogger ;
        myCustomerCount = iActiveCustomerCount;
        logger.sendToLogger("DM object constructed using constructor 1 (valid for publication: YES).");
        initialize();
        autoSetRNGSeeds( uniqueID );
        logger.sendToLogger(driverDMSettings);
       
    }

     public DM( DMSUTInterface pSUT, BaseLogger pLogger, TPCEGenerator inputFiles, long iConfiguredCustomerCount, long iActiveCustomerCount, int iScaleFactor,
                 int iDaysOfInitialTrades, long uniqueID, long RNGSeed ){
        driverGlobalSettings = new DriverGlobalSettings( iConfiguredCustomerCount, iActiveCustomerCount, iScaleFactor, iDaysOfInitialTrades );
        driverDMSettings = new DriverDMSettings( uniqueID, RNGSeed );
        customerSelection = new CustomerSelection(rnd, TPCEConstants.DEFAULT_START_CUSTOMER_ID, TPCEConstants.ACTIVECUSTOMERCOUNT);
        account = (CustomerAccountsGenerator)inputFiles.getTableGen(TPCEConstants.TABLENAME_CUSTOMER_ACCOUNT, null);
        rnd = new EGenRandom(RNGSeed);
        securities = new SecurityHandler(inputFiles);
        companies = (CompanyGenerator)inputFiles.getTableGen(TPCEConstants.TABLENAME_COMPANY, null);
        taxRatesDivision = inputFiles.getInputFile(InputFile.TAXDIV);
        statusType = inputFiles.getInputFile(InputFile.STATUS);
        divisionTaxCount = 0;
        dataMaintenanceTableNum = 0;
        sut = pSUT;
        logger = pLogger ;
        logger.sendToLogger("DM object constructed using constructor 1 (valid for publication: YES).");
        initialize();
        logger.sendToLogger(driverDMSettings);
        }


     public long getRNGSeed(){
         return( rnd.getSeed() );
     }
     public void DoTxn(){
         txnInput = new TDataMaintenanceTxnInput();
         txnInput.setTableName(DataMaintenanceTableName[dataMaintenanceTableNum]);

         switch( dataMaintenanceTableNum ){
         case 0: // ACCOUNT_PERMISSION
             txnInput.setAcctId(generateRandomCustomerAccountId());
             break;
         case 1: // ADDRESS
             if (rnd.rndPercent(67)){
                 txnInput.setCId( generateRandomCustomerId());
             }
             else{
                 txnInput.setCoId(generateRandomCompanyId());
             }
             break;
         case 2: // COMPANY
             txnInput.setCoId(generateRandomCompanyId());
             break;
         case 3: // CUSTOMER
             txnInput.setCId(generateRandomCustomerId());
             break;
         case 4: // CUSTOMER_TAXRATE
             txnInput.setCId(generateRandomCustomerId());
             break;
         case 5: // DAILY_MARKET
             txnInput.setSymbol(securities.createSymbol( generateRandomSecurityId(), txnInput.getSymbol().length()));
             txnInput.setDayOfMonth(rnd.intRange(1, 31));
             txnInput.setVolIncr(rnd.intRange(-2, 3));
             if (txnInput.getVolIncr() == 0)
             {
                 txnInput.setVolIncr(-3);
             }
             break;
         case 6: // EXCHANGE
             break;
         case 7: // FINANCIAL
             txnInput.setCoId(generateRandomCompanyId());
             break;
         case 8: // NEWS_ITEM
             txnInput.setCoId(generateRandomCompanyId());
             break;
         case 9: // SECURITY
             txnInput.setSymbol(securities.createSymbol( generateRandomSecurityId(), txnInput.getSymbol().length()));
             break;
            
         case 10: // TAXRATE
             List<String[]>  pRates;
             int threshold;

             pRates = taxRatesDivision.getTuplesByIndex(rnd.intRange(0, divisionTaxCount - 1));
             threshold = rnd.intRange(0, pRates.size()-1);
             txnInput.setTxId(pRates.get(threshold)[0]);
             break;
         case 11: // WATCH_ITEM
             txnInput.setCId(generateRandomCustomerId());
             break;

         default:
             assert(false);
         }

         sut.DataMaintenance( txnInput );

         dataMaintenanceTableNum = (dataMaintenanceTableNum + 1) % iDataMaintenanceTableCount;
     }
     public void    DoCleanupTxn(){
         cleanupTxnInput = new TTradeCleanupTxnInput();
         cleanupTxnInput.start_trade_id =
                     (long)((( driverGlobalSettings.cur_iDaysOfInitialTrades * EGenDate.HoursPerWorkDay * EGenDate.SecondsPerHour * ( driverGlobalSettings.cur_iActiveCustomerCount / driverGlobalSettings.cur_iScaleFactor )) * TPCEConstants.AbortTrade / 100 ) + 1)
         System.arraycopy(statusType.getTupleByKey(eStatusTypeID.ePending.getVal())[0], 0, cleanupTxnInput.st_pending_id, 0, TableConsts.cST_ID_len);
         System.arraycopy(statusType.getTupleByKey(eStatusTypeID.eSubmitted.getVal())[0], 0, cleanupTxnInput.st_submitted_id, 0, TableConsts.cST_ID_len);
         System.arraycopy(statusType.getTupleByKey(eStatusTypeID.eCanceled.getVal())[0], 0, cleanupTxnInput.st_canceled_id, 0, TableConsts.cST_ID_len);
           
         sut.TradeCleanup( cleanupTxnInput );
    }
}
TOP

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

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.