From d52a1109745a147c5d623f68bd2bcc9735cc286e Mon Sep 17 00:00:00 2001 From: Jonathan Ellis Date: Fri, 15 May 2009 21:37:45 +0000 Subject: [PATCH] check for enough endpoints before starting a quorum wait. patch by jbellis; reviewed by Jun Rao and Sandeep Tata for CASSANDRA-180 git-svn-id: https://svn.apache.org/repos/asf/incubator/cassandra/trunk@775361 13f79535-47bb-0310-9956-ffa450edef68 --- src/java/org/apache/cassandra/service/StorageProxy.java | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/java/org/apache/cassandra/service/StorageProxy.java b/src/java/org/apache/cassandra/service/StorageProxy.java index 45ae320206..ae88210548 100644 --- a/src/java/org/apache/cassandra/service/StorageProxy.java +++ b/src/java/org/apache/cassandra/service/StorageProxy.java @@ -149,12 +149,15 @@ public class StorageProxy implements StorageProxyMBean } try { + EndPoint[] endpoints = StorageService.instance().getNStorageEndPoint(rm.key()); + if (endpoints.length < (DatabaseDescriptor.getReplicationFactor() / 2) + 1) + { + throw new UnavailableException(); + } QuorumResponseHandler quorumResponseHandler = new QuorumResponseHandler( DatabaseDescriptor.getReplicationFactor(), new WriteResponseResolver()); - EndPoint[] endpoints = StorageService.instance().getNStorageEndPoint(rm.key()); logger.debug("insertBlocking writing key " + rm.key() + " to " + message.getMessageId() + "@[" + StringUtils.join(endpoints, ", ") + "]"); - // TODO: throw a thrift exception if we do not have N nodes MessagingService.getMessagingInstance().sendRR(message, endpoints, quorumResponseHandler); if (!quorumResponseHandler.get())