| 112 | |
| 113 | template <class Interface, class Request, bool P> |
| 114 | Future<REPLY_TYPE(Request)> loadBalance( |
| 115 | DatabaseContext* ctx, |
| 116 | const Reference<LocationInfo> alternatives, |
| 117 | RequestStream<Request, P> Interface::*channel, |
| 118 | const Request& request = Request(), |
| 119 | TaskPriority taskID = TaskPriority::DefaultPromiseEndpoint, |
| 120 | AtMostOnce atMostOnce = |
| 121 | AtMostOnce::False, // if true, throws request_maybe_delivered() instead of retrying automatically |
| 122 | QueueModel* model = nullptr) { |
| 123 | if (alternatives->hasCaches) { |
| 124 | return loadBalance(alternatives->locations(), channel, request, taskID, atMostOnce, model); |
| 125 | } |
| 126 | return fmap( |
| 127 | [ctx](auto const& res) { |
| 128 | if (res.cached) { |
| 129 | ctx->updateCache.trigger(); |
| 130 | } |
| 131 | return res; |
| 132 | }, |
| 133 | loadBalance(alternatives->locations(), channel, request, taskID, atMostOnce, model)); |
| 134 | } |
| 135 | } // namespace |
| 136 | |
| 137 | FDB_BOOLEAN_PARAM(TransactionRecordLogInfo); |
no test coverage detected