}
}
-bool director_request_continue(struct director_request *request)
+static bool director_request_continue_real(struct director_request *request)
{
struct director *dir = request->dir;
struct mail_host *host;
director_request_free(request);
return TRUE;
}
+
+bool director_request_continue(struct director_request *request)
+{
+ if (request->delay_reason != REQUEST_DELAY_NONE) {
+ i_assert(request->dir->requests_delayed_count > 0);
+ request->dir->requests_delayed_count--;
+ }
+ if (!director_request_continue_real(request)) {
+ i_assert(request->delay_reason != REQUEST_DELAY_NONE);
+ request->dir->requests_delayed_count++;
+ return FALSE;
+ }
+ return TRUE;
+}
struct mail_host_list *orig_config_hosts;
/* Number of users currently being moved */
unsigned int users_moving_count;
+ /* Number of requests currently delayed */
+ unsigned int requests_delayed_count;
/* these requests are waiting for directors to be in synced */
ARRAY(struct director_request *) pending_requests;
str = t_str_new(64);
str_printfa(str, "[%u users", director_total_users_count());
+ if (director->requests_delayed_count > 0)
+ str_printfa(str, ", %u delayed", director->requests_delayed_count);
if (director->users_moving_count > 0)
str_printfa(str, ", %u moving", director->users_moving_count);
str_printfa(str, ", %lu req/s",