optimize guaranteed policy logic (#2514)
Guarantee schedule packages repo and optimize guaranteed policy logic
diff --git a/app_dart/lib/src/model/ci_yaml/target.dart b/app_dart/lib/src/model/ci_yaml/target.dart
index 69bc9f2..bbf017d 100644
--- a/app_dart/lib/src/model/ci_yaml/target.dart
+++ b/app_dart/lib/src/model/ci_yaml/target.dart
@@ -7,6 +7,7 @@
import 'package:cocoon_service/src/service/scheduler/policy.dart';
import 'package:github/github.dart';
+import '../../service/config.dart';
import '../luci/buildbucket.dart';
import '../proto/internal/scheduler.pb.dart' as pb;
@@ -80,12 +81,14 @@
///
/// Targets not triggered by Cocoon will not be triggered.
///
- /// All targets run with [BatchPolicy] to reduce queue time.
+ /// All targets except from [Config.guaranteedSchedulingRepos] run with [BatchPolicy] to reduce queue time.
SchedulerPolicy get schedulerPolicy {
if (value.scheduler != pb.SchedulerSystem.cocoon) {
return OmitPolicy();
}
-
+ if (Config.guaranteedSchedulingRepos.contains(slug)) {
+ return GuaranteedPolicy();
+ }
return BatchPolicy();
}
diff --git a/app_dart/lib/src/service/config.dart b/app_dart/lib/src/service/config.dart
index 64553b2..749be04 100644
--- a/app_dart/lib/src/service/config.dart
+++ b/app_dart/lib/src/service/config.dart
@@ -49,6 +49,12 @@
pluginsSlug,
};
+ /// List of guaranteed scheduling Github repos.
+ static Set<gh.RepositorySlug> get guaranteedSchedulingRepos => <gh.RepositorySlug>{
+ engineSlug,
+ packagesSlug,
+ };
+
/// List of Github postsubmit supported repos.
///
/// This adds support for check runs to the repo.
diff --git a/app_dart/lib/src/service/scheduler.dart b/app_dart/lib/src/service/scheduler.dart
index 07dfe33..1d0d635 100644
--- a/app_dart/lib/src/service/scheduler.dart
+++ b/app_dart/lib/src/service/scheduler.dart
@@ -135,8 +135,8 @@
for (Target target in initialTargets) {
final Task task = tasks.singleWhere((Task task) => task.name == target.value.name);
SchedulerPolicy policy = target.schedulerPolicy;
- // Engine repo and release branches should run every task
- if (commit.slug == Config.engineSlug || Config.defaultBranch(commit.slug) != commit.branch) {
+ // Release branches should run every task
+ if (Config.defaultBranch(commit.slug) != commit.branch) {
policy = GuaranteedPolicy();
}
final int? priority = await policy.triggerPriority(task: task, datastore: datastore);
diff --git a/app_dart/test/model/ci_yaml/target_test.dart b/app_dart/test/model/ci_yaml/target_test.dart
index 9306439..fa7e99d 100644
--- a/app_dart/test/model/ci_yaml/target_test.dart
+++ b/app_dart/test/model/ci_yaml/target_test.dart
@@ -6,6 +6,7 @@
import 'package:cocoon_service/src/model/luci/buildbucket.dart';
import 'package:cocoon_service/src/model/proto/protos.dart' as pb;
import 'package:cocoon_service/src/service/scheduler/policy.dart';
+import 'package:github/github.dart' as github;
import 'package:test/test.dart';
import '../../src/utilities/entity_generators.dart';
@@ -379,6 +380,11 @@
test('vm cocoon targets return batch policy', () {
expect(generateTarget(1, platform: 'Linux').schedulerPolicy, isA<BatchPolicy>());
});
+
+ test('packages targets use guaranteed policy', () {
+ expect(generateTarget(1, platform: 'Mac', slug: github.RepositorySlug('flutter', 'packages')).schedulerPolicy,
+ isA<GuaranteedPolicy>());
+ });
});
});
}
diff --git a/app_dart/test/service/scheduler_test.dart b/app_dart/test/service/scheduler_test.dart
index 40d2030..77a2c40 100644
--- a/app_dart/test/service/scheduler_test.dart
+++ b/app_dart/test/service/scheduler_test.dart
@@ -349,8 +349,8 @@
expect(db.values.values.whereType<Commit>().length, 1);
expect(db.values.values.whereType<Task>().length, 3);
- // Ensure all tasks have been marked in progress
- expect(db.values.values.whereType<Task>().where((Task task) => task.status == Task.statusNew), isEmpty);
+ // Ensure all tasks under cocoon scheduler have been marked in progress
+ expect(db.values.values.whereType<Task>().where((Task task) => task.status == Task.statusInProgress).length, 2);
});
test('does not schedule tasks against non-merged PRs', () async {