Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Browse files

Add new ConstantOccupancyWorkload to induce fragmentation in large ob…

…ject stores.
  • Loading branch information...
commit 5655c24c1741b0b00e05f32dad97a353a4d5c56f 1 parent 2c5daad
Russell Sears authored
Showing with 90 additions and 0 deletions.
  1. +90 −0 src/com/yahoo/ycsb/workloads/ConstantOccupancyWorkload.java
90 src/com/yahoo/ycsb/workloads/ConstantOccupancyWorkload.java
View
@@ -0,0 +1,90 @@
+/**
+ * Copyright (c) 2010 Yahoo! Inc. All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); you
+ * may not use this file except in compliance with the License. You
+ * may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ * implied. See the License for the specific language governing
+ * permissions and limitations under the License. See accompanying
+ * LICENSE file.
+ */
+package com.yahoo.ycsb.workloads;
+
+import java.util.Properties;
+
+import com.yahoo.ycsb.WorkloadException;
+import com.yahoo.ycsb.Client;
+import com.yahoo.ycsb.generator.IntegerGenerator;
+
+/**
+ * A disk-fragmenting workload.
+ * <p>
+ * Properties to control the client:
+ * </p>
+ * <UL>
+ * <LI><b>disksize</b>: how many bytes of storage can the disk store? (default 100,000,000)
+ * <LI><b>occupancy</b>: what fraction of the available storage should be used? (default 0.9)
+ * <LI><b>requestdistribution</b>: what distribution should be used to select the records to operate on - uniform, zipfian or latest (default: histogram)
+ * </ul>
+ *
+ *
+ * <p> See also:
+ * Russell Sears, Catharine van Ingen.
+ * <a href='https://database.cs.wisc.edu/cidr/cidr2007/papers/cidr07p34.pdf'>Fragmentation in Large Object Repositories</a>,
+ * CIDR 2006. [<a href='https://database.cs.wisc.edu/cidr/cidr2007/slides/p34-sears.ppt'>Presentation</a>]
+ * </p>
+ *
+ *
+ * @author sears
+ *
+ */
+public class ConstantOccupancyWorkload extends CoreWorkload {
+ long disksize;
+ long storageages;
+ IntegerGenerator objectsizes;
+ double occupancy;
+
+ long object_count;
+
+ public static final String STORAGE_AGE_PROPERTY = "storageages";
+ public static final long STORAGE_AGE_PROPERTY_DEFAULT = 10;
+
+ public static final String DISK_SIZE_PROPERTY = "disksize";
+ public static final long DISK_SIZE_PROPERTY_DEFAULT = 100 * 1000 * 1000;
+
+ public static final String OCCUPANCY_PROPERTY = "occupancy";
+ public static final double OCCUPANCY_PROPERTY_DEFAULT = 0.9;
+
+ @Override
+ public void init(Properties p) throws WorkloadException
+ {
+ disksize = Long.parseLong( p.getProperty(DISK_SIZE_PROPERTY, DISK_SIZE_PROPERTY_DEFAULT+""));
+ storageages = Long.parseLong( p.getProperty(STORAGE_AGE_PROPERTY, STORAGE_AGE_PROPERTY_DEFAULT+""));
+ occupancy = Double.parseDouble(p.getProperty(OCCUPANCY_PROPERTY, OCCUPANCY_PROPERTY_DEFAULT+""));
+
+ if(p.getProperty(Client.RECORD_COUNT_PROPERTY) != null ||
+ p.getProperty(Client.INSERT_COUNT_PROPERTY) != null ||
+ p.getProperty(Client.OPERATION_COUNT_PROPERTY) != null) {
+ System.err.println("Warning: record, insert or operation count was set prior to initting ConstantOccupancyWorkload. Overriding old values.");
+ }
+ IntegerGenerator g = CoreWorkload.getFieldLengthGenerator(p);
+ System.out.println(g+ " mean " + g.mean());
+ double fieldsize = g.mean();
+ int fieldcount = Integer.parseInt(p.getProperty(FIELD_COUNT_PROPERTY, FIELD_COUNT_PROPERTY_DEFAULT));
+
+ object_count = (long)(occupancy * ((double)disksize / (fieldsize * (double)fieldcount)));
+ System.out.println("occupancy " + occupancy + " object count " + object_count);
+ p.setProperty(Client.RECORD_COUNT_PROPERTY, object_count+"");
+ p.setProperty(Client.OPERATION_COUNT_PROPERTY, (storageages*object_count)+"");
+ p.setProperty(Client.INSERT_COUNT_PROPERTY, object_count+"");
+
+ super.init(p);
+ }
+
+}
Please sign in to comment.
Something went wrong with that request. Please try again.