(new InputStreamReader(socket.getInputStream()));
final String requestLine = in.readLine();
if (requestLine == null) {
continue;
}
RequestMessage requestMessage;
try {
requestMessage = protocol.parseRequest(requestLine);
} catch (InvalidMessageException e) {
LoggerUtils.logMsg
(logger, envImpl, formatter, Level.WARNING,
"Message format exception: " + e.getMessage());
out = new PrintWriter(socket.getOutputStream(), true);
out.println(protocol.new
ProtocolError(e).wireFormat());
continue;
}
LoggerUtils.logMsg(logger, envImpl, formatter,
Level.FINEST,
"learner request: " +
requestMessage.getOp() +
" sender: " +
requestMessage.getSenderId());
if (requestMessage.getOp() == protocol.RESULT) {
Result result = (Result) requestMessage;
processResult(result.getProposal(),result.getValue());
} else if (requestMessage.getOp() ==
protocol.MASTER_QUERY) {
synchronized (this) {
if ((currentProposal != null) &&
(currentValue != null)) {
out = new PrintWriter(socket.getOutputStream(),
true);
MasterQueryResponse responseMessage =
protocol.new MasterQueryResponse
(currentProposal, currentValue);
/*
* The request message may be of an earlier
* version. If so, this node transparently read
* the older version. JE only throws out
* InvalidMessageException when the version of
* the request message is newer than the
* current protocol. To avoid sending a
* response that the requester cannot
* understand, we send a response in the same
* version as that of the original request
* message.
*/
responseMessage.setSendVersion
(requestMessage.getSendVersion());
out.println(responseMessage.wireFormat());
}
}
} else if (requestMessage.getOp() == protocol.SHUTDOWN) {
LoggerUtils.logMsg
(logger, envImpl, formatter, Level.FINE,
"Learner thread exiting");
break;
} else {