Skip to content

Commit 8126edb

Browse files
l46kokcopybara-github
authored andcommitted
Add async concurrency and state management primitives
PiperOrigin-RevId: 974934413
1 parent a2353b3 commit 8126edb

31 files changed

Lines changed: 2975 additions & 33 deletions

.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: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,3 +21,27 @@ 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_gate",
27+
visibility = ["//:internal"],
28+
exports = ["//runtime/src/main/java/dev/cel/runtime/planner:async_gate"],
29+
)
30+
31+
cel_android_library(
32+
name = "async_gate_android",
33+
visibility = ["//:internal"],
34+
exports = ["//runtime/src/main/java/dev/cel/runtime/planner:async_gate_android"],
35+
)
36+
37+
java_library(
38+
name = "async_completion_coordinator",
39+
visibility = ["//:internal"],
40+
exports = ["//runtime/src/main/java/dev/cel/runtime/planner:async_completion_coordinator"],
41+
)
42+
43+
cel_android_library(
44+
name = "async_completion_coordinator_android",
45+
visibility = ["//:internal"],
46+
exports = ["//runtime/src/main/java/dev/cel/runtime/planner:async_completion_coordinator_android"],
47+
)

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

Lines changed: 122 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -784,6 +784,7 @@ cel_android_library(
784784
java_library(
785785
name = "function_overload",
786786
srcs = [
787+
"CelAsyncFunctionOverload.java",
787788
"CelFunctionOverload.java",
788789
"OptimizedFunctionOverload.java",
789790
],
@@ -800,9 +801,12 @@ java_library(
800801
cel_android_library(
801802
name = "function_overload_android",
802803
srcs = [
804+
"CelAsyncFunctionOverload.java",
803805
"CelFunctionOverload.java",
804806
"OptimizedFunctionOverload.java",
805807
],
808+
tags = [
809+
],
806810
deps = [
807811
":evaluation_exception",
808812
":unknown_attributes_android",
@@ -817,6 +821,7 @@ java_library(
817821
tags = [
818822
],
819823
deps = [
824+
":async_options",
820825
":descriptor_type_resolver",
821826
":dispatcher",
822827
":evaluation_exception",
@@ -850,7 +855,6 @@ java_library(
850855
"//runtime:activation",
851856
"//runtime:interpretable",
852857
"//runtime:proto_message_activation_factory",
853-
"//runtime:resolved_overload",
854858
"//runtime/planner:planned_program",
855859
"//runtime/planner:program_planner",
856860
"//runtime/standard:type",
@@ -867,6 +871,7 @@ java_library(
867871
tags = [
868872
],
869873
deps = [
874+
":async_options",
870875
":descriptor_message_provider",
871876
":descriptor_type_resolver",
872877
":dispatcher",
@@ -922,6 +927,7 @@ java_library(
922927
],
923928
deps = [
924929
":activation",
930+
":async_options",
925931
":evaluation_exception",
926932
":evaluation_listener",
927933
":function_binding",
@@ -946,6 +952,7 @@ java_library(
946952
"@maven//:com_google_errorprone_error_prone_annotations",
947953
"@maven//:com_google_guava_guava",
948954
"@maven//:com_google_protobuf_protobuf_java",
955+
"@maven//:org_jspecify_jspecify",
949956
],
950957
)
951958

@@ -1277,6 +1284,118 @@ cel_android_library(
12771284
],
12781285
)
12791286

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

@@ -1302,6 +1422,7 @@ cel_android_library(
13021422
":partial_vars_android",
13031423
":variable_resolver",
13041424
"@maven//:com_google_errorprone_error_prone_annotations",
1425+
"@maven_android//:com_google_guava_guava",
13051426
],
13061427
)
13071428

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
// Copyright 2026 Google LLC
2+
//
3+
// Licensed under the Apache License, Version 2.0 (the "License");
4+
// you may not use this file except in compliance with the License.
5+
// You may obtain a copy of the License at
6+
//
7+
// https://www.apache.org/licenses/LICENSE-2.0
8+
//
9+
// Unless required by applicable law or agreed to in writing, software
10+
// distributed under the License is distributed on an "AS IS" BASIS,
11+
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12+
// See the License for the specific language governing permissions and
13+
// limitations under the License.
14+
15+
package dev.cel.runtime;
16+
17+
import com.google.common.collect.ImmutableList;
18+
import javax.annotation.concurrent.ThreadSafe;
19+
import java.time.Duration;
20+
21+
/** Describes a pending or completed asynchronous function call. */
22+
@ThreadSafe
23+
public interface CelAsyncCall {
24+
25+
/** Returns the unique incremental tracking ID assigned to this call. */
26+
long callId();
27+
28+
/** Returns the AST expression node ID where the call is located. */
29+
long exprId();
30+
31+
/** Returns the name of the function being invoked. */
32+
String functionName();
33+
34+
/** Returns the specific overload ID being invoked. */
35+
String overloadId();
36+
37+
/** Returns the arguments passed to the function call. */
38+
ImmutableList<Object> arguments();
39+
40+
/** Returns the elapsed duration of the async function execution. */
41+
Duration elapsedDuration();
42+
}

0 commit comments

Comments
 (0)