зеркало из https://github.com/Azure/YCSB.git
[infinispan] impl infinispan db with remote cache manager
This commit is contained in:
Родитель
2973ea5ab0
Коммит
dbd7d0ba8f
|
@ -8,3 +8,4 @@ output*
|
|||
.project
|
||||
.classpath
|
||||
.settings
|
||||
.checkstyle
|
||||
|
|
1
bin/ycsb
1
bin/ycsb
|
@ -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>
|
||||
|
|
|
@ -0,0 +1,9 @@
|
|||
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
|
|
@ -0,0 +1,128 @@
|
|||
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;
|
||||
}
|
||||
}
|
|
@ -0,0 +1,21 @@
|
|||
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;
|
||||
}
|
||||
}
|
|
@ -0,0 +1,9 @@
|
|||
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;
|
||||
}
|
Загрузка…
Ссылка в новой задаче