in src/afs.cc [1237:1262]
arrow::Result<int64_t> update(uint64_t sessionID, const std::string& query)
{
auto session = find_session(sessionID);
SessionReleaser sessionReleaser(sessions_, session);
set_shared_string(session->updateQuery, query);
session->nUpdatedRecords = -1;
if (session->executorPID != InvalidPid)
{
P("%s: %s: update: kill executor: %d", Tag, tag_, session->executorPID);
kill(session->executorPID, SIGUSR1);
}
{
std::unique_lock<std::mutex> lock(mutex_);
conditionVariable_.wait(lock, [&] {
P("%s: %s: %s: wait: update", Tag, tag_, AFS_FUNC);
return DsaPointerIsValid(session->errorMessage) ||
session->nUpdatedRecords >= 0;
});
}
if (DsaPointerIsValid(session->errorMessage))
{
return report_session_error(session);
}
P("%s: %s: update: done: %ld", Tag, tag_, session->nUpdatedRecords);
return session->nUpdatedRecords;
}