Author: gdusbabek
Date: Fri Nov 19 16:28:40 2010
New Revision: 1036924

URL: http://svn.apache.org/viewvc?rev=1036924&view=rev
Log:
merge from 0.7

Added:
    cassandra/trunk/test/unit/org/apache/cassandra/service/InitClientTest.java
      - copied unchanged from r1036922, 
cassandra/branches/cassandra-0.7/test/unit/org/apache/cassandra/service/InitClientTest.java
Modified:
    cassandra/trunk/   (props changed)
    cassandra/trunk/CHANGES.txt
    
cassandra/trunk/interface/thrift/gen-java/org/apache/cassandra/thrift/Cassandra.java
   (props changed)
    
cassandra/trunk/interface/thrift/gen-java/org/apache/cassandra/thrift/Column.java
   (props changed)
    
cassandra/trunk/interface/thrift/gen-java/org/apache/cassandra/thrift/InvalidRequestException.java
   (props changed)
    
cassandra/trunk/interface/thrift/gen-java/org/apache/cassandra/thrift/NotFoundException.java
   (props changed)
    
cassandra/trunk/interface/thrift/gen-java/org/apache/cassandra/thrift/SuperColumn.java
   (props changed)
    cassandra/trunk/src/java/org/apache/cassandra/avro/CassandraServer.java
    
cassandra/trunk/src/java/org/apache/cassandra/locator/DynamicEndpointSnitch.java
    cassandra/trunk/src/java/org/apache/cassandra/service/StorageProxy.java
    cassandra/trunk/src/java/org/apache/cassandra/service/StorageService.java
    cassandra/trunk/src/java/org/apache/cassandra/tools/SSTableImport.java
    cassandra/trunk/test/conf/cassandra.yaml
    
cassandra/trunk/test/unit/org/apache/cassandra/locator/DynamicEndpointSnitchTest.java
    cassandra/trunk/test/unit/org/apache/cassandra/tools/SSTableImportTest.java

Propchange: cassandra/trunk/
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Fri Nov 19 16:28:40 2010
@@ -1,5 +1,5 @@
 /cassandra/branches/cassandra-0.6:922689-1036176
-/cassandra/branches/cassandra-0.7:1026517-1036329
+/cassandra/branches/cassandra-0.7:1026517-1036922
 /incubator/cassandra/branches/cassandra-0.3:774578-796573
 /incubator/cassandra/branches/cassandra-0.4:810145-834239,834349-834350
 /incubator/cassandra/branches/cassandra-0.5:888872-915439

Modified: cassandra/trunk/CHANGES.txt
URL: 
http://svn.apache.org/viewvc/cassandra/trunk/CHANGES.txt?rev=1036924&r1=1036923&r2=1036924&view=diff
==============================================================================
--- cassandra/trunk/CHANGES.txt (original)
+++ cassandra/trunk/CHANGES.txt Fri Nov 19 16:28:40 2010
@@ -40,7 +40,10 @@ dev
  * fix wrapping-range queries on non-minimum token (CASSANDRA-1700)
  * truncate includes secondary indexes (CASSANDRA-1747)
  * retain reference to PendingFile sstables (CASSANDRA-1749)
- * pluggable seed provider (CASSANDRA-1669)
+ * fix sstableimport regression (CASSANDRA-1753)
+ * fix for bootstrap when no non-system tables are defined (CASSANDRA-1732)
+ * handle replica unavailability in index scan (CASSANDRA-1755)
+ * fix service initialization order deadlock (CASSANDRA-1756)
 
 
 0.7.0-beta3

Propchange: 
cassandra/trunk/interface/thrift/gen-java/org/apache/cassandra/thrift/Cassandra.java
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Fri Nov 19 16:28:40 2010
@@ -1,5 +1,5 @@
 
/cassandra/branches/cassandra-0.6/interface/thrift/gen-java/org/apache/cassandra/thrift/Cassandra.java:922689-1036176
-/cassandra/branches/cassandra-0.7/interface/thrift/gen-java/org/apache/cassandra/thrift/Cassandra.java:1026517-1036329
+/cassandra/branches/cassandra-0.7/interface/thrift/gen-java/org/apache/cassandra/thrift/Cassandra.java:1026517-1036922
 
/incubator/cassandra/branches/cassandra-0.3/interface/gen-java/org/apache/cassandra/service/Cassandra.java:774578-796573
 
/incubator/cassandra/branches/cassandra-0.4/interface/gen-java/org/apache/cassandra/service/Cassandra.java:810145-834239,834349-834350
 
/incubator/cassandra/branches/cassandra-0.5/interface/gen-java/org/apache/cassandra/service/Cassandra.java:888872-903502

Propchange: 
cassandra/trunk/interface/thrift/gen-java/org/apache/cassandra/thrift/Column.java
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Fri Nov 19 16:28:40 2010
@@ -1,5 +1,5 @@
 
/cassandra/branches/cassandra-0.6/interface/thrift/gen-java/org/apache/cassandra/thrift/Column.java:922689-1036176
-/cassandra/branches/cassandra-0.7/interface/thrift/gen-java/org/apache/cassandra/thrift/Column.java:1026517-1036329
+/cassandra/branches/cassandra-0.7/interface/thrift/gen-java/org/apache/cassandra/thrift/Column.java:1026517-1036922
 
/incubator/cassandra/branches/cassandra-0.3/interface/gen-java/org/apache/cassandra/service/column_t.java:774578-792198
 
/incubator/cassandra/branches/cassandra-0.4/interface/gen-java/org/apache/cassandra/service/Column.java:810145-834239,834349-834350
 
/incubator/cassandra/branches/cassandra-0.5/interface/gen-java/org/apache/cassandra/service/Column.java:888872-903502

Propchange: 
cassandra/trunk/interface/thrift/gen-java/org/apache/cassandra/thrift/InvalidRequestException.java
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Fri Nov 19 16:28:40 2010
@@ -1,5 +1,5 @@
 
/cassandra/branches/cassandra-0.6/interface/thrift/gen-java/org/apache/cassandra/thrift/InvalidRequestException.java:922689-1036176
-/cassandra/branches/cassandra-0.7/interface/thrift/gen-java/org/apache/cassandra/thrift/InvalidRequestException.java:1026517-1036329
+/cassandra/branches/cassandra-0.7/interface/thrift/gen-java/org/apache/cassandra/thrift/InvalidRequestException.java:1026517-1036922
 
/incubator/cassandra/branches/cassandra-0.3/interface/gen-java/org/apache/cassandra/service/InvalidRequestException.java:774578-796573
 
/incubator/cassandra/branches/cassandra-0.4/interface/gen-java/org/apache/cassandra/service/InvalidRequestException.java:810145-834239,834349-834350
 
/incubator/cassandra/branches/cassandra-0.5/interface/gen-java/org/apache/cassandra/service/InvalidRequestException.java:888872-903502

Propchange: 
cassandra/trunk/interface/thrift/gen-java/org/apache/cassandra/thrift/NotFoundException.java
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Fri Nov 19 16:28:40 2010
@@ -1,5 +1,5 @@
 
/cassandra/branches/cassandra-0.6/interface/thrift/gen-java/org/apache/cassandra/thrift/NotFoundException.java:922689-1036176
-/cassandra/branches/cassandra-0.7/interface/thrift/gen-java/org/apache/cassandra/thrift/NotFoundException.java:1026517-1036329
+/cassandra/branches/cassandra-0.7/interface/thrift/gen-java/org/apache/cassandra/thrift/NotFoundException.java:1026517-1036922
 
/incubator/cassandra/branches/cassandra-0.3/interface/gen-java/org/apache/cassandra/service/NotFoundException.java:774578-796573
 
/incubator/cassandra/branches/cassandra-0.4/interface/gen-java/org/apache/cassandra/service/NotFoundException.java:810145-834239,834349-834350
 
/incubator/cassandra/branches/cassandra-0.5/interface/gen-java/org/apache/cassandra/service/NotFoundException.java:888872-903502

Propchange: 
cassandra/trunk/interface/thrift/gen-java/org/apache/cassandra/thrift/SuperColumn.java
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Fri Nov 19 16:28:40 2010
@@ -1,5 +1,5 @@
 
/cassandra/branches/cassandra-0.6/interface/thrift/gen-java/org/apache/cassandra/thrift/SuperColumn.java:922689-1036176
-/cassandra/branches/cassandra-0.7/interface/thrift/gen-java/org/apache/cassandra/thrift/SuperColumn.java:1026517-1036329
+/cassandra/branches/cassandra-0.7/interface/thrift/gen-java/org/apache/cassandra/thrift/SuperColumn.java:1026517-1036922
 
/incubator/cassandra/branches/cassandra-0.3/interface/gen-java/org/apache/cassandra/service/superColumn_t.java:774578-792198
 
/incubator/cassandra/branches/cassandra-0.4/interface/gen-java/org/apache/cassandra/service/SuperColumn.java:810145-834239,834349-834350
 
/incubator/cassandra/branches/cassandra-0.5/interface/gen-java/org/apache/cassandra/service/SuperColumn.java:888872-903502

Modified: 
cassandra/trunk/src/java/org/apache/cassandra/avro/CassandraServer.java
URL: 
http://svn.apache.org/viewvc/cassandra/trunk/src/java/org/apache/cassandra/avro/CassandraServer.java?rev=1036924&r1=1036923&r2=1036924&view=diff
==============================================================================
--- cassandra/trunk/src/java/org/apache/cassandra/avro/CassandraServer.java 
(original)
+++ cassandra/trunk/src/java/org/apache/cassandra/avro/CassandraServer.java Fri 
Nov 19 16:28:40 2010
@@ -1106,6 +1106,10 @@ public class CassandraServer implements 
         {
             throw new TimedOutException();
         }
+        catch (org.apache.cassandra.thrift.UnavailableException e)
+        {
+            throw newUnavailableException();
+        }
         return avronateKeySlices(rows, column_parent, column_predicate);
     }
 

Modified: 
cassandra/trunk/src/java/org/apache/cassandra/locator/DynamicEndpointSnitch.java
URL: 
http://svn.apache.org/viewvc/cassandra/trunk/src/java/org/apache/cassandra/locator/DynamicEndpointSnitch.java?rev=1036924&r1=1036923&r2=1036924&view=diff
==============================================================================
--- 
cassandra/trunk/src/java/org/apache/cassandra/locator/DynamicEndpointSnitch.java
 (original)
+++ 
cassandra/trunk/src/java/org/apache/cassandra/locator/DynamicEndpointSnitch.java
 Fri Nov 19 16:28:40 2010
@@ -77,7 +77,7 @@ public class DynamicEndpointSnitch exten
         MBeanServer mbs = ManagementFactory.getPlatformMBeanServer();
         try
         {
-            mbs.registerMBean(this, new 
ObjectName("org.apache.cassandra.db:type=DynamicEndpointSnitch"));
+            mbs.registerMBean(this, new 
ObjectName("org.apache.cassandra.db:type=DynamicEndpointSnitch,instance="+hashCode()));
         }
         catch (Exception e)
         {
@@ -178,6 +178,8 @@ public class DynamicEndpointSnitch exten
 
     private void updateScores() // this is expensive
     {
+        if (!StorageService.instance.isInitialized()) 
+            return;
         if (!registered)
         {
                    ILatencyPublisher handler = 
(ILatencyPublisher)MessagingService.instance.getVerbHandler(StorageService.Verb.REQUEST_RESPONSE);

Modified: 
cassandra/trunk/src/java/org/apache/cassandra/service/StorageProxy.java
URL: 
http://svn.apache.org/viewvc/cassandra/trunk/src/java/org/apache/cassandra/service/StorageProxy.java?rev=1036924&r1=1036923&r2=1036924&view=diff
==============================================================================
--- cassandra/trunk/src/java/org/apache/cassandra/service/StorageProxy.java 
(original)
+++ cassandra/trunk/src/java/org/apache/cassandra/service/StorageProxy.java Fri 
Nov 19 16:28:40 2010
@@ -646,7 +646,7 @@ public class StorageProxy implements Sto
     }
 
     public static List<Row> scan(String keyspace, String column_family, 
IndexClause index_clause, SlicePredicate column_predicate, ConsistencyLevel 
consistency_level)
-    throws IOException, TimeoutException
+    throws IOException, TimeoutException, UnavailableException
     {
         IPartitioner p = StorageService.getPartitioner();
 
@@ -665,7 +665,11 @@ public class StorageProxy implements Sto
             RangeSliceResponseResolver resolver = new 
RangeSliceResponseResolver(keyspace, liveEndpoints);
             AbstractReplicationStrategy rs = 
Table.open(keyspace).replicationStrategy;
             QuorumResponseHandler<List<Row>> handler = 
rs.getQuorumResponseHandler(resolver, consistency_level);
-            // TODO bail early if live endpoints can't satisfy requested 
consistency level
+            
+            // bail early if live endpoints can't satisfy requested 
consistency level
+            if(handler.blockfor > liveEndpoints.size())
+                throw new UnavailableException();
+            
             IndexScanCommand command = new IndexScanCommand(keyspace, 
column_family, index_clause, column_predicate, range);
             Message message = command.getMessage();
             for (InetAddress endpoint : liveEndpoints)

Modified: 
cassandra/trunk/src/java/org/apache/cassandra/service/StorageService.java
URL: 
http://svn.apache.org/viewvc/cassandra/trunk/src/java/org/apache/cassandra/service/StorageService.java?rev=1036924&r1=1036923&r2=1036924&view=diff
==============================================================================
--- cassandra/trunk/src/java/org/apache/cassandra/service/StorageService.java 
(original)
+++ cassandra/trunk/src/java/org/apache/cassandra/service/StorageService.java 
Fri Nov 19 16:28:40 2010
@@ -196,11 +196,11 @@ public class StorageService implements I
     }};
 
 
+    public static final RetryingScheduledThreadPoolExecutor scheduledTasks = 
new RetryingScheduledThreadPoolExecutor("ScheduledTasks");
+
     private static IPartitioner partitioner_ = 
DatabaseDescriptor.getPartitioner();
     public static VersionedValue.VersionedValueFactory valueFactory = new 
VersionedValue.VersionedValueFactory(partitioner_);
-
-    public static RetryingScheduledThreadPoolExecutor scheduledTasks = new 
RetryingScheduledThreadPoolExecutor("ScheduledTasks");
-
+    
     public static final StorageService instance = new StorageService();
 
     public static IPartitioner getPartitioner() {
@@ -246,11 +246,7 @@ public class StorageService implements I
     public void finishBootstrapping()
     {
         isBootstrapMode = false;
-        SystemTable.setBootstrapped(true);
-        setToken(getLocalToken());
-        Gossiper.instance.addLocalApplicationState(ApplicationState.STATUS, 
valueFactory.normal(getLocalToken()));
         logger_.info("Bootstrap/move completed! Now serving reads.");
-        setMode("Normal", false);
     }
 
     /** This method updates the local token on disk  */
@@ -313,6 +309,11 @@ public class StorageService implements I
         MessagingService.shutdown();
         StageManager.shutdownNow();
     }
+    
+    public boolean isInitialized() 
+    { 
+        return initialized; 
+    }
 
     public synchronized void initClient() throws IOException
     {
@@ -393,6 +394,7 @@ public class StorageService implements I
                 && !SystemTable.isBootstrapped())
             logger_.info("This node will not auto bootstrap because it is 
configured to be a seed node.");
 
+        Token token;
         if (DatabaseDescriptor.isAutoBootstrap()
             && 
!(DatabaseDescriptor.getSeeds().contains(FBUtilities.getLocalAddress()) || 
SystemTable.isBootstrapped()))
         {
@@ -406,25 +408,18 @@ public class StorageService implements I
                 throw new UnsupportedOperationException(s);
             }
             setMode("Joining: getting bootstrap token", true);
-            Token token = BootStrapper.getBootstrapToken(tokenMetadata_, 
StorageLoadBalancer.instance.getLoadInfo());
+            token = BootStrapper.getBootstrapToken(tokenMetadata_, 
StorageLoadBalancer.instance.getLoadInfo());
             // don't bootstrap if there are no tables defined.
             if (DatabaseDescriptor.getNonSystemTables().size() > 0)
             {
                 bootstrap(token);
                 assert !isBootstrapMode; // bootstrap will block until finished
             }
-            else
-            {
-                isBootstrapMode = false;
-                SystemTable.setBootstrapped(true);
-                tokenMetadata_.updateNormalToken(token, 
FBUtilities.getLocalAddress());
-                
Gossiper.instance.addLocalApplicationState(ApplicationState.STATUS, 
valueFactory.normal(token));
-                setMode("Normal", false);
-            }
+            // else nothing to do, go directly to participating in ring
         }
         else
         {
-            Token token = SystemTable.getSavedToken();
+            token = SystemTable.getSavedToken();
             if (token == null)
             {
                 String initialToken = DatabaseDescriptor.getInitialToken();
@@ -438,18 +433,18 @@ public class StorageService implements I
                     token = 
partitioner_.getTokenFactory().fromString(initialToken);
                     logger_.info("Saved token not found. Using " + token + " 
from configuration");
                 }
-                SystemTable.updateToken(token);
             }
             else
             {
                 logger_.info("Using saved token " + token);
             }
-            SystemTable.setBootstrapped(true);
-            tokenMetadata_.updateNormalToken(token, 
FBUtilities.getLocalAddress());
-            
Gossiper.instance.addLocalApplicationState(ApplicationState.STATUS, 
valueFactory.normal(token));
-            setMode("Normal", false);
         } 
-        
+
+        SystemTable.setBootstrapped(true); // first startup is only chance to 
bootstrap
+        setToken(token);
+        Gossiper.instance.addLocalApplicationState(ApplicationState.STATUS, 
valueFactory.normal(getLocalToken()));
+        setMode("Normal", false);
+
         assert tokenMetadata_.sortedTokens().size() > 0;
     }
 

Modified: cassandra/trunk/src/java/org/apache/cassandra/tools/SSTableImport.java
URL: 
http://svn.apache.org/viewvc/cassandra/trunk/src/java/org/apache/cassandra/tools/SSTableImport.java?rev=1036924&r1=1036923&r2=1036924&view=diff
==============================================================================
--- cassandra/trunk/src/java/org/apache/cassandra/tools/SSTableImport.java 
(original)
+++ cassandra/trunk/src/java/org/apache/cassandra/tools/SSTableImport.java Fri 
Nov 19 16:28:40 2010
@@ -95,9 +95,9 @@ public class SSTableImport
             JsonColumn col = new JsonColumn(c);
             QueryPath path = new QueryPath(cfm.cfName, null, 
ByteBuffer.wrap(hexToBytes(col.name)));
             if (col.isDeleted) {
-                cfamily.addColumn(path, 
ByteBuffer.wrap(hexToBytes(col.value)), col.timestamp);
-            } else {
                 cfamily.addTombstone(path, 
ByteBuffer.wrap(hexToBytes(col.value)), col.timestamp);
+            } else {
+                cfamily.addColumn(path, 
ByteBuffer.wrap(hexToBytes(col.value)), col.timestamp);
             }
         }
     }
@@ -125,9 +125,9 @@ public class SSTableImport
                 JsonColumn col = new JsonColumn(c);
                 QueryPath path = new QueryPath(cfm.cfName, superName, 
ByteBuffer.wrap(hexToBytes(col.name)));
                 if (col.isDeleted) {
-                    cfamily.addColumn(path, 
ByteBuffer.wrap(hexToBytes(col.value)), col.timestamp);
-                } else {
                     cfamily.addTombstone(path, 
ByteBuffer.wrap(hexToBytes(col.value)), col.timestamp);
+                } else {
+                    cfamily.addColumn(path, 
ByteBuffer.wrap(hexToBytes(col.value)), col.timestamp);
                 }
             }
             

Modified: cassandra/trunk/test/conf/cassandra.yaml
URL: 
http://svn.apache.org/viewvc/cassandra/trunk/test/conf/cassandra.yaml?rev=1036924&r1=1036923&r2=1036924&view=diff
==============================================================================
--- cassandra/trunk/test/conf/cassandra.yaml (original)
+++ cassandra/trunk/test/conf/cassandra.yaml Fri Nov 19 16:28:40 2010
@@ -23,6 +23,7 @@ seed_provider:
       parameters:
           - seeds: "127.0.0.2"
 endpoint_snitch: org.apache.cassandra.locator.SimpleSnitch
+dynamic_snitch: true
 request_scheduler: org.apache.cassandra.scheduler.RoundRobinScheduler
 request_scheduler_id: keyspace
 keyspaces:

Modified: 
cassandra/trunk/test/unit/org/apache/cassandra/locator/DynamicEndpointSnitchTest.java
URL: 
http://svn.apache.org/viewvc/cassandra/trunk/test/unit/org/apache/cassandra/locator/DynamicEndpointSnitchTest.java?rev=1036924&r1=1036923&r2=1036924&view=diff
==============================================================================
--- 
cassandra/trunk/test/unit/org/apache/cassandra/locator/DynamicEndpointSnitchTest.java
 (original)
+++ 
cassandra/trunk/test/unit/org/apache/cassandra/locator/DynamicEndpointSnitchTest.java
 Fri Nov 19 16:28:40 2010
@@ -19,10 +19,11 @@
 
 package org.apache.cassandra.locator;
 
+import java.io.IOException;
 import java.net.InetAddress;
-import java.net.UnknownHostException;
 import java.util.ArrayList;
 
+import org.apache.cassandra.service.StorageService;
 import org.junit.Test;
 
 import org.apache.cassandra.utils.FBUtilities;
@@ -30,8 +31,10 @@ import org.apache.cassandra.utils.FBUtil
 public class DynamicEndpointSnitchTest
 {
     @Test
-    public void testSnitch() throws UnknownHostException, InterruptedException
+    public void testSnitch() throws InterruptedException, IOException
     {
+        // do this because SS needs to be initialized before DES can work 
properly.
+        StorageService.instance.initClient();
         int sleeptime = 150;
         DynamicEndpointSnitch dsnitch = new DynamicEndpointSnitch(new 
SimpleSnitch());
         InetAddress self = FBUtilities.getLocalAddress();

Modified: 
cassandra/trunk/test/unit/org/apache/cassandra/tools/SSTableImportTest.java
URL: 
http://svn.apache.org/viewvc/cassandra/trunk/test/unit/org/apache/cassandra/tools/SSTableImportTest.java?rev=1036924&r1=1036923&r2=1036924&view=diff
==============================================================================
--- cassandra/trunk/test/unit/org/apache/cassandra/tools/SSTableImportTest.java 
(original)
+++ cassandra/trunk/test/unit/org/apache/cassandra/tools/SSTableImportTest.java 
Fri Nov 19 16:28:40 2010
@@ -26,6 +26,7 @@ import java.util.Arrays;
 import org.apache.cassandra.SchemaLoader;
 import org.apache.cassandra.config.DatabaseDescriptor;
 import org.apache.cassandra.db.ColumnFamily;
+import org.apache.cassandra.db.DeletedColumn;
 import org.apache.cassandra.db.IColumn;
 import org.apache.cassandra.db.filter.QueryFilter;
 import org.apache.cassandra.db.filter.QueryPath;
@@ -55,6 +56,7 @@ public class SSTableImportTest extends S
         QueryFilter qf = QueryFilter.getNamesFilter(Util.dk("rowA"), new 
QueryPath("Standard1", null, null), ByteBufferUtil.bytes("colAA"));
         ColumnFamily cf = 
qf.getSSTableColumnIterator(reader).getColumnFamily();
         assert 
cf.getColumn(ByteBufferUtil.bytes("colAA")).value().equals(ByteBuffer.wrap(hexToBytes("76616c4141")));
+        assert !(cf.getColumn(ByteBufferUtil.bytes("colAA")) instanceof 
DeletedColumn);
     }
 
     @Test


Reply via email to