Skip to content
Snippets Groups Projects
Commit dbd7d0ba authored by mylesjao's avatar mylesjao Committed by Sean Busbey
Browse files

[infinispan] impl infinispan db with remote cache manager

parent 2973ea5a
No related branches found
No related tags found
No related merge requests found
......@@ -8,3 +8,4 @@ output*
.project
.classpath
.settings
.checkstyle
......@@ -40,6 +40,7 @@ DATABASES = {
"hbase" : "com.yahoo.ycsb.db.HBaseClient",
"hbase-10" : "com.yahoo.ycsb.db.HBaseClient10",
"hypertable" : "com.yahoo.ycsb.db.HypertableClient",
"infinispan-cs": "com.yahoo.ycsb.db.InfinispanRemoteClient",
"infinispan" : "com.yahoo.ycsb.db.InfinispanClient",
"jdbc" : "com.yahoo.ycsb.db.JdbcDBClient",
"mapkeeper" : "com.yahoo.ycsb.db.MapKeeperClient",
......
......@@ -14,8 +14,13 @@
<dependencies>
<dependency>
<groupId>org.jboss.as</groupId>
<artifactId>jboss-as-clustering-infinispan</artifactId>
<groupId>org.infinispan</groupId>
<artifactId>infinispan-client-hotrod</artifactId>
<version>${infinispan.version}</version>
</dependency>
<dependency>
<groupId>org.infinispan</groupId>
<artifactId>infinispan-core</artifactId>
<version>${infinispan.version}</version>
</dependency>
<dependency>
......
infinispan.client.hotrod.server_list=192.168.101.17:11222
infinispan.client.hotrod.force_return_values=false
maxActive=-1
maxIdle=-1
minIdle=1
maxTotal=-1
whenExhaustedAction=1
package com.yahoo.ycsb.db;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
import java.util.Vector;
import org.infinispan.client.hotrod.RemoteCache;
import org.infinispan.client.hotrod.RemoteCacheManager;
import org.infinispan.util.logging.Log;
import org.infinispan.util.logging.LogFactory;
import com.yahoo.ycsb.ByteIterator;
import com.yahoo.ycsb.DB;
import com.yahoo.ycsb.DBException;
import com.yahoo.ycsb.StringByteIterator;
/**
* This is a client implementation for Infinispan 5.x in client-server mode.
*
* @author mylesjao
*
*/
public class InfinispanRemoteClient extends DB {
private RemoteCacheManager remoteIspnManager;
private String cacheName = null;
private static final Log logger = LogFactory.getLog(InfinispanRemoteClient.class);
public InfinispanRemoteClient() {
}
@Override
public void init() throws DBException {
remoteIspnManager = RemoteCacheManagerHolder.getInstance(getProperties());
cacheName = getProperties().getProperty("cache");
}
@Override
public void cleanup() {
remoteIspnManager.stop();
remoteIspnManager = null;
}
@Override
public int insert(String table, String recordKey, HashMap<String, ByteIterator> values) {
String compositKey = createKey(table, recordKey);
Map<String, String> stringValues = new HashMap<String,String>();
StringByteIterator.putAllAsStrings(stringValues, values);
try {
cache().put(compositKey, stringValues);
return Status.OK;
} catch (Exception e) {
return Status.ERROR;
}
}
@Override
public int read(String table, String recordKey, Set<String> fields, HashMap<String, ByteIterator> result) {
String compositKey = createKey(table, recordKey);
try {
Map<String, String> values = cache().get(compositKey);
if(values == null || values.isEmpty()){
return Status.NOT_FOUND;
}
if(fields == null){ //get all field/value pairs
StringByteIterator.putAllAsByteIterators(result, values);
}else{
for(String field: fields){
String value = values.get(field);
if(value != null){
result.put(field, new StringByteIterator(value) );
}
}
}
return Status.OK;
} catch (Exception e) {
return Status.ERROR;
}
}
@Override
public int scan(String table, String startkey, int recordcount, Set<String> fields, Vector<HashMap<String, ByteIterator>> result) {
logger.warn("Infinispan does not support scan semantics");
return Status.NOT_SUPPORT;
}
@Override
public int update(String table, String recordKey, HashMap<String, ByteIterator> values) {
String compositKey = createKey(table, recordKey);
try {
Map<String, String> stringValues = new HashMap<String, String>();
StringByteIterator.putAllAsStrings(stringValues, values);
cache().put(compositKey, stringValues);
return Status.OK;
} catch (Exception e) {
return Status.ERROR;
}
}
@Override
public int delete(String table, String recordKey) {
String compositKey = createKey(table, recordKey);
try {
cache().remove(compositKey);
return Status.OK;
} catch (Exception e) {
return Status.ERROR;
}
}
private RemoteCache<String, Map<String,String>> cache(){
if(this.cacheName != null){
return remoteIspnManager.getCache(cacheName);
}else{
return remoteIspnManager.getCache();
}
}
private String createKey(String table, String recordKey){
return table + "-" + recordKey;
}
}
package com.yahoo.ycsb.db;
import java.util.Properties;
import org.infinispan.client.hotrod.RemoteCacheManager;
public class RemoteCacheManagerHolder {
private static RemoteCacheManager cacheManager = null;
private RemoteCacheManagerHolder() {}
public static RemoteCacheManager getInstance(Properties props){
if(cacheManager == null){
synchronized (RemoteCacheManager.class) {
cacheManager = new RemoteCacheManager(props);
}
}
return cacheManager;
}
}
package com.yahoo.ycsb.db;
public class Status {
public static final int OK = 0;
public static final int ERROR = 1;
public static final int NOT_FOUND = 2;
public static final int CONFLICT = 3;
public static final int NOT_SUPPORT = 4;
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment