blob: ebff52608470235d93f5ca984653b38f81665631 [file] [log] [blame]
/**
*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*
*/
package org.apache.bookkeeper.proto;
import org.apache.bookkeeper.proto.BookkeeperProtocol.BKPacketHeader;
import org.apache.bookkeeper.proto.BookkeeperProtocol.ProtocolVersion;
import org.apache.bookkeeper.proto.BookkeeperProtocol.Request;
import org.apache.bookkeeper.proto.BookkeeperProtocol.StatusCode;
import org.apache.bookkeeper.stats.OpStatsLogger;
import org.apache.bookkeeper.util.MathUtils;
import org.jboss.netty.channel.Channel;
public abstract class PacketProcessorBaseV3 {
final Request request;
final Channel channel;
final BookieRequestProcessor requestProcessor;
final long enqueueNanos;
public PacketProcessorBaseV3(Request request, Channel channel,
BookieRequestProcessor requestProcessor) {
this.request = request;
this.channel = channel;
this.requestProcessor = requestProcessor;
this.enqueueNanos = MathUtils.nowInNano();
}
protected void sendResponse(StatusCode code, Object response, OpStatsLogger statsLogger) {
channel.write(response);
if (StatusCode.EOK == code) {
statsLogger.registerSuccessfulEvent(MathUtils.elapsedMSec(enqueueNanos));
} else {
statsLogger.registerFailedEvent(MathUtils.elapsedMSec(enqueueNanos));
}
}
protected boolean isVersionCompatible() {
return this.request.getHeader().getVersion().equals(ProtocolVersion.VERSION_THREE);
}
/**
* Build a header with protocol version 3 and the operation type same as what was in the
* request.
* @return
*/
protected BKPacketHeader getHeader() {
BKPacketHeader.Builder header = BKPacketHeader.newBuilder();
header.setVersion(ProtocolVersion.VERSION_THREE);
header.setOperation(request.getHeader().getOperation());
header.setTxnId(request.getHeader().getTxnId());
return header.build();
}
}