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