001/* 002 * Licensed to the Apache Software Foundation (ASF) under one 003 * or more contributor license agreements. See the NOTICE file 004 * distributed with this work for additional information 005 * regarding copyright ownership. The ASF licenses this file 006 * to you under the Apache License, Version 2.0 (the 007 * "License"); you may not use this file except in compliance 008 * with the License. You may obtain a copy of the License at 009 * 010 * http://www.apache.org/licenses/LICENSE-2.0 011 * 012 * Unless required by applicable law or agreed to in writing, software 013 * distributed under the License is distributed on an "AS IS" BASIS, 014 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 015 * See the License for the specific language governing permissions and 016 * limitations under the License. 017 */ 018package org.apache.hadoop.hbase.ipc; 019 020import java.io.IOException; 021import java.net.InetAddress; 022import org.apache.hadoop.hbase.CellScanner; 023import org.apache.hadoop.hbase.io.ByteBuffAllocator; 024import org.apache.hadoop.hbase.ipc.RpcServer.CallCleanup; 025import org.apache.yetus.audience.InterfaceAudience; 026 027import org.apache.hbase.thirdparty.com.google.protobuf.BlockingService; 028import org.apache.hbase.thirdparty.com.google.protobuf.Descriptors.MethodDescriptor; 029import org.apache.hbase.thirdparty.com.google.protobuf.Message; 030 031import org.apache.hadoop.hbase.shaded.protobuf.generated.RPCProtos.RequestHeader; 032 033/** 034 * Datastructure that holds all necessary to a method invocation and then afterward, carries the 035 * result. 036 * @since 2.0.0 037 */ 038@InterfaceAudience.Private 039class NettyServerCall extends ServerCall<NettyServerRpcConnection> { 040 041 NettyServerCall(int id, BlockingService service, MethodDescriptor md, RequestHeader header, 042 Message param, CellScanner cellScanner, NettyServerRpcConnection connection, long size, 043 InetAddress remoteAddress, long receiveTime, int timeout, ByteBuffAllocator bbAllocator, 044 CellBlockBuilder cellBlockBuilder, CallCleanup reqCleanup) { 045 super(id, service, md, header, param, cellScanner, connection, size, remoteAddress, receiveTime, 046 timeout, bbAllocator, cellBlockBuilder, reqCleanup); 047 } 048 049 /** 050 * If we have a response, and delay is not set, then respond immediately. Otherwise, do not 051 * respond to client. This is called by the RPC code in the context of the Handler thread. 052 */ 053 @Override 054 public synchronized void sendResponseIfReady() throws IOException { 055 // set param null to reduce memory pressure 056 this.param = null; 057 connection.doRespond(this); 058 } 059}