Skip to content

Commit c5e658e

Browse files
committed
job-list: update queue_stats_lookup()
Problem: The internal queue_stats_lookup() function looks up a stats structure for a queue and creates one if it is missing. But in a few cases, this makes no sense. For example, when a job is being purged, it should be (generally) impossible that queue stats don't exist. Add a boolean indicating if the queue stats should be created or not in queue_stats_lookup(). In a few cases where it's undesireable for queue_stats_lookup() to return no queue stats, output some debugging error info. Also, have queue_stats_lookup() take a queue name instead of a "struct job" as input, as the queue name is what is actually necessary.
1 parent e144432 commit c5e658e

File tree

1 file changed

+26
-11
lines changed

1 file changed

+26
-11
lines changed

src/modules/job-list/stats.c

Lines changed: 26 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -45,18 +45,19 @@ static void free_wrapper (void **item)
4545
}
4646

4747
static struct job_stats *queue_stats_lookup (struct job_stats_ctx *statsctx,
48-
struct job *job)
48+
const char *name,
49+
bool create_if_missing)
4950
{
5051
struct job_stats *stats = NULL;
5152

52-
if (!job->queue)
53+
if (!name)
5354
return NULL;
5455

55-
stats = zhashx_lookup (statsctx->queue_stats, job->queue);
56-
if (!stats) {
56+
stats = zhashx_lookup (statsctx->queue_stats, name);
57+
if (!stats && create_if_missing) {
5758
if (!(stats = calloc (1, sizeof (*stats))))
5859
return NULL;
59-
(void)zhashx_insert (statsctx->queue_stats, job->queue, stats);
60+
(void)zhashx_insert (statsctx->queue_stats, name, stats);
6061
}
6162
return stats;
6263
}
@@ -127,7 +128,7 @@ void job_stats_update (struct job_stats_ctx *statsctx,
127128

128129
stats_update (&statsctx->all, job, newstate);
129130

130-
if ((stats = queue_stats_lookup (statsctx, job)))
131+
if ((stats = queue_stats_lookup (statsctx, job->queue, true)))
131132
stats_update (stats, job, newstate);
132133

133134
arm_timer (statsctx);
@@ -138,7 +139,7 @@ void job_stats_add_queue (struct job_stats_ctx *statsctx,
138139
{
139140
struct job_stats *stats;
140141

141-
if ((stats = queue_stats_lookup (statsctx, job)))
142+
if ((stats = queue_stats_lookup (statsctx, job->queue, true)))
142143
stats_add (stats, job, job->state);
143144

144145
arm_timer (statsctx);
@@ -174,9 +175,16 @@ void job_stats_remove_queue (struct job_stats_ctx *statsctx,
174175
{
175176
struct job_stats *stats;
176177

177-
if ((stats = queue_stats_lookup (statsctx, job)))
178-
stats_remove (stats, job);
178+
if (!(stats = queue_stats_lookup (statsctx, job->queue, false))) {
179+
if (job->queue)
180+
flux_log (statsctx->h,
181+
LOG_DEBUG,
182+
"no queue stats for %s",
183+
job->queue);
184+
return;
185+
}
179186

187+
stats_remove (stats, job);
180188
arm_timer (statsctx);
181189
}
182190

@@ -211,9 +219,16 @@ void job_stats_purge (struct job_stats_ctx *statsctx, struct job *job)
211219

212220
stats_purge (&statsctx->all, job);
213221

214-
if ((stats = queue_stats_lookup (statsctx, job)))
215-
stats_purge (stats, job);
222+
if (!(stats = queue_stats_lookup (statsctx, job->queue, false))) {
223+
if (job->queue)
224+
flux_log (statsctx->h,
225+
LOG_DEBUG,
226+
"no queue stats for %s",
227+
job->queue);
228+
return;
229+
}
216230

231+
stats_purge (stats, job);
217232
arm_timer (statsctx);
218233
}
219234

0 commit comments

Comments
 (0)