Skip to content
Snippets Groups Projects
Commit bed36157 authored by Robert J. Moore's avatar Robert J. Moore Committed by Kevin Risden
Browse files

[infinispan] Checkstyle updates for the Infinispan binding.

parent 432e9581
No related branches found
No related tags found
No related merge requests found
...@@ -51,4 +51,28 @@ LICENSE file. ...@@ -51,4 +51,28 @@ LICENSE file.
<scope>provided</scope> <scope>provided</scope>
</dependency> </dependency>
</dependencies> </dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-checkstyle-plugin</artifactId>
<version>2.15</version>
<configuration>
<consoleOutput>true</consoleOutput>
<configLocation>../checkstyle.xml</configLocation>
<failOnViolation>true</failOnViolation>
<failsOnError>true</failsOnError>
</configuration>
<executions>
<execution>
<id>validate</id>
<phase>validate</phase>
<goals>
<goal>checkstyle</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project> </project>
/** /**
* Copyright (c) 2012 YCSB contributors. All rights reserved. * Copyright (c) 2012-2016 YCSB contributors. All rights reserved.
* *
* Licensed under the Apache License, Version 2.0 (the "License"); you * Licensed under the Apache License, Version 2.0 (the "License"); you
* may not use this file except in compliance with the License. You * may not use this file except in compliance with the License. You
...@@ -39,112 +39,118 @@ import java.util.Vector; ...@@ -39,112 +39,118 @@ import java.util.Vector;
/** /**
* This is a client implementation for Infinispan 5.x. * This is a client implementation for Infinispan 5.x.
*
* Some settings:
*
* @author Manik Surtani (manik AT jboss DOT org)
*/ */
public class InfinispanClient extends DB { public class InfinispanClient extends DB {
private static final Log LOGGER = LogFactory.getLog(InfinispanClient.class);
// An optimisation for clustered mode
private final boolean clustered; // An optimisation for clustered mode
private final boolean clustered;
private EmbeddedCacheManager infinispanManager;
private EmbeddedCacheManager infinispanManager;
private static final Log logger = LogFactory.getLog(InfinispanClient.class);
public InfinispanClient() {
public InfinispanClient() { clustered = Boolean.getBoolean("infinispan.clustered");
clustered = Boolean.getBoolean("infinispan.clustered"); }
}
public void init() throws DBException {
public void init() throws DBException { try {
try { infinispanManager = new DefaultCacheManager("infinispan-config.xml");
infinispanManager = new DefaultCacheManager("infinispan-config.xml"); } catch (IOException e) {
} catch (IOException e) { throw new DBException(e);
throw new DBException(e); }
}
public void cleanup() {
infinispanManager.stop();
infinispanManager = null;
}
public Status read(String table, String key, Set<String> fields,
HashMap<String, ByteIterator> result) {
try {
Map<String, String> row;
if (clustered) {
row = AtomicMapLookup.getAtomicMap(infinispanManager.getCache(table), key, false);
} else {
Cache<String, Map<String, String>> cache = infinispanManager.getCache(table);
row = cache.get(key);
} }
} if (row != null) {
result.clear();
public void cleanup() { if (fields == null || fields.isEmpty()) {
infinispanManager.stop(); StringByteIterator.putAllAsByteIterators(result, row);
infinispanManager = null; } else {
} for (String field : fields) {
result.put(field, new StringByteIterator(row.get(field)));
public Status read(String table, String key, Set<String> fields, HashMap<String, ByteIterator> result) { }
try { }
Map<String, String> row;
if (clustered) {
row = AtomicMapLookup.getAtomicMap(infinispanManager.getCache(table), key, false);
} else {
Cache<String, Map<String, String>> cache = infinispanManager.getCache(table);
row = cache.get(key);
}
if (row != null) {
result.clear();
if (fields == null || fields.isEmpty()) {
StringByteIterator.putAllAsByteIterators(result, row);
} else {
for (String field : fields) result.put(field, new StringByteIterator(row.get(field)));
}
}
return Status.OK;
} catch (Exception e) {
return Status.ERROR;
} }
}
public Status 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.OK; return Status.OK;
} } catch (Exception e) {
LOGGER.error(e);
public Status update(String table, String key, HashMap<String, ByteIterator> values) { return Status.ERROR;
try { }
if (clustered) { }
AtomicMap<String, String> row = AtomicMapLookup.getAtomicMap(infinispanManager.getCache(table), key);
StringByteIterator.putAllAsStrings(row, values); public Status scan(String table, String startkey, int recordcount,
} else { Set<String> fields, Vector<HashMap<String, ByteIterator>> result) {
Cache<String, Map<String, String>> cache = infinispanManager.getCache(table); LOGGER.warn("Infinispan does not support scan semantics");
Map<String, String> row = cache.get(key); return Status.OK;
if (row == null) { }
row = StringByteIterator.getStringMap(values);
cache.put(key, row); public Status update(String table, String key,
} else { HashMap<String, ByteIterator> values) {
StringByteIterator.putAllAsStrings(row, values); try {
} if (clustered) {
} AtomicMap<String, String> row = AtomicMapLookup.getAtomicMap(infinispanManager.getCache(table), key);
StringByteIterator.putAllAsStrings(row, values);
return Status.OK; } else {
} catch (Exception e) { Cache<String, Map<String, String>> cache = infinispanManager.getCache(table);
return Status.ERROR; Map<String, String> row = cache.get(key);
if (row == null) {
row = StringByteIterator.getStringMap(values);
cache.put(key, row);
} else {
StringByteIterator.putAllAsStrings(row, values);
}
} }
}
return Status.OK;
public Status insert(String table, String key, HashMap<String, ByteIterator> values) { } catch (Exception e) {
try { LOGGER.error(e);
if (clustered) { return Status.ERROR;
AtomicMap<String, String> row = AtomicMapLookup.getAtomicMap(infinispanManager.getCache(table), key); }
row.clear(); }
StringByteIterator.putAllAsStrings(row, values);
} else { public Status insert(String table, String key,
infinispanManager.getCache(table).put(key, values); HashMap<String, ByteIterator> values) {
} try {
if (clustered) {
return Status.OK; AtomicMap<String, String> row = AtomicMapLookup.getAtomicMap(infinispanManager.getCache(table), key);
} catch (Exception e) { row.clear();
return Status.ERROR; StringByteIterator.putAllAsStrings(row, values);
} else {
infinispanManager.getCache(table).put(key, values);
} }
}
return Status.OK;
public Status delete(String table, String key) { } catch (Exception e) {
try { LOGGER.error(e);
if (clustered) return Status.ERROR;
AtomicMapLookup.removeAtomicMap(infinispanManager.getCache(table), key); }
else }
infinispanManager.getCache(table).remove(key);
return Status.OK; public Status delete(String table, String key) {
} catch (Exception e) { try {
return Status.ERROR; if (clustered) {
AtomicMapLookup.removeAtomicMap(infinispanManager.getCache(table), key);
} else {
infinispanManager.getCache(table).remove(key);
} }
} return Status.OK;
} catch (Exception e) {
LOGGER.error(e);
return Status.ERROR;
}
}
} }
/** /**
* Copyright (c) 2015 YCSB contributors. All rights reserved. * Copyright (c) 2015-2016 YCSB contributors. All rights reserved.
* * <p>
* Licensed under the Apache License, Version 2.0 (the "License"); you * Licensed under the Apache License, Version 2.0 (the "License"); you
* may not use this file except in compliance with the License. You * may not use this file except in compliance with the License. You
* may obtain a copy of the License at * may obtain a copy of the License at
* * <p>
* http://www.apache.org/licenses/LICENSE-2.0 * http://www.apache.org/licenses/LICENSE-2.0
* * <p>
* Unless required by applicable law or agreed to in writing, software * Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS, * distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
...@@ -17,12 +17,7 @@ ...@@ -17,12 +17,7 @@
package com.yahoo.ycsb.db; package com.yahoo.ycsb.db;
import com.yahoo.ycsb.ByteIterator; import com.yahoo.ycsb.*;
import com.yahoo.ycsb.DB;
import com.yahoo.ycsb.DBException;
import com.yahoo.ycsb.Status;
import com.yahoo.ycsb.StringByteIterator;
import org.infinispan.client.hotrod.RemoteCache; import org.infinispan.client.hotrod.RemoteCache;
import org.infinispan.client.hotrod.RemoteCacheManager; import org.infinispan.client.hotrod.RemoteCacheManager;
import org.infinispan.util.logging.Log; import org.infinispan.util.logging.Log;
...@@ -35,108 +30,110 @@ import java.util.Vector; ...@@ -35,108 +30,110 @@ import java.util.Vector;
/** /**
* This is a client implementation for Infinispan 5.x in client-server mode. * This is a client implementation for Infinispan 5.x in client-server mode.
*
* @author mylesjao
*
*/ */
public class InfinispanRemoteClient extends DB { public class InfinispanRemoteClient extends DB {
private RemoteCacheManager remoteIspnManager; private static final Log LOGGER = LogFactory.getLog(InfinispanRemoteClient.class);
private String cacheName = null; private RemoteCacheManager remoteIspnManager;
private String cacheName = null;
private static final Log logger = LogFactory.getLog(InfinispanRemoteClient.class);
@Override
@Override public void init() throws DBException {
public void init() throws DBException { remoteIspnManager = RemoteCacheManagerHolder.getInstance(getProperties());
remoteIspnManager = RemoteCacheManagerHolder.getInstance(getProperties()); cacheName = getProperties().getProperty("cache");
cacheName = getProperties().getProperty("cache"); }
}
@Override
@Override public void cleanup() {
public void cleanup() { remoteIspnManager.stop();
remoteIspnManager.stop(); remoteIspnManager = null;
remoteIspnManager = null; }
}
@Override
@Override public Status insert(String table, String recordKey, HashMap<String, ByteIterator> values) {
public Status insert(String table, String recordKey, HashMap<String, ByteIterator> values) { String compositKey = createKey(table, recordKey);
String compositKey = createKey(table, recordKey); Map<String, String> stringValues = new HashMap<>();
Map<String, String> stringValues = new HashMap<String,String>(); StringByteIterator.putAllAsStrings(stringValues, values);
StringByteIterator.putAllAsStrings(stringValues, values); try {
try { cache().put(compositKey, stringValues);
cache().put(compositKey, stringValues); return Status.OK;
return Status.OK; } catch (Exception e) {
} catch (Exception e) { LOGGER.error(e);
return Status.ERROR; return Status.ERROR;
} }
} }
@Override @Override
public Status read(String table, String recordKey, Set<String> fields, HashMap<String, ByteIterator> result) { public Status read(String table, String recordKey, Set<String> fields, HashMap<String, ByteIterator> result) {
String compositKey = createKey(table, recordKey); String compositKey = createKey(table, recordKey);
try { try {
Map<String, String> values = cache().get(compositKey); Map<String, String> values = cache().get(compositKey);
if(values == null || values.isEmpty()){ if (values == null || values.isEmpty()) {
return Status.NOT_FOUND; 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 Status 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_IMPLEMENTED;
}
@Override
public Status 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 if (fields == null) { //get all field/value pairs
public Status delete(String table, String recordKey) { StringByteIterator.putAllAsByteIterators(result, values);
String compositKey = createKey(table, recordKey); } else {
try { for (String field : fields) {
cache().remove(compositKey); String value = values.get(field);
return Status.OK; if (value != null) {
} catch (Exception e) { result.put(field, new StringByteIterator(value));
return Status.ERROR; }
}
} }
}
return Status.OK;
private RemoteCache<String, Map<String,String>> cache(){ } catch (Exception e) {
if(this.cacheName != null){ LOGGER.error(e);
return remoteIspnManager.getCache(cacheName); return Status.ERROR;
}else{ }
return remoteIspnManager.getCache(); }
}
} @Override
public Status scan(String table, String startkey, int recordcount, Set<String> fields,
private String createKey(String table, String recordKey){ Vector<HashMap<String, ByteIterator>> result) {
return table + "-" + recordKey; LOGGER.warn("Infinispan does not support scan semantics");
} return Status.NOT_IMPLEMENTED;
}
@Override
public Status update(String table, String recordKey, HashMap<String, ByteIterator> values) {
String compositKey = createKey(table, recordKey);
try {
Map<String, String> stringValues = new HashMap<>();
StringByteIterator.putAllAsStrings(stringValues, values);
cache().put(compositKey, stringValues);
return Status.OK;
} catch (Exception e) {
LOGGER.error(e);
return Status.ERROR;
}
}
@Override
public Status delete(String table, String recordKey) {
String compositKey = createKey(table, recordKey);
try {
cache().remove(compositKey);
return Status.OK;
} catch (Exception e) {
LOGGER.error(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;
}
} }
/** /**
* Copyright (c) 2015 YCSB contributors. All rights reserved. * Copyright (c) 2015-2016 YCSB contributors. All rights reserved.
* *
* Licensed under the Apache License, Version 2.0 (the "License"); you * Licensed under the Apache License, Version 2.0 (the "License"); you
* may not use this file except in compliance with the License. You * may not use this file except in compliance with the License. You
...@@ -21,22 +21,27 @@ import java.util.Properties; ...@@ -21,22 +21,27 @@ import java.util.Properties;
import org.infinispan.client.hotrod.RemoteCacheManager; import org.infinispan.client.hotrod.RemoteCacheManager;
public class RemoteCacheManagerHolder { /**
* Utility class to ensure only a single RemoteCacheManager is created.
private static volatile RemoteCacheManager cacheManager = null; */
final class RemoteCacheManagerHolder {
private RemoteCacheManagerHolder() {}
private static volatile RemoteCacheManager cacheManager = null;
public static RemoteCacheManager getInstance(Properties props){
RemoteCacheManager result = cacheManager; private RemoteCacheManagerHolder() {
if(result == null){ }
synchronized (RemoteCacheManagerHolder.class) {
result = cacheManager; static RemoteCacheManager getInstance(Properties props) {
if (result == null) { RemoteCacheManager result = cacheManager;
cacheManager = result = new RemoteCacheManager(props); if (result == null) {
} synchronized (RemoteCacheManagerHolder.class) {
} result = cacheManager;
} if (result == null) {
return result; result = new RemoteCacheManager(props);
} cacheManager = new RemoteCacheManager(props);
}
}
}
return result;
}
} }
/*
* Copyright (c) 2015-2016 YCSB Contributors. 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.
*/
/**
* The YCSB binding for <a href="http://infinispan.org/">Infinispan</a>.
*/
package com.yahoo.ycsb.db;
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