Repository: cassandra Updated Branches: refs/heads/cassandra-3.0 a22db5be2 -> c7557bdec
fix Project: http://git-wip-us.apache.org/repos/asf/cassandra/repo Commit: http://git-wip-us.apache.org/repos/asf/cassandra/commit/c7557bde Tree: http://git-wip-us.apache.org/repos/asf/cassandra/tree/c7557bde Diff: http://git-wip-us.apache.org/repos/asf/cassandra/diff/c7557bde Branch: refs/heads/cassandra-3.0 Commit: c7557bdecda6ffe76bb5ee62be4c2d6c53804681 Parents: a22db5b Author: T Jake Luciani <[email protected]> Authored: Thu Sep 3 14:53:00 2015 -0400 Committer: T Jake Luciani <[email protected]> Committed: Fri Sep 4 09:10:49 2015 -0400 ---------------------------------------------------------------------- .../cassandra/db/view/MaterializedViewUtils.java | 14 ++++++++++++++ 1 file changed, 14 insertions(+) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/cassandra/blob/c7557bde/src/java/org/apache/cassandra/db/view/MaterializedViewUtils.java ---------------------------------------------------------------------- diff --git a/src/java/org/apache/cassandra/db/view/MaterializedViewUtils.java b/src/java/org/apache/cassandra/db/view/MaterializedViewUtils.java index 4dfea75..ea81750 100644 --- a/src/java/org/apache/cassandra/db/view/MaterializedViewUtils.java +++ b/src/java/org/apache/cassandra/db/view/MaterializedViewUtils.java @@ -26,6 +26,7 @@ import org.apache.cassandra.config.DatabaseDescriptor; import org.apache.cassandra.db.Keyspace; import org.apache.cassandra.dht.Token; import org.apache.cassandra.locator.AbstractReplicationStrategy; +import org.apache.cassandra.service.StorageService; import org.apache.cassandra.utils.FBUtilities; public final class MaterializedViewUtils @@ -87,8 +88,21 @@ public final class MaterializedViewUtils // number of replicas for all of the tokens in the ring. assert localBaseEndpoints.size() == localViewEndpoints.size() : "Replication strategy should have the same number of endpoints for the base and the view"; int baseIdx = localBaseEndpoints.indexOf(FBUtilities.getBroadcastAddress()); + if (baseIdx < 0) + { + + if (StorageService.instance.getTokenMetadata().pendingEndpointsFor(viewToken, keyspaceName).size() > 0) + { + //Since there are pending endpoints we are going to store hints this in the batchlog regardless. + //So we can pretend we are the views endpoint. + + return FBUtilities.getBroadcastAddress(); + } + throw new RuntimeException("Trying to get the view natural endpoint on a non-data replica"); + } + return localViewEndpoints.get(baseIdx); }
