modal 1.1.5.dev73__py3-none-any.whl → 1.1.5.dev75__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of modal might be problematic. Click here for more details.
- modal/_runtime/container_io_manager.py +4 -0
- modal/app.py +0 -6
- modal/app.pyi +0 -4
- modal/client.pyi +2 -2
- modal/functions.pyi +6 -6
- {modal-1.1.5.dev73.dist-info → modal-1.1.5.dev75.dist-info}/METADATA +1 -1
- {modal-1.1.5.dev73.dist-info → modal-1.1.5.dev75.dist-info}/RECORD +15 -15
- modal_proto/api.proto +1 -1
- modal_proto/api_pb2.py +201 -201
- modal_proto/api_pb2.pyi +1 -4
- modal_version/__init__.py +1 -1
- {modal-1.1.5.dev73.dist-info → modal-1.1.5.dev75.dist-info}/WHEEL +0 -0
- {modal-1.1.5.dev73.dist-info → modal-1.1.5.dev75.dist-info}/entry_points.txt +0 -0
- {modal-1.1.5.dev73.dist-info → modal-1.1.5.dev75.dist-info}/licenses/LICENSE +0 -0
- {modal-1.1.5.dev73.dist-info → modal-1.1.5.dev75.dist-info}/top_level.txt +0 -0
|
@@ -278,11 +278,13 @@ class IOContext:
|
|
|
278
278
|
logger.debug(f"Finished generator input {self.input_ids}")
|
|
279
279
|
|
|
280
280
|
async def output_items_cancellation(self, started_at: float):
|
|
281
|
+
output_created_at = time.time()
|
|
281
282
|
# Create terminated outputs for these inputs to signal that the cancellations have been completed.
|
|
282
283
|
return [
|
|
283
284
|
api_pb2.FunctionPutOutputsItem(
|
|
284
285
|
input_id=input_id,
|
|
285
286
|
input_started_at=started_at,
|
|
287
|
+
output_created_at=output_created_at,
|
|
286
288
|
result=api_pb2.GenericResult(status=api_pb2.GenericResult.GENERIC_STATUS_TERMINATED),
|
|
287
289
|
retry_count=retry_count,
|
|
288
290
|
)
|
|
@@ -354,10 +356,12 @@ class IOContext:
|
|
|
354
356
|
}
|
|
355
357
|
|
|
356
358
|
# all inputs in the batch get the same failure:
|
|
359
|
+
output_created_at = time.time()
|
|
357
360
|
return [
|
|
358
361
|
api_pb2.FunctionPutOutputsItem(
|
|
359
362
|
input_id=input_id,
|
|
360
363
|
input_started_at=started_at,
|
|
364
|
+
output_created_at=output_created_at,
|
|
361
365
|
retry_count=retry_count,
|
|
362
366
|
**data_format_specific_output(function_input.data_format),
|
|
363
367
|
)
|
modal/app.py
CHANGED
|
@@ -677,7 +677,6 @@ class _App:
|
|
|
677
677
|
concurrency_limit: Optional[int] = None, # Replaced with `max_containers`
|
|
678
678
|
container_idle_timeout: Optional[int] = None, # Replaced with `scaledown_window`
|
|
679
679
|
allow_concurrent_inputs: Optional[int] = None, # Replaced with the `@modal.concurrent` decorator
|
|
680
|
-
allow_cross_region_volumes: Optional[bool] = None, # Always True on the Modal backend now
|
|
681
680
|
_experimental_buffer_containers: Optional[int] = None, # Now stable API with `buffer_containers`
|
|
682
681
|
) -> _FunctionDecoratorType:
|
|
683
682
|
"""Decorator to register a new Modal Function with this App."""
|
|
@@ -697,8 +696,6 @@ class _App:
|
|
|
697
696
|
" Please use the `@modal.concurrent` decorator instead."
|
|
698
697
|
"\n\nSee https://modal.com/docs/guide/modal-1-0-migration for more information.",
|
|
699
698
|
)
|
|
700
|
-
if allow_cross_region_volumes is not None:
|
|
701
|
-
deprecation_warning((2025, 4, 23), "The `allow_cross_region_volumes` parameter no longer has any effect.")
|
|
702
699
|
|
|
703
700
|
secrets = secrets or []
|
|
704
701
|
if env:
|
|
@@ -908,7 +905,6 @@ class _App:
|
|
|
908
905
|
container_idle_timeout: Optional[int] = None, # Replaced with `scaledown_window`
|
|
909
906
|
allow_concurrent_inputs: Optional[int] = None, # Replaced with the `@modal.concurrent` decorator
|
|
910
907
|
_experimental_buffer_containers: Optional[int] = None, # Now stable API with `buffer_containers`
|
|
911
|
-
allow_cross_region_volumes: Optional[bool] = None, # Always True on the Modal backend now
|
|
912
908
|
) -> Callable[[Union[CLS_T, _PartialFunction]], CLS_T]:
|
|
913
909
|
"""
|
|
914
910
|
Decorator to register a new Modal [Cls](https://modal.com/docs/reference/modal.Cls) with this App.
|
|
@@ -929,8 +925,6 @@ class _App:
|
|
|
929
925
|
" Please use the `@modal.concurrent` decorator instead."
|
|
930
926
|
"\n\nSee https://modal.com/docs/guide/modal-1-0-migration for more information.",
|
|
931
927
|
)
|
|
932
|
-
if allow_cross_region_volumes is not None:
|
|
933
|
-
deprecation_warning((2025, 4, 23), "The `allow_cross_region_volumes` parameter no longer has any effect.")
|
|
934
928
|
|
|
935
929
|
secrets = secrets or []
|
|
936
930
|
if env:
|
modal/app.pyi
CHANGED
|
@@ -434,7 +434,6 @@ class _App:
|
|
|
434
434
|
concurrency_limit: typing.Optional[int] = None,
|
|
435
435
|
container_idle_timeout: typing.Optional[int] = None,
|
|
436
436
|
allow_concurrent_inputs: typing.Optional[int] = None,
|
|
437
|
-
allow_cross_region_volumes: typing.Optional[bool] = None,
|
|
438
437
|
_experimental_buffer_containers: typing.Optional[int] = None,
|
|
439
438
|
) -> _FunctionDecoratorType:
|
|
440
439
|
"""Decorator to register a new Modal Function with this App."""
|
|
@@ -489,7 +488,6 @@ class _App:
|
|
|
489
488
|
container_idle_timeout: typing.Optional[int] = None,
|
|
490
489
|
allow_concurrent_inputs: typing.Optional[int] = None,
|
|
491
490
|
_experimental_buffer_containers: typing.Optional[int] = None,
|
|
492
|
-
allow_cross_region_volumes: typing.Optional[bool] = None,
|
|
493
491
|
) -> collections.abc.Callable[[typing.Union[CLS_T, modal._partial_function._PartialFunction]], CLS_T]:
|
|
494
492
|
"""Decorator to register a new Modal [Cls](https://modal.com/docs/reference/modal.Cls) with this App."""
|
|
495
493
|
...
|
|
@@ -1048,7 +1046,6 @@ class App:
|
|
|
1048
1046
|
concurrency_limit: typing.Optional[int] = None,
|
|
1049
1047
|
container_idle_timeout: typing.Optional[int] = None,
|
|
1050
1048
|
allow_concurrent_inputs: typing.Optional[int] = None,
|
|
1051
|
-
allow_cross_region_volumes: typing.Optional[bool] = None,
|
|
1052
1049
|
_experimental_buffer_containers: typing.Optional[int] = None,
|
|
1053
1050
|
) -> _FunctionDecoratorType:
|
|
1054
1051
|
"""Decorator to register a new Modal Function with this App."""
|
|
@@ -1103,7 +1100,6 @@ class App:
|
|
|
1103
1100
|
container_idle_timeout: typing.Optional[int] = None,
|
|
1104
1101
|
allow_concurrent_inputs: typing.Optional[int] = None,
|
|
1105
1102
|
_experimental_buffer_containers: typing.Optional[int] = None,
|
|
1106
|
-
allow_cross_region_volumes: typing.Optional[bool] = None,
|
|
1107
1103
|
) -> collections.abc.Callable[[typing.Union[CLS_T, modal.partial_function.PartialFunction]], CLS_T]:
|
|
1108
1104
|
"""Decorator to register a new Modal [Cls](https://modal.com/docs/reference/modal.Cls) with this App."""
|
|
1109
1105
|
...
|
modal/client.pyi
CHANGED
|
@@ -33,7 +33,7 @@ class _Client:
|
|
|
33
33
|
server_url: str,
|
|
34
34
|
client_type: int,
|
|
35
35
|
credentials: typing.Optional[tuple[str, str]],
|
|
36
|
-
version: str = "1.1.5.
|
|
36
|
+
version: str = "1.1.5.dev75",
|
|
37
37
|
):
|
|
38
38
|
"""mdmd:hidden
|
|
39
39
|
The Modal client object is not intended to be instantiated directly by users.
|
|
@@ -164,7 +164,7 @@ class Client:
|
|
|
164
164
|
server_url: str,
|
|
165
165
|
client_type: int,
|
|
166
166
|
credentials: typing.Optional[tuple[str, str]],
|
|
167
|
-
version: str = "1.1.5.
|
|
167
|
+
version: str = "1.1.5.dev75",
|
|
168
168
|
):
|
|
169
169
|
"""mdmd:hidden
|
|
170
170
|
The Modal client object is not intended to be instantiated directly by users.
|
modal/functions.pyi
CHANGED
|
@@ -401,7 +401,7 @@ class Function(
|
|
|
401
401
|
|
|
402
402
|
_call_generator: ___call_generator_spec[typing_extensions.Self]
|
|
403
403
|
|
|
404
|
-
class __remote_spec(typing_extensions.Protocol[
|
|
404
|
+
class __remote_spec(typing_extensions.Protocol[ReturnType_INNER, P_INNER, SUPERSELF]):
|
|
405
405
|
def __call__(self, /, *args: P_INNER.args, **kwargs: P_INNER.kwargs) -> ReturnType_INNER:
|
|
406
406
|
"""Calls the function remotely, executing it with the given arguments and returning the execution's result."""
|
|
407
407
|
...
|
|
@@ -410,7 +410,7 @@ class Function(
|
|
|
410
410
|
"""Calls the function remotely, executing it with the given arguments and returning the execution's result."""
|
|
411
411
|
...
|
|
412
412
|
|
|
413
|
-
remote: __remote_spec[modal._functions.
|
|
413
|
+
remote: __remote_spec[modal._functions.ReturnType, modal._functions.P, typing_extensions.Self]
|
|
414
414
|
|
|
415
415
|
class __remote_gen_spec(typing_extensions.Protocol[SUPERSELF]):
|
|
416
416
|
def __call__(self, /, *args, **kwargs) -> typing.Generator[typing.Any, None, None]:
|
|
@@ -437,7 +437,7 @@ class Function(
|
|
|
437
437
|
"""
|
|
438
438
|
...
|
|
439
439
|
|
|
440
|
-
class ___experimental_spawn_spec(typing_extensions.Protocol[
|
|
440
|
+
class ___experimental_spawn_spec(typing_extensions.Protocol[ReturnType_INNER, P_INNER, SUPERSELF]):
|
|
441
441
|
def __call__(self, /, *args: P_INNER.args, **kwargs: P_INNER.kwargs) -> FunctionCall[ReturnType_INNER]:
|
|
442
442
|
"""[Experimental] Calls the function with the given arguments, without waiting for the results.
|
|
443
443
|
|
|
@@ -461,7 +461,7 @@ class Function(
|
|
|
461
461
|
...
|
|
462
462
|
|
|
463
463
|
_experimental_spawn: ___experimental_spawn_spec[
|
|
464
|
-
modal._functions.
|
|
464
|
+
modal._functions.ReturnType, modal._functions.P, typing_extensions.Self
|
|
465
465
|
]
|
|
466
466
|
|
|
467
467
|
class ___spawn_map_inner_spec(typing_extensions.Protocol[P_INNER, SUPERSELF]):
|
|
@@ -470,7 +470,7 @@ class Function(
|
|
|
470
470
|
|
|
471
471
|
_spawn_map_inner: ___spawn_map_inner_spec[modal._functions.P, typing_extensions.Self]
|
|
472
472
|
|
|
473
|
-
class __spawn_spec(typing_extensions.Protocol[
|
|
473
|
+
class __spawn_spec(typing_extensions.Protocol[ReturnType_INNER, P_INNER, SUPERSELF]):
|
|
474
474
|
def __call__(self, /, *args: P_INNER.args, **kwargs: P_INNER.kwargs) -> FunctionCall[ReturnType_INNER]:
|
|
475
475
|
"""Calls the function with the given arguments, without waiting for the results.
|
|
476
476
|
|
|
@@ -491,7 +491,7 @@ class Function(
|
|
|
491
491
|
"""
|
|
492
492
|
...
|
|
493
493
|
|
|
494
|
-
spawn: __spawn_spec[modal._functions.
|
|
494
|
+
spawn: __spawn_spec[modal._functions.ReturnType, modal._functions.P, typing_extensions.Self]
|
|
495
495
|
|
|
496
496
|
def get_raw_f(self) -> collections.abc.Callable[..., typing.Any]:
|
|
497
497
|
"""Return the inner Python object wrapped by this Modal Function."""
|
|
@@ -18,11 +18,11 @@ modal/_tunnel.py,sha256=zTBxBiuH1O22tS1OliAJdIsSmaZS8PlnifS_6S5z-mk,6320
|
|
|
18
18
|
modal/_tunnel.pyi,sha256=rvC7USR2BcKkbZIeCJXwf7-UfGE-LPLjKsGNiK7Lxa4,13366
|
|
19
19
|
modal/_type_manager.py,sha256=DWjgmjYJuOagw2erin506UUbG2H5UzZCFEekS-7hmfA,9087
|
|
20
20
|
modal/_watcher.py,sha256=K6LYnlmSGQB4tWWI9JADv-tvSvQ1j522FwT71B51CX8,3584
|
|
21
|
-
modal/app.py,sha256=
|
|
22
|
-
modal/app.pyi,sha256=
|
|
21
|
+
modal/app.py,sha256=zjRWTevpIIzAELw2O_xG9NJ-SkFRCcPpDUZ7msTrk7A,49097
|
|
22
|
+
modal/app.pyi,sha256=4QyptueFsCNOq0veUh0kJEWxRThiEHjALJ-9kC4ig8g,44455
|
|
23
23
|
modal/call_graph.py,sha256=1g2DGcMIJvRy-xKicuf63IVE98gJSnQsr8R_NVMptNc,2581
|
|
24
24
|
modal/client.py,sha256=kyAIVB3Ay-XKJizQ_1ufUFB__EagV0MLmHJpyYyJ7J0,18636
|
|
25
|
-
modal/client.pyi,sha256=
|
|
25
|
+
modal/client.pyi,sha256=quGXgVMrx15OwyJO0mP4riYv6Vd5ScE-YKCeF89aZSs,15831
|
|
26
26
|
modal/cloud_bucket_mount.py,sha256=I2GRXYhOWLIz2kJZjXu75jAm9EJkBNcutGc6jR2ReUw,5928
|
|
27
27
|
modal/cloud_bucket_mount.pyi,sha256=VuUOipMIHqFXMkD-3g2bsoqpSxV5qswlFHDOqPQzYAo,7405
|
|
28
28
|
modal/cls.py,sha256=IZG9gLlssbhTgIn6iSEmBSKkbbkst3skASMae-59FII,40239
|
|
@@ -39,7 +39,7 @@ modal/file_io.py,sha256=OSKr77TujcXGJW1iikzYiHckLSmv07QBgBHcxxYEkoI,21456
|
|
|
39
39
|
modal/file_io.pyi,sha256=xtO6Glf_BFwDE7QiQQo24QqcMf_Vv-iz7WojcGVlLBU,15932
|
|
40
40
|
modal/file_pattern_matcher.py,sha256=A_Kdkej6q7YQyhM_2-BvpFmPqJ0oHb54B6yf9VqvPVE,8116
|
|
41
41
|
modal/functions.py,sha256=kcNHvqeGBxPI7Cgd57NIBBghkfbeFJzXO44WW0jSmao,325
|
|
42
|
-
modal/functions.pyi,sha256=
|
|
42
|
+
modal/functions.pyi,sha256=Z6VuukLrjASAgf0kV9I6c09WvP_b2gCujX6f9j2bBaw,37988
|
|
43
43
|
modal/gpu.py,sha256=Fe5ORvVPDIstSq1xjmM6OoNgLYFWvogP9r5BgmD3hYg,6769
|
|
44
44
|
modal/image.py,sha256=MN5-pEmj-i66_XUxHo_z_VIu6KD186dF70417KKiRt0,106712
|
|
45
45
|
modal/image.pyi,sha256=Ba7rdjbktmibwG9yLf3SMRWycw34V8SScG-Krakx1Yk,76506
|
|
@@ -82,7 +82,7 @@ modal/volume.py,sha256=LNfy3GZVuPZdG9LaBjHiLtpw2OdKpuOfOvw6bK1yKT8,51798
|
|
|
82
82
|
modal/volume.pyi,sha256=Fgq-QDo4iwWO-CFAgG879AbbyBuSvwOaIRbGclcTQik,51972
|
|
83
83
|
modal/_runtime/__init__.py,sha256=MIEP8jhXUeGq_eCjYFcqN5b1bxBM4fdk0VESpjWR0fc,28
|
|
84
84
|
modal/_runtime/asgi.py,sha256=AOcduIlijmlxhXVWo7AIUhigo-bqm6nDkHj4Q4JLy6o,22607
|
|
85
|
-
modal/_runtime/container_io_manager.py,sha256=
|
|
85
|
+
modal/_runtime/container_io_manager.py,sha256=Q3JUEYrsfWsG0DuuVUiYXAUccfb8RhM8ExQEQJXR0nc,52200
|
|
86
86
|
modal/_runtime/container_io_manager.pyi,sha256=GDNLirCcPMRc6gckInYKmGmJZY3LNcgUVXKftt9P9jI,23493
|
|
87
87
|
modal/_runtime/execution_context.py,sha256=AYrNQRHHXEqX2MwMf8zxelKZnYf25RE_B-NRLWf93n8,3521
|
|
88
88
|
modal/_runtime/execution_context.pyi,sha256=FVzakehz72ndL-ufe8-EC7TM4IHO_MEBcAdgWuU4W9k,2426
|
|
@@ -153,7 +153,7 @@ modal/experimental/__init__.py,sha256=9gkVuDmu3m4TlKoU3MzEtTOemUSs8EEOWba40s7Aa0
|
|
|
153
153
|
modal/experimental/flash.py,sha256=C4sef08rARYFllsgtqukFmYL18SZW0_JpMS0BejDcUs,28552
|
|
154
154
|
modal/experimental/flash.pyi,sha256=vV_OQhtdrPn8SW0XrBK-aLLHHIvxAzLzwFbWrke-m74,15463
|
|
155
155
|
modal/experimental/ipython.py,sha256=TrCfmol9LGsRZMeDoeMPx3Hv3BFqQhYnmD_iH0pqdhk,2904
|
|
156
|
-
modal-1.1.5.
|
|
156
|
+
modal-1.1.5.dev75.dist-info/licenses/LICENSE,sha256=psuoW8kuDP96RQsdhzwOqi6fyWv0ct8CR6Jr7He_P_k,10173
|
|
157
157
|
modal_docs/__init__.py,sha256=svYKtV8HDwDCN86zbdWqyq5T8sMdGDj0PVlzc2tIxDM,28
|
|
158
158
|
modal_docs/gen_cli_docs.py,sha256=c1yfBS_x--gL5bs0N4ihMwqwX8l3IBWSkBAKNNIi6bQ,3801
|
|
159
159
|
modal_docs/gen_reference_docs.py,sha256=d_CQUGQ0rfw28u75I2mov9AlS773z9rG40-yq5o7g2U,6359
|
|
@@ -161,10 +161,10 @@ modal_docs/mdmd/__init__.py,sha256=svYKtV8HDwDCN86zbdWqyq5T8sMdGDj0PVlzc2tIxDM,2
|
|
|
161
161
|
modal_docs/mdmd/mdmd.py,sha256=tUTImNd4UMFk1opkaw8J672gX8AkBO5gbY2S_NMxsxs,7140
|
|
162
162
|
modal_docs/mdmd/signatures.py,sha256=XJaZrK7Mdepk5fdX51A8uENiLFNil85Ud0d4MH8H5f0,3218
|
|
163
163
|
modal_proto/__init__.py,sha256=MIEP8jhXUeGq_eCjYFcqN5b1bxBM4fdk0VESpjWR0fc,28
|
|
164
|
-
modal_proto/api.proto,sha256=
|
|
164
|
+
modal_proto/api.proto,sha256=jZKRqVp3OpGAzwLy3-jpjLNQtNtwRnzRA4t3o50uLXw,110065
|
|
165
165
|
modal_proto/api_grpc.py,sha256=9TqN2bHcV7ZEP60ldkVTC2o-K0jkTHKWslh2STXpNTY,133937
|
|
166
|
-
modal_proto/api_pb2.py,sha256=
|
|
167
|
-
modal_proto/api_pb2.pyi,sha256=
|
|
166
|
+
modal_proto/api_pb2.py,sha256=GVp43WSNAk-DKOxqTRG-5AKntsMz8BLHv7SgKA6HQGQ,384208
|
|
167
|
+
modal_proto/api_pb2.pyi,sha256=7cBXzbkeJ4tfIx_ezdFz7GipHLrAWniA-l4cgULEdHo,529383
|
|
168
168
|
modal_proto/api_pb2_grpc.py,sha256=GCo6ufBw9V7qG29b3jCVSSoe4Xycts-CMPWBorXzcDg,288332
|
|
169
169
|
modal_proto/api_pb2_grpc.pyi,sha256=EWqb1fKFaJvPj121E43vNHo2Q_fmk_M12KsD7blfnQU,67619
|
|
170
170
|
modal_proto/modal_api_grpc.py,sha256=_hyeMTOf-DnSFWRo0n4tphZtswWuSB0-rnF9hmJFAKw,20190
|
|
@@ -182,10 +182,10 @@ modal_proto/sandbox_router_pb2.py,sha256=INd9izYaIYqllESQt4MSv2Rj9Hf5bMjAvtCc9b4
|
|
|
182
182
|
modal_proto/sandbox_router_pb2.pyi,sha256=YCK0WnCgRos3-p7t4USQQ7x6WAuM278yeQX2IeU5mLg,13295
|
|
183
183
|
modal_proto/sandbox_router_pb2_grpc.py,sha256=zonC5flvCwxeZYJPENj1IJo2Mr0J58DpoC1_8IdPYik,8243
|
|
184
184
|
modal_proto/sandbox_router_pb2_grpc.pyi,sha256=4QgCB9b7_ykvH8YD-hfnogVH9CLyHVDC5QNb03l4_X8,2735
|
|
185
|
-
modal_version/__init__.py,sha256=
|
|
185
|
+
modal_version/__init__.py,sha256=KCuzWmx96PWRqEEKHFU0igMK-pzgXJz6hDwOmyhmIys,121
|
|
186
186
|
modal_version/__main__.py,sha256=2FO0yYQQwDTh6udt1h-cBnGd1c4ZyHnHSI4BksxzVac,105
|
|
187
|
-
modal-1.1.5.
|
|
188
|
-
modal-1.1.5.
|
|
189
|
-
modal-1.1.5.
|
|
190
|
-
modal-1.1.5.
|
|
191
|
-
modal-1.1.5.
|
|
187
|
+
modal-1.1.5.dev75.dist-info/METADATA,sha256=3Pg1n4NhwKZCGvZCUq77GgJivFFaosZl2MwM7AMyZ8k,2481
|
|
188
|
+
modal-1.1.5.dev75.dist-info/WHEEL,sha256=1tXe9gY0PYatrMPMDd6jXqjfpz_B-Wqm32CPfRC58XU,91
|
|
189
|
+
modal-1.1.5.dev75.dist-info/entry_points.txt,sha256=An-wYgeEUnm6xzrAP9_NTSTSciYvvEWsMZILtYrvpAI,46
|
|
190
|
+
modal-1.1.5.dev75.dist-info/top_level.txt,sha256=4BWzoKYREKUZ5iyPzZpjqx4G8uB5TWxXPDwibLcVa7k,43
|
|
191
|
+
modal-1.1.5.dev75.dist-info/RECORD,,
|
modal_proto/api.proto
CHANGED
|
@@ -3096,7 +3096,7 @@ message SharedVolumeMount {
|
|
|
3096
3096
|
string mount_path = 1;
|
|
3097
3097
|
string shared_volume_id = 2;
|
|
3098
3098
|
CloudProvider cloud_provider = 3;
|
|
3099
|
-
|
|
3099
|
+
reserved 4; // allow_cross_region
|
|
3100
3100
|
}
|
|
3101
3101
|
|
|
3102
3102
|
message SharedVolumePutFileRequest {
|