@Override public GetReconfigurationStatusResponseProto getReconfigurationStatus( RpcController unused, GetReconfigurationStatusRequestProto request) throws ServiceException { GetReconfigurationStatusResponseProto.Builder builder = GetReconfigurationStatusResponseProto.newBuilder(); try { ReconfigurationTaskStatus status = impl.getReconfigurationStatus(); builder.setStartTime(status.getStartTime()); if (status.stopped()) { builder.setEndTime(status.getEndTime()); assert status.getStatus() != null; for (Map.Entry<PropertyChange, Optional<String>> result : status.getStatus().entrySet()) { GetReconfigurationStatusConfigChangeProto.Builder changeBuilder = GetReconfigurationStatusConfigChangeProto.newBuilder(); PropertyChange change = result.getKey(); changeBuilder.setName(change.prop); changeBuilder.setOldValue(change.oldVal != null ? change.oldVal : ""); if (change.newVal != null) { changeBuilder.setNewValue(change.newVal); } if (result.getValue().isPresent()) { // Get full stack trace. changeBuilder.setErrorMessage(result.getValue().get()); } builder.addChanges(changeBuilder); } } } catch (IOException e) { throw new ServiceException(e); } return builder.build(); }