Page MenuHomec4science

DBWrapper.java
No OneTemporary

File Metadata

Created
Wed, May 22, 04:12

DBWrapper.java

/**
* 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;
import java.util.HashMap;
import java.util.Properties;
import java.util.Set;
import java.util.Vector;
import com.yahoo.ycsb.measurements.Measurements;
/**
* Wrapper around a "real" DB that measures latencies and counts return codes.
*/
public class DBWrapper extends DB
{
DB _db;
Measurements _measurements;
public DBWrapper(DB db)
{
_db=db;
_measurements=Measurements.getMeasurements();
}
/**
* Set the properties for this DB.
*/
public void setProperties(Properties p)
{
_db.setProperties(p);
}
/**
* Get the set of properties for this DB.
*/
public Properties getProperties()
{
return _db.getProperties();
}
/**
* Initialize any state for this DB.
* Called once per DB instance; there is one DB instance per client thread.
*/
public void init() throws DBException
{
_db.init();
}
/**
* Cleanup any state for this DB.
* Called once per DB instance; there is one DB instance per client thread.
*/
public void cleanup() throws DBException
{
long ist=_measurements.getIntendedtartTimeNs();
long st = System.nanoTime();
_db.cleanup();
long en=System.nanoTime();
measure("CLEANUP",ist, st, en);
}
/**
* Read a record from the database. Each field/value pair from the result will be stored in a HashMap.
*
* @param table The name of the table
* @param key The record key of the record to read.
* @param fields The list of fields to read, or null for all of them
* @param result A HashMap of field/value pairs for the result
* @return The result of the operation.
*/
public Status read(String table, String key, Set<String> fields, HashMap<String,ByteIterator> result)
{
long ist=_measurements.getIntendedtartTimeNs();
long st = System.nanoTime();
Status res=_db.read(table,key,fields,result);
long en=System.nanoTime();
measure("READ",ist, st, en);
_measurements.reportStatus("READ",res);
return res;
}
/**
* Perform a range scan for a set of records in the database. Each field/value pair from the result will be stored in a HashMap.
*
* @param table The name of the table
* @param startkey The record key of the first record to read.
* @param recordcount The number of records to read
* @param fields The list of fields to read, or null for all of them
* @param result A Vector of HashMaps, where each HashMap is a set field/value pairs for one record
* @return The result of the operation.
*/
public Status scan(String table, String startkey, int recordcount, Set<String> fields, Vector<HashMap<String,ByteIterator>> result)
{
long ist=_measurements.getIntendedtartTimeNs();
long st = System.nanoTime();
Status res=_db.scan(table,startkey,recordcount,fields,result);
long en=System.nanoTime();
measure("SCAN",ist, st, en);
_measurements.reportStatus("SCAN",res);
return res;
}
private void measure(String op, long intendedStartTimeNanos, long startTimeNanos, long endTimeNanos) {
_measurements.measure(op, (int)((endTimeNanos-startTimeNanos)/1000));
_measurements.measureIntended(op, (int)((endTimeNanos-intendedStartTimeNanos)/1000));
}
/**
* Update a record in the database. Any field/value pairs in the specified values HashMap will be written into the record with the specified
* record key, overwriting any existing values with the same field name.
*
* @param table The name of the table
* @param key The record key of the record to write.
* @param values A HashMap of field/value pairs to update in the record
* @return The result of the operation.
*/
public Status update(String table, String key, HashMap<String,ByteIterator> values)
{
long ist=_measurements.getIntendedtartTimeNs();
long st = System.nanoTime();
Status res=_db.update(table,key,values);
long en=System.nanoTime();
measure("UPDATE",ist, st, en);
_measurements.reportStatus("UPDATE",res);
return res;
}
/**
* Insert a record in the database. Any field/value pairs in the specified values HashMap will be written into the record with the specified
* record key.
*
* @param table The name of the table
* @param key The record key of the record to insert.
* @param values A HashMap of field/value pairs to insert in the record
* @return The result of the operation.
*/
public Status insert(String table, String key, HashMap<String,ByteIterator> values)
{
long ist=_measurements.getIntendedtartTimeNs();
long st = System.nanoTime();
Status res=_db.insert(table,key,values);
long en=System.nanoTime();
measure("INSERT",ist, st, en);
_measurements.reportStatus("INSERT",res);
return res;
}
/**
* Delete a record from the database.
*
* @param table The name of the table
* @param key The record key of the record to delete.
* @return The result of the operation.
*/
public Status delete(String table, String key)
{
long ist=_measurements.getIntendedtartTimeNs();
long st = System.nanoTime();
Status res=_db.delete(table,key);
long en=System.nanoTime();
measure("DELETE",ist, st, en);
_measurements.reportStatus("DELETE",res);
return res;
}
}

Event Timeline