You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@gora.apache.org by le...@apache.org on 2014/01/15 11:11:08 UTC

svn commit: r1558333 - in /gora/branches/GORA_94: ./ gora-cassandra/ gora-cassandra/src/main/java/org/apache/gora/cassandra/query/ gora-cassandra/src/main/java/org/apache/gora/cassandra/serializers/ gora-cassandra/src/main/java/org/apache/gora/cassandr...

Author: lewismc
Date: Wed Jan 15 10:11:08 2014
New Revision: 1558333

URL: http://svn.apache.org/r1558333
Log:
GORA-245 Upgrade to Avro 1.7.X in gora-cassandra GORA-245v4.patch

Modified:
    gora/branches/GORA_94/gora-cassandra/pom.xml
    gora/branches/GORA_94/gora-cassandra/src/main/java/org/apache/gora/cassandra/query/CassandraResult.java
    gora/branches/GORA_94/gora-cassandra/src/main/java/org/apache/gora/cassandra/query/CassandraSubColumn.java
    gora/branches/GORA_94/gora-cassandra/src/main/java/org/apache/gora/cassandra/query/CassandraSuperColumn.java
    gora/branches/GORA_94/gora-cassandra/src/main/java/org/apache/gora/cassandra/serializers/CharSequenceSerializer.java
    gora/branches/GORA_94/gora-cassandra/src/main/java/org/apache/gora/cassandra/serializers/ListSerializer.java
    gora/branches/GORA_94/gora-cassandra/src/main/java/org/apache/gora/cassandra/serializers/MapSerializer.java
    gora/branches/GORA_94/gora-cassandra/src/main/java/org/apache/gora/cassandra/serializers/TypeUtils.java
    gora/branches/GORA_94/gora-cassandra/src/main/java/org/apache/gora/cassandra/store/CassandraClient.java
    gora/branches/GORA_94/gora-cassandra/src/main/java/org/apache/gora/cassandra/store/CassandraMapping.java
    gora/branches/GORA_94/gora-cassandra/src/main/java/org/apache/gora/cassandra/store/CassandraMappingManager.java
    gora/branches/GORA_94/gora-cassandra/src/main/java/org/apache/gora/cassandra/store/CassandraStore.java
    gora/branches/GORA_94/gora-cassandra/src/test/conf/cassandra.yaml
    gora/branches/GORA_94/gora-cassandra/src/test/java/org/apache/gora/cassandra/GoraCassandraTestDriver.java
    gora/branches/GORA_94/gora-core/src/test/java/org/apache/gora/store/DataStoreTestUtil.java
    gora/branches/GORA_94/gora-hbase/pom.xml
    gora/branches/GORA_94/gora-hbase/src/main/java/org/apache/gora/hbase/store/HBaseStore.java
    gora/branches/GORA_94/pom.xml

Modified: gora/branches/GORA_94/gora-cassandra/pom.xml
URL: http://svn.apache.org/viewvc/gora/branches/GORA_94/gora-cassandra/pom.xml?rev=1558333&r1=1558332&r2=1558333&view=diff
==============================================================================
--- gora/branches/GORA_94/gora-cassandra/pom.xml (original)
+++ gora/branches/GORA_94/gora-cassandra/pom.xml Wed Jan 15 10:11:08 2014
@@ -127,15 +127,15 @@
             <exclusions>
                 <exclusion>
                     <groupId>org.apache.cassandra.deps</groupId>
-    		    <artifactId>avro</artifactId>
+                    <artifactId>avro</artifactId>
                 </exclusion>
             </exclusions>
         </dependency>
         
-        <dependency>
+        <!-- dependency>
             <groupId>org.apache.cassandra</groupId>
             <artifactId>cassandra-thrift</artifactId>
-        </dependency>
+        </dependency-->
 
         <dependency>
             <groupId>org.hectorclient</groupId>
@@ -143,7 +143,7 @@
                 <exclusions>
                     <exclusion>
                         <groupId>org.apache.cassandra</groupId>
-    		        <artifactId>cassandra-all</artifactId>
+                        <artifactId>cassandra-all</artifactId>
                     </exclusion>
             </exclusions>
         </dependency>
@@ -159,11 +159,13 @@
             <artifactId>jdom</artifactId>
         </dependency>
 
-        <!-- Logging Dependencies -->
+        
         <dependency>
             <groupId>org.apache.avro</groupId>
             <artifactId>avro</artifactId>
         </dependency>
+        
+        <!-- Logging Dependencies -->
         <dependency>
             <groupId>org.slf4j</groupId>
             <artifactId>slf4j-api</artifactId>

Modified: gora/branches/GORA_94/gora-cassandra/src/main/java/org/apache/gora/cassandra/query/CassandraResult.java
URL: http://svn.apache.org/viewvc/gora/branches/GORA_94/gora-cassandra/src/main/java/org/apache/gora/cassandra/query/CassandraResult.java?rev=1558333&r1=1558332&r2=1558333&view=diff
==============================================================================
--- gora/branches/GORA_94/gora-cassandra/src/main/java/org/apache/gora/cassandra/query/CassandraResult.java (original)
+++ gora/branches/GORA_94/gora-cassandra/src/main/java/org/apache/gora/cassandra/query/CassandraResult.java Wed Jan 15 10:11:08 2014
@@ -98,18 +98,27 @@ public class CassandraResult<K, T extend
       
       // get field name
       String family = cassandraColumn.getFamily();
-      String fieldName = this.reverseMap.get(family + ":" + StringSerializer.get().fromByteBuffer(cassandraColumn.getName()));
+      String fieldName = this.reverseMap.get(family + ":" + 
+          StringSerializer.get().fromByteBuffer(cassandraColumn.getName()));
       
       if (fieldName != null ){
         // get field
-        int pos = this.persistent.getFieldIndex(fieldName);
+        int pos = this.persistent.getSchema().getField(fieldName).pos();
         Field field = fields.get(pos);
         Type fieldType = field.schema().getType();
-        System.out.println(StringSerializer.get().fromByteBuffer(cassandraColumn.getName()) + fieldName + " " + fieldType.name());
+        //LOG.info(StringSerializer.get().fromByteBuffer(cassandraColumn.getName()) + fieldName + " " + fieldType.name());
         if (fieldType == Type.UNION){
-          // TODO getting UNION stored type
-          // TODO get value of UNION stored type. This field does not need to be written back to the store
-          cassandraColumn.setUnionType(getNonNullTypePos(field.schema().getTypes()));
+          // getting UNION stored type
+          int posUnionType = this.persistent.getSchema().getField(fieldName + CassandraStore.UNION_COL_SUFIX).pos();
+          Field fieldUnionType = fields.get(posUnionType);
+          CassandraColumn cc = getUnionTypeColumn(fieldName + CassandraStore.UNION_COL_SUFIX, cassandraRow.toArray());
+          // get value of UNION stored type
+          cc.setField(fieldUnionType);
+          Object val = cc.getValue();
+          this.persistent.put(posUnionType, val);
+          // this field does not need to be written back to the store
+          this.persistent.clearDirty(posUnionType);
+          cassandraColumn.setUnionType(Integer.parseInt(val.toString()));
         }
 
         // get value

Modified: gora/branches/GORA_94/gora-cassandra/src/main/java/org/apache/gora/cassandra/query/CassandraSubColumn.java
URL: http://svn.apache.org/viewvc/gora/branches/GORA_94/gora-cassandra/src/main/java/org/apache/gora/cassandra/query/CassandraSubColumn.java?rev=1558333&r1=1558332&r2=1558333&view=diff
==============================================================================
--- gora/branches/GORA_94/gora-cassandra/src/main/java/org/apache/gora/cassandra/query/CassandraSubColumn.java (original)
+++ gora/branches/GORA_94/gora-cassandra/src/main/java/org/apache/gora/cassandra/query/CassandraSubColumn.java Wed Jan 15 10:11:08 2014
@@ -19,29 +19,19 @@
 package org.apache.gora.cassandra.query;
 
 import java.nio.ByteBuffer;
-import java.nio.CharBuffer;
-import java.nio.charset.CharacterCodingException;
 import java.nio.charset.Charset;
 import java.nio.charset.CharsetEncoder;
+import java.util.List;
+import java.util.Map;
 
-import me.prettyprint.cassandra.serializers.FloatSerializer;
-import me.prettyprint.cassandra.serializers.DoubleSerializer;
-import me.prettyprint.cassandra.serializers.IntegerSerializer;
-import me.prettyprint.cassandra.serializers.LongSerializer;
-import me.prettyprint.cassandra.serializers.StringSerializer;
 import me.prettyprint.hector.api.beans.HColumn;
 
 import org.apache.avro.Schema;
 import org.apache.avro.Schema.Field;
 import org.apache.avro.Schema.Type;
-import org.apache.avro.generic.GenericArray;
-import org.apache.avro.generic.GenericData;
-import org.apache.avro.util.Utf8;
-import org.apache.gora.cassandra.serializers.GenericArraySerializer;
-import org.apache.gora.cassandra.serializers.StatefulHashMapSerializer;
-import org.apache.gora.cassandra.serializers.TypeUtils;
+import org.apache.gora.cassandra.serializers.ListSerializer;
+import org.apache.gora.cassandra.serializers.MapSerializer;
 import org.apache.gora.cassandra.store.CassandraStore;
-import org.apache.gora.persistency.StatefulHashMap;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -76,12 +66,12 @@ public class CassandraSubColumn extends 
     }
     Object value = null;
     if (type == Type.ARRAY) {
-      ListSerializer serializer = ListSerializer.get(fieldSchema.getElementType());
-      List genericArray = serializer.fromByteBuffer(byteBuffer);
+      ListSerializer<?> serializer = ListSerializer.get(fieldSchema.getElementType());
+      List<?> genericArray = serializer.fromByteBuffer(byteBuffer);
       value = genericArray;
     } else if (type == Type.MAP) {
-      MapSerializer serializer = MapSerializer.get(fieldSchema.getValueType());
-      Map map = serializer.fromByteBuffer(byteBuffer);
+      MapSerializer<?> serializer = MapSerializer.get(fieldSchema.getValueType());
+      Map<?, ?> map = serializer.fromByteBuffer(byteBuffer);
       value = map;
     } else if (type == Type.UNION){
       // the selected union schema is obtained

Modified: gora/branches/GORA_94/gora-cassandra/src/main/java/org/apache/gora/cassandra/query/CassandraSuperColumn.java
URL: http://svn.apache.org/viewvc/gora/branches/GORA_94/gora-cassandra/src/main/java/org/apache/gora/cassandra/query/CassandraSuperColumn.java?rev=1558333&r1=1558332&r2=1558333&view=diff
==============================================================================
--- gora/branches/GORA_94/gora-cassandra/src/main/java/org/apache/gora/cassandra/query/CassandraSuperColumn.java (original)
+++ gora/branches/GORA_94/gora-cassandra/src/main/java/org/apache/gora/cassandra/query/CassandraSuperColumn.java Wed Jan 15 10:11:08 2014
@@ -57,7 +57,6 @@ public class CassandraSuperColumn extend
         List<Object> array = new ArrayList<Object>();
         
         for (HColumn<ByteBuffer, ByteBuffer> hColumn : this.hSuperColumn.getColumns()) {
-          ByteBuffer memberByteBuffer = hColumn.getValue();
           Object memberValue = fromByteBuffer(fieldSchema.getElementType(), hColumn.getValue());
           // int i = IntegerSerializer().get().fromByteBuffer(hColumn.getName());
           array.add(memberValue);      
@@ -69,7 +68,6 @@ public class CassandraSuperColumn extend
         Map<CharSequence, Object> map = new HashMap<CharSequence, Object>();
         
         for (HColumn<ByteBuffer, ByteBuffer> hColumn : this.hSuperColumn.getColumns()) {
-          ByteBuffer memberByteBuffer = hColumn.getValue();
           Object memberValue = null;
           memberValue = fromByteBuffer(fieldSchema.getValueType(), hColumn.getValue());
           map.put(CharSequenceSerializer.get().fromByteBuffer(hColumn.getName()), memberValue);      

Modified: gora/branches/GORA_94/gora-cassandra/src/main/java/org/apache/gora/cassandra/serializers/CharSequenceSerializer.java
URL: http://svn.apache.org/viewvc/gora/branches/GORA_94/gora-cassandra/src/main/java/org/apache/gora/cassandra/serializers/CharSequenceSerializer.java?rev=1558333&r1=1558332&r2=1558333&view=diff
==============================================================================
--- gora/branches/GORA_94/gora-cassandra/src/main/java/org/apache/gora/cassandra/serializers/CharSequenceSerializer.java (original)
+++ gora/branches/GORA_94/gora-cassandra/src/main/java/org/apache/gora/cassandra/serializers/CharSequenceSerializer.java Wed Jan 15 10:11:08 2014
@@ -27,7 +27,7 @@ import me.prettyprint.cassandra.serializ
 import me.prettyprint.hector.api.ddl.ComparatorType;
 
 /**
- * A Utf8Serializer translates the byte[] to and from Utf8 object of Avro.
+ * A CharSequenceSerializer translates the byte[] to and from CharSequenceSerializer object of Avro.
  */
 public final class CharSequenceSerializer extends AbstractSerializer<CharSequence> {
 

Modified: gora/branches/GORA_94/gora-cassandra/src/main/java/org/apache/gora/cassandra/serializers/ListSerializer.java
URL: http://svn.apache.org/viewvc/gora/branches/GORA_94/gora-cassandra/src/main/java/org/apache/gora/cassandra/serializers/ListSerializer.java?rev=1558333&r1=1558332&r2=1558333&view=diff
==============================================================================
--- gora/branches/GORA_94/gora-cassandra/src/main/java/org/apache/gora/cassandra/serializers/ListSerializer.java (original)
+++ gora/branches/GORA_94/gora-cassandra/src/main/java/org/apache/gora/cassandra/serializers/ListSerializer.java Wed Jan 15 10:11:08 2014
@@ -37,7 +37,7 @@ import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 /**
- * A ListSerializer translates the byte[] to and from List of Avro.
+ * A GenericArraySerializer translates the byte[] to and from GenericArray of Avro.
  */
 public class ListSerializer<T> extends AbstractSerializer<List<T>> {
 
@@ -93,12 +93,13 @@ public class ListSerializer<T> extends A
     elementSerializer = GoraSerializerTypeInferer.getSerializer(elementSchema);
   }
 
+  @SuppressWarnings("unchecked")
   public ListSerializer(Type elementType) {
     this.elementType = elementType;
     if (elementType != Type.FIXED) {
       elementSchema = Schema.create(elementType);
     }
-    clazz = TypeUtils.getClass(elementType);
+    clazz = (Class<T>) TypeUtils.getClass(elementType);
     size = TypeUtils.getFixedSize(elementType);
     elementSerializer = GoraSerializerTypeInferer.getSerializer(elementType);
   }
@@ -161,7 +162,6 @@ public class ListSerializer<T> extends A
       return null;
     }
     ArrayList<T> array = new ArrayList<T>();
-    int i = 0;
     while (true) {
       T element = null;
       try {

Modified: gora/branches/GORA_94/gora-cassandra/src/main/java/org/apache/gora/cassandra/serializers/MapSerializer.java
URL: http://svn.apache.org/viewvc/gora/branches/GORA_94/gora-cassandra/src/main/java/org/apache/gora/cassandra/serializers/MapSerializer.java?rev=1558333&r1=1558332&r2=1558333&view=diff
==============================================================================
--- gora/branches/GORA_94/gora-cassandra/src/main/java/org/apache/gora/cassandra/serializers/MapSerializer.java (original)
+++ gora/branches/GORA_94/gora-cassandra/src/main/java/org/apache/gora/cassandra/serializers/MapSerializer.java Wed Jan 15 10:11:08 2014
@@ -93,12 +93,13 @@ public class MapSerializer<T> extends Ab
     valueSerializer = GoraSerializerTypeInferer.getSerializer(valueSchema);
   }
 
+  @SuppressWarnings("unchecked")
   public MapSerializer(Type valueType) {
     this.valueType = valueType;
     if (valueType != Type.FIXED) {
       valueSchema = Schema.create(valueType);
     }
-    clazz = TypeUtils.getClass(valueType);
+    clazz = (Class<T>) TypeUtils.getClass(valueType);
     size = TypeUtils.getFixedSize(valueType);
     valueSerializer = GoraSerializerTypeInferer.getSerializer(valueType);
   }
@@ -182,7 +183,6 @@ public class MapSerializer<T> extends Ab
       return null;
     }
     Map<CharSequence, T> map = new HashMap<CharSequence, T>();
-    int i = 0;
     while (true) {
       CharSequence key = null;
       T value = null;

Modified: gora/branches/GORA_94/gora-cassandra/src/main/java/org/apache/gora/cassandra/serializers/TypeUtils.java
URL: http://svn.apache.org/viewvc/gora/branches/GORA_94/gora-cassandra/src/main/java/org/apache/gora/cassandra/serializers/TypeUtils.java?rev=1558333&r1=1558332&r2=1558333&view=diff
==============================================================================
--- gora/branches/GORA_94/gora-cassandra/src/main/java/org/apache/gora/cassandra/serializers/TypeUtils.java (original)
+++ gora/branches/GORA_94/gora-cassandra/src/main/java/org/apache/gora/cassandra/serializers/TypeUtils.java Wed Jan 15 10:11:08 2014
@@ -40,13 +40,13 @@ public class TypeUtils {
   public static final Logger LOG = LoggerFactory.getLogger(TypeUtils.class);
 
   // @SuppressWarnings({ "rawtypes", "unchecked" })
-  public static Class getClass(Object value) {
+  public static Class<? extends Object> getClass(Object value) {
     return value.getClass();
   }
 
   public static Schema getSchema(Object value) {
     if (value instanceof GenericArray) {
-      return Schema.createArray( getElementSchema((GenericArray)value) );
+      return Schema.createArray( getElementSchema((GenericArray<?>)value) );
     } else {
       return getSchema( getClass(value) );
     }
@@ -84,7 +84,7 @@ public class TypeUtils {
     }
   }
 
-  public static Class getClass(Type type) {
+  public static Class<?> getClass(Type type) {
     if (type == Type.STRING) {
       return Utf8.class;
     } else if (type == Type.BOOLEAN) {
@@ -113,7 +113,7 @@ public class TypeUtils {
     }
   }
 
-  public static Schema getSchema(Class clazz) {
+  public static Schema getSchema(Class<?> clazz) {
     Type type = getType(clazz);
     if (type == null) {
       return null;
@@ -156,7 +156,7 @@ public class TypeUtils {
     }
   }
 
-  public static Class getClass(Schema schema) {
+  public static Class<?> getClass(Schema schema) {
     Type type = schema.getType();
     if (type == null) {
       return null;
@@ -197,7 +197,7 @@ public class TypeUtils {
     }
   }
 
-  public static int getFixedSize(Class clazz) {
+  public static int getFixedSize(Class<?> clazz) {
     Type type = getType(clazz);
     if (type == Type.FIXED) {
       try {
@@ -214,11 +214,10 @@ public class TypeUtils {
     }
   }
 
-  public static Schema getElementSchema(GenericArray array) {
+  public static Schema getElementSchema(GenericArray<?> array) {
     Schema schema = array.getSchema();
     return (schema.getType() == Type.ARRAY) ? schema.getElementType() : schema;
   }
- 
 
   /*
   public static Schema getValueSchema(StatefulHashMap map) {

Modified: gora/branches/GORA_94/gora-cassandra/src/main/java/org/apache/gora/cassandra/store/CassandraClient.java
URL: http://svn.apache.org/viewvc/gora/branches/GORA_94/gora-cassandra/src/main/java/org/apache/gora/cassandra/store/CassandraClient.java?rev=1558333&r1=1558332&r2=1558333&view=diff
==============================================================================
--- gora/branches/GORA_94/gora-cassandra/src/main/java/org/apache/gora/cassandra/store/CassandraClient.java (original)
+++ gora/branches/GORA_94/gora-cassandra/src/main/java/org/apache/gora/cassandra/store/CassandraClient.java Wed Jan 15 10:11:08 2014
@@ -20,7 +20,6 @@ package org.apache.gora.cassandra.store;
 
 import java.nio.ByteBuffer;
 import java.util.ArrayList;
-import java.util.Arrays;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
@@ -47,21 +46,12 @@ import me.prettyprint.hector.api.query.R
 import me.prettyprint.hector.api.HConsistencyLevel;
 import me.prettyprint.hector.api.Serializer;
 
-import org.apache.avro.Schema;
-import org.apache.avro.Schema.Type;
 import org.apache.avro.generic.GenericArray;
-import org.apache.avro.util.Utf8;
 import org.apache.gora.cassandra.query.CassandraQuery;
-import org.apache.gora.cassandra.serializers.GenericArraySerializer;
 import org.apache.gora.cassandra.serializers.GoraSerializerTypeInferer;
-import org.apache.gora.cassandra.serializers.TypeUtils;
 import org.apache.gora.mapreduce.GoraRecordReader;
-import org.apache.gora.persistency.Persistent;
 import org.apache.gora.persistency.impl.PersistentBase;
-import org.apache.gora.persistency.State;
-import org.apache.gora.persistency.StatefulHashMap;
 import org.apache.gora.query.Query;
-import org.apache.gora.util.ByteUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -84,7 +74,6 @@ public class CassandraClient<K, T extend
     // get cassandra mapping with persistent class
     this.persistentClass = persistentClass;
     this.cassandraMapping = CassandraMappingManager.getManager().get(persistentClass);
-    // LOG.info("persistentClass=" + persistentClass.getName() + " -> cassandraMapping=" + cassandraMapping);
 
     this.cluster = HFactory.getOrCreateCluster(this.cassandraMapping.getClusterName(), new CassandraHostConfigurator(this.cassandraMapping.getHostName()));
     
@@ -124,7 +113,8 @@ public class CassandraClient<K, T extend
         cfDef.setComparatorType(ComparatorType.BYTESTYPE);
       }
 
-      keyspaceDefinition = HFactory.createKeyspaceDefinition(this.cassandraMapping.getKeyspaceName(), "org.apache.cassandra.locator.SimpleStrategy", 1, columnFamilyDefinitions);      
+      keyspaceDefinition = HFactory.createKeyspaceDefinition(this.cassandraMapping.getKeyspaceName(), 
+          "org.apache.cassandra.locator.SimpleStrategy", 1, columnFamilyDefinitions);      
       this.cluster.addKeyspace(keyspaceDefinition, true);
       // LOG.info("Keyspace '" + this.cassandraMapping.getKeyspaceName() + "' in cluster '" + this.cassandraMapping.getClusterName() + "' was created on host '" + this.cassandraMapping.getHostName() + "'");
       
@@ -155,10 +145,11 @@ public class CassandraClient<K, T extend
           if (! comparatorType.equals(ComparatorType.BYTESTYPE)) {
             // GORA-197
             LOG.warn("The comparator type of " + cfDef.getName() + " column family is " + comparatorType.getTypeName()
-                   + ", not BytesType. It may cause a fatal error on column validation later.");
+              + ", not BytesType. It may cause a fatal error on column validation later.");
           }
           else {
-            // LOG.info("The comparator type of " + cfDef.getName() + " column family is " + comparatorType.getTypeName() + ".");
+            LOG.debug("The comparator type of " + cfDef.getName() + " column family is " 
+              + comparatorType.getTypeName() + ".");
           }
         }
       }
@@ -205,7 +196,6 @@ public class CassandraClient<K, T extend
    * @param columnName the column name (the member name, or the index of array)
    * @param value the member value
    */
-  @SuppressWarnings("unchecked")
   public void addSubColumn(K key, String fieldName, ByteBuffer columnName, Object value) {
     if (value == null) {
       return;
@@ -250,7 +240,6 @@ public class CassandraClient<K, T extend
    * @param fieldName the field name
    * @param columnName the column name (the member name, or the index of array)
    */
-  @SuppressWarnings("unchecked")
   public void deleteSubColumn(K key, String fieldName, ByteBuffer columnName) {
 
     String columnFamily = this.cassandraMapping.getFamily(fieldName);
@@ -266,19 +255,18 @@ public class CassandraClient<K, T extend
   }
 
 
-  @SuppressWarnings("unchecked")
-  public void addGenericArray(K key, String fieldName, GenericArray array) {
+  public void addGenericArray(K key, String fieldName, GenericArray<?> array) {
     if (isSuper( cassandraMapping.getFamily(fieldName) )) {
       int i= 0;
       for (Object itemValue: array) {
 
         // TODO: hack, do not store empty arrays
         if (itemValue instanceof GenericArray<?>) {
-          if (((List)itemValue).size() == 0) {
+          if (((List<?>)itemValue).size() == 0) {
             continue;
           }
         } else if (itemValue instanceof Map<?,?>) {
-          if (((Map)itemValue).size() == 0) {
+          if (((Map<?, ?>)itemValue).size() == 0) {
             continue;
           }
         }
@@ -291,24 +279,18 @@ public class CassandraClient<K, T extend
     }
   }
 
-  @SuppressWarnings("unchecked")
-  public void addStatefulHashMap(K key, String fieldName, StatefulHashMap<Utf8,Object> map) {
+  public void addStatefulHashMap(K key, String fieldName, Map<CharSequence,Object> map) {
     if (isSuper( cassandraMapping.getFamily(fieldName) )) {
-      int i= 0;
-      for (Utf8 mapKey: map.keySet()) {
-        if (map.getState(mapKey) == State.DELETED) {
-          deleteSubColumn(key, fieldName, mapKey.toString());
-          continue;
-        }
+      for (CharSequence mapKey: map.keySet()) {
 
         // TODO: hack, do not store empty arrays
         Object mapValue = map.get(mapKey);
         if (mapValue instanceof GenericArray<?>) {
-          if (((GenericArray)mapValue).size() == 0) {
+          if (((List<?>)mapValue).size() == 0) {
             continue;
           }
-        } else if (mapValue instanceof StatefulHashMap<?,?>) {
-          if (((StatefulHashMap)mapValue).size() == 0) {
+        } else if (mapValue instanceof Map<?,?>) {
+          if (((Map<?, ?>)mapValue).size() == 0) {
             continue;
           }
         }
@@ -322,25 +304,24 @@ public class CassandraClient<K, T extend
   }
 
   /**
-   * Serialize value to ByteBuffer.
-   * @param value the member value
+   * Serialize value to ByteBuffer using 
+   * {@link org.apache.gora.cassandra.serializers.GoraSerializerTypeInferer#getSerializer(Object)}.
+   * @param value the member value {@link java.lang.Object}.
    * @return ByteBuffer object
    */
-  @SuppressWarnings("unchecked")
   public ByteBuffer toByteBuffer(Object value) {
     ByteBuffer byteBuffer = null;
-    Serializer serializer = GoraSerializerTypeInferer.getSerializer(value);
+    Serializer<Object> serializer = GoraSerializerTypeInferer.getSerializer(value);
     if (serializer == null) {
-      LOG.info("Serializer not found for: " + value.toString());
+      LOG.warn("Serializer not found for: " + value.toString());
     }
     else {
+      LOG.debug(serializer.getClass() + " selected as appropriate Serializer.");
       byteBuffer = serializer.toByteBuffer(value);
     }
-
     if (byteBuffer == null) {
       LOG.info("value class=" + value.getClass().getName() + " value=" + value + " -> null");
     }
-    
     return byteBuffer;
   }
 
@@ -381,22 +362,28 @@ public class CassandraClient<K, T extend
   
   private String getMappingFamily(String pField){
     String family = null;
-    // TODO checking if it was a UNION field the one we are retrieving
+    // checking if it was a UNION field the one we are retrieving
+    if (pField.indexOf(CassandraStore.UNION_COL_SUFIX) > 0)
+      family = this.cassandraMapping.getFamily(pField.substring(0,pField.indexOf(CassandraStore.UNION_COL_SUFIX)));
+    else
       family = this.cassandraMapping.getFamily(pField);
-    return family;
-  }
-  
+     return family;
+   }
+ 
   private String getMappingColumn(String pField){
     String column = null;
-    // TODO checking if it was a UNION field the one we are retrieving e.g. column = pField;
+    if (pField.indexOf(CassandraStore.UNION_COL_SUFIX) > 0)
+      column = pField;
+    else
       column = this.cassandraMapping.getColumn(pField);
-    return column;
-  }
+      return column;
+    }
 
   /**
    * Select the families that contain at least one column mapped to a query field.
    * @param query indicates the columns to select
-   * @return a map which keys are the family names and values the corresponding column names required to get all the query fields.
+   * @return a map which keys are the family names and values the 
+   * corresponding column names required to get all the query fields.
    */
   public Map<String, List<String>> getFamilyMap(Query<K, T> query) {
     Map<String, List<String>> map = new HashMap<String, List<String>>();
@@ -421,17 +408,20 @@ public class CassandraClient<K, T extend
   }
 
   /**
-   * Retrieves the cassandraMapping which holds whatever was mapped from the gora-cassandra-mapping.xml
-   * @return
+   * Retrieves the cassandraMapping which holds whatever was mapped 
+   * from the gora-cassandra-mapping.xml
+   * @return 
    */
   public CassandraMapping getCassandraMapping(){
     return this.cassandraMapping;
   }
   
   /**
-   * Select the field names according to the column names, which format if fully qualified: "family:column"
+   * Select the field names according to the column names, which format 
+   * if fully qualified: "family:column"
    * @param query
-   * @return a map which keys are the fully qualified column names and values the query fields
+   * @return a map which keys are the fully qualified column 
+   * names and values the query fields
    */
   public Map<String, String> getReverseMap(Query<K, T> query) {
     Map<String, String> map = new HashMap<String, String>();

Modified: gora/branches/GORA_94/gora-cassandra/src/main/java/org/apache/gora/cassandra/store/CassandraMapping.java
URL: http://svn.apache.org/viewvc/gora/branches/GORA_94/gora-cassandra/src/main/java/org/apache/gora/cassandra/store/CassandraMapping.java?rev=1558333&r1=1558332&r2=1558333&view=diff
==============================================================================
--- gora/branches/GORA_94/gora-cassandra/src/main/java/org/apache/gora/cassandra/store/CassandraMapping.java (original)
+++ gora/branches/GORA_94/gora-cassandra/src/main/java/org/apache/gora/cassandra/store/CassandraMapping.java Wed Jan 15 10:11:08 2014
@@ -207,10 +207,10 @@ public class CassandraMapping {
   }
 
   /**
-   * Add new column to CassandraMapping using the self-explanatory parameters
-   * @param pFamilyName
-   * @param pFieldName
-   * @param pColumnName
+   * Add new column to the CassandraMapping using the the below parameters
+   * @param pFamilyName the column family name
+   * @param pFieldName the Avro field from the Schema
+   * @param pColumnName the column name within the column family.
    */
   public void addColumn(String pFamilyName, String pFieldName, String pColumnName){
     this.familyMap.put(pFieldName, pFamilyName);

Modified: gora/branches/GORA_94/gora-cassandra/src/main/java/org/apache/gora/cassandra/store/CassandraMappingManager.java
URL: http://svn.apache.org/viewvc/gora/branches/GORA_94/gora-cassandra/src/main/java/org/apache/gora/cassandra/store/CassandraMappingManager.java?rev=1558333&r1=1558332&r2=1558333&view=diff
==============================================================================
--- gora/branches/GORA_94/gora-cassandra/src/main/java/org/apache/gora/cassandra/store/CassandraMappingManager.java (original)
+++ gora/branches/GORA_94/gora-cassandra/src/main/java/org/apache/gora/cassandra/store/CassandraMappingManager.java Wed Jan 15 10:11:08 2014
@@ -49,7 +49,7 @@ public class CassandraMappingManager {
     return manager;
   }
 
-  /**
+ /**
   * Objects to maintain mapped keyspaces
   */
   private Map<String, Element> keyspaceMap = null;
@@ -78,7 +78,7 @@ public class CassandraMappingManager {
     }
     String keyspaceName = mappingElement.getAttributeValue(KEYSPACE_ELEMENT);
     if (LOG.isDebugEnabled()) {
-      LOG.debug("className=" + className + " -> keyspaceName=" + keyspaceName);
+      LOG.debug("persistentClassName=" + className + " -> keyspaceName=" + keyspaceName);
     }
     Element keyspaceElement = keyspaceMap.get(keyspaceName);
     if (keyspaceElement == null) {

Modified: gora/branches/GORA_94/gora-cassandra/src/main/java/org/apache/gora/cassandra/store/CassandraStore.java
URL: http://svn.apache.org/viewvc/gora/branches/GORA_94/gora-cassandra/src/main/java/org/apache/gora/cassandra/store/CassandraStore.java?rev=1558333&r1=1558332&r2=1558333&view=diff
==============================================================================
--- gora/branches/GORA_94/gora-cassandra/src/main/java/org/apache/gora/cassandra/store/CassandraStore.java (original)
+++ gora/branches/GORA_94/gora-cassandra/src/main/java/org/apache/gora/cassandra/store/CassandraStore.java Wed Jan 15 10:11:08 2014
@@ -40,17 +40,15 @@ import org.apache.avro.Schema;
 import org.apache.avro.Schema.Field;
 import org.apache.avro.Schema.Type;
 import org.apache.avro.generic.GenericArray;
-import org.apache.avro.util.Utf8;
+import org.apache.avro.specific.SpecificData;
 import org.apache.gora.cassandra.query.CassandraQuery;
 import org.apache.gora.cassandra.query.CassandraResult;
 import org.apache.gora.cassandra.query.CassandraResultSet;
 import org.apache.gora.cassandra.query.CassandraRow;
 import org.apache.gora.cassandra.query.CassandraSubColumn;
 import org.apache.gora.cassandra.query.CassandraSuperColumn;
-import org.apache.gora.persistency.ListGenericArray;
-import org.apache.gora.persistency.StatefulHashMap;
+import org.apache.gora.persistency.Persistent;
 import org.apache.gora.persistency.impl.PersistentBase;
-import org.apache.gora.persistency.impl.StateManagerImpl;
 import org.apache.gora.query.PartitionQuery;
 import org.apache.gora.query.Query;
 import org.apache.gora.query.Result;
@@ -72,6 +70,12 @@ public class CassandraStore<K, T extends
 
   private CassandraClient<K, T>  cassandraClient = new CassandraClient<K, T>();
 
+ /**
+  * Fixed string used to generate an extra column based on 
+  * the original field's name
+  */
+  public static String UNION_COL_SUFIX = "UnionIndex";
+  
   /**
    * Default schema index used when AVRO Union data types are stored
    */
@@ -81,7 +85,8 @@ public class CassandraStore<K, T extends
    * The values are Avro fields pending to be stored.
    *
    * We want to iterate over the keys in insertion order.
-   * We don't want to lock the entire collection before iterating over the keys, since in the meantime other threads are adding entries to the map.
+   * We don't want to lock the entire collection before iterating over the keys, 
+   * since in the meantime other threads are adding entries to the map.
    */
   private Map<K, T> buffer = Collections.synchronizedMap(new LinkedHashMap<K, T>());
   
@@ -138,7 +143,7 @@ public class CassandraStore<K, T extends
 
   /**
    * When executing Gora Queries in Cassandra we query the Cassandra keyspace by families.
-   * When add sub/supercolumns, Gora keys are mapped to Cassandra partition keys only. 
+   * When we add sub/supercolumns, Gora keys are mapped to Cassandra partition keys only. 
    * This is because we follow the Cassandra logic where column family data is 
    * partitioned across nodes based on row Key.
    */
@@ -237,7 +242,11 @@ public class CassandraStore<K, T extends
   }
 
   /**
-   * Flush the buffer. Write the buffered rows.
+   * Flush the buffer which is a synchronized {@link java.util.LinkedHashMap}
+   * storing fields pending to be stored by 
+   * {@link org.apache.gora.cassandra.store.CassandraStore#put(Object, PersistentBase)}
+   * operations. Invoking this method therefore writes the buffered rows
+   * into Cassandra.
    * @see org.apache.gora.store.DataStore#flush()
    */
   @Override
@@ -246,9 +255,11 @@ public class CassandraStore<K, T extends
     Set<K> keys = this.buffer.keySet();
     
     // this duplicates memory footprint
+    @SuppressWarnings("unchecked")
     K[] keyArray = (K[]) keys.toArray();
     
-    // iterating over the key set directly would throw ConcurrentModificationException with java.util.HashMap and subclasses
+    // iterating over the key set directly would throw 
+    //ConcurrentModificationException with java.util.HashMap and subclasses
     for (K key: keyArray) {
       T value = this.buffer.get(key);
       if (value == null) {
@@ -256,6 +267,7 @@ public class CassandraStore<K, T extends
         continue;
       }
       Schema schema = value.getSchema();
+      
       for (Field field: schema.getFields()) {
         if (value.isDirty(field.pos())) {
           addOrUpdateField(key, field, value.get(field.pos()));
@@ -263,7 +275,8 @@ public class CassandraStore<K, T extends
       }
     }
     
-    // remove flushed rows
+    // remove flushed rows from the buffer as all 
+    // added or updated fields should now have been written.
     for (K key: keyArray) {
       this.buffer.remove(key);
     }
@@ -290,7 +303,9 @@ public class CassandraStore<K, T extends
   @Override
   public List<PartitionQuery<K, T>> getPartitions(Query<K, T> query)
       throws IOException {
-    // just a single partition
+    // TODO right now this just obtains a single partition
+    // we need to obtain the correct splits for partitions in 
+    // order to achieve data locality.
     List<PartitionQuery<K,T>> partitions = new ArrayList<PartitionQuery<K,T>>();
     PartitionQueryImpl<K, T> pqi = new PartitionQueryImpl<K, T>(query);
     pqi.setConf(getConf());
@@ -315,62 +330,84 @@ public class CassandraStore<K, T extends
   }
 
   /**
-   * Duplicate instance to keep all the objects in memory till flushing.
-   * @see org.apache.gora.store.DataStore#put(java.lang.Object, org.apache.gora.persistency.Persistent)
+   * 
+   * When doing the 
+   * {@link org.apache.gora.cassandra.store.CassandraStore#put(Object, PersistentBase)}
+   * operation, the logic is as follows:
+   * <ol>
+   * <li>Obtain the Avro {@link org.apache.avro.Schema} for the object.</li>
+   * <li>Create a new duplicate instance of the object (explained in more detail below) **.</li>
+   * <li>Obtain a {@link java.util.List} of the {@link org.apache.avro.Schema} 
+   * {@link org.apache.avro.Schema.Field}'s.</li>
+   * <li>Iterate through the {@link java.util.List}. This allows us to process
+   * each item appropriately.</li>
+   * <li>Check to see if the {@link org.apache.avro.Schema.Field} is either at 
+   * position 0 OR it is NOT dirty. If one of these conditions is true then we DO NOT
+   * process this field.</li>
+   * <li>Obtain the element at the specified position in this list.</li>
+   * <li>Obtain the {@link org.apache.avro.Schema.Type} of the element obtained 
+   * above and process it accordingly. N.B. For nested type RECORD we shadow 
+   * the checks to see if the {@link org.apache.avro.Schema.Field} is either at 
+   * position 0 OR it is NOT dirty. If one of these conditions is true then we DO NOT
+   * process this field.</li>
+   * </ol>
+   * ** We create a duplicate instance of the object to be persisted and insert processed
+   * objects into a synchronized {@link java.util.LinkedHashMap}. This allows 
+   * us to keep all the objects in memory till flushing.
+   * @see org.apache.gora.store.DataStore#put(java.lang.Object, 
+   * org.apache.gora.persistency.Persistent).
+   * @param key for the Avro Record (object).
+   * @param value Record object to be persisted in Cassandra
    */
   @Override
   public void put(K key, T value) {
-    T p = (T) value.newInstance(new StateManagerImpl());
     Schema schema = value.getSchema();
-    for (Field field: schema.getFields()) {
-      int fieldPos = field.pos();
-      if (value.isDirty(fieldPos)) {
-        Object fieldValue = value.get(fieldPos);
+    @SuppressWarnings("unchecked")
+    T p = (T) SpecificData.get().newRecord(value, schema);
+    List<Field> fields = schema.getFields();
+    for (int i = 1; i < fields.size(); i++) {
+      if (!value.isDirty(i)) {
+        continue;
+      }
+      Field field = fields.get(i);
+      Type type = field.schema().getType();
+      Object fieldValue = value.get(field.pos());
+      // check if field has a nested structure (array, map, record or union)
         
-        // check if field has a nested structure (array, map, or record)
-        Schema fieldSchema = field.schema();
-        Type type = fieldSchema.getType();
-        switch(type) {
-          case RECORD:
-            PersistentBase persistent = (PersistentBase) fieldValue;
-            PersistentBase newRecord = (PersistentBase) persistent.newInstance(new StateManagerImpl());
-            for (Field member: fieldSchema.getFields()) {
-              newRecord.put(member.pos(), persistent.get(member.pos()));
-            }
-            fieldValue = newRecord;
-            break;
-          case MAP:
-            StatefulHashMap map = (StatefulHashMap) fieldValue;
-            StatefulHashMap newMap = new StatefulHashMap();
-            for (Object mapKey : map.keySet()) {
-              newMap.put(mapKey, map.get(mapKey));
-              newMap.putState(mapKey, map.getState(mapKey));
-            }
-            fieldValue = newMap;
-            break;
-          case ARRAY:
-            GenericArray array = (GenericArray) fieldValue;
-            ListGenericArray newArray = new ListGenericArray(fieldSchema.getElementType());
-            Iterator iter = array.iterator();
-            while (iter.hasNext()) {
-              newArray.add(iter.next());
+      switch(type) {
+        case RECORD:
+          Persistent persistent = (Persistent) fieldValue;
+          Persistent newRecord = (Persistent) SpecificData.get().newRecord(persistent, persistent.getSchema());
+          for (Field member: field.schema().getFields()) {
+            if (member.pos() == 0 || !persistent.isDirty()) {
+              continue;
             }
-            fieldValue = newArray;
-            break;
-          case UNION:
-            // storing the union selected schema, the actual value will be stored as soon as getting out of here
-            // TODO determine which schema we are using: int schemaPos = getUnionSchema(fieldValue,fieldSchema);
-            // and save it p.put( p.getFieldIndex(field.name() + CassandraStore.UNION_COL_SUFIX), schemaPos);
-            break;
-        }
-        
-        p.put(fieldPos, fieldValue);
+            newRecord.put(member.pos(), persistent.get(member.pos()));
+          }
+          fieldValue = newRecord;
+          break;
+        case MAP:
+          Map<?, ?> map = (Map<?, ?>) fieldValue;
+          fieldValue = map;
+          break;
+        case ARRAY:
+          fieldValue = (List<?>) fieldValue;
+          break;
+        case UNION:
+          // storing the union selected schema, the actual value will 
+          // be stored as soon as we get break out.
+          int schemaPos = getUnionSchema(fieldValue,field.schema());
+          p.put( schemaPos, p.getSchema().getField(field.name() + CassandraStore.UNION_COL_SUFIX));
+          //p.put(fieldPos, fieldValue);
+          break;
+      default:
+        break;
       }
+      p.put(field.pos(), fieldValue);
     }
-    
     // this performs a structural modification of the map
     this.buffer.put(key, p);
- }
+  }
 
   /**
    * Add a field to Cassandra according to its type.
@@ -378,9 +415,12 @@ public class CassandraStore<K, T extends
    * @param field   the Avro field representing a datum
    * @param value   the field value
    */
+  @SuppressWarnings({ "unchecked", "null" })
   private void addOrUpdateField(K key, Field field, Object value) {
     Schema schema = field.schema();
     Type type = schema.getType();
+    // checking if the value to be updated is used for saving union schema
+    if (field.name().indexOf(CassandraStore.UNION_COL_SUFIX) < 0){
       switch (type) {
         case STRING:
         case BOOLEAN:
@@ -400,16 +440,20 @@ public class CassandraStore<K, T extends
                 
                 // TODO: hack, do not store empty arrays
                 Object memberValue = persistentBase.get(member.pos());
-                if (memberValue instanceof GenericArray<?>) {
-                  if (((GenericArray)memberValue).size() == 0) {
+                if (memberValue instanceof List<?>) {
+                  if (((List<?>)memberValue).size() == 0) {
+                    continue;
+                  }
+                } else if (memberValue instanceof Map<?,?>) {
+                  if (((Map<?, ?>)memberValue).size() == 0) {
                     continue;
                   }
                 }
-                this.cassandraClient.addSubColumn(key, field.name(), member.name(), memberValue);
+                this.cassandraClient.addSubColumn(key, field.name(), 
+                    member.name(), memberValue);
               }
           } else {
             LOG.info("Record not supported: " + value.toString());
-            
           }
         }
         break;
@@ -425,31 +469,40 @@ public class CassandraStore<K, T extends
       case ARRAY:
         if (value != null) {
           if (value instanceof GenericArray<?>) {
-            this.cassandraClient.addGenericArray(key, field.name(), (GenericArray)value);
+            this.cassandraClient.addGenericArray(key, field.name(), (GenericArray<?>)value);
           } else {
             LOG.info("Array not supported: " + value.toString());
           }
         }
         break;
-       case UNION:
-         if(value != null) {
-           LOG.info("Union being supported with value: " + value.toString());
-           // TODO add union schema index used
-           // adding union value
-           this.cassandraClient.addColumn(key, field.name(), value);
-         } else {
-           LOG.info("Union not supported: " + value.toString());
-         }
+      case UNION:
+        if(value != null) {
+          LOG.info("Union being supported: " + value.toString());
+          // adding union schema index
+          String columnName = field.name() + UNION_COL_SUFIX;
+          String familyName = this.cassandraClient.getCassandraMapping().getFamily(field.name());
+          this.cassandraClient.getCassandraMapping().addColumn(familyName, columnName, columnName);
+          this.cassandraClient.addColumn(key, columnName, getUnionSchema(value, schema));
+          // adding union value
+          this.cassandraClient.addColumn(key, field.name(), value);
+        } else {
+          LOG.info("Union not supported: " + value.toString());
+        }
+        break;
       default:
-        LOG.info("Type not considered: " + type.name());      
+        LOG.info("Type not considered: " + type.name());
+      }
     }
   }
 
   /**
-   * Gets the position within the schema of the type used
+   * Given an object and the object schema this function obtains,
+   * from within the UNION schema, the position of the type used.
+   * If no data type can be inferred then we return a default value
+   * of position 0.
    * @param pValue
    * @param pUnionSchema
-   * @return
+   * @return the unionSchemaPosition.
    */
   private int getUnionSchema(Object pValue, Schema pUnionSchema){
     int unionSchemaPos = 0;
@@ -474,9 +527,13 @@ public class CassandraStore<K, T extends
       unionSchemaPos ++;
     }
     // if we weren't able to determine which data type it is, then we return the default
-    return 0;
+    return DEFAULT_UNION_SCHEMA;
   }
 
+  /**
+   * Simple method to check if a Cassandra Keyspace exists.
+   * @return true if a Keyspace exists.
+   */
   @Override
   public boolean schemaExists() {
     LOG.info("schema exists");

Modified: gora/branches/GORA_94/gora-cassandra/src/test/conf/cassandra.yaml
URL: http://svn.apache.org/viewvc/gora/branches/GORA_94/gora-cassandra/src/test/conf/cassandra.yaml?rev=1558333&r1=1558332&r2=1558333&view=diff
==============================================================================
--- gora/branches/GORA_94/gora-cassandra/src/test/conf/cassandra.yaml (original)
+++ gora/branches/GORA_94/gora-cassandra/src/test/conf/cassandra.yaml Wed Jan 15 10:11:08 2014
@@ -7,7 +7,7 @@
 
 # The name of the cluster. This is mainly used to prevent machines in
 # one logical cluster from joining another.
-cluster_name: 'Gora Cassandra Test Cluster'
+cluster_name: "Gora Cassandra Test Cluster"
 
 # You should always specify InitialToken when setting up a production
 # cluster for the first time, and often when adding capacity later.
@@ -27,13 +27,13 @@ hinted_handoff_enabled: true
 # generated. After it has been dead this long, hints will be dropped.
 max_hint_window_in_ms: 3600000 # one hour
 # Sleep this long after delivering each row or row fragment
-hinted_handoff_throttle_delay_in_ms: 50
+#hinted_handoff_throttle_delay_in_ms: 50 (deprecated in 2.0.2)
 
 # authentication backend, implementing IAuthenticator; used to identify users
 authenticator: org.apache.cassandra.auth.AllowAllAuthenticator
 
 # authorization backend, implementing IAuthority; used to limit access/provide permissions
-authority: org.apache.cassandra.auth.AllowAllAuthority
+authorizer: org.apache.cassandra.auth.AllowAllAuthorizer
 
 # The partitioner is responsible for distributing rows (by key) across
 # nodes in the cluster. Any IPartitioner may be used, including your
@@ -109,7 +109,7 @@ seed_provider:
 # it is most effective under light to moderate load, or read-heavy
 # workloads; under truly massive write load, it will often be too
 # little, too late.
-flush_largest_memtables_at: 0.75
+#flush_largest_memtables_at: 0.75 (deprecated in 2.0.2)
 
 # emergency pressure valve #2: the first time heap usage after a full
 # (CMS) garbage collection is above this fraction of the max,
@@ -120,8 +120,8 @@ flush_largest_memtables_at: 0.75
 #
 # Set to 1.0 to disable. Setting this lower than
 # CMSInitiatingOccupancyFraction is not likely to be useful.
-reduce_cache_sizes_at: 0.85
-reduce_cache_capacity_to: 0.6
+#reduce_cache_sizes_at: 0.85 (deprecated in 2.0.2)
+#reduce_cache_capacity_to: 0.6 (deprecated in 2.0.2)
 
 # For workloads with more data than can fit in memory, Cassandra's
 # bottleneck will be reads that need to fetch data from
@@ -311,7 +311,7 @@ compaction_preheat_key_cache: true
 # stream_throughput_outbound_megabits_per_sec: 400
 
 # Time to wait for a reply from other nodes before failing the command
-rpc_timeout_in_ms: 10000
+#rpc_timeout_in_ms: 10000 (deprecated in 2.0.2)
 
 # phi value that must be reached for a host to be marked down.
 # most users should never need to adjust this.
@@ -410,7 +410,7 @@ index_interval: 128
 # The passwords used in these options must match the passwords used when generating
 # the keystore and truststore. For instructions on generating these files, see:
 # http://download.oracle.com/javase/6/docs/technotes/guides/security/jsse/JSSERefGuide.html#CreateKeystore
-encryption_options:
+server_encryption_options:
     internode_encryption: none
     keystore: conf/.keystore
     keystore_password: cassandra

Modified: gora/branches/GORA_94/gora-cassandra/src/test/java/org/apache/gora/cassandra/GoraCassandraTestDriver.java
URL: http://svn.apache.org/viewvc/gora/branches/GORA_94/gora-cassandra/src/test/java/org/apache/gora/cassandra/GoraCassandraTestDriver.java?rev=1558333&r1=1558332&r2=1558333&view=diff
==============================================================================
--- gora/branches/GORA_94/gora-cassandra/src/test/java/org/apache/gora/cassandra/GoraCassandraTestDriver.java (original)
+++ gora/branches/GORA_94/gora-cassandra/src/test/java/org/apache/gora/cassandra/GoraCassandraTestDriver.java Wed Jan 15 10:11:08 2014
@@ -23,17 +23,13 @@
 
 package org.apache.gora.cassandra;
 
-import java.io.IOException;
-
 import org.apache.gora.GoraTestDriver;
 import org.apache.gora.cassandra.store.CassandraStore;
 
-import org.apache.hadoop.conf.Configuration;
-
 import java.io.File;
 
 import org.apache.cassandra.io.util.FileUtils;
-import org.apache.cassandra.thrift.CassandraDaemon;
+import org.apache.cassandra.service.CassandraDaemon;
 
 // Logging imports
 import org.slf4j.Logger;
@@ -70,7 +66,7 @@ public class GoraCassandraTestDriver ext
   }
 	
   /**
-   * starts embedded Cassandra server.
+   * Starts embedded Cassandra server.
    *
    * @throws Exception
    * 	if an error occurs
@@ -91,21 +87,21 @@ public class GoraCassandraTestDriver ext
 	
         public void run() {
           try {
-	    cassandraDaemon.start();
-	  } catch (Exception e) {
-	    log.error("Embedded casandra server run failed!", e);
-	  }
+            cassandraDaemon.start();
+          } catch (Exception e) {
+            log.error("Embedded casandra server run failed!", e);
+          }
         }
       });
 	
       cassandraThread.setDaemon(true);
       cassandraThread.start();
-      } catch (Exception e) {
-	log.error("Embedded casandra server start failed!", e);
+    } catch (Exception e) {
+      log.error("Embedded casandra server start failed!", e);
 
-	// cleanup
-	tearDownClass();
-      }
+      // cleanup
+      tearDownClass();
+    }
   }
 
   /**
@@ -136,15 +132,15 @@ public class GoraCassandraTestDriver ext
     int tries = 3;
     while (tries-- > 0) {
       try {
-	cleanupDirectories();
-	break;
+        cleanupDirectories();
+        break;
       } catch (Exception e) {
-	// ignore exception
-	try {
-	  Thread.sleep(250);
-	} catch (InterruptedException e1) {
-	  // ignore exception
-	}
+        // ignore exception
+        try {
+          Thread.sleep(250);
+        } catch (InterruptedException e1) {
+          // ignore exception
+        }
       }
     }
   }

Modified: gora/branches/GORA_94/gora-core/src/test/java/org/apache/gora/store/DataStoreTestUtil.java
URL: http://svn.apache.org/viewvc/gora/branches/GORA_94/gora-core/src/test/java/org/apache/gora/store/DataStoreTestUtil.java?rev=1558333&r1=1558332&r2=1558333&view=diff
==============================================================================
--- gora/branches/GORA_94/gora-core/src/test/java/org/apache/gora/store/DataStoreTestUtil.java (original)
+++ gora/branches/GORA_94/gora-core/src/test/java/org/apache/gora/store/DataStoreTestUtil.java Wed Jan 15 10:11:08 2014
@@ -968,7 +968,7 @@ public class DataStoreTestUtil {
     String url = "http://foo.com/";
 
     store.createSchema();
-    WebPage page = store.newPersistent();
+    WebPage page = WebPage.newBuilder().build();
     Metadata metadata = Metadata.newBuilder().build();
     metadata.setVersion(1);
     metadata.getData().put(new Utf8("foo"), new Utf8("baz"));

Modified: gora/branches/GORA_94/gora-hbase/pom.xml
URL: http://svn.apache.org/viewvc/gora/branches/GORA_94/gora-hbase/pom.xml?rev=1558333&r1=1558332&r2=1558333&view=diff
==============================================================================
--- gora/branches/GORA_94/gora-hbase/pom.xml (original)
+++ gora/branches/GORA_94/gora-hbase/pom.xml Wed Jan 15 10:11:08 2014
@@ -129,6 +129,11 @@
             <artifactId>jdom</artifactId>
             <scope>compile</scope>
         </dependency>
+        <dependency>
+            <groupId>com.google.guava</groupId>
+            <artifactId>guava</artifactId>
+            <scope>compile</scope>
+        </dependency>
 
         <!-- Logging Dependencies -->
         <dependency>

Modified: gora/branches/GORA_94/gora-hbase/src/main/java/org/apache/gora/hbase/store/HBaseStore.java
URL: http://svn.apache.org/viewvc/gora/branches/GORA_94/gora-hbase/src/main/java/org/apache/gora/hbase/store/HBaseStore.java?rev=1558333&r1=1558332&r2=1558333&view=diff
==============================================================================
--- gora/branches/GORA_94/gora-hbase/src/main/java/org/apache/gora/hbase/store/HBaseStore.java (original)
+++ gora/branches/GORA_94/gora-hbase/src/main/java/org/apache/gora/hbase/store/HBaseStore.java Wed Jan 15 10:11:08 2014
@@ -239,10 +239,10 @@ implements Configurable {
       boolean hasDeletes = false;
       List<Field> fields = schema.getFields();
       for (int i = 1; i<fields.size(); i++) {
-        Field field = fields.get(i);
-        if (i==0 || !persistent.isDirty(i)) {
+        if (!persistent.isDirty(i)) {
           continue;
         }
+        Field field = fields.get(i);
         Type type = field.schema().getType();
         Object o = persistent.get(i);
         HBaseColumn hcol = mapping.getColumn(field.name());

Modified: gora/branches/GORA_94/pom.xml
URL: http://svn.apache.org/viewvc/gora/branches/GORA_94/pom.xml?rev=1558333&r1=1558332&r2=1558333&view=diff
==============================================================================
--- gora/branches/GORA_94/pom.xml (original)
+++ gora/branches/GORA_94/pom.xml Wed Jan 15 10:11:08 2014
@@ -410,6 +410,7 @@
                 <inherited>true</inherited>
                 <executions>
                     <execution>
+                        <id>copy</id>
                         <phase>package</phase>
                         <goals>
                             <goal>copy-dependencies</goal>
@@ -576,7 +577,7 @@
         <module>gora-core</module>
         <module>gora-hbase</module>
         <!--module>gora-accumulo</module-->
-        <!--module>gora-cassandra</module-->
+        <module>gora-cassandra</module>
         <!-- module>gora-solr</module-->
         <!--module>gora-dynamodb</module-->
         <!--module>gora-sql</module-->
@@ -598,9 +599,8 @@
         <!-- Amazon Dependencies -->
         <amazon.version>1.3.12</amazon.version>
         <!-- Cassandra Dependencies -->
-        <cassandra.version>1.1.2</cassandra.version>
-        <libthrift.version>0.7.0</libthrift.version>
-        <hector.version>1.1-0</hector.version>
+        <cassandra.version>2.0.2</cassandra.version>
+        <hector.version>1.1-4</hector.version>
         <!-- Solr Dependencies -->
         <lucene-solr.version>4.3.0</lucene-solr.version>
         <solr-solrj.version>4.3.0</solr-solrj.version>
@@ -613,7 +613,7 @@
         <restlet.version>2.1.1</restlet.version>
 
         <!-- Misc Dependencies -->
-        <guava.version>10.0.1</guava.version>
+        <guava.version>13.0</guava.version>
         <commons-lang.version>2.6</commons-lang.version>
         <jdom.version>1.1.2</jdom.version>
         <hsqldb.version>2.2.8</hsqldb.version>