listRunnableRuns method

  1. @override
Future<List<String>> listRunnableRuns({
  1. DateTime? now,
  2. int limit = 50,
  3. int offset = 0,
})
override

Lists runnable runs, excluding those already leased.

Implementation

@override
/// Lists runnable runs, excluding those already leased.
Future<List<String>> listRunnableRuns({
  DateTime? now,
  int limit = 50,
  int offset = 0,
}) async {
  final resolvedNow = now ?? _clock.now();
  final candidates = _runs.values.where((state) {
    if (state.status != WorkflowStatus.running) return false;
    if (state.waitTopic != null) return false;
    if (!_leaseExpired(state, resolvedNow) &&
        state.ownerId != null &&
        state.ownerId!.isNotEmpty) {
      return false;
    }
    return true;
  }).toList()..sort((a, b) => b.id.compareTo(a.id));
  final start = offset < 0 ? 0 : offset;
  return candidates
      .skip(start)
      .take(limit)
      .map((state) => state.id)
      .toList(growable: false);
}