d_downstreamFailures = 0;
d_state = State::readingQuerySize;
d_lastIOState = IOState::Done;
+ d_selfGeneratedResponse = false;
}
boost::optional<struct timeval> getClientReadTTD(struct timeval now) const
bool d_firstResponsePacket{true};
bool d_isXFR{false};
bool d_xfrStarted{false};
+ bool d_selfGeneratedResponse{false};
};
static void handleIOCallback(int fd, FDMultiplexer::funcparam_t& param);
return;
}
- if (state->d_ds) {
- /* if we have no downstream server selected, this was a self-answered response */
+ if (state->d_selfGeneratedResponse == false && state->d_ds) {
+ /* if we have no downstream server selected, this was a self-answered response
+ but cache hits have a selected server as well, so be careful */
struct timespec answertime;
gettime(&answertime);
double udiff = state->d_ids.sentTime.udiff();
}
if (result == ProcessQueryResult::SendAnswer) {
+ state->d_selfGeneratedResponse = true;
state->d_buffer.resize(dq.len);
state->d_responseBuffer = std::move(state->d_buffer);
state->d_responseSize = state->d_responseBuffer.size();