Refactor code with comments, logging and exception handling
Project: http://git-wip-us.apache.org/repos/asf/gora/repo Commit: http://git-wip-us.apache.org/repos/asf/gora/commit/d68be8df Tree: http://git-wip-us.apache.org/repos/asf/gora/tree/d68be8df Diff: http://git-wip-us.apache.org/repos/asf/gora/diff/d68be8df Branch: refs/heads/master Commit: d68be8dfb013d7f8d1e56c94d554166d6440de35 Parents: 00d392f Author: nishadi <ndime...@gmail.com> Authored: Thu Jun 22 19:53:52 2017 +0530 Committer: nishadi <ndime...@gmail.com> Committed: Thu Jun 22 19:53:52 2017 +0530 ---------------------------------------------------------------------- gora-aerospike/pom.xml | 1 - .../gora/aerospike/store/AerospikeMapping.java | 6 +- .../store/AerospikeMappingBuilder.java | 224 +++++++++++-------- .../aerospike/store/AerospikeParameters.java | 111 ++++++--- .../gora/aerospike/store/AerospikeStore.java | 84 ++++--- 5 files changed, 271 insertions(+), 155 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/gora/blob/d68be8df/gora-aerospike/pom.xml ---------------------------------------------------------------------- diff --git a/gora-aerospike/pom.xml b/gora-aerospike/pom.xml index ddf17a1..b15693e 100644 --- a/gora-aerospike/pom.xml +++ b/gora-aerospike/pom.xml @@ -50,7 +50,6 @@ </ciManagement> <properties> - <aerospike.version>3.3.2</aerospike.version> <osgi.import>*</osgi.import> <osgi.export>org.apache.gora.aerospike*;version="${project.version}";-noimport:=true</osgi.export> </properties> http://git-wip-us.apache.org/repos/asf/gora/blob/d68be8df/gora-aerospike/src/main/java/org/apache/gora/aerospike/store/AerospikeMapping.java ---------------------------------------------------------------------- diff --git a/gora-aerospike/src/main/java/org/apache/gora/aerospike/store/AerospikeMapping.java b/gora-aerospike/src/main/java/org/apache/gora/aerospike/store/AerospikeMapping.java index 1a17241..cb000a0 100644 --- a/gora-aerospike/src/main/java/org/apache/gora/aerospike/store/AerospikeMapping.java +++ b/gora-aerospike/src/main/java/org/apache/gora/aerospike/store/AerospikeMapping.java @@ -24,9 +24,13 @@ import java.util.Map; public class AerospikeMapping { private String namespace; + private String set; + private WritePolicy writePolicy; + private Policy readPolicy; + private Map<String, String> binMapping; public AerospikeMapping() { @@ -75,7 +79,7 @@ public class AerospikeMapping { this.binMapping = binMapping; } - public String getBinName(String fieldName){ + public String getBinName(String fieldName) { return binMapping.get(fieldName); } } http://git-wip-us.apache.org/repos/asf/gora/blob/d68be8df/gora-aerospike/src/main/java/org/apache/gora/aerospike/store/AerospikeMappingBuilder.java ---------------------------------------------------------------------- diff --git a/gora-aerospike/src/main/java/org/apache/gora/aerospike/store/AerospikeMappingBuilder.java b/gora-aerospike/src/main/java/org/apache/gora/aerospike/store/AerospikeMappingBuilder.java index 7b422f1..ca51c5d 100644 --- a/gora-aerospike/src/main/java/org/apache/gora/aerospike/store/AerospikeMappingBuilder.java +++ b/gora-aerospike/src/main/java/org/apache/gora/aerospike/store/AerospikeMappingBuilder.java @@ -1,4 +1,4 @@ -/** +/* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. @@ -26,6 +26,7 @@ import org.jdom.input.SAXBuilder; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.jdom.JDOMException; + import javax.naming.ConfigurationException; import java.io.IOException; import java.io.InputStream; @@ -36,11 +37,11 @@ import java.util.HashMap; public class AerospikeMappingBuilder { - public static final Logger LOG = LoggerFactory.getLogger(AerospikeMappingBuilder.class); + private static final Logger LOG = LoggerFactory.getLogger(AerospikeMappingBuilder.class); private AerospikeMapping aerospikeMapping; - public AerospikeMappingBuilder() throws IOException { + public AerospikeMappingBuilder() { this.aerospikeMapping = new AerospikeMapping(); } @@ -48,102 +49,125 @@ public class AerospikeMappingBuilder { return this.aerospikeMapping; } - public void readMappingFile(String mappingFile, Class<?> keyClass, Class<?> persistentClass) - throws IOException, JDOMException, ConfigurationException { + /** + * Reads the gora aerospike mapping file + * + * @param mappingFile mapping file path + * @param keyClass key class + * @param persistentClass persistent class + */ + public void readMappingFile(String mappingFile, Class<?> keyClass, Class<?> persistentClass) { - SAXBuilder saxBuilder = new SAXBuilder(); - InputStream inputStream = getClass().getClassLoader().getResourceAsStream(mappingFile); - if (inputStream == null) { - LOG.warn("Mapping file '" + mappingFile + "' could not be found!"); - throw new IOException("Mapping file '" + mappingFile + "' could not be found!"); - } - Document document = saxBuilder.build(inputStream); - if (document == null) { - LOG.warn("Mapping file '" + mappingFile + "' could not be found!"); - throw new IOException("Mapping file '" + mappingFile + "' could not be found!"); - } - - Element root = document.getRootElement(); - - List<Element> policyElements = root.getChildren("policy"); - - for (Element policyElement : policyElements) { - - String policy = policyElement.getAttributeValue("name"); - if (policy != null) { - if (policy.equals("write")) { - WritePolicy writePolicy = new WritePolicy(); - if (policyElement.getAttributeValue("gen") != null) - writePolicy.generationPolicy = getGenerationPolicyMapping( - policyElement.getAttributeValue("gen").toUpperCase(Locale.getDefault())); - if (policyElement.getAttributeValue("exists") != null) - writePolicy.recordExistsAction = getRecordExistsAction( - policyElement.getAttributeValue("exists").toUpperCase(Locale.getDefault())); - if (policyElement.getAttributeValue("key") != null) - writePolicy.sendKey = getKeyUsagePolicy( - policyElement.getAttributeValue("key").toUpperCase(Locale.getDefault())); - if (policyElement.getAttributeValue("retry") != null) - writePolicy.retryOnTimeout = getRetryOnTimeoutPolicy( - policyElement.getAttributeValue("retry").toUpperCase(Locale.getDefault())); - if (policyElement.getAttributeValue("timeout") != null) - writePolicy.timeout = getTimeoutValue(policyElement.getAttributeValue("timeout")); - aerospikeMapping.setWritePolicy(writePolicy); - } else if (policy.equals("read")) { - Policy readPolicy = new Policy(); - if (policyElement.getAttributeValue("key") != null) - readPolicy.sendKey = getKeyUsagePolicy( - policyElement.getAttributeValue("key").toUpperCase(Locale.getDefault())); - if (policyElement.getAttributeValue("timeout") != null) - readPolicy.timeout = getTimeoutValue(policyElement.getAttributeValue("timeout")); - aerospikeMapping.setReadPolicy(readPolicy); - } + try { + SAXBuilder saxBuilder = new SAXBuilder(); + InputStream inputStream = getClass().getClassLoader().getResourceAsStream(mappingFile); + if (inputStream == null) { + LOG.error("Mapping file '{}' could not be found!", mappingFile); + throw new IOException("Mapping file '" + mappingFile + "' could not be found!"); + } + Document document = saxBuilder.build(inputStream); + if (document == null) { + LOG.error("Mapping file '{}' could not be found!", mappingFile); + throw new IOException("Mapping file '" + mappingFile + "' could not be found!"); } - } - - List<Element> classElements = root.getChildren("class"); - - boolean persistentClassAndKeyClassMatches = false; - for (Element classElement : classElements) { - - String mappingKeyClass = classElement.getAttributeValue("keyClass"); - String mappingClassName = classElement.getAttributeValue("name"); - - if (mappingKeyClass != null && mappingClassName != null) { - if (mappingKeyClass.equals(keyClass.getCanonicalName()) && mappingClassName - .equals(persistentClass.getCanonicalName())) { - - persistentClassAndKeyClassMatches = true; - - List<Element> fields = classElement.getChildren("field"); - Map<String, String> binMapping = new HashMap<>(); - for (Element field : fields) { - String fieldName = field.getAttributeValue("name"); - String binName = field.getAttributeValue("bin"); - if (fieldName != null && binName != null) - binMapping.put(fieldName, binName); - } - aerospikeMapping.setBinMapping(binMapping); - String nameSpace = classElement.getAttributeValue("namespace"); - if (nameSpace == null || nameSpace.isEmpty()) { - throw new ConfigurationException( - "Gora-aerospike-mapping does not include the relevant namespace for " - + "the class"); + Element root = document.getRootElement(); + + List<Element> policyElements = root.getChildren("policy"); + + for (Element policyElement : policyElements) { + + String policy = policyElement.getAttributeValue("name"); + if (policy != null) { + if (policy.equals("write")) { + WritePolicy writePolicy = new WritePolicy(); + if (policyElement.getAttributeValue("gen") != null) + writePolicy.generationPolicy = getGenerationPolicyMapping( + policyElement.getAttributeValue("gen").toUpperCase(Locale.getDefault())); + if (policyElement.getAttributeValue("exists") != null) + writePolicy.recordExistsAction = getRecordExistsAction( + policyElement.getAttributeValue("exists").toUpperCase(Locale.getDefault())); + if (policyElement.getAttributeValue("key") != null) + writePolicy.sendKey = getKeyUsagePolicy( + policyElement.getAttributeValue("key").toUpperCase(Locale.getDefault())); + if (policyElement.getAttributeValue("retry") != null) + writePolicy.retryOnTimeout = getRetryOnTimeoutPolicy( + policyElement.getAttributeValue("retry").toUpperCase(Locale.getDefault())); + if (policyElement.getAttributeValue("timeout") != null) + writePolicy.timeout = getTimeoutValue(policyElement.getAttributeValue("timeout")); + aerospikeMapping.setWritePolicy(writePolicy); + } else if (policy.equals("read")) { + Policy readPolicy = new Policy(); + if (policyElement.getAttributeValue("key") != null) + readPolicy.sendKey = getKeyUsagePolicy( + policyElement.getAttributeValue("key").toUpperCase(Locale.getDefault())); + if (policyElement.getAttributeValue("timeout") != null) + readPolicy.timeout = getTimeoutValue(policyElement.getAttributeValue("timeout")); + aerospikeMapping.setReadPolicy(readPolicy); } - aerospikeMapping.setNamespace(nameSpace); + } + } - String set = classElement.getAttributeValue("set"); - if (set != null && !set.isEmpty()) { - aerospikeMapping.setSet(set); + List<Element> classElements = root.getChildren("class"); + + boolean persistentClassAndKeyClassMatches = false; + for (Element classElement : classElements) { + + String mappingKeyClass = classElement.getAttributeValue("keyClass"); + String mappingClassName = classElement.getAttributeValue("name"); + + if (mappingKeyClass != null && mappingClassName != null) { + if (mappingKeyClass.equals(keyClass.getCanonicalName()) && mappingClassName + .equals(persistentClass.getCanonicalName())) { + + persistentClassAndKeyClassMatches = true; + + List<Element> fields = classElement.getChildren("field"); + Map<String, String> binMapping = new HashMap<>(); + for (Element field : fields) { + String fieldName = field.getAttributeValue("name"); + String binName = field.getAttributeValue("bin"); + if (fieldName != null && binName != null) + binMapping.put(fieldName, binName); + } + aerospikeMapping.setBinMapping(binMapping); + + String nameSpace = classElement.getAttributeValue("namespace"); + if (nameSpace == null || nameSpace.isEmpty()) { + LOG.error("Gora-aerospike-mapping does not include the relevant namespace for the " + + "{} class", mappingClassName); + throw new ConfigurationException( + "Gora-aerospike-mapping does not include the relevant namespace for the " + + mappingClassName + "class"); + } + aerospikeMapping.setNamespace(nameSpace); + + String set = classElement.getAttributeValue("set"); + if (set != null && !set.isEmpty()) { + aerospikeMapping.setSet(set); + } } } } + if (!persistentClassAndKeyClassMatches) { + LOG.error("Gora-aerospike-mapping does not include the name and keyClass specified in the " + + "databean"); + throw new ConfigurationException( + "Gora-aerospike-mapping does not include the name and keyClass specified in the " + + "databean"); + } + } catch (IOException | JDOMException | ConfigurationException e) { + throw new RuntimeException(e); } - if (!persistentClassAndKeyClassMatches) - throw new ConfigurationException( - "Gora-aerospike-mapping does not include the name and keyClass in the databean"); + LOG.info("Gora Aerospike mapping file is read successfully."); } + /** + * Returns the corresponding generation policy from the user specified generation policy name + * + * @param genPolicy generation policy name + * @return corresponding generation policy + */ private GenerationPolicy getGenerationPolicyMapping(String genPolicy) { if (genPolicy == null) @@ -168,6 +192,12 @@ public class AerospikeMappingBuilder { return generationPolicy; } + /** + * Returns the corresponding record exist action from the user specified exists policy name + * + * @param existsPolicy exists policy name + * @return corresponding record exist action + */ private RecordExistsAction getRecordExistsAction(String existsPolicy) { if (existsPolicy == null) return RecordExistsAction.UPDATE; @@ -197,6 +227,12 @@ public class AerospikeMappingBuilder { return recordExistsAction; } + /** + * Returns the corresponding key usage policy from the user specified key policy name + * + * @param keyPolicy key policy name + * @return corresponding key usage policy + */ private boolean getKeyUsagePolicy(String keyPolicy) { if (keyPolicy == null) @@ -218,6 +254,12 @@ public class AerospikeMappingBuilder { return sendKey; } + /** + * Returns the corresponding retry on timeout policy from the user specified retry policy name + * + * @param retry retry policy name + * @return corresponding retry on timeout policy + */ private boolean getRetryOnTimeoutPolicy(String retry) { if (retry == null) @@ -239,6 +281,12 @@ public class AerospikeMappingBuilder { return retryOnTimeout; } + /** + * Returns the timeout value from the user specified timeout value + * + * @param timeout user specified timeout value + * @return timeout value + */ private int getTimeoutValue(String timeout) { if (timeout == null) http://git-wip-us.apache.org/repos/asf/gora/blob/d68be8df/gora-aerospike/src/main/java/org/apache/gora/aerospike/store/AerospikeParameters.java ---------------------------------------------------------------------- diff --git a/gora-aerospike/src/main/java/org/apache/gora/aerospike/store/AerospikeParameters.java b/gora-aerospike/src/main/java/org/apache/gora/aerospike/store/AerospikeParameters.java index 539e67d..141808d 100644 --- a/gora-aerospike/src/main/java/org/apache/gora/aerospike/store/AerospikeParameters.java +++ b/gora-aerospike/src/main/java/org/apache/gora/aerospike/store/AerospikeParameters.java @@ -1,42 +1,65 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You 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 + * <p> + * http://www.apache.org/licenses/LICENSE-2.0 + * <p> + * 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. + */ package org.apache.gora.aerospike.store; import com.aerospike.client.AerospikeClient; import com.aerospike.client.Info; import com.aerospike.client.cluster.Node; -import com.aerospike.client.policy.Policy; -import com.aerospike.client.policy.WritePolicy; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import java.lang.reflect.Field; import java.util.Properties; public class AerospikeParameters { private String host; + private int port; + private String user; + private String password; + private AerospikeMapping aerospikeMapping; - private boolean singleBin; + + private boolean isSingleBinEnabled; // Property names private static final String AS_SERVER_IP = "server.ip"; + private static final String AS_SERVER_port = "server.port"; // Default property values private static final String DEFAULT_SERVER_IP = "localhost"; + private static final String DEFAULT_SERVER_PORT = "3000"; - public static final Logger LOG = LoggerFactory.getLogger(AerospikeParameters.class); + private static final Logger LOG = LoggerFactory.getLogger(AerospikeParameters.class); - public AerospikeParameters(AerospikeMapping aerospikeMapping, Properties properties) throws NumberFormatException { + /** + * Constructor to create AerospikeParameters object with the given mapping and properties + * + * @param aerospikeMapping aerospike mapping initialized from the mapping file + * @param properties property details + */ + public AerospikeParameters(AerospikeMapping aerospikeMapping, Properties properties) { this.aerospikeMapping = aerospikeMapping; this.host = properties.getProperty(AS_SERVER_IP, DEFAULT_SERVER_IP); - try { - this.port = Integer.parseInt(properties.getProperty(AS_SERVER_port, DEFAULT_SERVER_PORT)); - } catch (NumberFormatException e) { - LOG.error(e.getMessage(), e); - throw e; - } + this.port = Integer.parseInt(properties.getProperty(AS_SERVER_port, DEFAULT_SERVER_PORT)); } public String getHost() { @@ -79,29 +102,48 @@ public class AerospikeParameters { this.aerospikeMapping = aerospikeMapping; } - public boolean isSingleBin() { - return singleBin; + public boolean isSingleBinEnabled() { + return isSingleBinEnabled; } - public void setSingleBin(boolean singleBin) { - this.singleBin = singleBin; + public void setSingleBinEnabled(boolean singleBinEnabled) { + this.isSingleBinEnabled = singleBinEnabled; } + /** + * Retrieves and sets the server specific parameters + * Validates the existence of user provided namespace and validates for single binned + * namespaces + * + * @param client aerospike client used to connect with the server + */ + public void setServerSpecificParameters(AerospikeClient client) { - // Some database calls need to know how the server is configured. - public void setServerSpecificParameters(AerospikeClient client) throws Exception { - Node node = client.getNodes()[0]; - String namespaceFilter = "namespace/" + aerospikeMapping.getNamespace(); - String namespaceTokens = Info.request(null, node, namespaceFilter); + String namespaceTokens = null; + for (Node node : client.getNodes()) { + String namespaceFilter = "namespace/" + aerospikeMapping.getNamespace(); + namespaceTokens = Info.request(null, node, namespaceFilter); + if (namespaceTokens != null) { + isSingleBinEnabled = parseBoolean(namespaceTokens, "single-bin"); + break; + } + } if (namespaceTokens == null) { - throw new Exception("Failed to get namespace info"); + LOG.error("Failed to get namespace info from Aerospike"); + throw new RuntimeException("Failed to get namespace info from Aerospike"); } - - singleBin = parseBoolean(namespaceTokens, "single-bin"); } - private static boolean parseBoolean(String namespaceTokens, String name) { + /** + * Parse the namespace tokens and retrieve the corresponding boolean value for the + * provided parameter name + * + * @param namespaceTokens namespace tokens + * @param name name of the parameter + * @return boolean value in the namespace corresponding to the provided parameter + */ + private boolean parseBoolean(String namespaceTokens, String name) { String search = name + '='; int begin = namespaceTokens.indexOf(search); @@ -115,13 +157,26 @@ public class AerospikeParameters { if (end < 0) { end = namespaceTokens.length(); } - String value = namespaceTokens.substring(begin, end); return Boolean.parseBoolean(value); } - // ToDo : check - public String getBinName(String name) { - return singleBin ? "" : name; + /** + * Method is used to validate server bin configuration. In Aerospike, it is possible to enable + * single bin (column) for the namespace which will disallow multiple bins (columns) for a + * record. Thus if the namespace is single bin enabled and the data bean contains more than one + * field, that namespace cannot be used to mutiple bin operations. + * + * @param fields fields of the persistent class + */ + public void validateServerBinConfiguration(Field[] fields) { + if (isSingleBinEnabled) { + if (fields.length != 1) { + LOG.error( + "Aerospike server is single bin enabled and cannot allow multiple bin operations"); + throw new RuntimeException("Aerospike server is single bin enabled and cannot allow " + + "multiple bin operations"); + } + } } } http://git-wip-us.apache.org/repos/asf/gora/blob/d68be8df/gora-aerospike/src/main/java/org/apache/gora/aerospike/store/AerospikeStore.java ---------------------------------------------------------------------- diff --git a/gora-aerospike/src/main/java/org/apache/gora/aerospike/store/AerospikeStore.java b/gora-aerospike/src/main/java/org/apache/gora/aerospike/store/AerospikeStore.java index 653cbf8..9ff3c60 100644 --- a/gora-aerospike/src/main/java/org/apache/gora/aerospike/store/AerospikeStore.java +++ b/gora-aerospike/src/main/java/org/apache/gora/aerospike/store/AerospikeStore.java @@ -40,7 +40,7 @@ import org.slf4j.LoggerFactory; */ public class AerospikeStore<K, T extends PersistentBase> extends DataStoreBase<K, T> { - public static final Logger logger = LoggerFactory.getLogger(AerospikeStore.class); + private static final Logger LOG = LoggerFactory.getLogger(AerospikeStore.class); private static final String PARSE_MAPPING_FILE_KEY = "gora.aerospike.mapping.file"; @@ -60,39 +60,41 @@ public class AerospikeStore<K, T extends PersistentBase> extends DataStoreBase<K * @param properties properties */ @Override - public void initialize(Class<K> keyClass, Class<T> persistentClass, - Properties properties) { + public void initialize(Class<K> keyClass, Class<T> persistentClass, Properties properties) { super.initialize(keyClass, persistentClass, properties); - try { - AerospikeMappingBuilder aerospikeMappingBuilder = new AerospikeMappingBuilder(); - aerospikeMappingBuilder - .readMappingFile(getConf().get(PARSE_MAPPING_FILE_KEY, DEFAULT_MAPPING_FILE), - keyClass, persistentClass); - aerospikeParameters = new AerospikeParameters(aerospikeMappingBuilder.getAerospikeMapping(), - properties); - ClientPolicy policy = new ClientPolicy(); - policy.writePolicyDefault = aerospikeParameters.getAerospikeMapping().getWritePolicy(); - policy.readPolicyDefault = aerospikeParameters.getAerospikeMapping().getReadPolicy(); - aerospikeClient = new AerospikeClient(aerospikeParameters.getHost(), - aerospikeParameters.getPort()); - aerospikeParameters.setServerSpecificParameters(aerospikeClient); - } catch (Exception e) { - throw new RuntimeException(e); - } + AerospikeMappingBuilder aerospikeMappingBuilder = new AerospikeMappingBuilder(); + aerospikeMappingBuilder + .readMappingFile(getConf().get(PARSE_MAPPING_FILE_KEY, DEFAULT_MAPPING_FILE), keyClass, + persistentClass); + aerospikeParameters = new AerospikeParameters(aerospikeMappingBuilder.getAerospikeMapping(), + properties); + ClientPolicy policy = new ClientPolicy(); + policy.writePolicyDefault = aerospikeParameters.getAerospikeMapping().getWritePolicy(); + policy.readPolicyDefault = aerospikeParameters.getAerospikeMapping().getReadPolicy(); + + aerospikeClient = new AerospikeClient(aerospikeParameters.getHost(), + aerospikeParameters.getPort()); + aerospikeParameters.setServerSpecificParameters(aerospikeClient); + aerospikeParameters.validateServerBinConfiguration(persistentClass.getFields()); + LOG.info("Aerospike Gora datastore initialized successfully."); } - @Override public String getSchemaName() { + @Override + public String getSchemaName() { return null; } - @Override public void createSchema() { + @Override + public void createSchema() { } - @Override public void deleteSchema() { + @Override + public void deleteSchema() { } - @Override public boolean schemaExists() { + @Override + public boolean schemaExists() { return true; } @@ -121,8 +123,8 @@ public class AerospikeStore<K, T extends PersistentBase> extends DataStoreBase<K * In writing the records, the policy defined in the mapping file is used to decide on the * behaviour of transaction handling. * - * @param key key of the object - * @param persistent object to be persisted + * @param key key of the object + * @param persistent object to be persisted */ @Override public void put(K key, T persistent) { @@ -135,6 +137,8 @@ public class AerospikeStore<K, T extends PersistentBase> extends DataStoreBase<K String mappingBinName = aerospikeParameters.getAerospikeMapping().getBinMapping() .get(fields.get(i).name()); if (mappingBinName == null) { + LOG.error("Aerospike mapping for field {}#{} not found. Wrong gora-aerospike-mapping.xml?", + persistent.getClass().getName(), fields.get(i).name()); throw new RuntimeException( "Aerospike mapping for field [" + persistent.getClass().getName() + "#" + fields .get(i).name() + "] not found. Wrong gora-aerospike-mapping.xml?"); @@ -145,23 +149,28 @@ public class AerospikeStore<K, T extends PersistentBase> extends DataStoreBase<K } } - @Override public boolean delete(K key) { + @Override + public boolean delete(K key) { return true; } - @Override public long deleteByQuery(Query<K, T> query) { + @Override + public long deleteByQuery(Query<K, T> query) { return 0; } - @Override public Result<K, T> execute(Query<K, T> query) { + @Override + public Result<K, T> execute(Query<K, T> query) { return null; } - @Override public Query<K, T> newQuery() { + @Override + public Query<K, T> newQuery() { return null; } - @Override public List<PartitionQuery<K, T>> getPartitions(Query<K, T> query) throws IOException { + @Override + public List<PartitionQuery<K, T>> getPartitions(Query<K, T> query) throws IOException { return null; } @@ -175,14 +184,13 @@ public class AerospikeStore<K, T extends PersistentBase> extends DataStoreBase<K @Override public void close() { aerospikeClient.close(); + LOG.info("Aerospike Gora datastore destroyed successfully."); } /** - * Aerospike does not support Utf8 format returned from Avro. - * This method provides those utf8 valued bin values as strings - * for aerospike Value to obtain the corresponding bin value, - * and returns the Bin - * Bin is the concept in Aerospike equivalent to a column in RDBMS + * Aerospike does not support Utf8 format returned from Avro. This method provides those utf8 + * valued bin (column) values as strings for aerospike Value to obtain the corresponding bin + * value, and returns the Bin (column in RDBMS) * * @param binName name of the bin * @param value value of the bin @@ -227,14 +235,16 @@ public class AerospikeStore<K, T extends PersistentBase> extends DataStoreBase<K /** * Method to set a field in the persistent object * - * @param field field name - * @param record record retrieved from database + * @param field field name + * @param record record retrieved from database * @param persistent persistent object for the field to be set */ private void setPersistentField(String field, Record record, T persistent) { String binName = aerospikeParameters.getAerospikeMapping().getBinName(field); if (binName == null) { + LOG.error("Aerospike mapping for field {} not found. Wrong gora-aerospike-mapping.xml", + field); throw new RuntimeException("Aerospike mapping for field [" + field + "] not found. " + "Wrong gora-aerospike-mapping.xml?"); }