http://git-wip-us.apache.org/repos/asf/gora/blob/7545170d/gora-ignite/src/main/java/org/apache/gora/ignite/store/IgniteStore.java ---------------------------------------------------------------------- diff --git a/gora-ignite/src/main/java/org/apache/gora/ignite/store/IgniteStore.java b/gora-ignite/src/main/java/org/apache/gora/ignite/store/IgniteStore.java index 2f5faf9..d52d10e 100644 --- a/gora-ignite/src/main/java/org/apache/gora/ignite/store/IgniteStore.java +++ b/gora-ignite/src/main/java/org/apache/gora/ignite/store/IgniteStore.java @@ -16,1005 +16,165 @@ */ package org.apache.gora.ignite.store; -import java.io.ByteArrayOutputStream; import java.io.IOException; -import java.net.InetAddress; -import java.nio.ByteBuffer; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Collections; -import java.util.HashMap; -import java.util.Iterator; +import java.sql.Connection; +import java.sql.DriverManager; +import java.sql.ResultSet; +import java.sql.SQLException; +import java.sql.Statement; +import java.text.MessageFormat; import java.util.List; -import java.util.Map; -import java.util.Map.Entry; +import java.util.Locale; import java.util.Properties; -import java.util.Set; -import java.util.concurrent.TimeUnit; - -import javax.xml.parsers.DocumentBuilder; -import javax.xml.parsers.DocumentBuilderFactory; - -import org.apache.ignite.core.client.IgniteException; -import org.apache.ignite.core.client.IgniteSecurityException; -import org.apache.ignite.core.client.BatchWriter; -import org.apache.ignite.core.client.BatchWriterConfig; -import org.apache.ignite.core.client.Connector; -import org.apache.ignite.core.client.IsolatedScanner; -import org.apache.ignite.core.client.IteratorSetting; -import org.apache.ignite.core.client.MutationsRejectedException; -import org.apache.ignite.core.client.RowIterator; -import org.apache.ignite.core.client.Scanner; -import org.apache.ignite.core.client.TableDeletedException; -import org.apache.ignite.core.client.TableExistsException; -import org.apache.ignite.core.client.TableNotFoundException; -import org.apache.ignite.core.client.TableOfflineException; -import org.apache.ignite.core.client.ZooKeeperInstance; -import org.apache.ignite.core.client.impl.ClientContext; -import org.apache.ignite.core.client.impl.Tables; -import org.apache.ignite.core.client.impl.TabletLocator; -import org.apache.ignite.core.client.mock.MockConnector; -import org.apache.ignite.core.client.mock.MockInstance; -import org.apache.ignite.core.client.mock.impl.MockTabletLocator; -import org.apache.ignite.core.client.security.tokens.AuthenticationToken; -import org.apache.ignite.core.client.security.tokens.PasswordToken; -import org.apache.ignite.core.conf.IgniteConfiguration; -import org.apache.ignite.core.data.ByteSequence; -import org.apache.ignite.core.data.Key; -import org.apache.ignite.core.data.impl.KeyExtent; -import org.apache.ignite.core.data.Mutation; -import org.apache.ignite.core.data.Range; -import org.apache.ignite.core.data.Value; -import org.apache.ignite.core.iterators.SortedKeyIterator; -import org.apache.ignite.core.iterators.user.TimestampFilter; -import org.apache.ignite.core.master.state.tables.TableState; -import org.apache.ignite.core.security.Authorizations; -import org.apache.ignite.core.security.ColumnVisibility; -import org.apache.ignite.core.client.impl.Credentials; -import org.apache.ignite.core.util.Pair; -import org.apache.ignite.core.util.UtilWaitThread; -import org.apache.avro.Schema; -import org.apache.avro.Schema.Field; -import org.apache.avro.Schema.Type; -import org.apache.avro.generic.GenericData; -import org.apache.avro.io.BinaryDecoder; -import org.apache.avro.io.Decoder; -import org.apache.avro.io.DecoderFactory; -import org.apache.avro.io.EncoderFactory; -import org.apache.avro.specific.SpecificDatumReader; -import org.apache.avro.specific.SpecificDatumWriter; -import org.apache.avro.util.Utf8; -import org.apache.gora.ignite.encoders.BinaryEncoder; -import org.apache.gora.ignite.encoders.Encoder; -import org.apache.gora.ignite.query.IgniteQuery; -import org.apache.gora.ignite.query.IgniteResult; -import org.apache.gora.persistency.impl.DirtyListWrapper; -import org.apache.gora.persistency.impl.DirtyMapWrapper; +import java.util.logging.Level; import org.apache.gora.persistency.impl.PersistentBase; import org.apache.gora.query.PartitionQuery; import org.apache.gora.query.Query; import org.apache.gora.query.Result; -import org.apache.gora.query.impl.PartitionQueryImpl; -import org.apache.gora.store.DataStoreFactory; import org.apache.gora.store.impl.DataStoreBase; -import org.apache.gora.util.AvroUtils; import org.apache.gora.util.GoraException; -import org.apache.gora.util.IOUtils; -import org.apache.hadoop.io.Text; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import org.w3c.dom.Document; -import org.w3c.dom.Element; -import org.w3c.dom.NodeList; /** * Implementation of a Ignite data store to be used by gora. * - * @param <K> - * class to be used for the key - * @param <T> - * class to be persisted within the store + * @param <K> class to be used for the key + * @param <T> class to be persisted within the store */ -public class IgniteStore<K,T extends PersistentBase> extends DataStoreBase<K,T> { - - protected static final String MOCK_PROPERTY = "ignite.mock"; - protected static final String INSTANCE_NAME_PROPERTY = "ignite.instance"; - protected static final String ZOOKEEPERS_NAME_PROPERTY = "ignite.zookeepers"; - protected static final String USERNAME_PROPERTY = "ignite.user"; - protected static final String PASSWORD_PROPERTY = "ignite.password"; - protected static final String DEFAULT_MAPPING_FILE = "gora-ignite-mapping.xml"; - - private final static String UNKOWN = "Unknown type "; - - private Connector conn; - private BatchWriter batchWriter; - private IgniteMapping mapping; - private Credentials credentials; - private Encoder encoder; +public class IgniteStore<K, T extends PersistentBase> extends DataStoreBase<K, T> { public static final Logger LOG = LoggerFactory.getLogger(IgniteStore.class); + private static final String PARSE_MAPPING_FILE_KEY = "gora.ignite.mapping.file"; + private static final String DEFAULT_MAPPING_FILE = "gora-ignite-mapping.xml"; + private IgniteParameters igniteParameters; + private IgniteMapping igniteMapping; + private Connection connection; - public Object fromBytes(Schema schema, byte[] data) throws IOException { - Schema fromSchema = null; - if (schema.getType() == Type.UNION) { - try { - Decoder decoder = DecoderFactory.get().binaryDecoder(data, null); - int unionIndex = decoder.readIndex(); - List<Schema> possibleTypes = schema.getTypes(); - fromSchema = possibleTypes.get(unionIndex); - Schema effectiveSchema = possibleTypes.get(unionIndex); - if (effectiveSchema.getType() == Type.NULL) { - decoder.readNull(); - return null; - } else { - data = decoder.readBytes(null).array(); - } - } catch (IOException e) { - LOG.error(e.getMessage()); - throw new GoraException("Error decoding union type: ", e); - } - } else { - fromSchema = schema; - } - return fromBytes(encoder, fromSchema, data); - } - - public static Object fromBytes(Encoder encoder, Schema schema, byte data[]) throws IOException { - switch (schema.getType()) { - case BOOLEAN: - return encoder.decodeBoolean(data); - case DOUBLE: - return encoder.decodeDouble(data); - case FLOAT: - return encoder.decodeFloat(data); - case INT: - return encoder.decodeInt(data); - case LONG: - return encoder.decodeLong(data); - case STRING: - return new Utf8(data); - case BYTES: - return ByteBuffer.wrap(data); - case ENUM: - return AvroUtils.getEnumValue(schema, encoder.decodeInt(data)); - case ARRAY: - break; - case FIXED: - break; - case MAP: - break; - case NULL: - break; - case RECORD: - break; - case UNION: - break; - default: - break; - } - throw new IllegalArgumentException(UNKOWN + schema.getType()); - - } - - private static byte[] getBytes(Text text) { - byte[] bytes = text.getBytes(); - if (bytes.length != text.getLength()) { - bytes = new byte[text.getLength()]; - System.arraycopy(text.getBytes(), 0, bytes, 0, bytes.length); - } - return bytes; - } - - public K fromBytes(Class<K> clazz, byte[] val) { - return fromBytes(encoder, clazz, val); - } + @Override + public void initialize(Class<K> keyClass, Class<T> persistentClass, Properties properties) throws GoraException { - @SuppressWarnings("unchecked") - public static <K> K fromBytes(Encoder encoder, Class<K> clazz, byte[] val) { try { - if (clazz.equals(Byte.TYPE) || clazz.equals(Byte.class)) { - return (K) Byte.valueOf(encoder.decodeByte(val)); - } else if (clazz.equals(Boolean.TYPE) || clazz.equals(Boolean.class)) { - return (K) Boolean.valueOf(encoder.decodeBoolean(val)); - } else if (clazz.equals(Short.TYPE) || clazz.equals(Short.class)) { - return (K) Short.valueOf(encoder.decodeShort(val)); - } else if (clazz.equals(Integer.TYPE) || clazz.equals(Integer.class)) { - return (K) Integer.valueOf(encoder.decodeInt(val)); - } else if (clazz.equals(Long.TYPE) || clazz.equals(Long.class)) { - return (K) Long.valueOf(encoder.decodeLong(val)); - } else if (clazz.equals(Float.TYPE) || clazz.equals(Float.class)) { - return (K) Float.valueOf(encoder.decodeFloat(val)); - } else if (clazz.equals(Double.TYPE) || clazz.equals(Double.class)) { - return (K) Double.valueOf(encoder.decodeDouble(val)); - } else if (clazz.equals(String.class)) { - return (K) new String(val, "UTF-8"); - } else if (clazz.equals(Utf8.class)) { - return (K) new Utf8(val); - } - - throw new IllegalArgumentException(UNKOWN + clazz.getName()); - } catch (IOException ioe) { - LOG.error(ioe.getMessage()); - throw new RuntimeException(ioe); + super.initialize(keyClass, persistentClass, properties); + IgniteMappingBuilder builder = new IgniteMappingBuilder(this); + builder.readMappingFile(getConf().get(PARSE_MAPPING_FILE_KEY, DEFAULT_MAPPING_FILE)); + igniteMapping = builder.getIgniteMapping(); + igniteParameters = IgniteParameters.load(properties, conf); + connection = acquiereConnection(); + LOG.info("Ignite store was successfully initialized"); + } catch (ClassNotFoundException | SQLException ex) { + LOG.error("Error while initializing Ignite store", ex); + throw new GoraException(ex); } } - private static byte[] copyIfNeeded(byte b[], int offset, int len) { - if (len != b.length || offset != 0) { - byte[] copy = new byte[len]; - System.arraycopy(b, offset, copy, 0, copy.length); - b = copy; + private Connection acquiereConnection() throws ClassNotFoundException, SQLException { + Class.forName("org.apache.ignite.IgniteJdbcThinDriver"); + StringBuilder urlBuilder = new StringBuilder(); + urlBuilder.append("jdbc:ignite:thin://"); + urlBuilder.append(igniteParameters.getHost()); + if (igniteParameters.getPort() != null) { + urlBuilder.append(":" + igniteParameters.getPort()); } - return b; - } - - public byte[] toBytes(Schema toSchema, Object o) { - if (toSchema != null && toSchema.getType() == Type.UNION) { - ByteArrayOutputStream baos = new ByteArrayOutputStream(); - org.apache.avro.io.BinaryEncoder avroEncoder = EncoderFactory.get().binaryEncoder(baos, null); - int unionIndex = 0; - try { - if (o == null) { - unionIndex = firstNullSchemaTypeIndex(toSchema); - avroEncoder.writeIndex(unionIndex); - avroEncoder.writeNull(); - } else { - unionIndex = firstNotNullSchemaTypeIndex(toSchema); - avroEncoder.writeIndex(unionIndex); - avroEncoder.writeBytes(toBytes(o)); - } - avroEncoder.flush(); - return baos.toByteArray(); - } catch (IOException e) { - LOG.error(e.getMessage()); - return toBytes(o); - } - } else { - return toBytes(o); + if (igniteParameters.getSchema() != null) { + urlBuilder.append("/" + igniteParameters.getSchema()); } - } - - private int firstNullSchemaTypeIndex(Schema toSchema) { - List<Schema> possibleTypes = toSchema.getTypes(); - int unionIndex = 0; - for (int i = 0; i < possibleTypes.size(); i++ ) { - Type pType = possibleTypes.get(i).getType(); - if (pType == Type.NULL) { // FIXME HUGE kludge to pass tests - unionIndex = i; break; - } + if (igniteParameters.getUser() != null) { + urlBuilder.append(";" + igniteParameters.getUser()); } - return unionIndex; - } - - private int firstNotNullSchemaTypeIndex(Schema toSchema) { - List<Schema> possibleTypes = toSchema.getTypes(); - int unionIndex = 0; - for (int i = 0; i < possibleTypes.size(); i++ ) { - Type pType = possibleTypes.get(i).getType(); - if (pType != Type.NULL) { // FIXME HUGE kludge to pass tests - unionIndex = i; break; - } + if (igniteParameters.getPassword() != null) { + urlBuilder.append(";" + igniteParameters.getPassword()); } - return unionIndex; - } - - public byte[] toBytes(Object o) { - return toBytes(encoder, o); - } - - public static byte[] toBytes(Encoder encoder, Object o) { - - try { - if (o instanceof String) { - return ((String) o).getBytes("UTF-8"); - } else if (o instanceof Utf8) { - return copyIfNeeded(((Utf8) o).getBytes(), 0, ((Utf8) o).getByteLength()); - } else if (o instanceof ByteBuffer) { - return copyIfNeeded(((ByteBuffer) o).array(), ((ByteBuffer) o).arrayOffset() + ((ByteBuffer) o).position(), ((ByteBuffer) o).remaining()); - } else if (o instanceof Long) { - return encoder.encodeLong((Long) o); - } else if (o instanceof Integer) { - return encoder.encodeInt((Integer) o); - } else if (o instanceof Short) { - return encoder.encodeShort((Short) o); - } else if (o instanceof Byte) { - return encoder.encodeByte((Byte) o); - } else if (o instanceof Boolean) { - return encoder.encodeBoolean((Boolean) o); - } else if (o instanceof Float) { - return encoder.encodeFloat((Float) o); - } else if (o instanceof Double) { - return encoder.encodeDouble((Double) o); - } else if (o instanceof Enum) { - return encoder.encodeInt(((Enum<?>) o).ordinal()); - } - } catch (IOException ioe) { - throw new RuntimeException(ioe); + if (igniteParameters.getAdditionalConfigurations() != null) { + urlBuilder.append(igniteParameters.getAdditionalConfigurations()); } - - throw new IllegalArgumentException(UNKOWN + o.getClass().getName()); - } - - private BatchWriter getBatchWriter() throws IOException { - if (batchWriter == null) - try { - BatchWriterConfig batchWriterConfig = new BatchWriterConfig(); - batchWriterConfig.setMaxMemory(10000000); - batchWriterConfig.setMaxLatency(60000L, TimeUnit.MILLISECONDS); - batchWriterConfig.setMaxWriteThreads(4); - batchWriter = conn.createBatchWriter(mapping.tableName, batchWriterConfig); - } catch (TableNotFoundException e) { - throw new IOException(e); - } - return batchWriter; + Connection conn = DriverManager.getConnection(urlBuilder.toString()); + return conn; } - /** - * Initialize the data store by reading the credentials, setting the client's properties up and - * reading the mapping file. Initialize is called when then the call to - * {@link org.apache.gora.store.DataStoreFactory#createDataStore} is made. - * - * @param keyClass - * @param persistentClass - * @param properties - */ @Override - public void initialize(Class<K> keyClass, Class<T> persistentClass, Properties properties) throws GoraException { - super.initialize(keyClass, persistentClass, properties); - - try { - - String mock = DataStoreFactory.findProperty(properties, this, MOCK_PROPERTY, null); - String mappingFile = DataStoreFactory.getMappingFile(properties, this, DEFAULT_MAPPING_FILE); - String user = DataStoreFactory.findProperty(properties, this, USERNAME_PROPERTY, null); - String password = DataStoreFactory.findProperty(properties, this, PASSWORD_PROPERTY, null); - - mapping = readMapping(mappingFile); - - if (mapping.encoder == null || "".equals(mapping.encoder)) { - encoder = new BinaryEncoder(); - } else { - encoder = (Encoder) getClass().getClassLoader().loadClass(mapping.encoder).newInstance(); - } - - AuthenticationToken token = new PasswordToken(password); - if (mock == null || !mock.equals("true")) { - String instance = DataStoreFactory.findProperty(properties, this, INSTANCE_NAME_PROPERTY, null); - String zookeepers = DataStoreFactory.findProperty(properties, this, ZOOKEEPERS_NAME_PROPERTY, null); - conn = new ZooKeeperInstance(instance, zookeepers).getConnector(user, token); - } else { - conn = new MockInstance().getConnector(user, token); - } - credentials = new Credentials(user, token); - - if (autoCreateSchema && !schemaExists()) - createSchema(); - - } catch (IOException | InstantiationException | IllegalAccessException | - ClassNotFoundException | IgniteException | IgniteSecurityException e) { - throw new GoraException(e); - } - } - - protected IgniteMapping readMapping(String filename) throws IOException { - try { - - IgniteMapping mapping = new IgniteMapping(); - - DocumentBuilder db = DocumentBuilderFactory.newInstance().newDocumentBuilder(); - Document dom = db.parse(getClass().getClassLoader().getResourceAsStream(filename)); - - Element root = dom.getDocumentElement(); - - NodeList nl = root.getElementsByTagName("class"); - for (int i = 0; i < nl.getLength(); i++) { - - Element classElement = (Element) nl.item(i); - if (classElement.getAttribute("keyClass").equals(keyClass.getCanonicalName()) - && classElement.getAttribute("name").equals(persistentClass.getCanonicalName())) { - - mapping.tableName = getSchemaName(classElement.getAttribute("table"), persistentClass); - mapping.encoder = classElement.getAttribute("encoder"); - - NodeList fields = classElement.getElementsByTagName("field"); - for (int j = 0; j < fields.getLength(); j++) { - Element fieldElement = (Element) fields.item(j); - - String name = fieldElement.getAttribute("name"); - String family = fieldElement.getAttribute("family"); - String qualifier = fieldElement.getAttribute("qualifier"); - if ("".equals(qualifier)) - qualifier = null; - - Pair<Text,Text> col = new Pair<>(new Text(family), qualifier == null ? null : new Text(qualifier)); - mapping.fieldMap.put(name, col); - mapping.columnMap.put(col, name); - } - } - - } - - if (mapping.tableName == null) { - throw new GoraException("Please define the ignite 'table' name mapping in " + filename + " for " + persistentClass.getCanonicalName()); - } - - nl = root.getElementsByTagName("table"); - for (int i = 0; i < nl.getLength(); i++) { - Element tableElement = (Element) nl.item(i); - if (tableElement.getAttribute("name").equals(mapping.tableName)) { - NodeList configs = tableElement.getElementsByTagName("config"); - for (int j = 0; j < configs.getLength(); j++) { - Element configElement = (Element) configs.item(j); - String key = configElement.getAttribute("key"); - String val = configElement.getAttribute("value"); - mapping.tableConfig.put(key, val); - } - } - } - - return mapping; - } catch (Exception ex) { - throw new IOException("Unable to read " + filename, ex); - } - + public String getSchemaName() { + return igniteMapping.getTableName(); } @Override - public String getSchemaName() { - return mapping.tableName; + public String getSchemaName(final String mappingSchemaName, + final Class<?> persistentClass) { + return super.getSchemaName(mappingSchemaName, persistentClass); } @Override public void createSchema() throws GoraException { - try { - conn.tableOperations().create(mapping.tableName); - Set<Entry<String,String>> es = mapping.tableConfig.entrySet(); - for (Entry<String,String> entry : es) { - conn.tableOperations().setProperty(mapping.tableName, entry.getKey(), entry.getValue()); - } - - } catch (TableExistsException e) { - LOG.debug(e.getMessage(), e); - // Assume this is not an error - } catch (IgniteException | IgniteSecurityException e) { - throw new GoraException(e); - } + throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. } @Override public void deleteSchema() throws GoraException { - try { - if (batchWriter != null) - batchWriter.close(); - batchWriter = null; - conn.tableOperations().delete(mapping.tableName); - } catch (TableNotFoundException e) { - // Ignore. Delete a non existant schema is a success - } catch (IgniteException | IgniteSecurityException e) { - throw new GoraException(e); - } + throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. } @Override public boolean schemaExists() throws GoraException { - try { - return conn.tableOperations().exists(mapping.tableName); - } catch (Exception e) { - throw new GoraException(e); - } - } - - public ByteSequence populate(Iterator<Entry<Key,Value>> iter, T persistent) throws IOException { - ByteSequence row = null; - - Map<Utf8, Object> currentMap = null; - List currentArray = null; - Text currentFam = null; - int currentPos = 0; - Schema currentSchema = null; - Field currentField = null; - - BinaryDecoder decoder = DecoderFactory.get().binaryDecoder(new byte[0], null); - - while (iter.hasNext()) { - Entry<Key,Value> entry = iter.next(); - - if (row == null) { - row = entry.getKey().getRowData(); - } - byte[] val = entry.getValue().get(); - - Field field = fieldMap.get(getFieldName(entry)); - - if (currentMap != null) { - if (currentFam.equals(entry.getKey().getColumnFamily())) { - currentMap.put(new Utf8(entry.getKey().getColumnQualifierData().toArray()), - fromBytes(currentSchema, entry.getValue().get())); - continue; - } else { - persistent.put(currentPos, currentMap); - currentMap = null; - } - } else if (currentArray != null) { - if (currentFam.equals(entry.getKey().getColumnFamily())) { - currentArray.add(fromBytes(currentSchema, entry.getValue().get())); - continue; - } else { - persistent.put(currentPos, new GenericData.Array<T>(currentField.schema(), currentArray)); - currentArray = null; - } - } - - switch (field.schema().getType()) { - case MAP: // first entry only. Next are handled above on the next loop - currentMap = new DirtyMapWrapper<>(new HashMap<Utf8, Object>()); - currentPos = field.pos(); - currentFam = entry.getKey().getColumnFamily(); - currentSchema = field.schema().getValueType(); - - currentMap.put(new Utf8(entry.getKey().getColumnQualifierData().toArray()), - fromBytes(currentSchema, entry.getValue().get())); - break; - case ARRAY: - currentArray = new DirtyListWrapper<>(new ArrayList<>()); - currentPos = field.pos(); - currentFam = entry.getKey().getColumnFamily(); - currentSchema = field.schema().getElementType(); - currentField = field; - - currentArray.add(fromBytes(currentSchema, entry.getValue().get())); - - break; - case UNION:// default value of null acts like union with null - Schema effectiveSchema = field.schema().getTypes() - .get(firstNotNullSchemaTypeIndex(field.schema())); - // map and array were coded without union index so need to be read the same way - if (effectiveSchema.getType() == Type.ARRAY) { - currentArray = new DirtyListWrapper<>(new ArrayList<>()); - currentPos = field.pos(); - currentFam = entry.getKey().getColumnFamily(); - currentSchema = field.schema().getElementType(); - currentField = field; - - currentArray.add(fromBytes(currentSchema, entry.getValue().get())); - break; - } - else if (effectiveSchema.getType() == Type.MAP) { - currentMap = new DirtyMapWrapper<>(new HashMap<Utf8, Object>()); - currentPos = field.pos(); - currentFam = entry.getKey().getColumnFamily(); - currentSchema = effectiveSchema.getValueType(); - - currentMap.put(new Utf8(entry.getKey().getColumnQualifierData().toArray()), - fromBytes(currentSchema, entry.getValue().get())); - break; - } - // continue like a regular top-level union - case RECORD: - SpecificDatumReader<?> reader = new SpecificDatumReader<Schema>(field.schema()); - persistent.put(field.pos(), reader.read(null, DecoderFactory.get().binaryDecoder(val, decoder))); - break; - default: - persistent.put(field.pos(), fromBytes(field.schema(), entry.getValue().get())); - } - } - - if (currentMap != null) { - persistent.put(currentPos, currentMap); - } else if (currentArray != null) { - persistent.put(currentPos, new GenericData.Array<T>(currentField.schema(), currentArray)); - } - - persistent.clearDirty(); - - return row; - } - - /** - * Retrieve field name from entry. - * @param entry The Key-Value entry - * @return String The field name - */ - private String getFieldName(Entry<Key, Value> entry) { - String fieldName = mapping.columnMap.get(new Pair<>(entry.getKey().getColumnFamily(), - entry.getKey().getColumnQualifier())); - if (fieldName == null) { - fieldName = mapping.columnMap.get(new Pair<Text,Text>(entry.getKey().getColumnFamily(), null)); - } - return fieldName; - } - - private void setFetchColumns(Scanner scanner, String[] fields) { - fields = getFieldsToQuery(fields); - for (String field : fields) { - Pair<Text,Text> col = mapping.fieldMap.get(field); - if (col != null) { - if (col.getSecond() == null) { - scanner.fetchColumnFamily(col.getFirst()); - } else { - scanner.fetchColumn(col.getFirst(), col.getSecond()); - } + boolean exists = false; + try (Statement stmt = connection.createStatement()) { + MessageFormat messageFormat = new MessageFormat("select * from {0} limit 0", Locale.getDefault()); + ResultSet executeQuery = stmt.executeQuery(messageFormat.format(igniteMapping.getTableName())); + executeQuery.close(); + exists = true; + } catch (SQLException ex) { + /** + * a 42000 error code is thrown by Ignite when a non-existent table + * queried. More details: + * https://apacheignite-sql.readme.io/docs/jdbc-error-codes + */ + if (ex.getSQLState() != null && ex.getSQLState().equals("42000")) { + exists = false; } else { - LOG.error("Mapping not found for field: {}", field); + throw new GoraException(ex); } } + return exists; } @Override public T get(K key, String[] fields) throws GoraException { - try { - // TODO make isolated scanner optional? - Scanner scanner = new IsolatedScanner(conn.createScanner(mapping.tableName, Authorizations.EMPTY)); - Range rowRange = new Range(new Text(toBytes(key))); - - scanner.setRange(rowRange); - setFetchColumns(scanner, fields); - - T persistent = newPersistent(); - ByteSequence row = populate(scanner.iterator(), persistent); - if (row == null) - return null; - return persistent; - } catch (Exception e) { - throw new GoraException(e); - } + throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. } @Override - public void put(K key, T val) throws GoraException { - - try{ - Mutation m = new Mutation(new Text(toBytes(key))); - - Schema schema = val.getSchema(); - List<Field> fields = schema.getFields(); - int count = 0; - - for (int i = 0; i < fields.size(); i++) { - if (!val.isDirty(i)) { - continue; - } - Field field = fields.get(i); - - Object o = val.get(field.pos()); - - Pair<Text,Text> col = mapping.fieldMap.get(field.name()); - - if (col == null) { - throw new GoraException("Please define the gora to ignite mapping for field " + field.name()); - } - - switch (field.schema().getType()) { - case MAP: - count = putMap(m, count, field.schema().getValueType(), o, col, field.name()); - break; - case ARRAY: - count = putArray(m, count, o, col, field.name()); - break; - case UNION: // default value of null acts like union with null - Schema effectiveSchema = field.schema().getTypes() - .get(firstNotNullSchemaTypeIndex(field.schema())); - // map and array need to compute qualifier - if (effectiveSchema.getType() == Type.ARRAY) { - count = putArray(m, count, o, col, field.name()); - break; - } - else if (effectiveSchema.getType() == Type.MAP) { - count = putMap(m, count, effectiveSchema.getValueType(), o, col, field.name()); - break; - } - // continue like a regular top-level union - case RECORD: - final SpecificDatumWriter<Object> writer = new SpecificDatumWriter<>(field.schema()); - final byte[] byteData = IOUtils.serialize(writer,o); - m.put(col.getFirst(), col.getSecond(), new Value(byteData)); - count++; - break; - default: - m.put(col.getFirst(), col.getSecond(), new Value(toBytes(o))); - count++; - } - - } - - if (count > 0) - try { - getBatchWriter().addMutation(m); - } catch (MutationsRejectedException e) { - LOG.error(e.getMessage(), e); - } - } catch (GoraException e) { - throw e; - } catch (Exception e) { - throw new GoraException(e); - } - } - - private int putMap(Mutation m, int count, Schema valueType, Object o, Pair<Text, Text> col, String fieldName) throws GoraException { - - // First of all we delete map field on ignite store - Text rowKey = new Text(m.getRow()); - Query<K, T> query = newQuery(); - query.setFields(fieldName); - query.setStartKey((K)rowKey.toString()); - query.setEndKey((K)rowKey.toString()); - deleteByQuery(query); - flush(); - if (o == null){ - return 0; - } - - Set<?> es = ((Map<?, ?>)o).entrySet(); - for (Object entry : es) { - Object mapKey = ((Entry<?, ?>) entry).getKey(); - Object mapVal = ((Entry<?, ?>) entry).getValue(); - if ((o instanceof DirtyMapWrapper && ((DirtyMapWrapper<?, ?>)o).isDirty()) - || !(o instanceof DirtyMapWrapper)) { - m.put(col.getFirst(), new Text(toBytes(mapKey)), new Value(toBytes(valueType, mapVal))); - count++; - } - // TODO map value deletion - } - return count; - } - - private int putArray(Mutation m, int count, Object o, Pair<Text, Text> col, String fieldName) throws GoraException { - - // First of all we delete array field on ignite store - Text rowKey = new Text(m.getRow()); - Query<K, T> query = newQuery(); - query.setFields(fieldName); - query.setStartKey((K)rowKey.toString()); - query.setEndKey((K)rowKey.toString()); - deleteByQuery(query); - flush(); - if (o == null){ - return 0; - } - - List<?> array = (List<?>) o; // both GenericArray and DirtyListWrapper - int j = 0; - for (Object item : array) { - m.put(col.getFirst(), new Text(toBytes(j++)), new Value(toBytes(item))); - count++; - } - return count; + public void put(K key, T obj) throws GoraException { + throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. } @Override public boolean delete(K key) throws GoraException { - Query<K,T> q = newQuery(); - q.setKey(key); - return deleteByQuery(q) > 0; + throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. } @Override - public long deleteByQuery(Query<K,T> query) throws GoraException { - try { - Scanner scanner = createScanner(query); - // add iterator that drops values on the server side - scanner.addScanIterator(new IteratorSetting(Integer.MAX_VALUE, SortedKeyIterator.class)); - RowIterator iterator = new RowIterator(scanner.iterator()); - - long count = 0; - - while (iterator.hasNext()) { - Iterator<Entry<Key,Value>> row = iterator.next(); - Mutation m = null; - while (row.hasNext()) { - Entry<Key,Value> entry = row.next(); - Key key = entry.getKey(); - if (m == null) - m = new Mutation(key.getRow()); - // TODO optimize to avoid continually creating column vis? prob does not matter for empty - m.putDelete(key.getColumnFamily(), key.getColumnQualifier(), new ColumnVisibility(key.getColumnVisibility()), key.getTimestamp()); - } - getBatchWriter().addMutation(m); - count++; - } - - return count; - } catch (Exception e) { - throw new GoraException(e); - } + public long deleteByQuery(Query<K, T> query) throws GoraException { + throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. } - private Range createRange(Query<K,T> query) { - Text startRow = null; - Text endRow = null; - - if (query.getStartKey() != null) - startRow = new Text(toBytes(query.getStartKey())); - - if (query.getEndKey() != null) - endRow = new Text(toBytes(query.getEndKey())); - - return new Range(startRow, true, endRow, true); - - } - - private Scanner createScanner(Query<K,T> query) throws TableNotFoundException { - // TODO make isolated scanner optional? - Scanner scanner = new IsolatedScanner(conn.createScanner(mapping.tableName, Authorizations.EMPTY)); - setFetchColumns(scanner, query.getFields()); - - scanner.setRange(createRange(query)); - - if (query.getStartTime() != -1 || query.getEndTime() != -1) { - IteratorSetting is = new IteratorSetting(30, TimestampFilter.class); - if (query.getStartTime() != -1) - TimestampFilter.setStart(is, query.getStartTime(), true); - if (query.getEndTime() != -1) - TimestampFilter.setEnd(is, query.getEndTime(), true); - - scanner.addScanIterator(is); - } - - return scanner; - } - - /** - * Execute the query and return the result. - */ @Override - public Result<K,T> execute(Query<K,T> query) throws GoraException { - try { - Scanner scanner = createScanner(query); - return new IgniteResult<>(this, query, scanner); - } catch (TableNotFoundException e) { - throw new GoraException(e) ; - } + public Result<K, T> execute(Query<K, T> query) throws GoraException { + throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. } @Override - public Query<K,T> newQuery() { - return new IgniteQuery<>(this); - } - - Text pad(Text key, int bytes) { - if (key.getLength() < bytes) - key = new Text(key); - - while (key.getLength() < bytes) { - key.append(new byte[] {0}, 0, 1); - } - - return key; + public Query<K, T> newQuery() { + throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. } @Override - public List<PartitionQuery<K,T>> getPartitions(Query<K,T> query) throws GoraException { - try { - TabletLocator tl; - if (conn instanceof MockConnector) - tl = new MockTabletLocator(); - else - tl = TabletLocator.getLocator(new ClientContext(conn.getInstance(), credentials, IgniteConfiguration.getTableConfiguration(conn, Tables.getTableId(conn.getInstance(), mapping.tableName))), new Text(Tables.getTableId(conn.getInstance(), mapping.tableName))); - - Map<String,Map<KeyExtent,List<Range>>> binnedRanges = new HashMap<>(); - - tl.invalidateCache(); - while (tl.binRanges(new ClientContext(conn.getInstance(), credentials, IgniteConfiguration.getTableConfiguration(conn, Tables.getTableId(conn.getInstance(), mapping.tableName))), Collections.singletonList(createRange(query)), binnedRanges).size() > 0) { - // TODO log? - if (!Tables.exists(conn.getInstance(), Tables.getTableId(conn.getInstance(), mapping.tableName))) - throw new TableDeletedException(Tables.getTableId(conn.getInstance(), mapping.tableName)); - else if (Tables.getTableState(conn.getInstance(), Tables.getTableId(conn.getInstance(), mapping.tableName)) == TableState.OFFLINE) - throw new TableOfflineException(conn.getInstance(), Tables.getTableId(conn.getInstance(), mapping.tableName)); - UtilWaitThread.sleep(100); - tl.invalidateCache(); - } - - List<PartitionQuery<K,T>> ret = new ArrayList<>(); - - Text startRow = null; - Text endRow = null; - if (query.getStartKey() != null) - startRow = new Text(toBytes(query.getStartKey())); - if (query.getEndKey() != null) - endRow = new Text(toBytes(query.getEndKey())); - - //hadoop expects hostnames, ignite keeps track of IPs... so need to convert - HashMap<String,String> hostNameCache = new HashMap<>(); - - for (Entry<String,Map<KeyExtent,List<Range>>> entry : binnedRanges.entrySet()) { - String ip = entry.getKey().split(":", 2)[0]; - String location = hostNameCache.get(ip); - if (location == null) { - InetAddress inetAddress = InetAddress.getByName(ip); - location = inetAddress.getHostName(); - hostNameCache.put(ip, location); - } - - Map<KeyExtent,List<Range>> tablets = entry.getValue(); - for (KeyExtent ke : tablets.keySet()) { - - K startKey = null; - if (startRow == null || !ke.contains(startRow)) { - if (ke.getPrevEndRow() != null) { - startKey = followingKey(encoder, getKeyClass(), getBytes(ke.getPrevEndRow())); - } - } else { - startKey = fromBytes(getKeyClass(), getBytes(startRow)); - } - - K endKey = null; - if (endRow == null || !ke.contains(endRow)) { - if (ke.getEndRow() != null) - endKey = lastPossibleKey(encoder, getKeyClass(), getBytes(ke.getEndRow())); - } else { - endKey = fromBytes(getKeyClass(), getBytes(endRow)); - } - - PartitionQueryImpl<K, T> pqi = new PartitionQueryImpl<>(query, startKey, endKey, location); - pqi.setConf(getConf()); - ret.add(pqi); - } - } - - return ret; - } catch (Exception e) { - throw new GoraException(e); - } - - } - - static <K> K lastPossibleKey(Encoder encoder, Class<K> clazz, byte[] er) { - - if (clazz.equals(Byte.TYPE) || clazz.equals(Byte.class)) { - throw new UnsupportedOperationException(); - } else if (clazz.equals(Boolean.TYPE) || clazz.equals(Boolean.class)) { - throw new UnsupportedOperationException(); - } else if (clazz.equals(Short.TYPE) || clazz.equals(Short.class)) { - return fromBytes(encoder, clazz, encoder.lastPossibleKey(2, er)); - } else if (clazz.equals(Integer.TYPE) || clazz.equals(Integer.class)) { - return fromBytes(encoder, clazz, encoder.lastPossibleKey(4, er)); - } else if (clazz.equals(Long.TYPE) || clazz.equals(Long.class)) { - return fromBytes(encoder, clazz, encoder.lastPossibleKey(8, er)); - } else if (clazz.equals(Float.TYPE) || clazz.equals(Float.class)) { - return fromBytes(encoder, clazz, encoder.lastPossibleKey(4, er)); - } else if (clazz.equals(Double.TYPE) || clazz.equals(Double.class)) { - return fromBytes(encoder, clazz, encoder.lastPossibleKey(8, er)); - } else if (clazz.equals(String.class)) { - throw new UnsupportedOperationException(); - } else if (clazz.equals(Utf8.class)) { - return fromBytes(encoder, clazz, er); - } - - throw new IllegalArgumentException(UNKOWN + clazz.getName()); - } - - @SuppressWarnings("unchecked") - static <K> K followingKey(Encoder encoder, Class<K> clazz, byte[] per) { - - if (clazz.equals(Byte.TYPE) || clazz.equals(Byte.class)) { - return (K) Byte.valueOf(encoder.followingKey(1, per)[0]); - } else if (clazz.equals(Boolean.TYPE) || clazz.equals(Boolean.class)) { - throw new UnsupportedOperationException(); - } else if (clazz.equals(Short.TYPE) || clazz.equals(Short.class)) { - return fromBytes(encoder, clazz, encoder.followingKey(2, per)); - } else if (clazz.equals(Integer.TYPE) || clazz.equals(Integer.class)) { - return fromBytes(encoder, clazz, encoder.followingKey(4, per)); - } else if (clazz.equals(Long.TYPE) || clazz.equals(Long.class)) { - return fromBytes(encoder, clazz, encoder.followingKey(8, per)); - } else if (clazz.equals(Float.TYPE) || clazz.equals(Float.class)) { - return fromBytes(encoder, clazz, encoder.followingKey(4, per)); - } else if (clazz.equals(Double.TYPE) || clazz.equals(Double.class)) { - return fromBytes(encoder, clazz, encoder.followingKey(8, per)); - } else if (clazz.equals(String.class)) { - throw new UnsupportedOperationException(); - } else if (clazz.equals(Utf8.class)) { - return fromBytes(encoder, clazz, Arrays.copyOf(per, per.length + 1)); - } - - throw new IllegalArgumentException(UNKOWN + clazz.getName()); + public List<PartitionQuery<K, T>> getPartitions(Query<K, T> query) throws IOException { + throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. } @Override public void flush() throws GoraException { try { - if (batchWriter != null) { - batchWriter.flush(); - } + connection.commit(); } catch (Exception e) { throw new GoraException(e); } @@ -1023,12 +183,11 @@ public class IgniteStore<K,T extends PersistentBase> extends DataStoreBase<K,T> @Override public void close() { try { - if (batchWriter != null) { - batchWriter.close(); - batchWriter = null; - } - } catch (MutationsRejectedException e) { - LOG.error(e.getMessage(), e); + connection.close(); + LOG.info("Ignite datastore destroyed successfully."); + } catch (Exception ex) { + LOG.error(ex.getMessage(), ex); } } + }
http://git-wip-us.apache.org/repos/asf/gora/blob/7545170d/gora-ignite/src/main/java/org/apache/gora/ignite/util/FixedByteArrayOutputStream.java ---------------------------------------------------------------------- diff --git a/gora-ignite/src/main/java/org/apache/gora/ignite/util/FixedByteArrayOutputStream.java b/gora-ignite/src/main/java/org/apache/gora/ignite/util/FixedByteArrayOutputStream.java deleted file mode 100644 index 97fb46a..0000000 --- a/gora-ignite/src/main/java/org/apache/gora/ignite/util/FixedByteArrayOutputStream.java +++ /dev/null @@ -1,45 +0,0 @@ -/** - * 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 - * - * 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. - */ -package org.apache.gora.ignite.util; - -import java.io.IOException; -import java.io.OutputStream; - -/** - * It is a implementation of {@link java.io.OutputStream} must always provide at least a method that writes one byte of output. - */ -public class FixedByteArrayOutputStream extends OutputStream { - - private int i; - byte out[]; - - public FixedByteArrayOutputStream(byte out[]) { - this.out = out; - } - - @Override - public void write(int b) throws IOException { - out[i++] = (byte) b; - } - - @Override - public void write(byte b[], int off, int len) throws IOException { - System.arraycopy(b, off, out, i, len); - i += len; - } - -} \ No newline at end of file http://git-wip-us.apache.org/repos/asf/gora/blob/7545170d/gora-ignite/src/main/java/org/apache/gora/ignite/util/package-info.java ---------------------------------------------------------------------- diff --git a/gora-ignite/src/main/java/org/apache/gora/ignite/util/package-info.java b/gora-ignite/src/main/java/org/apache/gora/ignite/util/package-info.java deleted file mode 100644 index eedb84b..0000000 --- a/gora-ignite/src/main/java/org/apache/gora/ignite/util/package-info.java +++ /dev/null @@ -1,20 +0,0 @@ -/** - * 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 - * - * 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. - */ -/** - * This package contains Ignite store related util classes. - */ -package org.apache.gora.ignite.util; \ No newline at end of file http://git-wip-us.apache.org/repos/asf/gora/blob/7545170d/gora-ignite/src/test/java/org/apache/gora/ignite/GoraIgniteTestDriver.java ---------------------------------------------------------------------- diff --git a/gora-ignite/src/test/java/org/apache/gora/ignite/GoraIgniteTestDriver.java b/gora-ignite/src/test/java/org/apache/gora/ignite/GoraIgniteTestDriver.java index 1e03717..336d81b 100644 --- a/gora-ignite/src/test/java/org/apache/gora/ignite/GoraIgniteTestDriver.java +++ b/gora-ignite/src/test/java/org/apache/gora/ignite/GoraIgniteTestDriver.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 @@ -17,57 +17,32 @@ */ package org.apache.gora.ignite; -import org.apache.ignite.minicluster.MiniIgniteCluster; -import org.apache.ignite.minicluster.MiniIgniteConfig; import org.apache.gora.GoraTestDriver; import org.apache.gora.ignite.store.IgniteStore; -import org.junit.Rule; -import org.junit.rules.TemporaryFolder; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import java.io.IOException; +import org.apache.ignite.Ignite; +import org.apache.ignite.Ignition; /** - * @author lmcgibbn + * Helper class for third part tests using gora-ignite backend. * + * @see GoraTestDriver */ public class GoraIgniteTestDriver extends GoraTestDriver { - private static final Logger LOG = LoggerFactory.getLogger(GoraIgniteTestDriver.class); - private static MiniIgniteCluster cluster = null; - private static final String PASSWORD = "drowssap"; + private Ignite igniteInstance; - @Rule - public TemporaryFolder tmpDir = new TemporaryFolder(); - - public GoraIgniteTestDriver() throws Exception { + public GoraIgniteTestDriver() { super(IgniteStore.class); } @Override - public void setUpClass() throws IOException, InterruptedException { - log.info("Starting Ignite MiniIgniteCluster..."); - try { - tmpDir.create(); - MiniIgniteConfig miniCfg = new MiniIgniteConfig(tmpDir.getRoot(), PASSWORD); - miniCfg.setInstanceName("goraTest"); - miniCfg.setZooKeeperPort(56321); - cluster = new MiniIgniteCluster(miniCfg); - cluster.start(); - } catch (Exception e) { - LOG.error("Error starting Ignite MiniIgniteCluster: {}", e.getMessage()); - // cleanup - tearDownClass(); - } + public void setUpClass() throws Exception { + igniteInstance = Ignition.start(); } @Override - public void tearDownClass() throws IOException, InterruptedException { - log.info("Shutting down Ignite MiniIgniteCluster..."); - if (cluster != null) { - cluster.stop(); - } - tmpDir.delete(); + public void tearDownClass() throws Exception { + igniteInstance.close(); } + } http://git-wip-us.apache.org/repos/asf/gora/blob/7545170d/gora-ignite/src/test/java/org/apache/gora/ignite/package-info.java ---------------------------------------------------------------------- diff --git a/gora-ignite/src/test/java/org/apache/gora/ignite/package-info.java b/gora-ignite/src/test/java/org/apache/gora/ignite/package-info.java deleted file mode 100644 index f536961..0000000 --- a/gora-ignite/src/test/java/org/apache/gora/ignite/package-info.java +++ /dev/null @@ -1,21 +0,0 @@ -/** - * 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 - * - * 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. - */ -/** - * Tests for <code>gora-ignite</code> including - * the test driver for {@link org.apache.gora.ignite.store.IgniteStoreTest} - */ -package org.apache.gora.ignite; \ No newline at end of file http://git-wip-us.apache.org/repos/asf/gora/blob/7545170d/gora-ignite/src/test/java/org/apache/gora/ignite/store/AuthenticationTokenTest.java ---------------------------------------------------------------------- diff --git a/gora-ignite/src/test/java/org/apache/gora/ignite/store/AuthenticationTokenTest.java b/gora-ignite/src/test/java/org/apache/gora/ignite/store/AuthenticationTokenTest.java deleted file mode 100644 index bb77bee..0000000 --- a/gora-ignite/src/test/java/org/apache/gora/ignite/store/AuthenticationTokenTest.java +++ /dev/null @@ -1,90 +0,0 @@ -/** - * 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 - * - * 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. - */ -package org.apache.gora.ignite.store; - -import java.util.List; -import java.util.Properties; -import org.apache.ignite.minicluster.MiniIgniteCluster; -import org.apache.gora.examples.generated.Employee; -import org.apache.gora.query.PartitionQuery; -import org.apache.gora.store.DataStore; -import org.apache.gora.store.DataStoreFactory; -import org.apache.hadoop.conf.Configuration; -import org.junit.After; -import org.junit.Before; -import org.junit.Rule; -import org.junit.Test; -import org.junit.rules.TemporaryFolder; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -/** - * Tests authentication token is serialized correctly. - */ -public class AuthenticationTokenTest { - private static final Logger LOG = LoggerFactory.getLogger(AuthenticationTokenTest.class); - - private static final String GORA_DATASTORE = - DataStoreFactory.GORA + "." + DataStoreFactory.DATASTORE + "."; - private static final String PASSWORD = "password"; - - @Rule - public TemporaryFolder temporaryFolder = new TemporaryFolder(); - - private MiniIgniteCluster cluster; - private DataStore<String, Employee> employeeStore; - - @Before - @SuppressWarnings("unchecked") - public void setUp() throws Exception { - cluster = new MiniIgniteCluster(temporaryFolder.getRoot(), PASSWORD); - cluster.start(); - - Properties properties = DataStoreFactory.createProps(); - properties.setProperty( - GORA_DATASTORE + IgniteStore.MOCK_PROPERTY, - "false"); - properties.setProperty( - GORA_DATASTORE + IgniteStore.INSTANCE_NAME_PROPERTY, - cluster.getInstanceName()); - properties.setProperty( - GORA_DATASTORE + IgniteStore.ZOOKEEPERS_NAME_PROPERTY, - cluster.getZooKeepers()); - properties.setProperty( - GORA_DATASTORE + IgniteStore.PASSWORD_PROPERTY, - PASSWORD); - - employeeStore = DataStoreFactory.createDataStore( - IgniteStore.class, - String.class, - Employee.class, - new Configuration(), - properties); - } - - @After - public void tearDown() throws Exception { - cluster.stop(); - } - - @Test - public void testAuthenticationTokenIsSerializedCorrectly() throws Exception { - List<PartitionQuery<String, Employee>> partitions = - employeeStore.getPartitions(employeeStore.newQuery()); - LOG.debug("partitions {}", partitions); - } -} http://git-wip-us.apache.org/repos/asf/gora/blob/7545170d/gora-ignite/src/test/java/org/apache/gora/ignite/store/IgniteStoreTest.java ---------------------------------------------------------------------- diff --git a/gora-ignite/src/test/java/org/apache/gora/ignite/store/IgniteStoreTest.java b/gora-ignite/src/test/java/org/apache/gora/ignite/store/IgniteStoreTest.java deleted file mode 100644 index b42d344..0000000 --- a/gora-ignite/src/test/java/org/apache/gora/ignite/store/IgniteStoreTest.java +++ /dev/null @@ -1,87 +0,0 @@ -/** - * 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 - * - * 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. - */ -package org.apache.gora.ignite.store; - -import java.io.IOException; - -import org.apache.gora.ignite.GoraIgniteTestDriver; -import org.apache.gora.examples.generated.Employee; -import org.apache.gora.examples.generated.WebPage; -import org.apache.gora.store.DataStore; -import org.apache.gora.store.DataStoreFactory; -import org.apache.gora.store.DataStoreTestBase; -import static org.apache.gora.store.DataStoreTestBase.log; -import org.apache.gora.store.DataStoreTestUtil; -import static org.apache.gora.store.DataStoreTestUtil.testResultSize; -import org.apache.hadoop.conf.Configuration; -import org.junit.Before; -import org.junit.Ignore; -import org.junit.Test; - -/** - * Tests extending {@link org.apache.gora.store.DataStoreTestBase} - * which run the base JUnit test suite for Gora. - */ -public class IgniteStoreTest extends DataStoreTestBase { - - static { - try { - setTestDriver(new GoraIgniteTestDriver()); - } catch (Exception e) { - throw new RuntimeException(e); - } - } - - @Before - public void setUp() throws Exception { - super.setUp(); - } - - public GoraIgniteTestDriver getTestDriver() { - return (GoraIgniteTestDriver) testDriver; - } - - //Until GORA-66 is resolved this test will always fail, so - //do not run it - @Ignore("skipped until GORA-66 is resolved") - @Override - public void testDeleteByQueryFields() throws IOException { - } - - @Test - @Ignore("Ignite does not support Result#size() without limit set") - @Override - public void testResultSize() throws Exception { - } - - @Test - @Ignore("Ignite does not support Result#size() without limit set") - @Override - public void testResultSizeStartKey() throws Exception { - } - - @Ignore("Ignite does not support Result#size() without limit set") - @Override - public void testResultSizeEndKey() throws Exception { - } - - @Test - @Ignore("Ignite does not support Result#size() without limit set") - @Override - public void testResultSizeKeyRange() throws Exception { - } -} http://git-wip-us.apache.org/repos/asf/gora/blob/7545170d/gora-ignite/src/test/java/org/apache/gora/ignite/store/PartitionTest.java ---------------------------------------------------------------------- diff --git a/gora-ignite/src/test/java/org/apache/gora/ignite/store/PartitionTest.java b/gora-ignite/src/test/java/org/apache/gora/ignite/store/PartitionTest.java deleted file mode 100644 index 1c77656..0000000 --- a/gora-ignite/src/test/java/org/apache/gora/ignite/store/PartitionTest.java +++ /dev/null @@ -1,96 +0,0 @@ -/** - * 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 - * - * 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. - */ -package org.apache.gora.ignite.store; - -import java.io.ByteArrayOutputStream; -import java.io.DataOutputStream; -import java.io.IOException; - -import org.apache.gora.ignite.encoders.Encoder; -import org.apache.gora.ignite.encoders.SignedBinaryEncoder; -import org.junit.Test; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertTrue; - -/** - * - */ -public class PartitionTest { - // TODO test more types - - private static Encoder encoder = new SignedBinaryEncoder(); - - static long encl(long l) throws IOException { - ByteArrayOutputStream baos = new ByteArrayOutputStream(); - DataOutputStream dos = new DataOutputStream(baos); - try { - dos.writeLong(l); - dos.flush(); - } catch (IOException e) { - throw new RuntimeException(e); - } - return encoder.decodeLong(baos.toByteArray()); - } - - @Test - public void test1() throws IOException { - assertEquals(encl(0x006f000000000000l), (long) IgniteStore.followingKey(encoder, Long.class, new byte[] {0x00, 0x6f})); - assertEquals(encl(1l), (long) IgniteStore.followingKey(encoder, Long.class, new byte[] {0, 0, 0, 0, 0, 0, 0, 0})); - assertEquals(encl(0x106f000000000001l), (long) IgniteStore.followingKey(encoder, Long.class, new byte[] {0x10, 0x6f, 0, 0, 0, 0, 0, 0})); - assertEquals( - encl(-1l), - (long) IgniteStore.followingKey(encoder, Long.class, new byte[] {(byte) 0xff, (byte) 0xff, (byte) 0xff, (byte) 0xff, (byte) 0xff, (byte) 0xff, - (byte) 0xff, - (byte) 0xfe})); - - assertEquals(encl(0x8000000000000001l), (long) IgniteStore.followingKey(encoder, Long.class, new byte[] {(byte) 0x80, 0, 0, 0, 0, 0, 0, 0})); - assertEquals( - encl(0x8000000000000000l), - (long) IgniteStore.followingKey(encoder, Long.class, new byte[] {(byte) 0x7f, (byte) 0xff, (byte) 0xff, (byte) 0xff, (byte) 0xff, (byte) 0xff, - (byte) 0xff, - (byte) 0xff})); - - - try { - IgniteStore.followingKey(encoder, Long.class, - new byte[] {(byte) 0xff, (byte) 0xff, (byte) 0xff, (byte) 0xff, (byte) 0xff, (byte) 0xff, (byte) 0xff, (byte) 0xff}); - assertTrue(false); - } catch (IllegalArgumentException iea) { - - } - } - - @Test - public void test2() throws IOException { - assertEquals(encl(0x00ffffffffffffffl), (long) IgniteStore.lastPossibleKey(encoder, Long.class, new byte[] {0x01})); - assertEquals(encl(0x006effffffffffffl), (long) IgniteStore.lastPossibleKey(encoder, Long.class, new byte[] {0x00, 0x6f})); - assertEquals(encl(0xff6effffffffffffl), (long) IgniteStore.lastPossibleKey(encoder, Long.class, new byte[] {(byte) 0xff, 0x6f})); - assertEquals(encl(0xfffeffffffffffffl), (long) IgniteStore.lastPossibleKey(encoder, Long.class, new byte[] {(byte) 0xff, (byte) 0xff})); - assertEquals(encl(0l), (long) IgniteStore.lastPossibleKey(encoder, Long.class, new byte[] {(byte) 0, 0, 0, 0, 0, 0, 0, 0})); - - assertEquals(encl(0x7effffffffffffffl), (long) IgniteStore.lastPossibleKey(encoder, Long.class, new byte[] {(byte) 0x7f})); - assertEquals(encl(0x7fffffffffffffffl), (long) IgniteStore.lastPossibleKey(encoder, Long.class, new byte[] {(byte) 0x80})); - assertEquals(encl(0x80ffffffffffffffl), (long) IgniteStore.lastPossibleKey(encoder, Long.class, new byte[] {(byte) 0x81})); - - try { - IgniteStore.lastPossibleKey(encoder, Long.class, new byte[] {(byte) 0, 0, 0, 0, 0, 0, 0}); - assertTrue(false); - } catch (IllegalArgumentException iea) { - - } - } -} http://git-wip-us.apache.org/repos/asf/gora/blob/7545170d/gora-ignite/src/test/java/org/apache/gora/ignite/store/TestIgniteStore.java ---------------------------------------------------------------------- diff --git a/gora-ignite/src/test/java/org/apache/gora/ignite/store/TestIgniteStore.java b/gora-ignite/src/test/java/org/apache/gora/ignite/store/TestIgniteStore.java new file mode 100644 index 0000000..2244f0e --- /dev/null +++ b/gora-ignite/src/test/java/org/apache/gora/ignite/store/TestIgniteStore.java @@ -0,0 +1,32 @@ +/* + * 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 + * + * 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. + */ +package org.apache.gora.ignite.store; + +import org.apache.gora.ignite.GoraIgniteTestDriver; +import org.apache.gora.store.DataStoreTestBase; + +/** + * Test case for IgniteStore. + */ +public class TestIgniteStore extends DataStoreTestBase { + + static { + setTestDriver(new GoraIgniteTestDriver()); + } + +} http://git-wip-us.apache.org/repos/asf/gora/blob/7545170d/gora-ignite/src/test/java/org/apache/gora/ignite/store/package-info.java ---------------------------------------------------------------------- diff --git a/gora-ignite/src/test/java/org/apache/gora/ignite/store/package-info.java b/gora-ignite/src/test/java/org/apache/gora/ignite/store/package-info.java deleted file mode 100644 index a41e085..0000000 --- a/gora-ignite/src/test/java/org/apache/gora/ignite/store/package-info.java +++ /dev/null @@ -1,21 +0,0 @@ -/* - * 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 - * - * 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. - */ -/** - * This package contains all the unit tests for basic CRUD operations - * functionality of the Ignite dataStore. - */ -package org.apache.gora.ignite.store; \ No newline at end of file http://git-wip-us.apache.org/repos/asf/gora/blob/7545170d/gora-ignite/src/test/java/org/apache/gora/ignite/util/HexEncoderTest.java ---------------------------------------------------------------------- diff --git a/gora-ignite/src/test/java/org/apache/gora/ignite/util/HexEncoderTest.java b/gora-ignite/src/test/java/org/apache/gora/ignite/util/HexEncoderTest.java deleted file mode 100644 index 0d4e5e6..0000000 --- a/gora-ignite/src/test/java/org/apache/gora/ignite/util/HexEncoderTest.java +++ /dev/null @@ -1,56 +0,0 @@ -/** - * 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 - * - * 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. - */ -package org.apache.gora.ignite.util; - -import java.nio.charset.Charset; -import org.apache.gora.ignite.encoders.HexEncoder; -import static org.junit.Assert.assertEquals; -import org.junit.Test; - -/** - * - */ -public class HexEncoderTest { - - @Test - public void testByte() { - HexEncoder encoder = new HexEncoder(); - - assertEquals("12", new String(encoder.encodeByte((byte) 0x12), Charset.defaultCharset())); - assertEquals("f2", new String(encoder.encodeByte((byte) 0xf2), Charset.defaultCharset())); - - byte b = Byte.MIN_VALUE; - while (b != Byte.MAX_VALUE) { - assertEquals(b, encoder.decodeByte(encoder.encodeByte(b))); - b++; - } - } - - @Test - public void testShort() { - HexEncoder encoder = new HexEncoder(); - - assertEquals("1234", new String(encoder.encodeShort((short) 0x1234), Charset.defaultCharset())); - assertEquals("f234", new String(encoder.encodeShort((short) 0xf234), Charset.defaultCharset())); - - short s = Short.MIN_VALUE; - while (s != Short.MAX_VALUE) { - assertEquals(s, encoder.decodeShort(encoder.encodeShort(s))); - s++; - } - } -} http://git-wip-us.apache.org/repos/asf/gora/blob/7545170d/gora-ignite/src/test/java/org/apache/gora/ignite/util/SignedBinaryEncoderTest.java ---------------------------------------------------------------------- diff --git a/gora-ignite/src/test/java/org/apache/gora/ignite/util/SignedBinaryEncoderTest.java b/gora-ignite/src/test/java/org/apache/gora/ignite/util/SignedBinaryEncoderTest.java deleted file mode 100644 index c943e73..0000000 --- a/gora-ignite/src/test/java/org/apache/gora/ignite/util/SignedBinaryEncoderTest.java +++ /dev/null @@ -1,167 +0,0 @@ -/** - * 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 - * - * 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. - */ -package org.apache.gora.ignite.util; - -import java.io.IOException; -import java.util.ArrayList; -import java.util.Collections; - -import org.apache.gora.ignite.encoders.SignedBinaryEncoder; -import org.apache.hadoop.io.Text; -import org.junit.Test; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertTrue; - -/** - * - */ -public class SignedBinaryEncoderTest { - @Test - public void testShort() throws IOException { - short s = Short.MIN_VALUE; - Text prev = null; - - SignedBinaryEncoder encoder = new SignedBinaryEncoder(); - - while (true) { - byte[] enc = encoder.encodeShort(s); - assertEquals(s, encoder.decodeShort(enc)); - Text current = new Text(enc); - if (prev != null) - assertTrue(prev.compareTo(current) < 0); - prev = current; - s++; - if (s == Short.MAX_VALUE) - break; - } - } - - private void testInt(int start, int finish) throws IOException { - int i = start; - Text prev = null; - - SignedBinaryEncoder encoder = new SignedBinaryEncoder(); - - while (true) { - byte[] enc = encoder.encodeInt(i); - assertEquals(i, encoder.decodeInt(enc)); - Text current = new Text(enc); - if (prev != null) - assertTrue(prev.compareTo(current) < 0); - prev = current; - i++; - if (i == finish) - break; - } - } - - @Test - public void testInt() throws IOException { - testInt(Integer.MIN_VALUE, Integer.MIN_VALUE + (1 << 16)); - testInt(-(1 << 15), (1 << 15)); - testInt(Integer.MAX_VALUE - (1 << 16), Integer.MAX_VALUE); - } - - private void testLong(long start, long finish) throws IOException { - long l = start; - Text prev = null; - - SignedBinaryEncoder encoder = new SignedBinaryEncoder(); - - while (true) { - byte[] enc = encoder.encodeLong(l); - assertEquals(l, encoder.decodeLong(enc)); - Text current = new Text(enc); - if (prev != null) - assertTrue(prev.compareTo(current) < 0); - prev = current; - l++; - if (l == finish) - break; - } - } - - @Test - public void testLong() throws IOException { - testLong(Long.MIN_VALUE, Long.MIN_VALUE + (1 << 16)); - testLong(-(1 << 15), (1 << 15)); - testLong(Long.MAX_VALUE - (1 << 16), Long.MAX_VALUE); - } - - @Test - public void testDouble() throws IOException { - - ArrayList<Double> testData = new ArrayList<>(); - testData.add(Double.NEGATIVE_INFINITY); - testData.add(Double.MIN_VALUE); - testData.add(Math.nextUp(Double.NEGATIVE_INFINITY)); - testData.add(Math.pow(10.0, 30.0) * -1.0); - testData.add(Math.pow(10.0, 30.0)); - testData.add(Math.pow(10.0, -30.0) * -1.0); - testData.add(Math.pow(10.0, -30.0)); - testData.add(Math.nextAfter(0.0, Double.NEGATIVE_INFINITY)); - testData.add(0.0); - testData.add(Math.nextAfter(Double.MAX_VALUE, Double.NEGATIVE_INFINITY)); - testData.add(Double.MAX_VALUE); - testData.add(Double.POSITIVE_INFINITY); - - Collections.sort(testData); - - SignedBinaryEncoder encoder = new SignedBinaryEncoder(); - - for (int i = 0; i < testData.size(); i++) { - byte[] enc = encoder.encodeDouble(testData.get(i)); - assertEquals(testData.get(i), (Double) encoder.decodeDouble(enc)); - if (i > 1) { - assertTrue("Checking " + testData.get(i) + " > " + testData.get(i - 1), - new Text(enc).compareTo(new Text(encoder.encodeDouble(testData.get(i - 1)))) > 0); - } - } - } - - @Test - public void testFloat() throws IOException { - - ArrayList<Float> testData = new ArrayList<>(); - testData.add(Float.NEGATIVE_INFINITY); - testData.add(Float.MIN_VALUE); - testData.add(Math.nextUp(Float.NEGATIVE_INFINITY)); - testData.add((float) Math.pow(10.0f, 30.0f) * -1.0f); - testData.add((float) Math.pow(10.0f, 30.0f)); - testData.add((float) Math.pow(10.0f, -30.0f) * -1.0f); - testData.add((float) Math.pow(10.0f, -30.0f)); - testData.add(Math.nextAfter(0.0f, Float.NEGATIVE_INFINITY)); - testData.add(0.0f); - testData.add(Math.nextAfter(Float.MAX_VALUE, Float.NEGATIVE_INFINITY)); - testData.add(Float.MAX_VALUE); - testData.add(Float.POSITIVE_INFINITY); - - Collections.sort(testData); - - SignedBinaryEncoder encoder = new SignedBinaryEncoder(); - - for (int i = 0; i < testData.size(); i++) { - byte[] enc = encoder.encodeFloat(testData.get(i)); - assertEquals(testData.get(i), (Float)encoder.decodeFloat(enc)); - if (i > 1) { - assertTrue("Checking " + testData.get(i) + " > " + testData.get(i - 1), - new Text(enc).compareTo(new Text(encoder.encodeFloat(testData.get(i - 1)))) > 0); - } - } - } - -} http://git-wip-us.apache.org/repos/asf/gora/blob/7545170d/gora-ignite/src/test/java/org/apache/gora/ignite/util/package-info.java ---------------------------------------------------------------------- diff --git a/gora-ignite/src/test/java/org/apache/gora/ignite/util/package-info.java b/gora-ignite/src/test/java/org/apache/gora/ignite/util/package-info.java deleted file mode 100644 index afcd619..0000000 --- a/gora-ignite/src/test/java/org/apache/gora/ignite/util/package-info.java +++ /dev/null @@ -1,20 +0,0 @@ -/* - * 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 - * - * 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. - */ -/** - * This package contains all the unit tests for utils of the Ignite dataStore. - */ -package org.apache.gora.ignite.util; \ No newline at end of file http://git-wip-us.apache.org/repos/asf/gora/blob/7545170d/gora-ignite/src/test/resources/gora-accumulo-mapping.xml ---------------------------------------------------------------------- diff --git a/gora-ignite/src/test/resources/gora-accumulo-mapping.xml b/gora-ignite/src/test/resources/gora-accumulo-mapping.xml deleted file mode 100644 index 4d036c6..0000000 --- a/gora-ignite/src/test/resources/gora-accumulo-mapping.xml +++ /dev/null @@ -1,59 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> - -<!-- - 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 - - 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. ---> - -<gora-otd> - <table name="AccessLog"> - <config key="table.file.compress.blocksize" value="32K"/> - </table> - - <class name="org.apache.gora.tutorial.log.generated.Pageview" keyClass="java.lang.Long" table="AccessLog"> - <field name="url" family="common" qualifier="url"/> - <field name="timestamp" family="common" qualifier="timestamp"/> - <field name="ip" family="common" qualifier="ip" /> - <field name="httpMethod" family="http" qualifier="httpMethod"/> - <field name="httpStatusCode" family="http" qualifier="httpStatusCode"/> - <field name="responseSize" family="http" qualifier="responseSize"/> - <field name="referrer" family="misc" qualifier="referrer"/> - <field name="userAgent" family="misc" qualifier="userAgent"/> - </class> - - <class name="org.apache.gora.examples.generated.Employee" keyClass="java.lang.String" table="Employee"> - <field name="name" family="info" qualifier="nm"/> - <field name="dateOfBirth" family="info" qualifier="db"/> - <field name="ssn" family="info" qualifier="sn"/> - <field name="salary" family="info" qualifier="sl"/> - <field name="boss" family="info" qualifier="bs"/> - <field name="webpage" family="info" qualifier="wp"/> - </class> - - <class name="org.apache.gora.examples.generated.WebPage" keyClass="java.lang.String" table="WebPage"> - <field name="url" family="common" qualifier="u"/> - <field name="content" family="content" qualifier="c"/> - <field name="parsedContent" family="parsedContent"/> - <field name="outlinks" family="outlinks"/> - <field name="headers" family="headers"/> - <field name="metadata" family="common" qualifier="metadata"/> - <field name="byteData" family="byteData" qualifier="byteData"/> - <field name="stringData" family="stringData" qualifier="stringData"/> - </class> - - <class name="org.apache.gora.examples.generated.TokenDatum" keyClass="java.lang.String"> - <field name="count" family="common" qualifier="count"/> - </class> -</gora-otd> http://git-wip-us.apache.org/repos/asf/gora/blob/7545170d/gora-ignite/src/test/resources/gora-ignite-mapping.xml ---------------------------------------------------------------------- diff --git a/gora-ignite/src/test/resources/gora-ignite-mapping.xml b/gora-ignite/src/test/resources/gora-ignite-mapping.xml new file mode 100644 index 0000000..3c13774 --- /dev/null +++ b/gora-ignite/src/test/resources/gora-ignite-mapping.xml @@ -0,0 +1,42 @@ +<?xml version="1.0" encoding="UTF-8"?> + +<!-- + 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 + + 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. +--> + +<gora-otd> + <class name="org.apache.gora.examples.generated.Employee" keyClass="java.lang.String" table="Employee"> + <primarykey column="ssn"/> + <field name="ssn" column="ssn" type="VARCHAR"/> + <field name="name" column="name" type="VARCHAR"/> + <field name="dateOfBirth" column="dateOfBirth" type="BIGINT"/> + <field name="salary" column="salary" type="INT"/> + <field name="boss" column="boss" type="VARCHAR"/> + <field name="webpage" column="webpage" type="VARCHAR"/> + </class> + + <class name="org.apache.gora.examples.generated.WebPage" keyClass="java.lang.String" table="WebPage"> + <primarykey column="url"/> + <field name="url" column="url" type="VARCHAR"/> + <field name="content" column="content" type="BINARY"/> + <field name="parsedContent" column="parsedContent" type="BINARY"/> + <field name="outlinks" column="outlinks" type="BINARY"/> + <field name="headers" column="headers" type="BINARY"/> + <field name="metadata" column="metadata" type="BINARY"/> + <field name="byteData" column="byteData" type="BINARY"/> + <field name="stringData" column="stringData" type="VARCHAR"/> + </class> +</gora-otd> http://git-wip-us.apache.org/repos/asf/gora/blob/7545170d/gora-ignite/src/test/resources/gora.properties ---------------------------------------------------------------------- diff --git a/gora-ignite/src/test/resources/gora.properties b/gora-ignite/src/test/resources/gora.properties index 5cf0e25..e45aab7 100644 --- a/gora-ignite/src/test/resources/gora.properties +++ b/gora-ignite/src/test/resources/gora.properties @@ -14,8 +14,9 @@ # limitations under the License. gora.datastore.default=org.apache.gora.ignite.store.IgniteStore -gora.datastore.ignite.mock=false -gora.datastore.ignite.instance=goraTest -gora.datastore.ignite.zookeepers=localhost:56321 -gora.datastore.ignite.user=root -gora.datastore.ignite.password=drowssap \ No newline at end of file +gora.datastore.ignite.schema=PUBLIC +gora.datastore.ignite.host=localhost +gora.datastore.ignite.port=10800 +gora.datastore.ignite.user= +gora.datastore.ignite.password= +gora.datastore.ignite.additionalConfigurations= \ No newline at end of file http://git-wip-us.apache.org/repos/asf/gora/blob/7545170d/nbactions.xml ---------------------------------------------------------------------- diff --git a/nbactions.xml b/nbactions.xml new file mode 100644 index 0000000..52ecdda --- /dev/null +++ b/nbactions.xml @@ -0,0 +1,13 @@ +<?xml version="1.0" encoding="UTF-8"?> +<actions> + <action> + <actionName>rebuild</actionName> + <packagings> + <packaging>*</packaging> + </packagings> + <goals> + <goal>clean</goal> + <goal>install</goal> + </goals> + </action> + </actions>