Skip to content

Commit b108103

Browse files
l46kokcopybara-github
authored andcommitted
Async eval
PiperOrigin-RevId: 974283267
1 parent a2353b3 commit b108103

46 files changed

Lines changed: 7141 additions & 88 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.bazelrc

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ build --java_language_version=11
1616
common --javacopt=-Xlint:-options
1717

1818
# Remove flag once https://github.com/google/cel-spec/issues/508 and rules_jvm_external is fixed.
19-
common --incompatible_autoload_externally=proto_library,cc_proto_library,java_proto_library,java_test
19+
common --incompatible_autoload_externally=proto_library,cc_proto_library,java_proto_library,java_test,java_import
2020

2121
# Limit repository cache size by not caching extracted repository contents
2222
build --repo_contents_cache=

publish/BUILD.bazel

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,10 @@ COMMON_TARGETS = [
2929
# keep sorted
3030
RUNTIME_TARGETS = [
3131
"//runtime/src/main/java/dev/cel/runtime",
32+
"//runtime/src/main/java/dev/cel/runtime:async_call",
33+
"//runtime/src/main/java/dev/cel/runtime:async_drain_strategy",
34+
"//runtime/src/main/java/dev/cel/runtime:async_observer",
35+
"//runtime/src/main/java/dev/cel/runtime:async_options",
3236
"//runtime/src/main/java/dev/cel/runtime:base",
3337
"//runtime/src/main/java/dev/cel/runtime:interpreter",
3438
"//runtime/src/main/java/dev/cel/runtime:late_function_binding",

runtime/BUILD.bazel

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,10 @@ package(
99
java_library(
1010
name = "runtime",
1111
exports = [
12+
":async_call",
13+
":async_drain_strategy",
14+
":async_observer",
15+
":async_options",
1216
":descriptor_message_provider",
1317
":evaluation_exception",
1418
":function_overload",
@@ -340,6 +344,11 @@ java_library(
340344
exports = ["//runtime/src/main/java/dev/cel/runtime:function_overload"],
341345
)
342346

347+
cel_android_library(
348+
name = "function_overload_android",
349+
exports = ["//runtime/src/main/java/dev/cel/runtime:function_overload_android"],
350+
)
351+
343352
java_library(
344353
name = "descriptor_message_provider",
345354
visibility = ["//:internal"],
@@ -379,3 +388,43 @@ cel_android_library(
379388
name = "partial_vars_android",
380389
exports = ["//runtime/src/main/java/dev/cel/runtime:partial_vars_android"],
381390
)
391+
392+
java_library(
393+
name = "async_call",
394+
exports = ["//runtime/src/main/java/dev/cel/runtime:async_call"],
395+
)
396+
397+
cel_android_library(
398+
name = "async_call_android",
399+
exports = ["//runtime/src/main/java/dev/cel/runtime:async_call_android"],
400+
)
401+
402+
java_library(
403+
name = "async_drain_strategy",
404+
exports = ["//runtime/src/main/java/dev/cel/runtime:async_drain_strategy"],
405+
)
406+
407+
cel_android_library(
408+
name = "async_drain_strategy_android",
409+
exports = ["//runtime/src/main/java/dev/cel/runtime:async_drain_strategy_android"],
410+
)
411+
412+
java_library(
413+
name = "async_observer",
414+
exports = ["//runtime/src/main/java/dev/cel/runtime:async_observer"],
415+
)
416+
417+
cel_android_library(
418+
name = "async_observer_android",
419+
exports = ["//runtime/src/main/java/dev/cel/runtime:async_observer_android"],
420+
)
421+
422+
java_library(
423+
name = "async_options",
424+
exports = ["//runtime/src/main/java/dev/cel/runtime:async_options"],
425+
)
426+
427+
cel_android_library(
428+
name = "async_options_android",
429+
exports = ["//runtime/src/main/java/dev/cel/runtime:async_options_android"],
430+
)

runtime/planner/BUILD.bazel

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,3 +21,15 @@ java_library(
2121
visibility = ["//:internal"],
2222
exports = ["//runtime/src/main/java/dev/cel/runtime/planner:planned_program"],
2323
)
24+
25+
java_library(
26+
name = "async_call_state_tracker",
27+
visibility = ["//:internal"],
28+
exports = ["//runtime/src/main/java/dev/cel/runtime/planner:async_call_state_tracker"],
29+
)
30+
31+
cel_android_library(
32+
name = "async_call_state_tracker_android",
33+
visibility = ["//:internal"],
34+
exports = ["//runtime/src/main/java/dev/cel/runtime/planner:async_call_state_tracker_android"],
35+
)

runtime/src/main/java/dev/cel/runtime/AccumulatedUnknowns.java

Lines changed: 21 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
import java.util.ArrayList;
2020
import java.util.Arrays;
2121
import java.util.Collection;
22+
import java.util.Collections;
2223
import java.util.HashSet;
2324
import java.util.Set;
2425
import org.jspecify.annotations.Nullable;
@@ -35,6 +36,7 @@ public final class AccumulatedUnknowns {
3536
private static final int MAX_UNKNOWN_ATTRIBUTE_SIZE = 500_000;
3637
private final Set<Long> exprIds;
3738
private final Set<CelAttribute> attributes;
39+
private final Set<Long> callIds;
3840

3941
Set<Long> exprIds() {
4042
return exprIds;
@@ -44,6 +46,14 @@ Set<CelAttribute> attributes() {
4446
return attributes;
4547
}
4648

49+
public Set<Long> callIds() {
50+
return Collections.unmodifiableSet(callIds);
51+
}
52+
53+
public boolean hasCallIds() {
54+
return !callIds.isEmpty();
55+
}
56+
4757
/**
4858
* Evaluates if the right hand side is an accumulated unknown, and if so, merges it into the
4959
* accumulator.
@@ -62,6 +72,7 @@ public AccumulatedUnknowns merge(AccumulatedUnknowns arg) {
6272
enforceMaxAttributeSize(this.attributes, arg.attributes);
6373
this.exprIds.addAll(arg.exprIds);
6474
this.attributes.addAll(arg.attributes);
75+
this.callIds.addAll(arg.callIds);
6576
return this;
6677
}
6778

@@ -75,7 +86,14 @@ static AccumulatedUnknowns create(Collection<Long> ids) {
7586

7687
public static AccumulatedUnknowns create(
7788
Collection<Long> exprIds, Collection<CelAttribute> attributes) {
78-
return new AccumulatedUnknowns(new HashSet<>(exprIds), new HashSet<>(attributes));
89+
return new AccumulatedUnknowns(
90+
new HashSet<>(exprIds), new HashSet<>(attributes), new HashSet<>());
91+
}
92+
93+
public static AccumulatedUnknowns createForAsyncCall(long callId) {
94+
HashSet<Long> callIds = new HashSet<>();
95+
callIds.add(callId);
96+
return new AccumulatedUnknowns(new HashSet<>(), new HashSet<>(), callIds);
7997
}
8098

8199
private static void enforceMaxAttributeSize(
@@ -88,8 +106,9 @@ private static void enforceMaxAttributeSize(
88106
}
89107
}
90108

91-
private AccumulatedUnknowns(Set<Long> exprIds, Set<CelAttribute> attributes) {
109+
private AccumulatedUnknowns(Set<Long> exprIds, Set<CelAttribute> attributes, Set<Long> callIds) {
92110
this.exprIds = exprIds;
93111
this.attributes = attributes;
112+
this.callIds = callIds;
94113
}
95114
}

runtime/src/main/java/dev/cel/runtime/BUILD.bazel

Lines changed: 127 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -739,6 +739,7 @@ java_library(
739739
"//common/exceptions:overload_not_found",
740740
"@maven//:com_google_errorprone_error_prone_annotations",
741741
"@maven//:com_google_guava_guava",
742+
"@maven//:org_jspecify_jspecify",
742743
],
743744
)
744745

@@ -753,6 +754,7 @@ cel_android_library(
753754
"//common/annotations",
754755
"//common/exceptions:overload_not_found",
755756
"@maven//:com_google_errorprone_error_prone_annotations",
757+
"@maven//:org_jspecify_jspecify",
756758
"@maven_android//:com_google_guava_guava",
757759
],
758760
)
@@ -784,6 +786,7 @@ cel_android_library(
784786
java_library(
785787
name = "function_overload",
786788
srcs = [
789+
"CelAsyncFunctionOverload.java",
787790
"CelFunctionOverload.java",
788791
"OptimizedFunctionOverload.java",
789792
],
@@ -800,9 +803,12 @@ java_library(
800803
cel_android_library(
801804
name = "function_overload_android",
802805
srcs = [
806+
"CelAsyncFunctionOverload.java",
803807
"CelFunctionOverload.java",
804808
"OptimizedFunctionOverload.java",
805809
],
810+
tags = [
811+
],
806812
deps = [
807813
":evaluation_exception",
808814
":unknown_attributes_android",
@@ -817,14 +823,14 @@ java_library(
817823
tags = [
818824
],
819825
deps = [
826+
":async_options",
820827
":descriptor_type_resolver",
821828
":dispatcher",
822829
":evaluation_exception",
823830
":evaluation_listener",
824831
":function_binding",
825832
":function_resolver",
826833
":partial_vars",
827-
":program",
828834
":proto_message_runtime_equality",
829835
":runtime",
830836
":runtime_equality",
@@ -922,6 +928,7 @@ java_library(
922928
],
923929
deps = [
924930
":activation",
931+
":async_options",
925932
":evaluation_exception",
926933
":evaluation_listener",
927934
":function_binding",
@@ -946,6 +953,7 @@ java_library(
946953
"@maven//:com_google_errorprone_error_prone_annotations",
947954
"@maven//:com_google_guava_guava",
948955
"@maven//:com_google_protobuf_protobuf_java",
956+
"@maven//:org_jspecify_jspecify",
949957
],
950958
)
951959

@@ -1277,17 +1285,130 @@ cel_android_library(
12771285
],
12781286
)
12791287

1288+
java_library(
1289+
name = "async_call",
1290+
srcs = ["CelAsyncCall.java"],
1291+
tags = [
1292+
],
1293+
deps = [
1294+
"@maven//:com_google_guava_guava",
1295+
],
1296+
)
1297+
1298+
cel_android_library(
1299+
name = "async_call_android",
1300+
srcs = ["CelAsyncCall.java"],
1301+
tags = [
1302+
],
1303+
deps = [
1304+
"@maven_android//:com_google_guava_guava",
1305+
],
1306+
)
1307+
1308+
java_library(
1309+
name = "async_drain_strategy",
1310+
srcs = [
1311+
"CelAsyncDrainAction.java",
1312+
"CelAsyncDrainStrategy.java",
1313+
],
1314+
tags = [
1315+
],
1316+
deps = [
1317+
":async_call",
1318+
"//:auto_value",
1319+
"@maven//:com_google_errorprone_error_prone_annotations",
1320+
"@maven//:com_google_guava_guava",
1321+
],
1322+
)
1323+
1324+
cel_android_library(
1325+
name = "async_drain_strategy_android",
1326+
srcs = [
1327+
"CelAsyncDrainAction.java",
1328+
"CelAsyncDrainStrategy.java",
1329+
],
1330+
tags = [
1331+
],
1332+
deps = [
1333+
":async_call_android",
1334+
"//:auto_value",
1335+
"@maven//:com_google_errorprone_error_prone_annotations",
1336+
"@maven_android//:com_google_guava_guava",
1337+
],
1338+
)
1339+
1340+
java_library(
1341+
name = "async_observer",
1342+
srcs = ["CelAsyncObserver.java"],
1343+
tags = [
1344+
],
1345+
deps = [
1346+
":async_call",
1347+
"@maven//:com_google_code_findbugs_annotations",
1348+
"@maven//:com_google_errorprone_error_prone_annotations",
1349+
"@maven//:org_jspecify_jspecify",
1350+
],
1351+
)
1352+
1353+
cel_android_library(
1354+
name = "async_observer_android",
1355+
srcs = ["CelAsyncObserver.java"],
1356+
tags = [
1357+
],
1358+
deps = [
1359+
":async_call_android",
1360+
"@maven//:com_google_code_findbugs_annotations",
1361+
"@maven//:com_google_errorprone_error_prone_annotations",
1362+
"@maven//:org_jspecify_jspecify",
1363+
],
1364+
)
1365+
1366+
java_library(
1367+
name = "async_options",
1368+
srcs = ["CelAsyncEvaluationOptions.java"],
1369+
tags = [
1370+
],
1371+
deps = [
1372+
":async_drain_strategy",
1373+
":async_observer",
1374+
"//:auto_value",
1375+
"@maven//:com_google_code_findbugs_annotations",
1376+
"@maven//:com_google_errorprone_error_prone_annotations",
1377+
"@maven//:org_jspecify_jspecify",
1378+
],
1379+
)
1380+
1381+
cel_android_library(
1382+
name = "async_options_android",
1383+
srcs = ["CelAsyncEvaluationOptions.java"],
1384+
tags = [
1385+
],
1386+
deps = [
1387+
":async_drain_strategy_android",
1388+
":async_observer_android",
1389+
"//:auto_value",
1390+
"@maven//:com_google_code_findbugs_annotations",
1391+
"@maven//:com_google_errorprone_error_prone_annotations",
1392+
"@maven//:org_jspecify_jspecify",
1393+
],
1394+
)
1395+
12801396
java_library(
12811397
name = "program",
12821398
srcs = ["Program.java"],
12831399
tags = [
12841400
],
12851401
deps = [
1402+
":activation",
1403+
":async_options",
12861404
":evaluation_exception",
12871405
":function_resolver",
1406+
":interpretable",
12881407
":partial_vars",
12891408
":variable_resolver",
12901409
"@maven//:com_google_errorprone_error_prone_annotations",
1410+
"@maven//:com_google_guava_guava",
1411+
"@maven//:org_jspecify_jspecify",
12911412
],
12921413
)
12931414

@@ -1297,11 +1418,16 @@ cel_android_library(
12971418
tags = [
12981419
],
12991420
deps = [
1421+
":activation_android",
1422+
":async_options_android",
13001423
":evaluation_exception",
13011424
":function_resolver_android",
1425+
":interpretable_android",
13021426
":partial_vars_android",
13031427
":variable_resolver",
13041428
"@maven//:com_google_errorprone_error_prone_annotations",
1429+
"@maven//:org_jspecify_jspecify",
1430+
"@maven_android//:com_google_guava_guava",
13051431
],
13061432
)
13071433

0 commit comments

Comments
 (0)