Search in sources :

Example 1 with WorkloadException

use of site.ycsb.WorkloadException in project YCSB by brianfrankcooper.

the class RestWorkload method getTrace.

/**
 * Reads the trace file and returns a URL map.
 */
private static Map<Integer, String> getTrace(String filePath, int recordCount) throws WorkloadException {
    Map<Integer, String> urlMap = new HashMap<Integer, String>();
    int count = 0;
    String line;
    try {
        FileReader inputFile = new FileReader(filePath);
        BufferedReader bufferReader = new BufferedReader(inputFile);
        while ((line = bufferReader.readLine()) != null) {
            urlMap.put(count++, line.trim());
            if (count >= recordCount) {
                break;
            }
        }
        bufferReader.close();
    } catch (IOException e) {
        throw new WorkloadException("Error while reading the trace. Please make sure the trace file path is correct. " + e.getLocalizedMessage());
    }
    return urlMap;
}
Also used : WorkloadException(site.ycsb.WorkloadException) HashMap(java.util.HashMap) BufferedReader(java.io.BufferedReader) FileReader(java.io.FileReader) IOException(java.io.IOException)

Example 2 with WorkloadException

use of site.ycsb.WorkloadException in project YCSB by brianfrankcooper.

the class TestTimeSeriesWorkload method validateSettingsDataIntegrity.

@Test
public void validateSettingsDataIntegrity() throws Exception {
    Properties p = getUTProperties();
    // data validation incompatibilities
    p.setProperty(CoreWorkload.DATA_INTEGRITY_PROPERTY, "true");
    try {
        getWorkload(p, true);
        fail("Expected WorkloadException");
    } catch (WorkloadException e) {
    }
    // now it's ok
    p.setProperty(TimeSeriesWorkload.VALUE_TYPE_PROPERTY, "integers");
    // now it's not
    p.setProperty(TimeSeriesWorkload.GROUPBY_PROPERTY, "sum");
    try {
        getWorkload(p, true);
        fail("Expected WorkloadException");
    } catch (WorkloadException e) {
    }
    p.setProperty(TimeSeriesWorkload.GROUPBY_PROPERTY, "");
    p.setProperty(TimeSeriesWorkload.DOWNSAMPLING_FUNCTION_PROPERTY, "sum");
    p.setProperty(TimeSeriesWorkload.DOWNSAMPLING_INTERVAL_PROPERTY, "60");
    try {
        getWorkload(p, true);
        fail("Expected WorkloadException");
    } catch (WorkloadException e) {
    }
    p.setProperty(TimeSeriesWorkload.DOWNSAMPLING_FUNCTION_PROPERTY, "");
    p.setProperty(TimeSeriesWorkload.DOWNSAMPLING_INTERVAL_PROPERTY, "");
    p.setProperty(TimeSeriesWorkload.QUERY_TIMESPAN_PROPERTY, "60");
    try {
        getWorkload(p, true);
        fail("Expected WorkloadException");
    } catch (WorkloadException e) {
    }
    p = getUTProperties();
    p.setProperty(CoreWorkload.DATA_INTEGRITY_PROPERTY, "true");
    p.setProperty(TimeSeriesWorkload.VALUE_TYPE_PROPERTY, "integers");
    p.setProperty(TimeSeriesWorkload.RANDOMIZE_TIMESERIES_ORDER_PROPERTY, "true");
    try {
        getWorkload(p, true);
        fail("Expected WorkloadException");
    } catch (WorkloadException e) {
    }
    p.setProperty(TimeSeriesWorkload.RANDOMIZE_TIMESERIES_ORDER_PROPERTY, "false");
    p.setProperty(TimeSeriesWorkload.INSERT_START_PROPERTY, "");
    try {
        getWorkload(p, true);
        fail("Expected WorkloadException");
    } catch (WorkloadException e) {
    }
}
Also used : WorkloadException(site.ycsb.WorkloadException) Properties(java.util.Properties) Test(org.testng.annotations.Test)

Example 3 with WorkloadException

use of site.ycsb.WorkloadException in project YCSB by brianfrankcooper.

the class TimeSeriesWorkload method initKeysAndTags.

/**
 * Breaks out the keys, tags and cardinality initialization in another method
 * to keep CheckStyle happy.
 * @throws WorkloadException If something goes pear shaped.
 */
protected void initKeysAndTags() throws WorkloadException {
    final int keyLength = Integer.parseInt(properties.getProperty(CoreWorkload.FIELD_LENGTH_PROPERTY, CoreWorkload.FIELD_LENGTH_PROPERTY_DEFAULT));
    final int tagKeyLength = Integer.parseInt(properties.getProperty(TAG_KEY_LENGTH_PROPERTY, TAG_KEY_LENGTH_PROPERTY_DEFAULT));
    final int tagValueLength = Integer.parseInt(properties.getProperty(TAG_VALUE_LENGTH_PROPERTY, TAG_VALUE_LENGTH_PROPERTY_DEFAULT));
    keyGenerator = new IncrementingPrintableStringGenerator(keyLength);
    tagKeyGenerator = new IncrementingPrintableStringGenerator(tagKeyLength);
    tagValueGenerator = new IncrementingPrintableStringGenerator(tagValueLength);
    final int threads = Integer.parseInt(properties.getProperty(Client.THREAD_COUNT_PROPERTY, "1"));
    final String tagCardinalityString = properties.getProperty(TAG_CARDINALITY_PROPERTY, TAG_CARDINALITY_PROPERTY_DEFAULT);
    final String[] tagCardinalityParts = tagCardinalityString.split(",");
    int idx = 0;
    totalCardinality = numKeys;
    perKeyCardinality = 1;
    int maxCardinality = 0;
    for (final String card : tagCardinalityParts) {
        try {
            tagCardinality[idx] = Integer.parseInt(card.trim());
        } catch (NumberFormatException nfe) {
            throw new WorkloadException("Unable to parse cardinality: " + card, nfe);
        }
        if (tagCardinality[idx] < 1) {
            throw new WorkloadException("Cardinality must be greater than zero: " + tagCardinality[idx]);
        }
        totalCardinality *= tagCardinality[idx];
        perKeyCardinality *= tagCardinality[idx];
        if (tagCardinality[idx] > maxCardinality) {
            maxCardinality = tagCardinality[idx];
        }
        ++idx;
        if (idx >= tagPairs) {
            // we have more cardinalities than tag keys so bail at this point.
            break;
        }
    }
    if (numKeys < threads) {
        throw new WorkloadException("Field count " + numKeys + " (keys for time " + "series workloads) must be greater or equal to the number of " + "threads " + threads);
    }
    // fill tags without explicit cardinality with 1
    if (idx < tagPairs) {
        tagCardinality[idx++] = 1;
    }
    for (int i = 0; i < tagCardinality.length; ++i) {
        if (tagCardinality[i] > 1) {
            firstIncrementableCardinality = i;
            break;
        }
    }
    keys = new String[numKeys];
    tagKeys = new String[tagPairs];
    tagValues = new String[maxCardinality];
    for (int i = 0; i < numKeys; ++i) {
        keys[i] = keyGenerator.nextString();
    }
    for (int i = 0; i < tagPairs; ++i) {
        tagKeys[i] = tagKeyGenerator.nextString();
    }
    for (int i = 0; i < maxCardinality; i++) {
        tagValues[i] = tagValueGenerator.nextString();
    }
    if (randomizeTimeseriesOrder) {
        Utils.shuffleArray(keys);
        Utils.shuffleArray(tagValues);
    }
    maxOffsets = (recordcount / totalCardinality) + 1;
    final int[] keyAndTagCardinality = new int[tagPairs + 1];
    keyAndTagCardinality[0] = numKeys;
    for (int i = 0; i < tagPairs; i++) {
        keyAndTagCardinality[i + 1] = tagCardinality[i];
    }
    cumulativeCardinality = new int[keyAndTagCardinality.length];
    for (int i = 0; i < keyAndTagCardinality.length; i++) {
        int cumulation = 1;
        for (int x = i; x <= keyAndTagCardinality.length - 1; x++) {
            cumulation *= keyAndTagCardinality[x];
        }
        if (i > 0) {
            cumulativeCardinality[i - 1] = cumulation;
        }
    }
    cumulativeCardinality[cumulativeCardinality.length - 1] = 1;
}
Also used : WorkloadException(site.ycsb.WorkloadException) IncrementingPrintableStringGenerator(site.ycsb.generator.IncrementingPrintableStringGenerator)

Example 4 with WorkloadException

use of site.ycsb.WorkloadException in project YCSB by brianfrankcooper.

the class TimeSeriesWorkload method init.

@Override
public void init(final Properties p) throws WorkloadException {
    properties = p;
    recordcount = Integer.parseInt(p.getProperty(Client.RECORD_COUNT_PROPERTY, Client.DEFAULT_RECORD_COUNT));
    if (recordcount == 0) {
        recordcount = Integer.MAX_VALUE;
    }
    timestampKey = p.getProperty(TIMESTAMP_KEY_PROPERTY, TIMESTAMP_KEY_PROPERTY_DEFAULT);
    valueKey = p.getProperty(VALUE_KEY_PROPERTY, VALUE_KEY_PROPERTY_DEFAULT);
    operationchooser = CoreWorkload.createOperationGenerator(properties);
    final int maxscanlength = Integer.parseInt(p.getProperty(CoreWorkload.MAX_SCAN_LENGTH_PROPERTY, CoreWorkload.MAX_SCAN_LENGTH_PROPERTY_DEFAULT));
    String scanlengthdistrib = p.getProperty(CoreWorkload.SCAN_LENGTH_DISTRIBUTION_PROPERTY, CoreWorkload.SCAN_LENGTH_DISTRIBUTION_PROPERTY_DEFAULT);
    if (scanlengthdistrib.compareTo("uniform") == 0) {
        scanlength = new UniformLongGenerator(1, maxscanlength);
    } else if (scanlengthdistrib.compareTo("zipfian") == 0) {
        scanlength = new ZipfianGenerator(1, maxscanlength);
    } else {
        throw new WorkloadException("Distribution \"" + scanlengthdistrib + "\" not allowed for scan length");
    }
    randomizeTimestampOrder = Boolean.parseBoolean(p.getProperty(RANDOMIZE_TIMESTAMP_ORDER_PROPERTY, RANDOMIZE_TIMESTAMP_ORDER_PROPERTY_DEFAULT));
    randomizeTimeseriesOrder = Boolean.parseBoolean(p.getProperty(RANDOMIZE_TIMESERIES_ORDER_PROPERTY, RANDOMIZE_TIMESERIES_ORDER_PROPERTY_DEFAULT));
    // setup the cardinality
    numKeys = Integer.parseInt(p.getProperty(CoreWorkload.FIELD_COUNT_PROPERTY, CoreWorkload.FIELD_COUNT_PROPERTY_DEFAULT));
    tagPairs = Integer.parseInt(p.getProperty(TAG_COUNT_PROPERTY, TAG_COUNT_PROPERTY_DEFAULT));
    sparsity = Double.parseDouble(p.getProperty(SPARSITY_PROPERTY, SPARSITY_PROPERTY_DEFAULT));
    tagCardinality = new int[tagPairs];
    final String requestdistrib = p.getProperty(CoreWorkload.REQUEST_DISTRIBUTION_PROPERTY, CoreWorkload.REQUEST_DISTRIBUTION_PROPERTY_DEFAULT);
    if (requestdistrib.compareTo("uniform") == 0) {
        keychooser = new UniformLongGenerator(0, numKeys - 1);
    } else if (requestdistrib.compareTo("sequential") == 0) {
        keychooser = new SequentialGenerator(0, numKeys - 1);
    } else if (requestdistrib.compareTo("zipfian") == 0) {
        keychooser = new ScrambledZipfianGenerator(0, numKeys - 1);
    // } else if (requestdistrib.compareTo("latest") == 0) {
    // keychooser = new SkewedLatestGenerator(transactioninsertkeysequence);
    } else if (requestdistrib.equals("hotspot")) {
        double hotsetfraction = Double.parseDouble(p.getProperty(CoreWorkload.HOTSPOT_DATA_FRACTION, CoreWorkload.HOTSPOT_DATA_FRACTION_DEFAULT));
        double hotopnfraction = Double.parseDouble(p.getProperty(CoreWorkload.HOTSPOT_OPN_FRACTION, CoreWorkload.HOTSPOT_OPN_FRACTION_DEFAULT));
        keychooser = new HotspotIntegerGenerator(0, numKeys - 1, hotsetfraction, hotopnfraction);
    } else {
        throw new WorkloadException("Unknown request distribution \"" + requestdistrib + "\"");
    }
    // figure out the start timestamp based on the units, cardinality and interval
    try {
        timestampInterval = Integer.parseInt(p.getProperty(TIMESTAMP_INTERVAL_PROPERTY, TIMESTAMP_INTERVAL_PROPERTY_DEFAULT));
    } catch (NumberFormatException nfe) {
        throw new WorkloadException("Unable to parse the " + TIMESTAMP_INTERVAL_PROPERTY, nfe);
    }
    try {
        timeUnits = TimeUnit.valueOf(p.getProperty(TIMESTAMP_UNITS_PROPERTY, TIMESTAMP_UNITS_PROPERTY_DEFAULT).toUpperCase());
    } catch (IllegalArgumentException e) {
        throw new WorkloadException("Unknown time unit type", e);
    }
    if (timeUnits == TimeUnit.NANOSECONDS || timeUnits == TimeUnit.MICROSECONDS) {
        throw new WorkloadException("YCSB doesn't support " + timeUnits + " at this time.");
    }
    tagPairDelimiter = p.getProperty(PAIR_DELIMITER_PROPERTY, PAIR_DELIMITER_PROPERTY_DEFAULT);
    deleteDelimiter = p.getProperty(DELETE_DELIMITER_PROPERTY, DELETE_DELIMITER_PROPERTY_DEFAULT);
    dataintegrity = Boolean.parseBoolean(p.getProperty(CoreWorkload.DATA_INTEGRITY_PROPERTY, CoreWorkload.DATA_INTEGRITY_PROPERTY_DEFAULT));
    if (dataintegrity) {
        System.out.println("Data integrity is enabled.");
    }
    queryTimeSpan = Integer.parseInt(p.getProperty(QUERY_TIMESPAN_PROPERTY, QUERY_TIMESPAN_PROPERTY_DEFAULT));
    queryRandomTimeSpan = Boolean.parseBoolean(p.getProperty(QUERY_RANDOM_TIMESPAN_PROPERTY, QUERY_RANDOM_TIMESPAN_PROPERTY_DEFAULT));
    queryTimeSpanDelimiter = p.getProperty(QUERY_TIMESPAN_DELIMITER_PROPERTY, QUERY_TIMESPAN_DELIMITER_PROPERTY_DEFAULT);
    groupByKey = p.getProperty(GROUPBY_KEY_PROPERTY, GROUPBY_KEY_PROPERTY_DEFAULT);
    groupByFunction = p.getProperty(GROUPBY_PROPERTY);
    if (groupByFunction != null && !groupByFunction.isEmpty()) {
        final String groupByKeys = p.getProperty(GROUPBY_KEYS_PROPERTY);
        if (groupByKeys == null || groupByKeys.isEmpty()) {
            throw new WorkloadException("Group by was enabled but no keys were specified.");
        }
        final String[] gbKeys = groupByKeys.split(",");
        if (gbKeys.length != tagKeys.length) {
            throw new WorkloadException("Only " + gbKeys.length + " group by keys " + "were specified but there were " + tagKeys.length + " tag keys given.");
        }
        groupBys = new boolean[gbKeys.length];
        for (int i = 0; i < gbKeys.length; i++) {
            groupBys[i] = Integer.parseInt(gbKeys[i].trim()) == 0 ? false : true;
        }
        groupBy = true;
    }
    downsampleKey = p.getProperty(DOWNSAMPLING_KEY_PROPERTY, DOWNSAMPLING_KEY_PROPERTY_DEFAULT);
    downsampleFunction = p.getProperty(DOWNSAMPLING_FUNCTION_PROPERTY);
    if (downsampleFunction != null && !downsampleFunction.isEmpty()) {
        final String interval = p.getProperty(DOWNSAMPLING_INTERVAL_PROPERTY);
        if (interval == null || interval.isEmpty()) {
            throw new WorkloadException("'" + DOWNSAMPLING_INTERVAL_PROPERTY + "' was missing despite '" + DOWNSAMPLING_FUNCTION_PROPERTY + "' being set.");
        }
        downsampleInterval = Integer.parseInt(interval);
        downsample = true;
    }
    delayedSeries = Double.parseDouble(p.getProperty(DELAYED_SERIES_PROPERTY, DELAYED_SERIES_PROPERTY_DEFAULT));
    delayedIntervals = Integer.parseInt(p.getProperty(DELAYED_INTERVALS_PROPERTY, DELAYED_INTERVALS_PROPERTY_DEFAULT));
    valueType = ValueType.fromString(p.getProperty(VALUE_TYPE_PROPERTY, VALUE_TYPE_PROPERTY_DEFAULT));
    table = p.getProperty(CoreWorkload.TABLENAME_PROPERTY, CoreWorkload.TABLENAME_PROPERTY_DEFAULT);
    initKeysAndTags();
    validateSettings();
}
Also used : ScrambledZipfianGenerator(site.ycsb.generator.ScrambledZipfianGenerator) ZipfianGenerator(site.ycsb.generator.ZipfianGenerator) WorkloadException(site.ycsb.WorkloadException) UniformLongGenerator(site.ycsb.generator.UniformLongGenerator) SequentialGenerator(site.ycsb.generator.SequentialGenerator) ScrambledZipfianGenerator(site.ycsb.generator.ScrambledZipfianGenerator) HotspotIntegerGenerator(site.ycsb.generator.HotspotIntegerGenerator)

Example 5 with WorkloadException

use of site.ycsb.WorkloadException in project YCSB by brianfrankcooper.

the class RestWorkload method getKeyChooser.

private static NumberGenerator getKeyChooser(String requestDistrib, int recordCount, double zipfContant, Properties p) throws WorkloadException {
    NumberGenerator keychooser;
    switch(requestDistrib) {
        case "exponential":
            double percentile = Double.parseDouble(p.getProperty(ExponentialGenerator.EXPONENTIAL_PERCENTILE_PROPERTY, ExponentialGenerator.EXPONENTIAL_PERCENTILE_DEFAULT));
            double frac = Double.parseDouble(p.getProperty(ExponentialGenerator.EXPONENTIAL_FRAC_PROPERTY, ExponentialGenerator.EXPONENTIAL_FRAC_DEFAULT));
            keychooser = new ExponentialGenerator(percentile, recordCount * frac);
            break;
        case "uniform":
            keychooser = new UniformLongGenerator(0, recordCount - 1);
            break;
        case "zipfian":
            keychooser = new ZipfianGenerator(recordCount, zipfContant);
            break;
        case "latest":
            throw new WorkloadException("Latest request distribution is not supported for RestWorkload.");
        case "hotspot":
            double hotsetfraction = Double.parseDouble(p.getProperty(HOTSPOT_DATA_FRACTION, HOTSPOT_DATA_FRACTION_DEFAULT));
            double hotopnfraction = Double.parseDouble(p.getProperty(HOTSPOT_OPN_FRACTION, HOTSPOT_OPN_FRACTION_DEFAULT));
            keychooser = new HotspotIntegerGenerator(0, recordCount - 1, hotsetfraction, hotopnfraction);
            break;
        default:
            throw new WorkloadException("Unknown request distribution \"" + requestDistrib + "\"");
    }
    return keychooser;
}
Also used : WorkloadException(site.ycsb.WorkloadException) UniformLongGenerator(site.ycsb.generator.UniformLongGenerator)

Aggregations

WorkloadException (site.ycsb.WorkloadException)5 UniformLongGenerator (site.ycsb.generator.UniformLongGenerator)2 BufferedReader (java.io.BufferedReader)1 FileReader (java.io.FileReader)1 IOException (java.io.IOException)1 HashMap (java.util.HashMap)1 Properties (java.util.Properties)1 Test (org.testng.annotations.Test)1 HotspotIntegerGenerator (site.ycsb.generator.HotspotIntegerGenerator)1 IncrementingPrintableStringGenerator (site.ycsb.generator.IncrementingPrintableStringGenerator)1 ScrambledZipfianGenerator (site.ycsb.generator.ScrambledZipfianGenerator)1 SequentialGenerator (site.ycsb.generator.SequentialGenerator)1 ZipfianGenerator (site.ycsb.generator.ZipfianGenerator)1