Retry pullfinish with empty payload if call fails

If the first call for pullFinished fails, it is likely because the
transaction is too large. Currently, if this happens statsd will just
sleep until the timeout. With this change, the client will retry calling
pullFinish if the first attempt fails, but with an empty payload (and
with success = false) to cause the puller to fail fast, and so statsd
does not wait for the timeout.

Test: atest LibStatsPullTests
Bug: 157768117
Change-Id: I3af991fae47bb7c09bf8a6fc83f28556b836c6e4
This commit is contained in:
Tej Singh 2020-05-29 15:21:08 -07:00
parent 9113e7be95
commit c95f781901
1 changed files with 5 additions and 1 deletions

View File

@ -131,7 +131,11 @@ class StatsPullAtomCallbackInternal : public BnPullAtomCallback {
parcels.push_back(std::move(p));
}
resultReceiver->pullFinished(atomTag, success, parcels);
Status status = resultReceiver->pullFinished(atomTag, success, parcels);
if (!status.isOk()) {
std::vector<StatsEventParcel> emptyParcels;
resultReceiver->pullFinished(atomTag, /*success=*/false, emptyParcels);
}
for (int i = 0; i < statsEventList.data.size(); i++) {
AStatsEvent_release(statsEventList.data[i]);
}