annotate src/java/org/apache/cassandra/service/DatacenterWriteResponseHandler.java @ 0:d485154379c8 default tip

apache-cassandra-0.6.0-rc1-src
author Shinji KONO <kono@ie.u-ryukyu.ac.jp>
date Fri, 02 Apr 2010 13:36:02 +0900
parents
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
d485154379c8 apache-cassandra-0.6.0-rc1-src
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1 /**
d485154379c8 apache-cassandra-0.6.0-rc1-src
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2 *
d485154379c8 apache-cassandra-0.6.0-rc1-src
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
3 */
d485154379c8 apache-cassandra-0.6.0-rc1-src
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
4 package org.apache.cassandra.service;
d485154379c8 apache-cassandra-0.6.0-rc1-src
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
5 /*
d485154379c8 apache-cassandra-0.6.0-rc1-src
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
6 *
d485154379c8 apache-cassandra-0.6.0-rc1-src
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
7 * Licensed to the Apache Software Foundation (ASF) under one
d485154379c8 apache-cassandra-0.6.0-rc1-src
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
8 * or more contributor license agreements. See the NOTICE file
d485154379c8 apache-cassandra-0.6.0-rc1-src
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
9 * distributed with this work for additional information
d485154379c8 apache-cassandra-0.6.0-rc1-src
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
10 * regarding copyright ownership. The ASF licenses this file
d485154379c8 apache-cassandra-0.6.0-rc1-src
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
11 * to you under the Apache License, Version 2.0 (the
d485154379c8 apache-cassandra-0.6.0-rc1-src
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
12 * "License"); you may not use this file except in compliance
d485154379c8 apache-cassandra-0.6.0-rc1-src
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
13 * with the License. You may obtain a copy of the License at
d485154379c8 apache-cassandra-0.6.0-rc1-src
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
14 *
d485154379c8 apache-cassandra-0.6.0-rc1-src
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
15 * http://www.apache.org/licenses/LICENSE-2.0
d485154379c8 apache-cassandra-0.6.0-rc1-src
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
16 *
d485154379c8 apache-cassandra-0.6.0-rc1-src
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
17 * Unless required by applicable law or agreed to in writing,
d485154379c8 apache-cassandra-0.6.0-rc1-src
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
18 * software distributed under the License is distributed on an
d485154379c8 apache-cassandra-0.6.0-rc1-src
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
19 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
d485154379c8 apache-cassandra-0.6.0-rc1-src
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
20 * KIND, either express or implied. See the License for the
d485154379c8 apache-cassandra-0.6.0-rc1-src
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
21 * specific language governing permissions and limitations
d485154379c8 apache-cassandra-0.6.0-rc1-src
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
22 * under the License.
d485154379c8 apache-cassandra-0.6.0-rc1-src
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
23 *
d485154379c8 apache-cassandra-0.6.0-rc1-src
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
24 */
d485154379c8 apache-cassandra-0.6.0-rc1-src
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
25
d485154379c8 apache-cassandra-0.6.0-rc1-src
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
26
d485154379c8 apache-cassandra-0.6.0-rc1-src
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
27 import java.net.InetAddress;
d485154379c8 apache-cassandra-0.6.0-rc1-src
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
28 import java.net.UnknownHostException;
d485154379c8 apache-cassandra-0.6.0-rc1-src
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
29 import java.util.concurrent.atomic.AtomicInteger;
d485154379c8 apache-cassandra-0.6.0-rc1-src
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
30
d485154379c8 apache-cassandra-0.6.0-rc1-src
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
31 import org.apache.cassandra.config.DatabaseDescriptor;
d485154379c8 apache-cassandra-0.6.0-rc1-src
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
32 import org.apache.cassandra.locator.IEndPointSnitch;
d485154379c8 apache-cassandra-0.6.0-rc1-src
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
33 import org.apache.cassandra.locator.DatacenterEndPointSnitch;
d485154379c8 apache-cassandra-0.6.0-rc1-src
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
34 import org.apache.cassandra.net.Message;
d485154379c8 apache-cassandra-0.6.0-rc1-src
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
35 import org.apache.cassandra.utils.FBUtilities;
d485154379c8 apache-cassandra-0.6.0-rc1-src
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
36
d485154379c8 apache-cassandra-0.6.0-rc1-src
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
37 /**
d485154379c8 apache-cassandra-0.6.0-rc1-src
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
38 * This class will basically will block for the replication factor which is
d485154379c8 apache-cassandra-0.6.0-rc1-src
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
39 * provided in the input map. it will block till we recive response from (DC, n)
d485154379c8 apache-cassandra-0.6.0-rc1-src
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
40 * nodes.
d485154379c8 apache-cassandra-0.6.0-rc1-src
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
41 */
d485154379c8 apache-cassandra-0.6.0-rc1-src
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
42 public class DatacenterWriteResponseHandler extends WriteResponseHandler
d485154379c8 apache-cassandra-0.6.0-rc1-src
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
43 {
d485154379c8 apache-cassandra-0.6.0-rc1-src
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
44 private final AtomicInteger blockFor;
d485154379c8 apache-cassandra-0.6.0-rc1-src
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
45 private final DatacenterEndPointSnitch endpointsnitch;
d485154379c8 apache-cassandra-0.6.0-rc1-src
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
46 private final InetAddress localEndpoint;
d485154379c8 apache-cassandra-0.6.0-rc1-src
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
47
d485154379c8 apache-cassandra-0.6.0-rc1-src
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
48 public DatacenterWriteResponseHandler(int blockFor, String table)
d485154379c8 apache-cassandra-0.6.0-rc1-src
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
49 {
d485154379c8 apache-cassandra-0.6.0-rc1-src
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
50 // Response is been managed by the map so the waitlist size really doesnt matter.
d485154379c8 apache-cassandra-0.6.0-rc1-src
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
51 super(blockFor, table);
d485154379c8 apache-cassandra-0.6.0-rc1-src
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
52 this.blockFor = new AtomicInteger(blockFor);
d485154379c8 apache-cassandra-0.6.0-rc1-src
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
53 endpointsnitch = (DatacenterEndPointSnitch) DatabaseDescriptor.getEndPointSnitch(table);
d485154379c8 apache-cassandra-0.6.0-rc1-src
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
54 localEndpoint = FBUtilities.getLocalAddress();
d485154379c8 apache-cassandra-0.6.0-rc1-src
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
55 }
d485154379c8 apache-cassandra-0.6.0-rc1-src
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
56
d485154379c8 apache-cassandra-0.6.0-rc1-src
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
57 @Override
d485154379c8 apache-cassandra-0.6.0-rc1-src
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
58 public void response(Message message)
d485154379c8 apache-cassandra-0.6.0-rc1-src
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
59 {
d485154379c8 apache-cassandra-0.6.0-rc1-src
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
60 //Is optimal to check if same datacenter than comparing Arrays.
d485154379c8 apache-cassandra-0.6.0-rc1-src
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
61 int b = -1;
d485154379c8 apache-cassandra-0.6.0-rc1-src
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
62 try
d485154379c8 apache-cassandra-0.6.0-rc1-src
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
63 {
d485154379c8 apache-cassandra-0.6.0-rc1-src
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
64 if (endpointsnitch.isInSameDataCenter(localEndpoint, message.getFrom()))
d485154379c8 apache-cassandra-0.6.0-rc1-src
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
65 {
d485154379c8 apache-cassandra-0.6.0-rc1-src
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
66 b = blockFor.decrementAndGet();
d485154379c8 apache-cassandra-0.6.0-rc1-src
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
67 }
d485154379c8 apache-cassandra-0.6.0-rc1-src
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
68 }
d485154379c8 apache-cassandra-0.6.0-rc1-src
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
69 catch (UnknownHostException e)
d485154379c8 apache-cassandra-0.6.0-rc1-src
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
70 {
d485154379c8 apache-cassandra-0.6.0-rc1-src
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
71 throw new RuntimeException(e);
d485154379c8 apache-cassandra-0.6.0-rc1-src
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
72 }
d485154379c8 apache-cassandra-0.6.0-rc1-src
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
73 responses.add(message);
d485154379c8 apache-cassandra-0.6.0-rc1-src
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
74 if (b == 0)
d485154379c8 apache-cassandra-0.6.0-rc1-src
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
75 {
d485154379c8 apache-cassandra-0.6.0-rc1-src
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
76 //Singnal when Quorum is recived.
d485154379c8 apache-cassandra-0.6.0-rc1-src
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
77 condition.signal();
d485154379c8 apache-cassandra-0.6.0-rc1-src
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
78 }
d485154379c8 apache-cassandra-0.6.0-rc1-src
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
79 if (logger.isDebugEnabled())
d485154379c8 apache-cassandra-0.6.0-rc1-src
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
80 logger.debug("Processed Message: " + message.toString());
d485154379c8 apache-cassandra-0.6.0-rc1-src
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
81 }
d485154379c8 apache-cassandra-0.6.0-rc1-src
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
82 }