Hi all,

JFYI: I would have merged it to GORA_174 branch, but the svn mirrors
are out of sync, I can't see my own commit right now.
Will try it again in a few hours.

--Roland

On Wed, Mar 13, 2013 at 3:28 PM,  <[email protected]> wrote:
> Author: rherget
> Date: Wed Mar 13 14:28:35 2013
> New Revision: 1455955
>
> URL: http://svn.apache.org/r1455955
> Log:
> GORA-211 thread safety: fix java.lang.NullPointerException - synchronize on 
> mutator
>
> Modified:
>     gora/trunk/CHANGES.txt
>     
> gora/trunk/gora-cassandra/src/main/java/org/apache/gora/cassandra/store/CassandraClient.java
>     
> gora/trunk/gora-cassandra/src/main/java/org/apache/gora/cassandra/store/HectorUtils.java
>
> Modified: gora/trunk/CHANGES.txt
> URL: 
> http://svn.apache.org/viewvc/gora/trunk/CHANGES.txt?rev=1455955&r1=1455954&r2=1455955&view=diff
> ==============================================================================
> --- gora/trunk/CHANGES.txt (original)
> +++ gora/trunk/CHANGES.txt Wed Mar 13 14:28:35 2013
> @@ -6,6 +6,8 @@ Gora Change Log
>
>  trunk (current development)
>
> +* GORA-211 thread safety: fix java.lang.NullPointerException - synchronize 
> on mutator (rherget)
> +
>  * GORA-210 thread safety: fix java.util.ConcurrentModificationException 
> (rherget)
>
>  * GORA-190 Add "version" switch to bin/gora script (lewismc)
>
> Modified: 
> gora/trunk/gora-cassandra/src/main/java/org/apache/gora/cassandra/store/CassandraClient.java
> URL: 
> http://svn.apache.org/viewvc/gora/trunk/gora-cassandra/src/main/java/org/apache/gora/cassandra/store/CassandraClient.java?rev=1455955&r1=1455954&r2=1455955&view=diff
> ==============================================================================
> --- 
> gora/trunk/gora-cassandra/src/main/java/org/apache/gora/cassandra/store/CassandraClient.java
>  (original)
> +++ 
> gora/trunk/gora-cassandra/src/main/java/org/apache/gora/cassandra/store/CassandraClient.java
>  Wed Mar 13 14:28:35 2013
> @@ -193,7 +193,9 @@ public class CassandraClient<K, T extend
>        return;
>      }
>
> -    HectorUtils.insertColumn(mutator, key, columnFamily, columnName, 
> byteBuffer);
> +    synchronized(mutator) {
> +      HectorUtils.insertColumn(mutator, key, columnFamily, columnName, 
> byteBuffer);
> +    }
>    }
>
>    /**
> @@ -214,7 +216,9 @@ public class CassandraClient<K, T extend
>      String columnFamily = this.cassandraMapping.getFamily(fieldName);
>      String superColumnName = this.cassandraMapping.getColumn(fieldName);
>
> -    HectorUtils.insertSubColumn(mutator, key, columnFamily, superColumnName, 
> columnName, byteBuffer);
> +    synchronized(mutator) {
> +      HectorUtils.insertSubColumn(mutator, key, columnFamily, 
> superColumnName, columnName, byteBuffer);
> +    }
>    }
>
>    public void addSubColumn(K key, String fieldName, String columnName, 
> Object value) {
> @@ -238,7 +242,9 @@ public class CassandraClient<K, T extend
>      String columnFamily = this.cassandraMapping.getFamily(fieldName);
>      String superColumnName = this.cassandraMapping.getColumn(fieldName);
>
> -    HectorUtils.deleteSubColumn(mutator, key, columnFamily, superColumnName, 
> columnName);
> +    synchronized(mutator) {
> +      HectorUtils.deleteSubColumn(mutator, key, columnFamily, 
> superColumnName, columnName);
> +    }
>    }
>
>    public void deleteSubColumn(K key, String fieldName, String columnName) {
>
> Modified: 
> gora/trunk/gora-cassandra/src/main/java/org/apache/gora/cassandra/store/HectorUtils.java
> URL: 
> http://svn.apache.org/viewvc/gora/trunk/gora-cassandra/src/main/java/org/apache/gora/cassandra/store/HectorUtils.java?rev=1455955&r1=1455954&r2=1455955&view=diff
> ==============================================================================
> --- 
> gora/trunk/gora-cassandra/src/main/java/org/apache/gora/cassandra/store/HectorUtils.java
>  (original)
> +++ 
> gora/trunk/gora-cassandra/src/main/java/org/apache/gora/cassandra/store/HectorUtils.java
>  Wed Mar 13 14:28:35 2013
> @@ -35,6 +35,11 @@ import org.apache.gora.persistency.Persi
>  import org.slf4j.Logger;
>  import org.slf4j.LoggerFactory;
>
> +/**
> + * This class it not thread safe.
> + * According to Hector's JavaDoc a Mutator isn't thread safe, too.
> + * Take a look at {@CassandraClient} for safe usage.
> + */
>  public class HectorUtils<K,T extends Persistent> {
>
>    public static final Logger LOG = 
> LoggerFactory.getLogger(HectorUtils.class);
>
>

Reply via email to