diff --git a/java-batch/README.md b/java-batch/README.md
index aba4c4c168be..a5295a632f29 100644
--- a/java-batch/README.md
+++ b/java-batch/README.md
@@ -23,7 +23,7 @@ If you are using Maven with [BOM][libraries-bom], add this to your pom.xml file:
     <dependency>
       <groupId>com.google.cloud</groupId>
       <artifactId>libraries-bom</artifactId>
-      <version>26.11.0</version>
+      <version>26.14.0</version>
       <type>pom</type>
       <scope>import</scope>
     </dependency>
@@ -45,20 +45,20 @@ If you are using Maven without the BOM, add this to your dependencies:
 <dependency>
   <groupId>com.google.cloud</groupId>
   <artifactId>google-cloud-batch</artifactId>
-  <version>0.15.0</version>
+  <version>0.17.0</version>
 </dependency>
 ```
 
 If you are using Gradle without BOM, add this to your dependencies:
 
 ```Groovy
-implementation 'com.google.cloud:google-cloud-batch:0.15.0'
+implementation 'com.google.cloud:google-cloud-batch:0.17.0'
 ```
 
 If you are using SBT, add this to your dependencies:
 
 ```Scala
-libraryDependencies += "com.google.cloud" % "google-cloud-batch" % "0.15.0"
+libraryDependencies += "com.google.cloud" % "google-cloud-batch" % "0.17.0"
 ```
 <!-- {x-version-update-end} -->
 
@@ -201,7 +201,7 @@ Java is a registered trademark of Oracle and/or its affiliates.
 [kokoro-badge-link-5]: http://storage.googleapis.com/cloud-devrel-public/java/badges/google-cloud-java/java11.html
 [stability-image]: https://img.shields.io/badge/stability-preview-yellow
 [maven-version-image]: https://img.shields.io/maven-central/v/com.google.cloud/google-cloud-batch.svg
-[maven-version-link]: https://central.sonatype.com/artifact/com.google.cloud/google-cloud-batch/0.14.0
+[maven-version-link]: https://central.sonatype.com/artifact/com.google.cloud/google-cloud-batch/0.17.0
 [authentication]: https://github.com/googleapis/google-cloud-java#authentication
 [auth-scopes]: https://developers.google.com/identity/protocols/oauth2/scopes
 [predefined-iam-roles]: https://cloud.google.com/iam/docs/understanding-roles#predefined_roles
diff --git a/java-batch/google-cloud-batch/src/main/java/com/google/cloud/batch/v1alpha/BatchServiceClient.java b/java-batch/google-cloud-batch/src/main/java/com/google/cloud/batch/v1alpha/BatchServiceClient.java
index 38e88c9e596d..4188c25be0f5 100644
--- a/java-batch/google-cloud-batch/src/main/java/com/google/cloud/batch/v1alpha/BatchServiceClient.java
+++ b/java-batch/google-cloud-batch/src/main/java/com/google/cloud/batch/v1alpha/BatchServiceClient.java
@@ -616,6 +616,7 @@ public final ListJobsPagedResponse listJobs(String parent) {
    *       ListJobsRequest.newBuilder()
    *           .setParent("parent-995424086")
    *           .setFilter("filter-1274492040")
+   *           .setOrderBy("orderBy-1207110587")
    *           .setPageSize(883849137)
    *           .setPageToken("pageToken873572522")
    *           .build();
@@ -649,6 +650,7 @@ public final ListJobsPagedResponse listJobs(ListJobsRequest request) {
    *       ListJobsRequest.newBuilder()
    *           .setParent("parent-995424086")
    *           .setFilter("filter-1274492040")
+   *           .setOrderBy("orderBy-1207110587")
    *           .setPageSize(883849137)
    *           .setPageToken("pageToken873572522")
    *           .build();
@@ -681,6 +683,7 @@ public final UnaryCallable<ListJobsRequest, ListJobsPagedResponse> listJobsPaged
    *       ListJobsRequest.newBuilder()
    *           .setParent("parent-995424086")
    *           .setFilter("filter-1274492040")
+   *           .setOrderBy("orderBy-1207110587")
    *           .setPageSize(883849137)
    *           .setPageToken("pageToken873572522")
    *           .build();
@@ -894,6 +897,7 @@ public final ListTasksPagedResponse listTasks(String parent) {
    *           .setParent(
    *               TaskGroupName.of("[PROJECT]", "[LOCATION]", "[JOB]", "[TASK_GROUP]").toString())
    *           .setFilter("filter-1274492040")
+   *           .setOrderBy("orderBy-1207110587")
    *           .setPageSize(883849137)
    *           .setPageToken("pageToken873572522")
    *           .build();
@@ -928,6 +932,7 @@ public final ListTasksPagedResponse listTasks(ListTasksRequest request) {
    *           .setParent(
    *               TaskGroupName.of("[PROJECT]", "[LOCATION]", "[JOB]", "[TASK_GROUP]").toString())
    *           .setFilter("filter-1274492040")
+   *           .setOrderBy("orderBy-1207110587")
    *           .setPageSize(883849137)
    *           .setPageToken("pageToken873572522")
    *           .build();
@@ -961,6 +966,7 @@ public final UnaryCallable<ListTasksRequest, ListTasksPagedResponse> listTasksPa
    *           .setParent(
    *               TaskGroupName.of("[PROJECT]", "[LOCATION]", "[JOB]", "[TASK_GROUP]").toString())
    *           .setFilter("filter-1274492040")
+   *           .setOrderBy("orderBy-1207110587")
    *           .setPageSize(883849137)
    *           .setPageToken("pageToken873572522")
    *           .build();
diff --git a/java-batch/google-cloud-batch/src/main/java/com/google/cloud/batch/v1alpha/stub/HttpJsonBatchServiceStub.java b/java-batch/google-cloud-batch/src/main/java/com/google/cloud/batch/v1alpha/stub/HttpJsonBatchServiceStub.java
index 083def08cfe0..3ab510aefc49 100644
--- a/java-batch/google-cloud-batch/src/main/java/com/google/cloud/batch/v1alpha/stub/HttpJsonBatchServiceStub.java
+++ b/java-batch/google-cloud-batch/src/main/java/com/google/cloud/batch/v1alpha/stub/HttpJsonBatchServiceStub.java
@@ -208,6 +208,7 @@ public class HttpJsonBatchServiceStub extends BatchServiceStub {
                             ProtoRestSerializer<ListJobsRequest> serializer =
                                 ProtoRestSerializer.create();
                             serializer.putQueryParam(fields, "filter", request.getFilter());
+                            serializer.putQueryParam(fields, "orderBy", request.getOrderBy());
                             serializer.putQueryParam(fields, "pageSize", request.getPageSize());
                             serializer.putQueryParam(fields, "pageToken", request.getPageToken());
                             serializer.putQueryParam(fields, "$alt", "json;enum-encoding=int");
@@ -278,6 +279,7 @@ public class HttpJsonBatchServiceStub extends BatchServiceStub {
                             ProtoRestSerializer<ListTasksRequest> serializer =
                                 ProtoRestSerializer.create();
                             serializer.putQueryParam(fields, "filter", request.getFilter());
+                            serializer.putQueryParam(fields, "orderBy", request.getOrderBy());
                             serializer.putQueryParam(fields, "pageSize", request.getPageSize());
                             serializer.putQueryParam(fields, "pageToken", request.getPageToken());
                             serializer.putQueryParam(fields, "$alt", "json;enum-encoding=int");
@@ -423,16 +425,6 @@ protected HttpJsonBatchServiceStub(
             callableFactory,
             typeRegistry,
             ImmutableMap.<String, HttpRule>builder()
-                .put(
-                    "google.longrunning.Operations.CancelOperation",
-                    HttpRule.newBuilder()
-                        .setPost("/v1alpha/{name=projects/*/locations/*/operations/*}:cancel")
-                        .build())
-                .put(
-                    "google.longrunning.Operations.DeleteOperation",
-                    HttpRule.newBuilder()
-                        .setDelete("/v1alpha/{name=projects/*/locations/*/operations/*}")
-                        .build())
                 .put(
                     "google.longrunning.Operations.GetOperation",
                     HttpRule.newBuilder()
diff --git a/java-batch/proto-google-cloud-batch-v1alpha/src/main/java/com/google/cloud/batch/v1alpha/AllocationPolicy.java b/java-batch/proto-google-cloud-batch-v1alpha/src/main/java/com/google/cloud/batch/v1alpha/AllocationPolicy.java
index 725e9580c30b..f571cf16faef 100644
--- a/java-batch/proto-google-cloud-batch-v1alpha/src/main/java/com/google/cloud/batch/v1alpha/AllocationPolicy.java
+++ b/java-batch/proto-google-cloud-batch-v1alpha/src/main/java/com/google/cloud/batch/v1alpha/AllocationPolicy.java
@@ -1569,15 +1569,15 @@ public interface DiskOrBuilder
      * <pre>
      * Name of a public or custom image used as the data source.
      * For example, the following are all valid URLs:
-     * (1) Specify the image by its family name:
+     * * Specify the image by its family name:
      * projects/{project}/global/images/family/{image_family}
-     * (2) Specify the image version:
+     * * Specify the image version:
      * projects/{project}/global/images/{image_version}
      * You can also use Batch customized image in short names.
      * The following image values are supported for a boot disk:
-     * "batch-debian": use Batch Debian images.
-     * "batch-centos": use Batch CentOS images.
-     * "batch-cos": use Batch Container-Optimized images.
+     * * "batch-debian": use Batch Debian images.
+     * * "batch-centos": use Batch CentOS images.
+     * * "batch-cos": use Batch Container-Optimized images.
      * </pre>
      *
      * <code>string image = 4;</code>
@@ -1591,15 +1591,15 @@ public interface DiskOrBuilder
      * <pre>
      * Name of a public or custom image used as the data source.
      * For example, the following are all valid URLs:
-     * (1) Specify the image by its family name:
+     * * Specify the image by its family name:
      * projects/{project}/global/images/family/{image_family}
-     * (2) Specify the image version:
+     * * Specify the image version:
      * projects/{project}/global/images/{image_version}
      * You can also use Batch customized image in short names.
      * The following image values are supported for a boot disk:
-     * "batch-debian": use Batch Debian images.
-     * "batch-centos": use Batch CentOS images.
-     * "batch-cos": use Batch Container-Optimized images.
+     * * "batch-debian": use Batch Debian images.
+     * * "batch-centos": use Batch CentOS images.
+     * * "batch-cos": use Batch Container-Optimized images.
      * </pre>
      *
      * <code>string image = 4;</code>
@@ -1613,15 +1613,15 @@ public interface DiskOrBuilder
      * <pre>
      * Name of a public or custom image used as the data source.
      * For example, the following are all valid URLs:
-     * (1) Specify the image by its family name:
+     * * Specify the image by its family name:
      * projects/{project}/global/images/family/{image_family}
-     * (2) Specify the image version:
+     * * Specify the image version:
      * projects/{project}/global/images/{image_version}
      * You can also use Batch customized image in short names.
      * The following image values are supported for a boot disk:
-     * "batch-debian": use Batch Debian images.
-     * "batch-centos": use Batch CentOS images.
-     * "batch-cos": use Batch Container-Optimized images.
+     * * "batch-debian": use Batch Debian images.
+     * * "batch-centos": use Batch CentOS images.
+     * * "batch-cos": use Batch Container-Optimized images.
      * </pre>
      *
      * <code>string image = 4;</code>
@@ -1635,6 +1635,7 @@ public interface DiskOrBuilder
      *
      * <pre>
      * Name of a snapshot used as the data source.
+     * Snapshot is not supported as boot disk now.
      * </pre>
      *
      * <code>string snapshot = 5;</code>
@@ -1647,6 +1648,7 @@ public interface DiskOrBuilder
      *
      * <pre>
      * Name of a snapshot used as the data source.
+     * Snapshot is not supported as boot disk now.
      * </pre>
      *
      * <code>string snapshot = 5;</code>
@@ -1659,6 +1661,7 @@ public interface DiskOrBuilder
      *
      * <pre>
      * Name of a snapshot used as the data source.
+     * Snapshot is not supported as boot disk now.
      * </pre>
      *
      * <code>string snapshot = 5;</code>
@@ -1756,7 +1759,7 @@ public interface DiskOrBuilder
    * <pre>
    * A new persistent disk or a local ssd.
    * A VM can only have one local SSD setting but multiple local SSD partitions.
-   * https://cloud.google.com/compute/docs/disks#pdspecs.
+   * See https://cloud.google.com/compute/docs/disks#pdspecs and
    * https://cloud.google.com/compute/docs/disks#localssds.
    * </pre>
    *
@@ -1857,15 +1860,15 @@ public DataSourceCase getDataSourceCase() {
      * <pre>
      * Name of a public or custom image used as the data source.
      * For example, the following are all valid URLs:
-     * (1) Specify the image by its family name:
+     * * Specify the image by its family name:
      * projects/{project}/global/images/family/{image_family}
-     * (2) Specify the image version:
+     * * Specify the image version:
      * projects/{project}/global/images/{image_version}
      * You can also use Batch customized image in short names.
      * The following image values are supported for a boot disk:
-     * "batch-debian": use Batch Debian images.
-     * "batch-centos": use Batch CentOS images.
-     * "batch-cos": use Batch Container-Optimized images.
+     * * "batch-debian": use Batch Debian images.
+     * * "batch-centos": use Batch CentOS images.
+     * * "batch-cos": use Batch Container-Optimized images.
      * </pre>
      *
      * <code>string image = 4;</code>
@@ -1881,15 +1884,15 @@ public boolean hasImage() {
      * <pre>
      * Name of a public or custom image used as the data source.
      * For example, the following are all valid URLs:
-     * (1) Specify the image by its family name:
+     * * Specify the image by its family name:
      * projects/{project}/global/images/family/{image_family}
-     * (2) Specify the image version:
+     * * Specify the image version:
      * projects/{project}/global/images/{image_version}
      * You can also use Batch customized image in short names.
      * The following image values are supported for a boot disk:
-     * "batch-debian": use Batch Debian images.
-     * "batch-centos": use Batch CentOS images.
-     * "batch-cos": use Batch Container-Optimized images.
+     * * "batch-debian": use Batch Debian images.
+     * * "batch-centos": use Batch CentOS images.
+     * * "batch-cos": use Batch Container-Optimized images.
      * </pre>
      *
      * <code>string image = 4;</code>
@@ -1918,15 +1921,15 @@ public java.lang.String getImage() {
      * <pre>
      * Name of a public or custom image used as the data source.
      * For example, the following are all valid URLs:
-     * (1) Specify the image by its family name:
+     * * Specify the image by its family name:
      * projects/{project}/global/images/family/{image_family}
-     * (2) Specify the image version:
+     * * Specify the image version:
      * projects/{project}/global/images/{image_version}
      * You can also use Batch customized image in short names.
      * The following image values are supported for a boot disk:
-     * "batch-debian": use Batch Debian images.
-     * "batch-centos": use Batch CentOS images.
-     * "batch-cos": use Batch Container-Optimized images.
+     * * "batch-debian": use Batch Debian images.
+     * * "batch-centos": use Batch CentOS images.
+     * * "batch-cos": use Batch Container-Optimized images.
      * </pre>
      *
      * <code>string image = 4;</code>
@@ -1956,6 +1959,7 @@ public com.google.protobuf.ByteString getImageBytes() {
      *
      * <pre>
      * Name of a snapshot used as the data source.
+     * Snapshot is not supported as boot disk now.
      * </pre>
      *
      * <code>string snapshot = 5;</code>
@@ -1970,6 +1974,7 @@ public boolean hasSnapshot() {
      *
      * <pre>
      * Name of a snapshot used as the data source.
+     * Snapshot is not supported as boot disk now.
      * </pre>
      *
      * <code>string snapshot = 5;</code>
@@ -1997,6 +2002,7 @@ public java.lang.String getSnapshot() {
      *
      * <pre>
      * Name of a snapshot used as the data source.
+     * Snapshot is not supported as boot disk now.
      * </pre>
      *
      * <code>string snapshot = 5;</code>
@@ -2378,7 +2384,7 @@ protected Builder newBuilderForType(
      * <pre>
      * A new persistent disk or a local ssd.
      * A VM can only have one local SSD setting but multiple local SSD partitions.
-     * https://cloud.google.com/compute/docs/disks#pdspecs.
+     * See https://cloud.google.com/compute/docs/disks#pdspecs and
      * https://cloud.google.com/compute/docs/disks#localssds.
      * </pre>
      *
@@ -2651,15 +2657,15 @@ public Builder clearDataSource() {
        * <pre>
        * Name of a public or custom image used as the data source.
        * For example, the following are all valid URLs:
-       * (1) Specify the image by its family name:
+       * * Specify the image by its family name:
        * projects/{project}/global/images/family/{image_family}
-       * (2) Specify the image version:
+       * * Specify the image version:
        * projects/{project}/global/images/{image_version}
        * You can also use Batch customized image in short names.
        * The following image values are supported for a boot disk:
-       * "batch-debian": use Batch Debian images.
-       * "batch-centos": use Batch CentOS images.
-       * "batch-cos": use Batch Container-Optimized images.
+       * * "batch-debian": use Batch Debian images.
+       * * "batch-centos": use Batch CentOS images.
+       * * "batch-cos": use Batch Container-Optimized images.
        * </pre>
        *
        * <code>string image = 4;</code>
@@ -2676,15 +2682,15 @@ public boolean hasImage() {
        * <pre>
        * Name of a public or custom image used as the data source.
        * For example, the following are all valid URLs:
-       * (1) Specify the image by its family name:
+       * * Specify the image by its family name:
        * projects/{project}/global/images/family/{image_family}
-       * (2) Specify the image version:
+       * * Specify the image version:
        * projects/{project}/global/images/{image_version}
        * You can also use Batch customized image in short names.
        * The following image values are supported for a boot disk:
-       * "batch-debian": use Batch Debian images.
-       * "batch-centos": use Batch CentOS images.
-       * "batch-cos": use Batch Container-Optimized images.
+       * * "batch-debian": use Batch Debian images.
+       * * "batch-centos": use Batch CentOS images.
+       * * "batch-cos": use Batch Container-Optimized images.
        * </pre>
        *
        * <code>string image = 4;</code>
@@ -2714,15 +2720,15 @@ public java.lang.String getImage() {
        * <pre>
        * Name of a public or custom image used as the data source.
        * For example, the following are all valid URLs:
-       * (1) Specify the image by its family name:
+       * * Specify the image by its family name:
        * projects/{project}/global/images/family/{image_family}
-       * (2) Specify the image version:
+       * * Specify the image version:
        * projects/{project}/global/images/{image_version}
        * You can also use Batch customized image in short names.
        * The following image values are supported for a boot disk:
-       * "batch-debian": use Batch Debian images.
-       * "batch-centos": use Batch CentOS images.
-       * "batch-cos": use Batch Container-Optimized images.
+       * * "batch-debian": use Batch Debian images.
+       * * "batch-centos": use Batch CentOS images.
+       * * "batch-cos": use Batch Container-Optimized images.
        * </pre>
        *
        * <code>string image = 4;</code>
@@ -2752,15 +2758,15 @@ public com.google.protobuf.ByteString getImageBytes() {
        * <pre>
        * Name of a public or custom image used as the data source.
        * For example, the following are all valid URLs:
-       * (1) Specify the image by its family name:
+       * * Specify the image by its family name:
        * projects/{project}/global/images/family/{image_family}
-       * (2) Specify the image version:
+       * * Specify the image version:
        * projects/{project}/global/images/{image_version}
        * You can also use Batch customized image in short names.
        * The following image values are supported for a boot disk:
-       * "batch-debian": use Batch Debian images.
-       * "batch-centos": use Batch CentOS images.
-       * "batch-cos": use Batch Container-Optimized images.
+       * * "batch-debian": use Batch Debian images.
+       * * "batch-centos": use Batch CentOS images.
+       * * "batch-cos": use Batch Container-Optimized images.
        * </pre>
        *
        * <code>string image = 4;</code>
@@ -2783,15 +2789,15 @@ public Builder setImage(java.lang.String value) {
        * <pre>
        * Name of a public or custom image used as the data source.
        * For example, the following are all valid URLs:
-       * (1) Specify the image by its family name:
+       * * Specify the image by its family name:
        * projects/{project}/global/images/family/{image_family}
-       * (2) Specify the image version:
+       * * Specify the image version:
        * projects/{project}/global/images/{image_version}
        * You can also use Batch customized image in short names.
        * The following image values are supported for a boot disk:
-       * "batch-debian": use Batch Debian images.
-       * "batch-centos": use Batch CentOS images.
-       * "batch-cos": use Batch Container-Optimized images.
+       * * "batch-debian": use Batch Debian images.
+       * * "batch-centos": use Batch CentOS images.
+       * * "batch-cos": use Batch Container-Optimized images.
        * </pre>
        *
        * <code>string image = 4;</code>
@@ -2812,15 +2818,15 @@ public Builder clearImage() {
        * <pre>
        * Name of a public or custom image used as the data source.
        * For example, the following are all valid URLs:
-       * (1) Specify the image by its family name:
+       * * Specify the image by its family name:
        * projects/{project}/global/images/family/{image_family}
-       * (2) Specify the image version:
+       * * Specify the image version:
        * projects/{project}/global/images/{image_version}
        * You can also use Batch customized image in short names.
        * The following image values are supported for a boot disk:
-       * "batch-debian": use Batch Debian images.
-       * "batch-centos": use Batch CentOS images.
-       * "batch-cos": use Batch Container-Optimized images.
+       * * "batch-debian": use Batch Debian images.
+       * * "batch-centos": use Batch CentOS images.
+       * * "batch-cos": use Batch Container-Optimized images.
        * </pre>
        *
        * <code>string image = 4;</code>
@@ -2844,6 +2850,7 @@ public Builder setImageBytes(com.google.protobuf.ByteString value) {
        *
        * <pre>
        * Name of a snapshot used as the data source.
+       * Snapshot is not supported as boot disk now.
        * </pre>
        *
        * <code>string snapshot = 5;</code>
@@ -2859,6 +2866,7 @@ public boolean hasSnapshot() {
        *
        * <pre>
        * Name of a snapshot used as the data source.
+       * Snapshot is not supported as boot disk now.
        * </pre>
        *
        * <code>string snapshot = 5;</code>
@@ -2887,6 +2895,7 @@ public java.lang.String getSnapshot() {
        *
        * <pre>
        * Name of a snapshot used as the data source.
+       * Snapshot is not supported as boot disk now.
        * </pre>
        *
        * <code>string snapshot = 5;</code>
@@ -2915,6 +2924,7 @@ public com.google.protobuf.ByteString getSnapshotBytes() {
        *
        * <pre>
        * Name of a snapshot used as the data source.
+       * Snapshot is not supported as boot disk now.
        * </pre>
        *
        * <code>string snapshot = 5;</code>
@@ -2936,6 +2946,7 @@ public Builder setSnapshot(java.lang.String value) {
        *
        * <pre>
        * Name of a snapshot used as the data source.
+       * Snapshot is not supported as boot disk now.
        * </pre>
        *
        * <code>string snapshot = 5;</code>
@@ -2955,6 +2966,7 @@ public Builder clearSnapshot() {
        *
        * <pre>
        * Name of a snapshot used as the data source.
+       * Snapshot is not supported as boot disk now.
        * </pre>
        *
        * <code>string snapshot = 5;</code>
@@ -4664,7 +4676,7 @@ public interface AcceleratorOrBuilder
      * <code>bool install_gpu_drivers = 3 [deprecated = true];</code>
      *
      * @deprecated google.cloud.batch.v1alpha.AllocationPolicy.Accelerator.install_gpu_drivers is
-     *     deprecated. See google/cloud/batch/v1alpha/job.proto;l=379
+     *     deprecated. See google/cloud/batch/v1alpha/job.proto;l=386
      * @return The installGpuDrivers.
      */
     @java.lang.Deprecated
@@ -4802,7 +4814,7 @@ public long getCount() {
      * <code>bool install_gpu_drivers = 3 [deprecated = true];</code>
      *
      * @deprecated google.cloud.batch.v1alpha.AllocationPolicy.Accelerator.install_gpu_drivers is
-     *     deprecated. See google/cloud/batch/v1alpha/job.proto;l=379
+     *     deprecated. See google/cloud/batch/v1alpha/job.proto;l=386
      * @return The installGpuDrivers.
      */
     @java.lang.Override
@@ -5380,7 +5392,7 @@ public Builder clearCount() {
        * <code>bool install_gpu_drivers = 3 [deprecated = true];</code>
        *
        * @deprecated google.cloud.batch.v1alpha.AllocationPolicy.Accelerator.install_gpu_drivers is
-       *     deprecated. See google/cloud/batch/v1alpha/job.proto;l=379
+       *     deprecated. See google/cloud/batch/v1alpha/job.proto;l=386
        * @return The installGpuDrivers.
        */
       @java.lang.Override
@@ -5398,7 +5410,7 @@ public boolean getInstallGpuDrivers() {
        * <code>bool install_gpu_drivers = 3 [deprecated = true];</code>
        *
        * @deprecated google.cloud.batch.v1alpha.AllocationPolicy.Accelerator.install_gpu_drivers is
-       *     deprecated. See google/cloud/batch/v1alpha/job.proto;l=379
+       *     deprecated. See google/cloud/batch/v1alpha/job.proto;l=386
        * @param value The installGpuDrivers to set.
        * @return This builder for chaining.
        */
@@ -5420,7 +5432,7 @@ public Builder setInstallGpuDrivers(boolean value) {
        * <code>bool install_gpu_drivers = 3 [deprecated = true];</code>
        *
        * @deprecated google.cloud.batch.v1alpha.AllocationPolicy.Accelerator.install_gpu_drivers is
-       *     deprecated. See google/cloud/batch/v1alpha/job.proto;l=379
+       *     deprecated. See google/cloud/batch/v1alpha/job.proto;l=386
        * @return This builder for chaining.
        */
       @java.lang.Deprecated
@@ -5511,7 +5523,7 @@ public interface InstancePolicyOrBuilder
      * <code>repeated string allowed_machine_types = 1 [deprecated = true];</code>
      *
      * @deprecated google.cloud.batch.v1alpha.AllocationPolicy.InstancePolicy.allowed_machine_types
-     *     is deprecated. See google/cloud/batch/v1alpha/job.proto;l=386
+     *     is deprecated. See google/cloud/batch/v1alpha/job.proto;l=393
      * @return A list containing the allowedMachineTypes.
      */
     @java.lang.Deprecated
@@ -5526,7 +5538,7 @@ public interface InstancePolicyOrBuilder
      * <code>repeated string allowed_machine_types = 1 [deprecated = true];</code>
      *
      * @deprecated google.cloud.batch.v1alpha.AllocationPolicy.InstancePolicy.allowed_machine_types
-     *     is deprecated. See google/cloud/batch/v1alpha/job.proto;l=386
+     *     is deprecated. See google/cloud/batch/v1alpha/job.proto;l=393
      * @return The count of allowedMachineTypes.
      */
     @java.lang.Deprecated
@@ -5541,7 +5553,7 @@ public interface InstancePolicyOrBuilder
      * <code>repeated string allowed_machine_types = 1 [deprecated = true];</code>
      *
      * @deprecated google.cloud.batch.v1alpha.AllocationPolicy.InstancePolicy.allowed_machine_types
-     *     is deprecated. See google/cloud/batch/v1alpha/job.proto;l=386
+     *     is deprecated. See google/cloud/batch/v1alpha/job.proto;l=393
      * @param index The index of the element to return.
      * @return The allowedMachineTypes at the given index.
      */
@@ -5557,7 +5569,7 @@ public interface InstancePolicyOrBuilder
      * <code>repeated string allowed_machine_types = 1 [deprecated = true];</code>
      *
      * @deprecated google.cloud.batch.v1alpha.AllocationPolicy.InstancePolicy.allowed_machine_types
-     *     is deprecated. See google/cloud/batch/v1alpha/job.proto;l=386
+     *     is deprecated. See google/cloud/batch/v1alpha/job.proto;l=393
      * @param index The index of the value to return.
      * @return The bytes of the allowedMachineTypes at the given index.
      */
@@ -5595,7 +5607,7 @@ public interface InstancePolicyOrBuilder
      * <pre>
      * The minimum CPU platform.
      * See
-     * `https://cloud.google.com/compute/docs/instances/specify-min-cpu-platform`.
+     * https://cloud.google.com/compute/docs/instances/specify-min-cpu-platform.
      * Not yet implemented.
      * </pre>
      *
@@ -5610,7 +5622,7 @@ public interface InstancePolicyOrBuilder
      * <pre>
      * The minimum CPU platform.
      * See
-     * `https://cloud.google.com/compute/docs/instances/specify-min-cpu-platform`.
+     * https://cloud.google.com/compute/docs/instances/specify-min-cpu-platform.
      * Not yet implemented.
      * </pre>
      *
@@ -5710,8 +5722,9 @@ com.google.cloud.batch.v1alpha.AllocationPolicy.AcceleratorOrBuilder getAccelera
      *
      *
      * <pre>
-     * Book disk to be created and attached to each VM by this InstancePolicy.
+     * Boot disk to be created and attached to each VM by this InstancePolicy.
      * Boot disk will be deleted when the VM is deleted.
+     * Batch API now only supports booting from image.
      * </pre>
      *
      * <code>.google.cloud.batch.v1alpha.AllocationPolicy.Disk boot_disk = 8;</code>
@@ -5723,8 +5736,9 @@ com.google.cloud.batch.v1alpha.AllocationPolicy.AcceleratorOrBuilder getAccelera
      *
      *
      * <pre>
-     * Book disk to be created and attached to each VM by this InstancePolicy.
+     * Boot disk to be created and attached to each VM by this InstancePolicy.
      * Boot disk will be deleted when the VM is deleted.
+     * Batch API now only supports booting from image.
      * </pre>
      *
      * <code>.google.cloud.batch.v1alpha.AllocationPolicy.Disk boot_disk = 8;</code>
@@ -5736,8 +5750,9 @@ com.google.cloud.batch.v1alpha.AllocationPolicy.AcceleratorOrBuilder getAccelera
      *
      *
      * <pre>
-     * Book disk to be created and attached to each VM by this InstancePolicy.
+     * Boot disk to be created and attached to each VM by this InstancePolicy.
      * Boot disk will be deleted when the VM is deleted.
+     * Batch API now only supports booting from image.
      * </pre>
      *
      * <code>.google.cloud.batch.v1alpha.AllocationPolicy.Disk boot_disk = 8;</code>
@@ -5806,7 +5821,8 @@ com.google.cloud.batch.v1alpha.AllocationPolicy.AttachedDiskOrBuilder getDisksOr
      *
      *
      * <pre>
-     * If specified, VMs will be allocated only inside the matching reservation.
+     * If specified, VMs will consume only the specified reservation.
+     * If not specified (default), VMs will consume any applicable reservation.
      * </pre>
      *
      * <code>string reservation = 7;</code>
@@ -5818,7 +5834,8 @@ com.google.cloud.batch.v1alpha.AllocationPolicy.AttachedDiskOrBuilder getDisksOr
      *
      *
      * <pre>
-     * If specified, VMs will be allocated only inside the matching reservation.
+     * If specified, VMs will consume only the specified reservation.
+     * If not specified (default), VMs will consume any applicable reservation.
      * </pre>
      *
      * <code>string reservation = 7;</code>
@@ -5897,7 +5914,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() {
      * <code>repeated string allowed_machine_types = 1 [deprecated = true];</code>
      *
      * @deprecated google.cloud.batch.v1alpha.AllocationPolicy.InstancePolicy.allowed_machine_types
-     *     is deprecated. See google/cloud/batch/v1alpha/job.proto;l=386
+     *     is deprecated. See google/cloud/batch/v1alpha/job.proto;l=393
      * @return A list containing the allowedMachineTypes.
      */
     @java.lang.Deprecated
@@ -5914,7 +5931,7 @@ public com.google.protobuf.ProtocolStringList getAllowedMachineTypesList() {
      * <code>repeated string allowed_machine_types = 1 [deprecated = true];</code>
      *
      * @deprecated google.cloud.batch.v1alpha.AllocationPolicy.InstancePolicy.allowed_machine_types
-     *     is deprecated. See google/cloud/batch/v1alpha/job.proto;l=386
+     *     is deprecated. See google/cloud/batch/v1alpha/job.proto;l=393
      * @return The count of allowedMachineTypes.
      */
     @java.lang.Deprecated
@@ -5931,7 +5948,7 @@ public int getAllowedMachineTypesCount() {
      * <code>repeated string allowed_machine_types = 1 [deprecated = true];</code>
      *
      * @deprecated google.cloud.batch.v1alpha.AllocationPolicy.InstancePolicy.allowed_machine_types
-     *     is deprecated. See google/cloud/batch/v1alpha/job.proto;l=386
+     *     is deprecated. See google/cloud/batch/v1alpha/job.proto;l=393
      * @param index The index of the element to return.
      * @return The allowedMachineTypes at the given index.
      */
@@ -5949,7 +5966,7 @@ public java.lang.String getAllowedMachineTypes(int index) {
      * <code>repeated string allowed_machine_types = 1 [deprecated = true];</code>
      *
      * @deprecated google.cloud.batch.v1alpha.AllocationPolicy.InstancePolicy.allowed_machine_types
-     *     is deprecated. See google/cloud/batch/v1alpha/job.proto;l=386
+     *     is deprecated. See google/cloud/batch/v1alpha/job.proto;l=393
      * @param index The index of the value to return.
      * @return The bytes of the allowedMachineTypes at the given index.
      */
@@ -6019,7 +6036,7 @@ public com.google.protobuf.ByteString getMachineTypeBytes() {
      * <pre>
      * The minimum CPU platform.
      * See
-     * `https://cloud.google.com/compute/docs/instances/specify-min-cpu-platform`.
+     * https://cloud.google.com/compute/docs/instances/specify-min-cpu-platform.
      * Not yet implemented.
      * </pre>
      *
@@ -6045,7 +6062,7 @@ public java.lang.String getMinCpuPlatform() {
      * <pre>
      * The minimum CPU platform.
      * See
-     * `https://cloud.google.com/compute/docs/instances/specify-min-cpu-platform`.
+     * https://cloud.google.com/compute/docs/instances/specify-min-cpu-platform.
      * Not yet implemented.
      * </pre>
      *
@@ -6193,8 +6210,9 @@ public com.google.cloud.batch.v1alpha.AllocationPolicy.Accelerator getAccelerato
      *
      *
      * <pre>
-     * Book disk to be created and attached to each VM by this InstancePolicy.
+     * Boot disk to be created and attached to each VM by this InstancePolicy.
      * Boot disk will be deleted when the VM is deleted.
+     * Batch API now only supports booting from image.
      * </pre>
      *
      * <code>.google.cloud.batch.v1alpha.AllocationPolicy.Disk boot_disk = 8;</code>
@@ -6209,8 +6227,9 @@ public boolean hasBootDisk() {
      *
      *
      * <pre>
-     * Book disk to be created and attached to each VM by this InstancePolicy.
+     * Boot disk to be created and attached to each VM by this InstancePolicy.
      * Boot disk will be deleted when the VM is deleted.
+     * Batch API now only supports booting from image.
      * </pre>
      *
      * <code>.google.cloud.batch.v1alpha.AllocationPolicy.Disk boot_disk = 8;</code>
@@ -6227,8 +6246,9 @@ public com.google.cloud.batch.v1alpha.AllocationPolicy.Disk getBootDisk() {
      *
      *
      * <pre>
-     * Book disk to be created and attached to each VM by this InstancePolicy.
+     * Boot disk to be created and attached to each VM by this InstancePolicy.
      * Boot disk will be deleted when the VM is deleted.
+     * Batch API now only supports booting from image.
      * </pre>
      *
      * <code>.google.cloud.batch.v1alpha.AllocationPolicy.Disk boot_disk = 8;</code>
@@ -6327,7 +6347,8 @@ public com.google.cloud.batch.v1alpha.AllocationPolicy.AttachedDiskOrBuilder get
      *
      *
      * <pre>
-     * If specified, VMs will be allocated only inside the matching reservation.
+     * If specified, VMs will consume only the specified reservation.
+     * If not specified (default), VMs will consume any applicable reservation.
      * </pre>
      *
      * <code>string reservation = 7;</code>
@@ -6350,7 +6371,8 @@ public java.lang.String getReservation() {
      *
      *
      * <pre>
-     * If specified, VMs will be allocated only inside the matching reservation.
+     * If specified, VMs will consume only the specified reservation.
+     * If not specified (default), VMs will consume any applicable reservation.
      * </pre>
      *
      * <code>string reservation = 7;</code>
@@ -7031,7 +7053,7 @@ private void ensureAllowedMachineTypesIsMutable() {
        *
        * @deprecated
        *     google.cloud.batch.v1alpha.AllocationPolicy.InstancePolicy.allowed_machine_types is
-       *     deprecated. See google/cloud/batch/v1alpha/job.proto;l=386
+       *     deprecated. See google/cloud/batch/v1alpha/job.proto;l=393
        * @return A list containing the allowedMachineTypes.
        */
       @java.lang.Deprecated
@@ -7049,7 +7071,7 @@ public com.google.protobuf.ProtocolStringList getAllowedMachineTypesList() {
        *
        * @deprecated
        *     google.cloud.batch.v1alpha.AllocationPolicy.InstancePolicy.allowed_machine_types is
-       *     deprecated. See google/cloud/batch/v1alpha/job.proto;l=386
+       *     deprecated. See google/cloud/batch/v1alpha/job.proto;l=393
        * @return The count of allowedMachineTypes.
        */
       @java.lang.Deprecated
@@ -7067,7 +7089,7 @@ public int getAllowedMachineTypesCount() {
        *
        * @deprecated
        *     google.cloud.batch.v1alpha.AllocationPolicy.InstancePolicy.allowed_machine_types is
-       *     deprecated. See google/cloud/batch/v1alpha/job.proto;l=386
+       *     deprecated. See google/cloud/batch/v1alpha/job.proto;l=393
        * @param index The index of the element to return.
        * @return The allowedMachineTypes at the given index.
        */
@@ -7086,7 +7108,7 @@ public java.lang.String getAllowedMachineTypes(int index) {
        *
        * @deprecated
        *     google.cloud.batch.v1alpha.AllocationPolicy.InstancePolicy.allowed_machine_types is
-       *     deprecated. See google/cloud/batch/v1alpha/job.proto;l=386
+       *     deprecated. See google/cloud/batch/v1alpha/job.proto;l=393
        * @param index The index of the value to return.
        * @return The bytes of the allowedMachineTypes at the given index.
        */
@@ -7105,7 +7127,7 @@ public com.google.protobuf.ByteString getAllowedMachineTypesBytes(int index) {
        *
        * @deprecated
        *     google.cloud.batch.v1alpha.AllocationPolicy.InstancePolicy.allowed_machine_types is
-       *     deprecated. See google/cloud/batch/v1alpha/job.proto;l=386
+       *     deprecated. See google/cloud/batch/v1alpha/job.proto;l=393
        * @param index The index to set the value at.
        * @param value The allowedMachineTypes to set.
        * @return This builder for chaining.
@@ -7131,7 +7153,7 @@ public Builder setAllowedMachineTypes(int index, java.lang.String value) {
        *
        * @deprecated
        *     google.cloud.batch.v1alpha.AllocationPolicy.InstancePolicy.allowed_machine_types is
-       *     deprecated. See google/cloud/batch/v1alpha/job.proto;l=386
+       *     deprecated. See google/cloud/batch/v1alpha/job.proto;l=393
        * @param value The allowedMachineTypes to add.
        * @return This builder for chaining.
        */
@@ -7156,7 +7178,7 @@ public Builder addAllowedMachineTypes(java.lang.String value) {
        *
        * @deprecated
        *     google.cloud.batch.v1alpha.AllocationPolicy.InstancePolicy.allowed_machine_types is
-       *     deprecated. See google/cloud/batch/v1alpha/job.proto;l=386
+       *     deprecated. See google/cloud/batch/v1alpha/job.proto;l=393
        * @param values The allowedMachineTypes to add.
        * @return This builder for chaining.
        */
@@ -7178,7 +7200,7 @@ public Builder addAllAllowedMachineTypes(java.lang.Iterable<java.lang.String> va
        *
        * @deprecated
        *     google.cloud.batch.v1alpha.AllocationPolicy.InstancePolicy.allowed_machine_types is
-       *     deprecated. See google/cloud/batch/v1alpha/job.proto;l=386
+       *     deprecated. See google/cloud/batch/v1alpha/job.proto;l=393
        * @return This builder for chaining.
        */
       @java.lang.Deprecated
@@ -7199,7 +7221,7 @@ public Builder clearAllowedMachineTypes() {
        *
        * @deprecated
        *     google.cloud.batch.v1alpha.AllocationPolicy.InstancePolicy.allowed_machine_types is
-       *     deprecated. See google/cloud/batch/v1alpha/job.proto;l=386
+       *     deprecated. See google/cloud/batch/v1alpha/job.proto;l=393
        * @param value The bytes of the allowedMachineTypes to add.
        * @return This builder for chaining.
        */
@@ -7328,7 +7350,7 @@ public Builder setMachineTypeBytes(com.google.protobuf.ByteString value) {
        * <pre>
        * The minimum CPU platform.
        * See
-       * `https://cloud.google.com/compute/docs/instances/specify-min-cpu-platform`.
+       * https://cloud.google.com/compute/docs/instances/specify-min-cpu-platform.
        * Not yet implemented.
        * </pre>
        *
@@ -7353,7 +7375,7 @@ public java.lang.String getMinCpuPlatform() {
        * <pre>
        * The minimum CPU platform.
        * See
-       * `https://cloud.google.com/compute/docs/instances/specify-min-cpu-platform`.
+       * https://cloud.google.com/compute/docs/instances/specify-min-cpu-platform.
        * Not yet implemented.
        * </pre>
        *
@@ -7378,7 +7400,7 @@ public com.google.protobuf.ByteString getMinCpuPlatformBytes() {
        * <pre>
        * The minimum CPU platform.
        * See
-       * `https://cloud.google.com/compute/docs/instances/specify-min-cpu-platform`.
+       * https://cloud.google.com/compute/docs/instances/specify-min-cpu-platform.
        * Not yet implemented.
        * </pre>
        *
@@ -7402,7 +7424,7 @@ public Builder setMinCpuPlatform(java.lang.String value) {
        * <pre>
        * The minimum CPU platform.
        * See
-       * `https://cloud.google.com/compute/docs/instances/specify-min-cpu-platform`.
+       * https://cloud.google.com/compute/docs/instances/specify-min-cpu-platform.
        * Not yet implemented.
        * </pre>
        *
@@ -7422,7 +7444,7 @@ public Builder clearMinCpuPlatform() {
        * <pre>
        * The minimum CPU platform.
        * See
-       * `https://cloud.google.com/compute/docs/instances/specify-min-cpu-platform`.
+       * https://cloud.google.com/compute/docs/instances/specify-min-cpu-platform.
        * Not yet implemented.
        * </pre>
        *
@@ -7946,8 +7968,9 @@ public Builder removeAccelerators(int index) {
        *
        *
        * <pre>
-       * Book disk to be created and attached to each VM by this InstancePolicy.
+       * Boot disk to be created and attached to each VM by this InstancePolicy.
        * Boot disk will be deleted when the VM is deleted.
+       * Batch API now only supports booting from image.
        * </pre>
        *
        * <code>.google.cloud.batch.v1alpha.AllocationPolicy.Disk boot_disk = 8;</code>
@@ -7961,8 +7984,9 @@ public boolean hasBootDisk() {
        *
        *
        * <pre>
-       * Book disk to be created and attached to each VM by this InstancePolicy.
+       * Boot disk to be created and attached to each VM by this InstancePolicy.
        * Boot disk will be deleted when the VM is deleted.
+       * Batch API now only supports booting from image.
        * </pre>
        *
        * <code>.google.cloud.batch.v1alpha.AllocationPolicy.Disk boot_disk = 8;</code>
@@ -7982,8 +8006,9 @@ public com.google.cloud.batch.v1alpha.AllocationPolicy.Disk getBootDisk() {
        *
        *
        * <pre>
-       * Book disk to be created and attached to each VM by this InstancePolicy.
+       * Boot disk to be created and attached to each VM by this InstancePolicy.
        * Boot disk will be deleted when the VM is deleted.
+       * Batch API now only supports booting from image.
        * </pre>
        *
        * <code>.google.cloud.batch.v1alpha.AllocationPolicy.Disk boot_disk = 8;</code>
@@ -8005,8 +8030,9 @@ public Builder setBootDisk(com.google.cloud.batch.v1alpha.AllocationPolicy.Disk
        *
        *
        * <pre>
-       * Book disk to be created and attached to each VM by this InstancePolicy.
+       * Boot disk to be created and attached to each VM by this InstancePolicy.
        * Boot disk will be deleted when the VM is deleted.
+       * Batch API now only supports booting from image.
        * </pre>
        *
        * <code>.google.cloud.batch.v1alpha.AllocationPolicy.Disk boot_disk = 8;</code>
@@ -8026,8 +8052,9 @@ public Builder setBootDisk(
        *
        *
        * <pre>
-       * Book disk to be created and attached to each VM by this InstancePolicy.
+       * Boot disk to be created and attached to each VM by this InstancePolicy.
        * Boot disk will be deleted when the VM is deleted.
+       * Batch API now only supports booting from image.
        * </pre>
        *
        * <code>.google.cloud.batch.v1alpha.AllocationPolicy.Disk boot_disk = 8;</code>
@@ -8053,8 +8080,9 @@ public Builder mergeBootDisk(com.google.cloud.batch.v1alpha.AllocationPolicy.Dis
        *
        *
        * <pre>
-       * Book disk to be created and attached to each VM by this InstancePolicy.
+       * Boot disk to be created and attached to each VM by this InstancePolicy.
        * Boot disk will be deleted when the VM is deleted.
+       * Batch API now only supports booting from image.
        * </pre>
        *
        * <code>.google.cloud.batch.v1alpha.AllocationPolicy.Disk boot_disk = 8;</code>
@@ -8073,8 +8101,9 @@ public Builder clearBootDisk() {
        *
        *
        * <pre>
-       * Book disk to be created and attached to each VM by this InstancePolicy.
+       * Boot disk to be created and attached to each VM by this InstancePolicy.
        * Boot disk will be deleted when the VM is deleted.
+       * Batch API now only supports booting from image.
        * </pre>
        *
        * <code>.google.cloud.batch.v1alpha.AllocationPolicy.Disk boot_disk = 8;</code>
@@ -8088,8 +8117,9 @@ public com.google.cloud.batch.v1alpha.AllocationPolicy.Disk.Builder getBootDiskB
        *
        *
        * <pre>
-       * Book disk to be created and attached to each VM by this InstancePolicy.
+       * Boot disk to be created and attached to each VM by this InstancePolicy.
        * Boot disk will be deleted when the VM is deleted.
+       * Batch API now only supports booting from image.
        * </pre>
        *
        * <code>.google.cloud.batch.v1alpha.AllocationPolicy.Disk boot_disk = 8;</code>
@@ -8107,8 +8137,9 @@ public com.google.cloud.batch.v1alpha.AllocationPolicy.DiskOrBuilder getBootDisk
        *
        *
        * <pre>
-       * Book disk to be created and attached to each VM by this InstancePolicy.
+       * Boot disk to be created and attached to each VM by this InstancePolicy.
        * Boot disk will be deleted when the VM is deleted.
+       * Batch API now only supports booting from image.
        * </pre>
        *
        * <code>.google.cloud.batch.v1alpha.AllocationPolicy.Disk boot_disk = 8;</code>
@@ -8519,7 +8550,8 @@ public com.google.cloud.batch.v1alpha.AllocationPolicy.AttachedDisk.Builder addD
        *
        *
        * <pre>
-       * If specified, VMs will be allocated only inside the matching reservation.
+       * If specified, VMs will consume only the specified reservation.
+       * If not specified (default), VMs will consume any applicable reservation.
        * </pre>
        *
        * <code>string reservation = 7;</code>
@@ -8541,7 +8573,8 @@ public java.lang.String getReservation() {
        *
        *
        * <pre>
-       * If specified, VMs will be allocated only inside the matching reservation.
+       * If specified, VMs will consume only the specified reservation.
+       * If not specified (default), VMs will consume any applicable reservation.
        * </pre>
        *
        * <code>string reservation = 7;</code>
@@ -8563,7 +8596,8 @@ public com.google.protobuf.ByteString getReservationBytes() {
        *
        *
        * <pre>
-       * If specified, VMs will be allocated only inside the matching reservation.
+       * If specified, VMs will consume only the specified reservation.
+       * If not specified (default), VMs will consume any applicable reservation.
        * </pre>
        *
        * <code>string reservation = 7;</code>
@@ -8584,7 +8618,8 @@ public Builder setReservation(java.lang.String value) {
        *
        *
        * <pre>
-       * If specified, VMs will be allocated only inside the matching reservation.
+       * If specified, VMs will consume only the specified reservation.
+       * If not specified (default), VMs will consume any applicable reservation.
        * </pre>
        *
        * <code>string reservation = 7;</code>
@@ -8601,7 +8636,8 @@ public Builder clearReservation() {
        *
        *
        * <pre>
-       * If specified, VMs will be allocated only inside the matching reservation.
+       * If specified, VMs will consume only the specified reservation.
+       * If not specified (default), VMs will consume any applicable reservation.
        * </pre>
        *
        * <code>string reservation = 7;</code>
@@ -10004,9 +10040,9 @@ public interface NetworkInterfaceOrBuilder
      * The URL of an existing network resource.
      * You can specify the network as a full or partial URL.
      * For example, the following are all valid URLs:
-     * https://www.googleapis.com/compute/v1/projects/{project}/global/networks/{network}
-     * projects/{project}/global/networks/{network}
-     * global/networks/{network}
+     * * https://www.googleapis.com/compute/v1/projects/{project}/global/networks/{network}
+     * * projects/{project}/global/networks/{network}
+     * * global/networks/{network}
      * </pre>
      *
      * <code>string network = 1;</code>
@@ -10021,9 +10057,9 @@ public interface NetworkInterfaceOrBuilder
      * The URL of an existing network resource.
      * You can specify the network as a full or partial URL.
      * For example, the following are all valid URLs:
-     * https://www.googleapis.com/compute/v1/projects/{project}/global/networks/{network}
-     * projects/{project}/global/networks/{network}
-     * global/networks/{network}
+     * * https://www.googleapis.com/compute/v1/projects/{project}/global/networks/{network}
+     * * projects/{project}/global/networks/{network}
+     * * global/networks/{network}
      * </pre>
      *
      * <code>string network = 1;</code>
@@ -10039,9 +10075,9 @@ public interface NetworkInterfaceOrBuilder
      * The URL of an existing subnetwork resource in the network.
      * You can specify the subnetwork as a full or partial URL.
      * For example, the following are all valid URLs:
-     * https://www.googleapis.com/compute/v1/projects/{project}/regions/{region}/subnetworks/{subnetwork}
-     * projects/{project}/regions/{region}/subnetworks/{subnetwork}
-     * regions/{region}/subnetworks/{subnetwork}
+     * * https://www.googleapis.com/compute/v1/projects/{project}/regions/{region}/subnetworks/{subnetwork}
+     * * projects/{project}/regions/{region}/subnetworks/{subnetwork}
+     * * regions/{region}/subnetworks/{subnetwork}
      * </pre>
      *
      * <code>string subnetwork = 2;</code>
@@ -10056,9 +10092,9 @@ public interface NetworkInterfaceOrBuilder
      * The URL of an existing subnetwork resource in the network.
      * You can specify the subnetwork as a full or partial URL.
      * For example, the following are all valid URLs:
-     * https://www.googleapis.com/compute/v1/projects/{project}/regions/{region}/subnetworks/{subnetwork}
-     * projects/{project}/regions/{region}/subnetworks/{subnetwork}
-     * regions/{region}/subnetworks/{subnetwork}
+     * * https://www.googleapis.com/compute/v1/projects/{project}/regions/{region}/subnetworks/{subnetwork}
+     * * projects/{project}/regions/{region}/subnetworks/{subnetwork}
+     * * regions/{region}/subnetworks/{subnetwork}
      * </pre>
      *
      * <code>string subnetwork = 2;</code>
@@ -10147,9 +10183,9 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() {
      * The URL of an existing network resource.
      * You can specify the network as a full or partial URL.
      * For example, the following are all valid URLs:
-     * https://www.googleapis.com/compute/v1/projects/{project}/global/networks/{network}
-     * projects/{project}/global/networks/{network}
-     * global/networks/{network}
+     * * https://www.googleapis.com/compute/v1/projects/{project}/global/networks/{network}
+     * * projects/{project}/global/networks/{network}
+     * * global/networks/{network}
      * </pre>
      *
      * <code>string network = 1;</code>
@@ -10175,9 +10211,9 @@ public java.lang.String getNetwork() {
      * The URL of an existing network resource.
      * You can specify the network as a full or partial URL.
      * For example, the following are all valid URLs:
-     * https://www.googleapis.com/compute/v1/projects/{project}/global/networks/{network}
-     * projects/{project}/global/networks/{network}
-     * global/networks/{network}
+     * * https://www.googleapis.com/compute/v1/projects/{project}/global/networks/{network}
+     * * projects/{project}/global/networks/{network}
+     * * global/networks/{network}
      * </pre>
      *
      * <code>string network = 1;</code>
@@ -10208,9 +10244,9 @@ public com.google.protobuf.ByteString getNetworkBytes() {
      * The URL of an existing subnetwork resource in the network.
      * You can specify the subnetwork as a full or partial URL.
      * For example, the following are all valid URLs:
-     * https://www.googleapis.com/compute/v1/projects/{project}/regions/{region}/subnetworks/{subnetwork}
-     * projects/{project}/regions/{region}/subnetworks/{subnetwork}
-     * regions/{region}/subnetworks/{subnetwork}
+     * * https://www.googleapis.com/compute/v1/projects/{project}/regions/{region}/subnetworks/{subnetwork}
+     * * projects/{project}/regions/{region}/subnetworks/{subnetwork}
+     * * regions/{region}/subnetworks/{subnetwork}
      * </pre>
      *
      * <code>string subnetwork = 2;</code>
@@ -10236,9 +10272,9 @@ public java.lang.String getSubnetwork() {
      * The URL of an existing subnetwork resource in the network.
      * You can specify the subnetwork as a full or partial URL.
      * For example, the following are all valid URLs:
-     * https://www.googleapis.com/compute/v1/projects/{project}/regions/{region}/subnetworks/{subnetwork}
-     * projects/{project}/regions/{region}/subnetworks/{subnetwork}
-     * regions/{region}/subnetworks/{subnetwork}
+     * * https://www.googleapis.com/compute/v1/projects/{project}/regions/{region}/subnetworks/{subnetwork}
+     * * projects/{project}/regions/{region}/subnetworks/{subnetwork}
+     * * regions/{region}/subnetworks/{subnetwork}
      * </pre>
      *
      * <code>string subnetwork = 2;</code>
@@ -10691,9 +10727,9 @@ public Builder mergeFrom(
        * The URL of an existing network resource.
        * You can specify the network as a full or partial URL.
        * For example, the following are all valid URLs:
-       * https://www.googleapis.com/compute/v1/projects/{project}/global/networks/{network}
-       * projects/{project}/global/networks/{network}
-       * global/networks/{network}
+       * * https://www.googleapis.com/compute/v1/projects/{project}/global/networks/{network}
+       * * projects/{project}/global/networks/{network}
+       * * global/networks/{network}
        * </pre>
        *
        * <code>string network = 1;</code>
@@ -10718,9 +10754,9 @@ public java.lang.String getNetwork() {
        * The URL of an existing network resource.
        * You can specify the network as a full or partial URL.
        * For example, the following are all valid URLs:
-       * https://www.googleapis.com/compute/v1/projects/{project}/global/networks/{network}
-       * projects/{project}/global/networks/{network}
-       * global/networks/{network}
+       * * https://www.googleapis.com/compute/v1/projects/{project}/global/networks/{network}
+       * * projects/{project}/global/networks/{network}
+       * * global/networks/{network}
        * </pre>
        *
        * <code>string network = 1;</code>
@@ -10745,9 +10781,9 @@ public com.google.protobuf.ByteString getNetworkBytes() {
        * The URL of an existing network resource.
        * You can specify the network as a full or partial URL.
        * For example, the following are all valid URLs:
-       * https://www.googleapis.com/compute/v1/projects/{project}/global/networks/{network}
-       * projects/{project}/global/networks/{network}
-       * global/networks/{network}
+       * * https://www.googleapis.com/compute/v1/projects/{project}/global/networks/{network}
+       * * projects/{project}/global/networks/{network}
+       * * global/networks/{network}
        * </pre>
        *
        * <code>string network = 1;</code>
@@ -10771,9 +10807,9 @@ public Builder setNetwork(java.lang.String value) {
        * The URL of an existing network resource.
        * You can specify the network as a full or partial URL.
        * For example, the following are all valid URLs:
-       * https://www.googleapis.com/compute/v1/projects/{project}/global/networks/{network}
-       * projects/{project}/global/networks/{network}
-       * global/networks/{network}
+       * * https://www.googleapis.com/compute/v1/projects/{project}/global/networks/{network}
+       * * projects/{project}/global/networks/{network}
+       * * global/networks/{network}
        * </pre>
        *
        * <code>string network = 1;</code>
@@ -10793,9 +10829,9 @@ public Builder clearNetwork() {
        * The URL of an existing network resource.
        * You can specify the network as a full or partial URL.
        * For example, the following are all valid URLs:
-       * https://www.googleapis.com/compute/v1/projects/{project}/global/networks/{network}
-       * projects/{project}/global/networks/{network}
-       * global/networks/{network}
+       * * https://www.googleapis.com/compute/v1/projects/{project}/global/networks/{network}
+       * * projects/{project}/global/networks/{network}
+       * * global/networks/{network}
        * </pre>
        *
        * <code>string network = 1;</code>
@@ -10822,9 +10858,9 @@ public Builder setNetworkBytes(com.google.protobuf.ByteString value) {
        * The URL of an existing subnetwork resource in the network.
        * You can specify the subnetwork as a full or partial URL.
        * For example, the following are all valid URLs:
-       * https://www.googleapis.com/compute/v1/projects/{project}/regions/{region}/subnetworks/{subnetwork}
-       * projects/{project}/regions/{region}/subnetworks/{subnetwork}
-       * regions/{region}/subnetworks/{subnetwork}
+       * * https://www.googleapis.com/compute/v1/projects/{project}/regions/{region}/subnetworks/{subnetwork}
+       * * projects/{project}/regions/{region}/subnetworks/{subnetwork}
+       * * regions/{region}/subnetworks/{subnetwork}
        * </pre>
        *
        * <code>string subnetwork = 2;</code>
@@ -10849,9 +10885,9 @@ public java.lang.String getSubnetwork() {
        * The URL of an existing subnetwork resource in the network.
        * You can specify the subnetwork as a full or partial URL.
        * For example, the following are all valid URLs:
-       * https://www.googleapis.com/compute/v1/projects/{project}/regions/{region}/subnetworks/{subnetwork}
-       * projects/{project}/regions/{region}/subnetworks/{subnetwork}
-       * regions/{region}/subnetworks/{subnetwork}
+       * * https://www.googleapis.com/compute/v1/projects/{project}/regions/{region}/subnetworks/{subnetwork}
+       * * projects/{project}/regions/{region}/subnetworks/{subnetwork}
+       * * regions/{region}/subnetworks/{subnetwork}
        * </pre>
        *
        * <code>string subnetwork = 2;</code>
@@ -10876,9 +10912,9 @@ public com.google.protobuf.ByteString getSubnetworkBytes() {
        * The URL of an existing subnetwork resource in the network.
        * You can specify the subnetwork as a full or partial URL.
        * For example, the following are all valid URLs:
-       * https://www.googleapis.com/compute/v1/projects/{project}/regions/{region}/subnetworks/{subnetwork}
-       * projects/{project}/regions/{region}/subnetworks/{subnetwork}
-       * regions/{region}/subnetworks/{subnetwork}
+       * * https://www.googleapis.com/compute/v1/projects/{project}/regions/{region}/subnetworks/{subnetwork}
+       * * projects/{project}/regions/{region}/subnetworks/{subnetwork}
+       * * regions/{region}/subnetworks/{subnetwork}
        * </pre>
        *
        * <code>string subnetwork = 2;</code>
@@ -10902,9 +10938,9 @@ public Builder setSubnetwork(java.lang.String value) {
        * The URL of an existing subnetwork resource in the network.
        * You can specify the subnetwork as a full or partial URL.
        * For example, the following are all valid URLs:
-       * https://www.googleapis.com/compute/v1/projects/{project}/regions/{region}/subnetworks/{subnetwork}
-       * projects/{project}/regions/{region}/subnetworks/{subnetwork}
-       * regions/{region}/subnetworks/{subnetwork}
+       * * https://www.googleapis.com/compute/v1/projects/{project}/regions/{region}/subnetworks/{subnetwork}
+       * * projects/{project}/regions/{region}/subnetworks/{subnetwork}
+       * * regions/{region}/subnetworks/{subnetwork}
        * </pre>
        *
        * <code>string subnetwork = 2;</code>
@@ -10924,9 +10960,9 @@ public Builder clearSubnetwork() {
        * The URL of an existing subnetwork resource in the network.
        * You can specify the subnetwork as a full or partial URL.
        * For example, the following are all valid URLs:
-       * https://www.googleapis.com/compute/v1/projects/{project}/regions/{region}/subnetworks/{subnetwork}
-       * projects/{project}/regions/{region}/subnetworks/{subnetwork}
-       * regions/{region}/subnetworks/{subnetwork}
+       * * https://www.googleapis.com/compute/v1/projects/{project}/regions/{region}/subnetworks/{subnetwork}
+       * * projects/{project}/regions/{region}/subnetworks/{subnetwork}
+       * * regions/{region}/subnetworks/{subnetwork}
        * </pre>
        *
        * <code>string subnetwork = 2;</code>
@@ -12172,228 +12208,1039 @@ public com.google.protobuf.Parser<NetworkPolicy> getParserForType() {
     }
   }
 
-  public static final int LOCATION_FIELD_NUMBER = 1;
-  private com.google.cloud.batch.v1alpha.AllocationPolicy.LocationPolicy location_;
-  /**
-   *
-   *
-   * <pre>
-   * Location where compute resources should be allocated for the Job.
-   * </pre>
-   *
-   * <code>.google.cloud.batch.v1alpha.AllocationPolicy.LocationPolicy location = 1;</code>
-   *
-   * @return Whether the location field is set.
-   */
-  @java.lang.Override
-  public boolean hasLocation() {
-    return location_ != null;
-  }
-  /**
-   *
-   *
-   * <pre>
-   * Location where compute resources should be allocated for the Job.
-   * </pre>
-   *
-   * <code>.google.cloud.batch.v1alpha.AllocationPolicy.LocationPolicy location = 1;</code>
-   *
-   * @return The location.
-   */
-  @java.lang.Override
-  public com.google.cloud.batch.v1alpha.AllocationPolicy.LocationPolicy getLocation() {
-    return location_ == null
-        ? com.google.cloud.batch.v1alpha.AllocationPolicy.LocationPolicy.getDefaultInstance()
-        : location_;
-  }
-  /**
-   *
-   *
-   * <pre>
-   * Location where compute resources should be allocated for the Job.
-   * </pre>
-   *
-   * <code>.google.cloud.batch.v1alpha.AllocationPolicy.LocationPolicy location = 1;</code>
-   */
-  @java.lang.Override
-  public com.google.cloud.batch.v1alpha.AllocationPolicy.LocationPolicyOrBuilder
-      getLocationOrBuilder() {
-    return location_ == null
-        ? com.google.cloud.batch.v1alpha.AllocationPolicy.LocationPolicy.getDefaultInstance()
-        : location_;
-  }
+  public interface PlacementPolicyOrBuilder
+      extends
+      // @@protoc_insertion_point(interface_extends:google.cloud.batch.v1alpha.AllocationPolicy.PlacementPolicy)
+      com.google.protobuf.MessageOrBuilder {
 
-  public static final int INSTANCE_FIELD_NUMBER = 2;
-  private com.google.cloud.batch.v1alpha.AllocationPolicy.InstancePolicy instance_;
-  /**
-   *
-   *
-   * <pre>
-   * Deprecated: please use instances[0].policy instead.
-   * </pre>
-   *
-   * <code>
-   * .google.cloud.batch.v1alpha.AllocationPolicy.InstancePolicy instance = 2 [deprecated = true];
-   * </code>
-   *
-   * @deprecated google.cloud.batch.v1alpha.AllocationPolicy.instance is deprecated. See
-   *     google/cloud/batch/v1alpha/job.proto;l=492
-   * @return Whether the instance field is set.
-   */
-  @java.lang.Override
-  @java.lang.Deprecated
-  public boolean hasInstance() {
-    return instance_ != null;
-  }
-  /**
-   *
-   *
-   * <pre>
-   * Deprecated: please use instances[0].policy instead.
-   * </pre>
-   *
-   * <code>
-   * .google.cloud.batch.v1alpha.AllocationPolicy.InstancePolicy instance = 2 [deprecated = true];
-   * </code>
-   *
-   * @deprecated google.cloud.batch.v1alpha.AllocationPolicy.instance is deprecated. See
-   *     google/cloud/batch/v1alpha/job.proto;l=492
-   * @return The instance.
-   */
-  @java.lang.Override
-  @java.lang.Deprecated
-  public com.google.cloud.batch.v1alpha.AllocationPolicy.InstancePolicy getInstance() {
-    return instance_ == null
-        ? com.google.cloud.batch.v1alpha.AllocationPolicy.InstancePolicy.getDefaultInstance()
-        : instance_;
+    /**
+     *
+     *
+     * <pre>
+     * UNSPECIFIED vs. COLLOCATED (default UNSPECIFIED). Use COLLOCATED when you
+     * want VMs to be located close to each other for low network latency
+     * between the VMs. No placement policy will be generated when collocation
+     * is UNSPECIFIED.
+     * </pre>
+     *
+     * <code>string collocation = 1;</code>
+     *
+     * @return The collocation.
+     */
+    java.lang.String getCollocation();
+    /**
+     *
+     *
+     * <pre>
+     * UNSPECIFIED vs. COLLOCATED (default UNSPECIFIED). Use COLLOCATED when you
+     * want VMs to be located close to each other for low network latency
+     * between the VMs. No placement policy will be generated when collocation
+     * is UNSPECIFIED.
+     * </pre>
+     *
+     * <code>string collocation = 1;</code>
+     *
+     * @return The bytes for collocation.
+     */
+    com.google.protobuf.ByteString getCollocationBytes();
+
+    /**
+     *
+     *
+     * <pre>
+     * When specified, causes the job to fail if more than max_distance logical
+     * switches are required between VMs. Batch uses the most compact possible
+     * placement of VMs even when max_distance is not specified. An explicit
+     * max_distance makes that level of compactness a strict requirement.
+     * Not yet implemented
+     * </pre>
+     *
+     * <code>int64 max_distance = 2;</code>
+     *
+     * @return The maxDistance.
+     */
+    long getMaxDistance();
   }
   /**
    *
    *
    * <pre>
-   * Deprecated: please use instances[0].policy instead.
+   * PlacementPolicy describes a group placement policy for the VMs controlled
+   * by this AllocationPolicy.
    * </pre>
    *
-   * <code>
-   * .google.cloud.batch.v1alpha.AllocationPolicy.InstancePolicy instance = 2 [deprecated = true];
-   * </code>
+   * Protobuf type {@code google.cloud.batch.v1alpha.AllocationPolicy.PlacementPolicy}
    */
-  @java.lang.Override
-  @java.lang.Deprecated
-  public com.google.cloud.batch.v1alpha.AllocationPolicy.InstancePolicyOrBuilder
-      getInstanceOrBuilder() {
-    return instance_ == null
-        ? com.google.cloud.batch.v1alpha.AllocationPolicy.InstancePolicy.getDefaultInstance()
-        : instance_;
-  }
+  public static final class PlacementPolicy extends com.google.protobuf.GeneratedMessageV3
+      implements
+      // @@protoc_insertion_point(message_implements:google.cloud.batch.v1alpha.AllocationPolicy.PlacementPolicy)
+      PlacementPolicyOrBuilder {
+    private static final long serialVersionUID = 0L;
+    // Use PlacementPolicy.newBuilder() to construct.
+    private PlacementPolicy(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+      super(builder);
+    }
 
-  public static final int INSTANCES_FIELD_NUMBER = 8;
+    private PlacementPolicy() {
+      collocation_ = "";
+    }
 
-  @SuppressWarnings("serial")
-  private java.util.List<com.google.cloud.batch.v1alpha.AllocationPolicy.InstancePolicyOrTemplate>
-      instances_;
-  /**
-   *
-   *
-   * <pre>
-   * Describe instances that can be created by this AllocationPolicy.
-   * Only instances[0] is supported now.
-   * </pre>
-   *
-   * <code>
-   * repeated .google.cloud.batch.v1alpha.AllocationPolicy.InstancePolicyOrTemplate instances = 8;
-   * </code>
-   */
-  @java.lang.Override
-  public java.util.List<com.google.cloud.batch.v1alpha.AllocationPolicy.InstancePolicyOrTemplate>
-      getInstancesList() {
-    return instances_;
-  }
-  /**
-   *
-   *
-   * <pre>
-   * Describe instances that can be created by this AllocationPolicy.
-   * Only instances[0] is supported now.
-   * </pre>
-   *
-   * <code>
-   * repeated .google.cloud.batch.v1alpha.AllocationPolicy.InstancePolicyOrTemplate instances = 8;
-   * </code>
-   */
-  @java.lang.Override
-  public java.util.List<
-          ? extends
-              com.google.cloud.batch.v1alpha.AllocationPolicy.InstancePolicyOrTemplateOrBuilder>
-      getInstancesOrBuilderList() {
-    return instances_;
-  }
-  /**
-   *
-   *
-   * <pre>
-   * Describe instances that can be created by this AllocationPolicy.
-   * Only instances[0] is supported now.
-   * </pre>
-   *
-   * <code>
-   * repeated .google.cloud.batch.v1alpha.AllocationPolicy.InstancePolicyOrTemplate instances = 8;
-   * </code>
-   */
-  @java.lang.Override
-  public int getInstancesCount() {
-    return instances_.size();
-  }
-  /**
-   *
-   *
-   * <pre>
-   * Describe instances that can be created by this AllocationPolicy.
-   * Only instances[0] is supported now.
-   * </pre>
-   *
-   * <code>
-   * repeated .google.cloud.batch.v1alpha.AllocationPolicy.InstancePolicyOrTemplate instances = 8;
-   * </code>
-   */
-  @java.lang.Override
-  public com.google.cloud.batch.v1alpha.AllocationPolicy.InstancePolicyOrTemplate getInstances(
-      int index) {
-    return instances_.get(index);
-  }
-  /**
-   *
-   *
-   * <pre>
-   * Describe instances that can be created by this AllocationPolicy.
-   * Only instances[0] is supported now.
-   * </pre>
-   *
-   * <code>
-   * repeated .google.cloud.batch.v1alpha.AllocationPolicy.InstancePolicyOrTemplate instances = 8;
-   * </code>
-   */
-  @java.lang.Override
-  public com.google.cloud.batch.v1alpha.AllocationPolicy.InstancePolicyOrTemplateOrBuilder
-      getInstancesOrBuilder(int index) {
-    return instances_.get(index);
-  }
+    @java.lang.Override
+    @SuppressWarnings({"unused"})
+    protected java.lang.Object newInstance(UnusedPrivateParameter unused) {
+      return new PlacementPolicy();
+    }
 
-  public static final int INSTANCE_TEMPLATES_FIELD_NUMBER = 3;
+    @java.lang.Override
+    public final com.google.protobuf.UnknownFieldSet getUnknownFields() {
+      return this.unknownFields;
+    }
 
-  @SuppressWarnings("serial")
-  private com.google.protobuf.LazyStringList instanceTemplates_;
-  /**
-   *
-   *
-   * <pre>
-   * Deprecated: please use instances[0].template instead.
-   * </pre>
-   *
-   * <code>repeated string instance_templates = 3 [deprecated = true];</code>
+    public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() {
+      return com.google.cloud.batch.v1alpha.JobProto
+          .internal_static_google_cloud_batch_v1alpha_AllocationPolicy_PlacementPolicy_descriptor;
+    }
+
+    @java.lang.Override
+    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+        internalGetFieldAccessorTable() {
+      return com.google.cloud.batch.v1alpha.JobProto
+          .internal_static_google_cloud_batch_v1alpha_AllocationPolicy_PlacementPolicy_fieldAccessorTable
+          .ensureFieldAccessorsInitialized(
+              com.google.cloud.batch.v1alpha.AllocationPolicy.PlacementPolicy.class,
+              com.google.cloud.batch.v1alpha.AllocationPolicy.PlacementPolicy.Builder.class);
+    }
+
+    public static final int COLLOCATION_FIELD_NUMBER = 1;
+
+    @SuppressWarnings("serial")
+    private volatile java.lang.Object collocation_ = "";
+    /**
+     *
+     *
+     * <pre>
+     * UNSPECIFIED vs. COLLOCATED (default UNSPECIFIED). Use COLLOCATED when you
+     * want VMs to be located close to each other for low network latency
+     * between the VMs. No placement policy will be generated when collocation
+     * is UNSPECIFIED.
+     * </pre>
+     *
+     * <code>string collocation = 1;</code>
+     *
+     * @return The collocation.
+     */
+    @java.lang.Override
+    public java.lang.String getCollocation() {
+      java.lang.Object ref = collocation_;
+      if (ref instanceof java.lang.String) {
+        return (java.lang.String) ref;
+      } else {
+        com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref;
+        java.lang.String s = bs.toStringUtf8();
+        collocation_ = s;
+        return s;
+      }
+    }
+    /**
+     *
+     *
+     * <pre>
+     * UNSPECIFIED vs. COLLOCATED (default UNSPECIFIED). Use COLLOCATED when you
+     * want VMs to be located close to each other for low network latency
+     * between the VMs. No placement policy will be generated when collocation
+     * is UNSPECIFIED.
+     * </pre>
+     *
+     * <code>string collocation = 1;</code>
+     *
+     * @return The bytes for collocation.
+     */
+    @java.lang.Override
+    public com.google.protobuf.ByteString getCollocationBytes() {
+      java.lang.Object ref = collocation_;
+      if (ref instanceof java.lang.String) {
+        com.google.protobuf.ByteString b =
+            com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref);
+        collocation_ = b;
+        return b;
+      } else {
+        return (com.google.protobuf.ByteString) ref;
+      }
+    }
+
+    public static final int MAX_DISTANCE_FIELD_NUMBER = 2;
+    private long maxDistance_ = 0L;
+    /**
+     *
+     *
+     * <pre>
+     * When specified, causes the job to fail if more than max_distance logical
+     * switches are required between VMs. Batch uses the most compact possible
+     * placement of VMs even when max_distance is not specified. An explicit
+     * max_distance makes that level of compactness a strict requirement.
+     * Not yet implemented
+     * </pre>
+     *
+     * <code>int64 max_distance = 2;</code>
+     *
+     * @return The maxDistance.
+     */
+    @java.lang.Override
+    public long getMaxDistance() {
+      return maxDistance_;
+    }
+
+    private byte memoizedIsInitialized = -1;
+
+    @java.lang.Override
+    public final boolean isInitialized() {
+      byte isInitialized = memoizedIsInitialized;
+      if (isInitialized == 1) return true;
+      if (isInitialized == 0) return false;
+
+      memoizedIsInitialized = 1;
+      return true;
+    }
+
+    @java.lang.Override
+    public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException {
+      if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(collocation_)) {
+        com.google.protobuf.GeneratedMessageV3.writeString(output, 1, collocation_);
+      }
+      if (maxDistance_ != 0L) {
+        output.writeInt64(2, maxDistance_);
+      }
+      getUnknownFields().writeTo(output);
+    }
+
+    @java.lang.Override
+    public int getSerializedSize() {
+      int size = memoizedSize;
+      if (size != -1) return size;
+
+      size = 0;
+      if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(collocation_)) {
+        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, collocation_);
+      }
+      if (maxDistance_ != 0L) {
+        size += com.google.protobuf.CodedOutputStream.computeInt64Size(2, maxDistance_);
+      }
+      size += getUnknownFields().getSerializedSize();
+      memoizedSize = size;
+      return size;
+    }
+
+    @java.lang.Override
+    public boolean equals(final java.lang.Object obj) {
+      if (obj == this) {
+        return true;
+      }
+      if (!(obj instanceof com.google.cloud.batch.v1alpha.AllocationPolicy.PlacementPolicy)) {
+        return super.equals(obj);
+      }
+      com.google.cloud.batch.v1alpha.AllocationPolicy.PlacementPolicy other =
+          (com.google.cloud.batch.v1alpha.AllocationPolicy.PlacementPolicy) obj;
+
+      if (!getCollocation().equals(other.getCollocation())) return false;
+      if (getMaxDistance() != other.getMaxDistance()) return false;
+      if (!getUnknownFields().equals(other.getUnknownFields())) return false;
+      return true;
+    }
+
+    @java.lang.Override
+    public int hashCode() {
+      if (memoizedHashCode != 0) {
+        return memoizedHashCode;
+      }
+      int hash = 41;
+      hash = (19 * hash) + getDescriptor().hashCode();
+      hash = (37 * hash) + COLLOCATION_FIELD_NUMBER;
+      hash = (53 * hash) + getCollocation().hashCode();
+      hash = (37 * hash) + MAX_DISTANCE_FIELD_NUMBER;
+      hash = (53 * hash) + com.google.protobuf.Internal.hashLong(getMaxDistance());
+      hash = (29 * hash) + getUnknownFields().hashCode();
+      memoizedHashCode = hash;
+      return hash;
+    }
+
+    public static com.google.cloud.batch.v1alpha.AllocationPolicy.PlacementPolicy parseFrom(
+        java.nio.ByteBuffer data) throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+
+    public static com.google.cloud.batch.v1alpha.AllocationPolicy.PlacementPolicy parseFrom(
+        java.nio.ByteBuffer data, com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+
+    public static com.google.cloud.batch.v1alpha.AllocationPolicy.PlacementPolicy parseFrom(
+        com.google.protobuf.ByteString data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+
+    public static com.google.cloud.batch.v1alpha.AllocationPolicy.PlacementPolicy parseFrom(
+        com.google.protobuf.ByteString data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+
+    public static com.google.cloud.batch.v1alpha.AllocationPolicy.PlacementPolicy parseFrom(
+        byte[] data) throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+
+    public static com.google.cloud.batch.v1alpha.AllocationPolicy.PlacementPolicy parseFrom(
+        byte[] data, com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+
+    public static com.google.cloud.batch.v1alpha.AllocationPolicy.PlacementPolicy parseFrom(
+        java.io.InputStream input) throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input);
+    }
+
+    public static com.google.cloud.batch.v1alpha.AllocationPolicy.PlacementPolicy parseFrom(
+        java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3.parseWithIOException(
+          PARSER, input, extensionRegistry);
+    }
+
+    public static com.google.cloud.batch.v1alpha.AllocationPolicy.PlacementPolicy
+        parseDelimitedFrom(java.io.InputStream input) throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(PARSER, input);
+    }
+
+    public static com.google.cloud.batch.v1alpha.AllocationPolicy.PlacementPolicy
+        parseDelimitedFrom(
+            java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+            throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(
+          PARSER, input, extensionRegistry);
+    }
+
+    public static com.google.cloud.batch.v1alpha.AllocationPolicy.PlacementPolicy parseFrom(
+        com.google.protobuf.CodedInputStream input) throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input);
+    }
+
+    public static com.google.cloud.batch.v1alpha.AllocationPolicy.PlacementPolicy parseFrom(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3.parseWithIOException(
+          PARSER, input, extensionRegistry);
+    }
+
+    @java.lang.Override
+    public Builder newBuilderForType() {
+      return newBuilder();
+    }
+
+    public static Builder newBuilder() {
+      return DEFAULT_INSTANCE.toBuilder();
+    }
+
+    public static Builder newBuilder(
+        com.google.cloud.batch.v1alpha.AllocationPolicy.PlacementPolicy prototype) {
+      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
+    }
+
+    @java.lang.Override
+    public Builder toBuilder() {
+      return this == DEFAULT_INSTANCE ? new Builder() : new Builder().mergeFrom(this);
+    }
+
+    @java.lang.Override
+    protected Builder newBuilderForType(
+        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+      Builder builder = new Builder(parent);
+      return builder;
+    }
+    /**
+     *
+     *
+     * <pre>
+     * PlacementPolicy describes a group placement policy for the VMs controlled
+     * by this AllocationPolicy.
+     * </pre>
+     *
+     * Protobuf type {@code google.cloud.batch.v1alpha.AllocationPolicy.PlacementPolicy}
+     */
+    public static final class Builder
+        extends com.google.protobuf.GeneratedMessageV3.Builder<Builder>
+        implements
+        // @@protoc_insertion_point(builder_implements:google.cloud.batch.v1alpha.AllocationPolicy.PlacementPolicy)
+        com.google.cloud.batch.v1alpha.AllocationPolicy.PlacementPolicyOrBuilder {
+      public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() {
+        return com.google.cloud.batch.v1alpha.JobProto
+            .internal_static_google_cloud_batch_v1alpha_AllocationPolicy_PlacementPolicy_descriptor;
+      }
+
+      @java.lang.Override
+      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+          internalGetFieldAccessorTable() {
+        return com.google.cloud.batch.v1alpha.JobProto
+            .internal_static_google_cloud_batch_v1alpha_AllocationPolicy_PlacementPolicy_fieldAccessorTable
+            .ensureFieldAccessorsInitialized(
+                com.google.cloud.batch.v1alpha.AllocationPolicy.PlacementPolicy.class,
+                com.google.cloud.batch.v1alpha.AllocationPolicy.PlacementPolicy.Builder.class);
+      }
+
+      // Construct using
+      // com.google.cloud.batch.v1alpha.AllocationPolicy.PlacementPolicy.newBuilder()
+      private Builder() {}
+
+      private Builder(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+        super(parent);
+      }
+
+      @java.lang.Override
+      public Builder clear() {
+        super.clear();
+        bitField0_ = 0;
+        collocation_ = "";
+        maxDistance_ = 0L;
+        return this;
+      }
+
+      @java.lang.Override
+      public com.google.protobuf.Descriptors.Descriptor getDescriptorForType() {
+        return com.google.cloud.batch.v1alpha.JobProto
+            .internal_static_google_cloud_batch_v1alpha_AllocationPolicy_PlacementPolicy_descriptor;
+      }
+
+      @java.lang.Override
+      public com.google.cloud.batch.v1alpha.AllocationPolicy.PlacementPolicy
+          getDefaultInstanceForType() {
+        return com.google.cloud.batch.v1alpha.AllocationPolicy.PlacementPolicy.getDefaultInstance();
+      }
+
+      @java.lang.Override
+      public com.google.cloud.batch.v1alpha.AllocationPolicy.PlacementPolicy build() {
+        com.google.cloud.batch.v1alpha.AllocationPolicy.PlacementPolicy result = buildPartial();
+        if (!result.isInitialized()) {
+          throw newUninitializedMessageException(result);
+        }
+        return result;
+      }
+
+      @java.lang.Override
+      public com.google.cloud.batch.v1alpha.AllocationPolicy.PlacementPolicy buildPartial() {
+        com.google.cloud.batch.v1alpha.AllocationPolicy.PlacementPolicy result =
+            new com.google.cloud.batch.v1alpha.AllocationPolicy.PlacementPolicy(this);
+        if (bitField0_ != 0) {
+          buildPartial0(result);
+        }
+        onBuilt();
+        return result;
+      }
+
+      private void buildPartial0(
+          com.google.cloud.batch.v1alpha.AllocationPolicy.PlacementPolicy result) {
+        int from_bitField0_ = bitField0_;
+        if (((from_bitField0_ & 0x00000001) != 0)) {
+          result.collocation_ = collocation_;
+        }
+        if (((from_bitField0_ & 0x00000002) != 0)) {
+          result.maxDistance_ = maxDistance_;
+        }
+      }
+
+      @java.lang.Override
+      public Builder clone() {
+        return super.clone();
+      }
+
+      @java.lang.Override
+      public Builder setField(
+          com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) {
+        return super.setField(field, value);
+      }
+
+      @java.lang.Override
+      public Builder clearField(com.google.protobuf.Descriptors.FieldDescriptor field) {
+        return super.clearField(field);
+      }
+
+      @java.lang.Override
+      public Builder clearOneof(com.google.protobuf.Descriptors.OneofDescriptor oneof) {
+        return super.clearOneof(oneof);
+      }
+
+      @java.lang.Override
+      public Builder setRepeatedField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          int index,
+          java.lang.Object value) {
+        return super.setRepeatedField(field, index, value);
+      }
+
+      @java.lang.Override
+      public Builder addRepeatedField(
+          com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) {
+        return super.addRepeatedField(field, value);
+      }
+
+      @java.lang.Override
+      public Builder mergeFrom(com.google.protobuf.Message other) {
+        if (other instanceof com.google.cloud.batch.v1alpha.AllocationPolicy.PlacementPolicy) {
+          return mergeFrom((com.google.cloud.batch.v1alpha.AllocationPolicy.PlacementPolicy) other);
+        } else {
+          super.mergeFrom(other);
+          return this;
+        }
+      }
+
+      public Builder mergeFrom(
+          com.google.cloud.batch.v1alpha.AllocationPolicy.PlacementPolicy other) {
+        if (other
+            == com.google.cloud.batch.v1alpha.AllocationPolicy.PlacementPolicy.getDefaultInstance())
+          return this;
+        if (!other.getCollocation().isEmpty()) {
+          collocation_ = other.collocation_;
+          bitField0_ |= 0x00000001;
+          onChanged();
+        }
+        if (other.getMaxDistance() != 0L) {
+          setMaxDistance(other.getMaxDistance());
+        }
+        this.mergeUnknownFields(other.getUnknownFields());
+        onChanged();
+        return this;
+      }
+
+      @java.lang.Override
+      public final boolean isInitialized() {
+        return true;
+      }
+
+      @java.lang.Override
+      public Builder mergeFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws java.io.IOException {
+        if (extensionRegistry == null) {
+          throw new java.lang.NullPointerException();
+        }
+        try {
+          boolean done = false;
+          while (!done) {
+            int tag = input.readTag();
+            switch (tag) {
+              case 0:
+                done = true;
+                break;
+              case 10:
+                {
+                  collocation_ = input.readStringRequireUtf8();
+                  bitField0_ |= 0x00000001;
+                  break;
+                } // case 10
+              case 16:
+                {
+                  maxDistance_ = input.readInt64();
+                  bitField0_ |= 0x00000002;
+                  break;
+                } // case 16
+              default:
+                {
+                  if (!super.parseUnknownField(input, extensionRegistry, tag)) {
+                    done = true; // was an endgroup tag
+                  }
+                  break;
+                } // default:
+            } // switch (tag)
+          } // while (!done)
+        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+          throw e.unwrapIOException();
+        } finally {
+          onChanged();
+        } // finally
+        return this;
+      }
+
+      private int bitField0_;
+
+      private java.lang.Object collocation_ = "";
+      /**
+       *
+       *
+       * <pre>
+       * UNSPECIFIED vs. COLLOCATED (default UNSPECIFIED). Use COLLOCATED when you
+       * want VMs to be located close to each other for low network latency
+       * between the VMs. No placement policy will be generated when collocation
+       * is UNSPECIFIED.
+       * </pre>
+       *
+       * <code>string collocation = 1;</code>
+       *
+       * @return The collocation.
+       */
+      public java.lang.String getCollocation() {
+        java.lang.Object ref = collocation_;
+        if (!(ref instanceof java.lang.String)) {
+          com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref;
+          java.lang.String s = bs.toStringUtf8();
+          collocation_ = s;
+          return s;
+        } else {
+          return (java.lang.String) ref;
+        }
+      }
+      /**
+       *
+       *
+       * <pre>
+       * UNSPECIFIED vs. COLLOCATED (default UNSPECIFIED). Use COLLOCATED when you
+       * want VMs to be located close to each other for low network latency
+       * between the VMs. No placement policy will be generated when collocation
+       * is UNSPECIFIED.
+       * </pre>
+       *
+       * <code>string collocation = 1;</code>
+       *
+       * @return The bytes for collocation.
+       */
+      public com.google.protobuf.ByteString getCollocationBytes() {
+        java.lang.Object ref = collocation_;
+        if (ref instanceof String) {
+          com.google.protobuf.ByteString b =
+              com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref);
+          collocation_ = b;
+          return b;
+        } else {
+          return (com.google.protobuf.ByteString) ref;
+        }
+      }
+      /**
+       *
+       *
+       * <pre>
+       * UNSPECIFIED vs. COLLOCATED (default UNSPECIFIED). Use COLLOCATED when you
+       * want VMs to be located close to each other for low network latency
+       * between the VMs. No placement policy will be generated when collocation
+       * is UNSPECIFIED.
+       * </pre>
+       *
+       * <code>string collocation = 1;</code>
+       *
+       * @param value The collocation to set.
+       * @return This builder for chaining.
+       */
+      public Builder setCollocation(java.lang.String value) {
+        if (value == null) {
+          throw new NullPointerException();
+        }
+        collocation_ = value;
+        bitField0_ |= 0x00000001;
+        onChanged();
+        return this;
+      }
+      /**
+       *
+       *
+       * <pre>
+       * UNSPECIFIED vs. COLLOCATED (default UNSPECIFIED). Use COLLOCATED when you
+       * want VMs to be located close to each other for low network latency
+       * between the VMs. No placement policy will be generated when collocation
+       * is UNSPECIFIED.
+       * </pre>
+       *
+       * <code>string collocation = 1;</code>
+       *
+       * @return This builder for chaining.
+       */
+      public Builder clearCollocation() {
+        collocation_ = getDefaultInstance().getCollocation();
+        bitField0_ = (bitField0_ & ~0x00000001);
+        onChanged();
+        return this;
+      }
+      /**
+       *
+       *
+       * <pre>
+       * UNSPECIFIED vs. COLLOCATED (default UNSPECIFIED). Use COLLOCATED when you
+       * want VMs to be located close to each other for low network latency
+       * between the VMs. No placement policy will be generated when collocation
+       * is UNSPECIFIED.
+       * </pre>
+       *
+       * <code>string collocation = 1;</code>
+       *
+       * @param value The bytes for collocation to set.
+       * @return This builder for chaining.
+       */
+      public Builder setCollocationBytes(com.google.protobuf.ByteString value) {
+        if (value == null) {
+          throw new NullPointerException();
+        }
+        checkByteStringIsUtf8(value);
+        collocation_ = value;
+        bitField0_ |= 0x00000001;
+        onChanged();
+        return this;
+      }
+
+      private long maxDistance_;
+      /**
+       *
+       *
+       * <pre>
+       * When specified, causes the job to fail if more than max_distance logical
+       * switches are required between VMs. Batch uses the most compact possible
+       * placement of VMs even when max_distance is not specified. An explicit
+       * max_distance makes that level of compactness a strict requirement.
+       * Not yet implemented
+       * </pre>
+       *
+       * <code>int64 max_distance = 2;</code>
+       *
+       * @return The maxDistance.
+       */
+      @java.lang.Override
+      public long getMaxDistance() {
+        return maxDistance_;
+      }
+      /**
+       *
+       *
+       * <pre>
+       * When specified, causes the job to fail if more than max_distance logical
+       * switches are required between VMs. Batch uses the most compact possible
+       * placement of VMs even when max_distance is not specified. An explicit
+       * max_distance makes that level of compactness a strict requirement.
+       * Not yet implemented
+       * </pre>
+       *
+       * <code>int64 max_distance = 2;</code>
+       *
+       * @param value The maxDistance to set.
+       * @return This builder for chaining.
+       */
+      public Builder setMaxDistance(long value) {
+
+        maxDistance_ = value;
+        bitField0_ |= 0x00000002;
+        onChanged();
+        return this;
+      }
+      /**
+       *
+       *
+       * <pre>
+       * When specified, causes the job to fail if more than max_distance logical
+       * switches are required between VMs. Batch uses the most compact possible
+       * placement of VMs even when max_distance is not specified. An explicit
+       * max_distance makes that level of compactness a strict requirement.
+       * Not yet implemented
+       * </pre>
+       *
+       * <code>int64 max_distance = 2;</code>
+       *
+       * @return This builder for chaining.
+       */
+      public Builder clearMaxDistance() {
+        bitField0_ = (bitField0_ & ~0x00000002);
+        maxDistance_ = 0L;
+        onChanged();
+        return this;
+      }
+
+      @java.lang.Override
+      public final Builder setUnknownFields(
+          final com.google.protobuf.UnknownFieldSet unknownFields) {
+        return super.setUnknownFields(unknownFields);
+      }
+
+      @java.lang.Override
+      public final Builder mergeUnknownFields(
+          final com.google.protobuf.UnknownFieldSet unknownFields) {
+        return super.mergeUnknownFields(unknownFields);
+      }
+
+      // @@protoc_insertion_point(builder_scope:google.cloud.batch.v1alpha.AllocationPolicy.PlacementPolicy)
+    }
+
+    // @@protoc_insertion_point(class_scope:google.cloud.batch.v1alpha.AllocationPolicy.PlacementPolicy)
+    private static final com.google.cloud.batch.v1alpha.AllocationPolicy.PlacementPolicy
+        DEFAULT_INSTANCE;
+
+    static {
+      DEFAULT_INSTANCE = new com.google.cloud.batch.v1alpha.AllocationPolicy.PlacementPolicy();
+    }
+
+    public static com.google.cloud.batch.v1alpha.AllocationPolicy.PlacementPolicy
+        getDefaultInstance() {
+      return DEFAULT_INSTANCE;
+    }
+
+    private static final com.google.protobuf.Parser<PlacementPolicy> PARSER =
+        new com.google.protobuf.AbstractParser<PlacementPolicy>() {
+          @java.lang.Override
+          public PlacementPolicy parsePartialFrom(
+              com.google.protobuf.CodedInputStream input,
+              com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+              throws com.google.protobuf.InvalidProtocolBufferException {
+            Builder builder = newBuilder();
+            try {
+              builder.mergeFrom(input, extensionRegistry);
+            } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+              throw e.setUnfinishedMessage(builder.buildPartial());
+            } catch (com.google.protobuf.UninitializedMessageException e) {
+              throw e.asInvalidProtocolBufferException()
+                  .setUnfinishedMessage(builder.buildPartial());
+            } catch (java.io.IOException e) {
+              throw new com.google.protobuf.InvalidProtocolBufferException(e)
+                  .setUnfinishedMessage(builder.buildPartial());
+            }
+            return builder.buildPartial();
+          }
+        };
+
+    public static com.google.protobuf.Parser<PlacementPolicy> parser() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public com.google.protobuf.Parser<PlacementPolicy> getParserForType() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public com.google.cloud.batch.v1alpha.AllocationPolicy.PlacementPolicy
+        getDefaultInstanceForType() {
+      return DEFAULT_INSTANCE;
+    }
+  }
+
+  public static final int LOCATION_FIELD_NUMBER = 1;
+  private com.google.cloud.batch.v1alpha.AllocationPolicy.LocationPolicy location_;
+  /**
+   *
+   *
+   * <pre>
+   * Location where compute resources should be allocated for the Job.
+   * </pre>
+   *
+   * <code>.google.cloud.batch.v1alpha.AllocationPolicy.LocationPolicy location = 1;</code>
+   *
+   * @return Whether the location field is set.
+   */
+  @java.lang.Override
+  public boolean hasLocation() {
+    return location_ != null;
+  }
+  /**
+   *
+   *
+   * <pre>
+   * Location where compute resources should be allocated for the Job.
+   * </pre>
+   *
+   * <code>.google.cloud.batch.v1alpha.AllocationPolicy.LocationPolicy location = 1;</code>
+   *
+   * @return The location.
+   */
+  @java.lang.Override
+  public com.google.cloud.batch.v1alpha.AllocationPolicy.LocationPolicy getLocation() {
+    return location_ == null
+        ? com.google.cloud.batch.v1alpha.AllocationPolicy.LocationPolicy.getDefaultInstance()
+        : location_;
+  }
+  /**
+   *
+   *
+   * <pre>
+   * Location where compute resources should be allocated for the Job.
+   * </pre>
+   *
+   * <code>.google.cloud.batch.v1alpha.AllocationPolicy.LocationPolicy location = 1;</code>
+   */
+  @java.lang.Override
+  public com.google.cloud.batch.v1alpha.AllocationPolicy.LocationPolicyOrBuilder
+      getLocationOrBuilder() {
+    return location_ == null
+        ? com.google.cloud.batch.v1alpha.AllocationPolicy.LocationPolicy.getDefaultInstance()
+        : location_;
+  }
+
+  public static final int INSTANCE_FIELD_NUMBER = 2;
+  private com.google.cloud.batch.v1alpha.AllocationPolicy.InstancePolicy instance_;
+  /**
+   *
+   *
+   * <pre>
+   * Deprecated: please use instances[0].policy instead.
+   * </pre>
+   *
+   * <code>
+   * .google.cloud.batch.v1alpha.AllocationPolicy.InstancePolicy instance = 2 [deprecated = true];
+   * </code>
+   *
+   * @deprecated google.cloud.batch.v1alpha.AllocationPolicy.instance is deprecated. See
+   *     google/cloud/batch/v1alpha/job.proto;l=522
+   * @return Whether the instance field is set.
+   */
+  @java.lang.Override
+  @java.lang.Deprecated
+  public boolean hasInstance() {
+    return instance_ != null;
+  }
+  /**
+   *
+   *
+   * <pre>
+   * Deprecated: please use instances[0].policy instead.
+   * </pre>
+   *
+   * <code>
+   * .google.cloud.batch.v1alpha.AllocationPolicy.InstancePolicy instance = 2 [deprecated = true];
+   * </code>
+   *
+   * @deprecated google.cloud.batch.v1alpha.AllocationPolicy.instance is deprecated. See
+   *     google/cloud/batch/v1alpha/job.proto;l=522
+   * @return The instance.
+   */
+  @java.lang.Override
+  @java.lang.Deprecated
+  public com.google.cloud.batch.v1alpha.AllocationPolicy.InstancePolicy getInstance() {
+    return instance_ == null
+        ? com.google.cloud.batch.v1alpha.AllocationPolicy.InstancePolicy.getDefaultInstance()
+        : instance_;
+  }
+  /**
+   *
+   *
+   * <pre>
+   * Deprecated: please use instances[0].policy instead.
+   * </pre>
+   *
+   * <code>
+   * .google.cloud.batch.v1alpha.AllocationPolicy.InstancePolicy instance = 2 [deprecated = true];
+   * </code>
+   */
+  @java.lang.Override
+  @java.lang.Deprecated
+  public com.google.cloud.batch.v1alpha.AllocationPolicy.InstancePolicyOrBuilder
+      getInstanceOrBuilder() {
+    return instance_ == null
+        ? com.google.cloud.batch.v1alpha.AllocationPolicy.InstancePolicy.getDefaultInstance()
+        : instance_;
+  }
+
+  public static final int INSTANCES_FIELD_NUMBER = 8;
+
+  @SuppressWarnings("serial")
+  private java.util.List<com.google.cloud.batch.v1alpha.AllocationPolicy.InstancePolicyOrTemplate>
+      instances_;
+  /**
+   *
+   *
+   * <pre>
+   * Describe instances that can be created by this AllocationPolicy.
+   * Only instances[0] is supported now.
+   * </pre>
+   *
+   * <code>
+   * repeated .google.cloud.batch.v1alpha.AllocationPolicy.InstancePolicyOrTemplate instances = 8;
+   * </code>
+   */
+  @java.lang.Override
+  public java.util.List<com.google.cloud.batch.v1alpha.AllocationPolicy.InstancePolicyOrTemplate>
+      getInstancesList() {
+    return instances_;
+  }
+  /**
+   *
+   *
+   * <pre>
+   * Describe instances that can be created by this AllocationPolicy.
+   * Only instances[0] is supported now.
+   * </pre>
+   *
+   * <code>
+   * repeated .google.cloud.batch.v1alpha.AllocationPolicy.InstancePolicyOrTemplate instances = 8;
+   * </code>
+   */
+  @java.lang.Override
+  public java.util.List<
+          ? extends
+              com.google.cloud.batch.v1alpha.AllocationPolicy.InstancePolicyOrTemplateOrBuilder>
+      getInstancesOrBuilderList() {
+    return instances_;
+  }
+  /**
+   *
+   *
+   * <pre>
+   * Describe instances that can be created by this AllocationPolicy.
+   * Only instances[0] is supported now.
+   * </pre>
+   *
+   * <code>
+   * repeated .google.cloud.batch.v1alpha.AllocationPolicy.InstancePolicyOrTemplate instances = 8;
+   * </code>
+   */
+  @java.lang.Override
+  public int getInstancesCount() {
+    return instances_.size();
+  }
+  /**
+   *
+   *
+   * <pre>
+   * Describe instances that can be created by this AllocationPolicy.
+   * Only instances[0] is supported now.
+   * </pre>
+   *
+   * <code>
+   * repeated .google.cloud.batch.v1alpha.AllocationPolicy.InstancePolicyOrTemplate instances = 8;
+   * </code>
+   */
+  @java.lang.Override
+  public com.google.cloud.batch.v1alpha.AllocationPolicy.InstancePolicyOrTemplate getInstances(
+      int index) {
+    return instances_.get(index);
+  }
+  /**
+   *
+   *
+   * <pre>
+   * Describe instances that can be created by this AllocationPolicy.
+   * Only instances[0] is supported now.
+   * </pre>
+   *
+   * <code>
+   * repeated .google.cloud.batch.v1alpha.AllocationPolicy.InstancePolicyOrTemplate instances = 8;
+   * </code>
+   */
+  @java.lang.Override
+  public com.google.cloud.batch.v1alpha.AllocationPolicy.InstancePolicyOrTemplateOrBuilder
+      getInstancesOrBuilder(int index) {
+    return instances_.get(index);
+  }
+
+  public static final int INSTANCE_TEMPLATES_FIELD_NUMBER = 3;
+
+  @SuppressWarnings("serial")
+  private com.google.protobuf.LazyStringList instanceTemplates_;
+  /**
+   *
+   *
+   * <pre>
+   * Deprecated: please use instances[0].template instead.
+   * </pre>
+   *
+   * <code>repeated string instance_templates = 3 [deprecated = true];</code>
    *
    * @deprecated google.cloud.batch.v1alpha.AllocationPolicy.instance_templates is deprecated. See
-   *     google/cloud/batch/v1alpha/job.proto;l=499
+   *     google/cloud/batch/v1alpha/job.proto;l=529
    * @return A list containing the instanceTemplates.
    */
   @java.lang.Deprecated
@@ -12410,7 +13257,7 @@ public com.google.protobuf.ProtocolStringList getInstanceTemplatesList() {
    * <code>repeated string instance_templates = 3 [deprecated = true];</code>
    *
    * @deprecated google.cloud.batch.v1alpha.AllocationPolicy.instance_templates is deprecated. See
-   *     google/cloud/batch/v1alpha/job.proto;l=499
+   *     google/cloud/batch/v1alpha/job.proto;l=529
    * @return The count of instanceTemplates.
    */
   @java.lang.Deprecated
@@ -12427,7 +13274,7 @@ public int getInstanceTemplatesCount() {
    * <code>repeated string instance_templates = 3 [deprecated = true];</code>
    *
    * @deprecated google.cloud.batch.v1alpha.AllocationPolicy.instance_templates is deprecated. See
-   *     google/cloud/batch/v1alpha/job.proto;l=499
+   *     google/cloud/batch/v1alpha/job.proto;l=529
    * @param index The index of the element to return.
    * @return The instanceTemplates at the given index.
    */
@@ -12445,7 +13292,7 @@ public java.lang.String getInstanceTemplates(int index) {
    * <code>repeated string instance_templates = 3 [deprecated = true];</code>
    *
    * @deprecated google.cloud.batch.v1alpha.AllocationPolicy.instance_templates is deprecated. See
-   *     google/cloud/batch/v1alpha/job.proto;l=499
+   *     google/cloud/batch/v1alpha/job.proto;l=529
    * @param index The index of the value to return.
    * @return The bytes of the instanceTemplates at the given index.
    */
@@ -12486,7 +13333,7 @@ public com.google.cloud.batch.v1alpha.AllocationPolicy.ProvisioningModel convert
    * </code>
    *
    * @deprecated google.cloud.batch.v1alpha.AllocationPolicy.provisioning_models is deprecated. See
-   *     google/cloud/batch/v1alpha/job.proto;l=502
+   *     google/cloud/batch/v1alpha/job.proto;l=532
    * @return A list containing the provisioningModels.
    */
   @java.lang.Override
@@ -12509,7 +13356,7 @@ public com.google.cloud.batch.v1alpha.AllocationPolicy.ProvisioningModel convert
    * </code>
    *
    * @deprecated google.cloud.batch.v1alpha.AllocationPolicy.provisioning_models is deprecated. See
-   *     google/cloud/batch/v1alpha/job.proto;l=502
+   *     google/cloud/batch/v1alpha/job.proto;l=532
    * @return The count of provisioningModels.
    */
   @java.lang.Override
@@ -12529,7 +13376,7 @@ public int getProvisioningModelsCount() {
    * </code>
    *
    * @deprecated google.cloud.batch.v1alpha.AllocationPolicy.provisioning_models is deprecated. See
-   *     google/cloud/batch/v1alpha/job.proto;l=502
+   *     google/cloud/batch/v1alpha/job.proto;l=532
    * @param index The index of the element to return.
    * @return The provisioningModels at the given index.
    */
@@ -12551,7 +13398,7 @@ public com.google.cloud.batch.v1alpha.AllocationPolicy.ProvisioningModel getProv
    * </code>
    *
    * @deprecated google.cloud.batch.v1alpha.AllocationPolicy.provisioning_models is deprecated. See
-   *     google/cloud/batch/v1alpha/job.proto;l=502
+   *     google/cloud/batch/v1alpha/job.proto;l=532
    * @return A list containing the enum numeric values on the wire for provisioningModels.
    */
   @java.lang.Override
@@ -12571,7 +13418,7 @@ public java.util.List<java.lang.Integer> getProvisioningModelsValueList() {
    * </code>
    *
    * @deprecated google.cloud.batch.v1alpha.AllocationPolicy.provisioning_models is deprecated. See
-   *     google/cloud/batch/v1alpha/job.proto;l=502
+   *     google/cloud/batch/v1alpha/job.proto;l=532
    * @param index The index of the value to return.
    * @return The enum numeric value on the wire of provisioningModels at the given index.
    */
@@ -12597,7 +13444,7 @@ public int getProvisioningModelsValue(int index) {
    * <code>string service_account_email = 5 [deprecated = true];</code>
    *
    * @deprecated google.cloud.batch.v1alpha.AllocationPolicy.service_account_email is deprecated.
-   *     See google/cloud/batch/v1alpha/job.proto;l=505
+   *     See google/cloud/batch/v1alpha/job.proto;l=535
    * @return The serviceAccountEmail.
    */
   @java.lang.Override
@@ -12623,7 +13470,7 @@ public java.lang.String getServiceAccountEmail() {
    * <code>string service_account_email = 5 [deprecated = true];</code>
    *
    * @deprecated google.cloud.batch.v1alpha.AllocationPolicy.service_account_email is deprecated.
-   *     See google/cloud/batch/v1alpha/job.proto;l=505
+   *     See google/cloud/batch/v1alpha/job.proto;l=535
    * @return The bytes for serviceAccountEmail.
    */
   @java.lang.Override
@@ -12867,6 +13714,57 @@ public com.google.cloud.batch.v1alpha.AllocationPolicy.NetworkPolicy getNetwork(
         : network_;
   }
 
+  public static final int PLACEMENT_FIELD_NUMBER = 10;
+  private com.google.cloud.batch.v1alpha.AllocationPolicy.PlacementPolicy placement_;
+  /**
+   *
+   *
+   * <pre>
+   * The placement policy.
+   * </pre>
+   *
+   * <code>.google.cloud.batch.v1alpha.AllocationPolicy.PlacementPolicy placement = 10;</code>
+   *
+   * @return Whether the placement field is set.
+   */
+  @java.lang.Override
+  public boolean hasPlacement() {
+    return placement_ != null;
+  }
+  /**
+   *
+   *
+   * <pre>
+   * The placement policy.
+   * </pre>
+   *
+   * <code>.google.cloud.batch.v1alpha.AllocationPolicy.PlacementPolicy placement = 10;</code>
+   *
+   * @return The placement.
+   */
+  @java.lang.Override
+  public com.google.cloud.batch.v1alpha.AllocationPolicy.PlacementPolicy getPlacement() {
+    return placement_ == null
+        ? com.google.cloud.batch.v1alpha.AllocationPolicy.PlacementPolicy.getDefaultInstance()
+        : placement_;
+  }
+  /**
+   *
+   *
+   * <pre>
+   * The placement policy.
+   * </pre>
+   *
+   * <code>.google.cloud.batch.v1alpha.AllocationPolicy.PlacementPolicy placement = 10;</code>
+   */
+  @java.lang.Override
+  public com.google.cloud.batch.v1alpha.AllocationPolicy.PlacementPolicyOrBuilder
+      getPlacementOrBuilder() {
+    return placement_ == null
+        ? com.google.cloud.batch.v1alpha.AllocationPolicy.PlacementPolicy.getDefaultInstance()
+        : placement_;
+  }
+
   private byte memoizedIsInitialized = -1;
 
   @java.lang.Override
@@ -12912,6 +13810,9 @@ public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io
     if (serviceAccount_ != null) {
       output.writeMessage(9, getServiceAccount());
     }
+    if (placement_ != null) {
+      output.writeMessage(10, getPlacement());
+    }
     getUnknownFields().writeTo(output);
   }
 
@@ -12970,6 +13871,9 @@ public int getSerializedSize() {
     if (serviceAccount_ != null) {
       size += com.google.protobuf.CodedOutputStream.computeMessageSize(9, getServiceAccount());
     }
+    if (placement_ != null) {
+      size += com.google.protobuf.CodedOutputStream.computeMessageSize(10, getPlacement());
+    }
     size += getUnknownFields().getSerializedSize();
     memoizedSize = size;
     return size;
@@ -13007,6 +13911,10 @@ public boolean equals(final java.lang.Object obj) {
     if (hasNetwork()) {
       if (!getNetwork().equals(other.getNetwork())) return false;
     }
+    if (hasPlacement() != other.hasPlacement()) return false;
+    if (hasPlacement()) {
+      if (!getPlacement().equals(other.getPlacement())) return false;
+    }
     if (!getUnknownFields().equals(other.getUnknownFields())) return false;
     return true;
   }
@@ -13052,6 +13960,10 @@ public int hashCode() {
       hash = (37 * hash) + NETWORK_FIELD_NUMBER;
       hash = (53 * hash) + getNetwork().hashCode();
     }
+    if (hasPlacement()) {
+      hash = (37 * hash) + PLACEMENT_FIELD_NUMBER;
+      hash = (53 * hash) + getPlacement().hashCode();
+    }
     hash = (29 * hash) + getUnknownFields().hashCode();
     memoizedHashCode = hash;
     return hash;
@@ -13245,6 +14157,11 @@ public Builder clear() {
         networkBuilder_.dispose();
         networkBuilder_ = null;
       }
+      placement_ = null;
+      if (placementBuilder_ != null) {
+        placementBuilder_.dispose();
+        placementBuilder_ = null;
+      }
       return this;
     }
 
@@ -13325,6 +14242,9 @@ private void buildPartial0(com.google.cloud.batch.v1alpha.AllocationPolicy resul
       if (((from_bitField0_ & 0x00000100) != 0)) {
         result.network_ = networkBuilder_ == null ? network_ : networkBuilder_.build();
       }
+      if (((from_bitField0_ & 0x00000200) != 0)) {
+        result.placement_ = placementBuilder_ == null ? placement_ : placementBuilder_.build();
+      }
     }
 
     @java.lang.Override
@@ -13439,6 +14359,9 @@ public Builder mergeFrom(com.google.cloud.batch.v1alpha.AllocationPolicy other)
       if (other.hasNetwork()) {
         mergeNetwork(other.getNetwork());
       }
+      if (other.hasPlacement()) {
+        mergePlacement(other.getPlacement());
+      }
       this.mergeUnknownFields(other.getUnknownFields());
       onChanged();
       return this;
@@ -13548,6 +14471,12 @@ public Builder mergeFrom(
                 bitField0_ |= 0x00000040;
                 break;
               } // case 74
+            case 82:
+              {
+                input.readMessage(getPlacementFieldBuilder().getBuilder(), extensionRegistry);
+                bitField0_ |= 0x00000200;
+                break;
+              } // case 82
             default:
               {
                 if (!super.parseUnknownField(input, extensionRegistry, tag)) {
@@ -13775,7 +14704,7 @@ public Builder clearLocation() {
      * </code>
      *
      * @deprecated google.cloud.batch.v1alpha.AllocationPolicy.instance is deprecated. See
-     *     google/cloud/batch/v1alpha/job.proto;l=492
+     *     google/cloud/batch/v1alpha/job.proto;l=522
      * @return Whether the instance field is set.
      */
     @java.lang.Deprecated
@@ -13794,7 +14723,7 @@ public boolean hasInstance() {
      * </code>
      *
      * @deprecated google.cloud.batch.v1alpha.AllocationPolicy.instance is deprecated. See
-     *     google/cloud/batch/v1alpha/job.proto;l=492
+     *     google/cloud/batch/v1alpha/job.proto;l=522
      * @return The instance.
      */
     @java.lang.Deprecated
@@ -14427,7 +15356,7 @@ private void ensureInstanceTemplatesIsMutable() {
      * <code>repeated string instance_templates = 3 [deprecated = true];</code>
      *
      * @deprecated google.cloud.batch.v1alpha.AllocationPolicy.instance_templates is deprecated. See
-     *     google/cloud/batch/v1alpha/job.proto;l=499
+     *     google/cloud/batch/v1alpha/job.proto;l=529
      * @return A list containing the instanceTemplates.
      */
     @java.lang.Deprecated
@@ -14444,7 +15373,7 @@ public com.google.protobuf.ProtocolStringList getInstanceTemplatesList() {
      * <code>repeated string instance_templates = 3 [deprecated = true];</code>
      *
      * @deprecated google.cloud.batch.v1alpha.AllocationPolicy.instance_templates is deprecated. See
-     *     google/cloud/batch/v1alpha/job.proto;l=499
+     *     google/cloud/batch/v1alpha/job.proto;l=529
      * @return The count of instanceTemplates.
      */
     @java.lang.Deprecated
@@ -14461,7 +15390,7 @@ public int getInstanceTemplatesCount() {
      * <code>repeated string instance_templates = 3 [deprecated = true];</code>
      *
      * @deprecated google.cloud.batch.v1alpha.AllocationPolicy.instance_templates is deprecated. See
-     *     google/cloud/batch/v1alpha/job.proto;l=499
+     *     google/cloud/batch/v1alpha/job.proto;l=529
      * @param index The index of the element to return.
      * @return The instanceTemplates at the given index.
      */
@@ -14479,7 +15408,7 @@ public java.lang.String getInstanceTemplates(int index) {
      * <code>repeated string instance_templates = 3 [deprecated = true];</code>
      *
      * @deprecated google.cloud.batch.v1alpha.AllocationPolicy.instance_templates is deprecated. See
-     *     google/cloud/batch/v1alpha/job.proto;l=499
+     *     google/cloud/batch/v1alpha/job.proto;l=529
      * @param index The index of the value to return.
      * @return The bytes of the instanceTemplates at the given index.
      */
@@ -14497,7 +15426,7 @@ public com.google.protobuf.ByteString getInstanceTemplatesBytes(int index) {
      * <code>repeated string instance_templates = 3 [deprecated = true];</code>
      *
      * @deprecated google.cloud.batch.v1alpha.AllocationPolicy.instance_templates is deprecated. See
-     *     google/cloud/batch/v1alpha/job.proto;l=499
+     *     google/cloud/batch/v1alpha/job.proto;l=529
      * @param index The index to set the value at.
      * @param value The instanceTemplates to set.
      * @return This builder for chaining.
@@ -14522,7 +15451,7 @@ public Builder setInstanceTemplates(int index, java.lang.String value) {
      * <code>repeated string instance_templates = 3 [deprecated = true];</code>
      *
      * @deprecated google.cloud.batch.v1alpha.AllocationPolicy.instance_templates is deprecated. See
-     *     google/cloud/batch/v1alpha/job.proto;l=499
+     *     google/cloud/batch/v1alpha/job.proto;l=529
      * @param value The instanceTemplates to add.
      * @return This builder for chaining.
      */
@@ -14546,7 +15475,7 @@ public Builder addInstanceTemplates(java.lang.String value) {
      * <code>repeated string instance_templates = 3 [deprecated = true];</code>
      *
      * @deprecated google.cloud.batch.v1alpha.AllocationPolicy.instance_templates is deprecated. See
-     *     google/cloud/batch/v1alpha/job.proto;l=499
+     *     google/cloud/batch/v1alpha/job.proto;l=529
      * @param values The instanceTemplates to add.
      * @return This builder for chaining.
      */
@@ -14567,7 +15496,7 @@ public Builder addAllInstanceTemplates(java.lang.Iterable<java.lang.String> valu
      * <code>repeated string instance_templates = 3 [deprecated = true];</code>
      *
      * @deprecated google.cloud.batch.v1alpha.AllocationPolicy.instance_templates is deprecated. See
-     *     google/cloud/batch/v1alpha/job.proto;l=499
+     *     google/cloud/batch/v1alpha/job.proto;l=529
      * @return This builder for chaining.
      */
     @java.lang.Deprecated
@@ -14587,7 +15516,7 @@ public Builder clearInstanceTemplates() {
      * <code>repeated string instance_templates = 3 [deprecated = true];</code>
      *
      * @deprecated google.cloud.batch.v1alpha.AllocationPolicy.instance_templates is deprecated. See
-     *     google/cloud/batch/v1alpha/job.proto;l=499
+     *     google/cloud/batch/v1alpha/job.proto;l=529
      * @param value The bytes of the instanceTemplates to add.
      * @return This builder for chaining.
      */
@@ -14624,7 +15553,7 @@ private void ensureProvisioningModelsIsMutable() {
      * </code>
      *
      * @deprecated google.cloud.batch.v1alpha.AllocationPolicy.provisioning_models is deprecated.
-     *     See google/cloud/batch/v1alpha/job.proto;l=502
+     *     See google/cloud/batch/v1alpha/job.proto;l=532
      * @return A list containing the provisioningModels.
      */
     @java.lang.Deprecated
@@ -14646,7 +15575,7 @@ private void ensureProvisioningModelsIsMutable() {
      * </code>
      *
      * @deprecated google.cloud.batch.v1alpha.AllocationPolicy.provisioning_models is deprecated.
-     *     See google/cloud/batch/v1alpha/job.proto;l=502
+     *     See google/cloud/batch/v1alpha/job.proto;l=532
      * @return The count of provisioningModels.
      */
     @java.lang.Deprecated
@@ -14665,7 +15594,7 @@ public int getProvisioningModelsCount() {
      * </code>
      *
      * @deprecated google.cloud.batch.v1alpha.AllocationPolicy.provisioning_models is deprecated.
-     *     See google/cloud/batch/v1alpha/job.proto;l=502
+     *     See google/cloud/batch/v1alpha/job.proto;l=532
      * @param index The index of the element to return.
      * @return The provisioningModels at the given index.
      */
@@ -14686,7 +15615,7 @@ public com.google.cloud.batch.v1alpha.AllocationPolicy.ProvisioningModel getProv
      * </code>
      *
      * @deprecated google.cloud.batch.v1alpha.AllocationPolicy.provisioning_models is deprecated.
-     *     See google/cloud/batch/v1alpha/job.proto;l=502
+     *     See google/cloud/batch/v1alpha/job.proto;l=532
      * @param index The index to set the value at.
      * @param value The provisioningModels to set.
      * @return This builder for chaining.
@@ -14714,7 +15643,7 @@ public Builder setProvisioningModels(
      * </code>
      *
      * @deprecated google.cloud.batch.v1alpha.AllocationPolicy.provisioning_models is deprecated.
-     *     See google/cloud/batch/v1alpha/job.proto;l=502
+     *     See google/cloud/batch/v1alpha/job.proto;l=532
      * @param value The provisioningModels to add.
      * @return This builder for chaining.
      */
@@ -14741,7 +15670,7 @@ public Builder addProvisioningModels(
      * </code>
      *
      * @deprecated google.cloud.batch.v1alpha.AllocationPolicy.provisioning_models is deprecated.
-     *     See google/cloud/batch/v1alpha/job.proto;l=502
+     *     See google/cloud/batch/v1alpha/job.proto;l=532
      * @param values The provisioningModels to add.
      * @return This builder for chaining.
      */
@@ -14769,7 +15698,7 @@ public Builder addAllProvisioningModels(
      * </code>
      *
      * @deprecated google.cloud.batch.v1alpha.AllocationPolicy.provisioning_models is deprecated.
-     *     See google/cloud/batch/v1alpha/job.proto;l=502
+     *     See google/cloud/batch/v1alpha/job.proto;l=532
      * @return This builder for chaining.
      */
     @java.lang.Deprecated
@@ -14791,7 +15720,7 @@ public Builder clearProvisioningModels() {
      * </code>
      *
      * @deprecated google.cloud.batch.v1alpha.AllocationPolicy.provisioning_models is deprecated.
-     *     See google/cloud/batch/v1alpha/job.proto;l=502
+     *     See google/cloud/batch/v1alpha/job.proto;l=532
      * @return A list containing the enum numeric values on the wire for provisioningModels.
      */
     @java.lang.Deprecated
@@ -14810,7 +15739,7 @@ public java.util.List<java.lang.Integer> getProvisioningModelsValueList() {
      * </code>
      *
      * @deprecated google.cloud.batch.v1alpha.AllocationPolicy.provisioning_models is deprecated.
-     *     See google/cloud/batch/v1alpha/job.proto;l=502
+     *     See google/cloud/batch/v1alpha/job.proto;l=532
      * @param index The index of the value to return.
      * @return The enum numeric value on the wire of provisioningModels at the given index.
      */
@@ -14830,7 +15759,7 @@ public int getProvisioningModelsValue(int index) {
      * </code>
      *
      * @deprecated google.cloud.batch.v1alpha.AllocationPolicy.provisioning_models is deprecated.
-     *     See google/cloud/batch/v1alpha/job.proto;l=502
+     *     See google/cloud/batch/v1alpha/job.proto;l=532
      * @param index The index to set the value at.
      * @param value The enum numeric value on the wire for provisioningModels to set.
      * @return This builder for chaining.
@@ -14854,7 +15783,7 @@ public Builder setProvisioningModelsValue(int index, int value) {
      * </code>
      *
      * @deprecated google.cloud.batch.v1alpha.AllocationPolicy.provisioning_models is deprecated.
-     *     See google/cloud/batch/v1alpha/job.proto;l=502
+     *     See google/cloud/batch/v1alpha/job.proto;l=532
      * @param value The enum numeric value on the wire for provisioningModels to add.
      * @return This builder for chaining.
      */
@@ -14877,7 +15806,7 @@ public Builder addProvisioningModelsValue(int value) {
      * </code>
      *
      * @deprecated google.cloud.batch.v1alpha.AllocationPolicy.provisioning_models is deprecated.
-     *     See google/cloud/batch/v1alpha/job.proto;l=502
+     *     See google/cloud/batch/v1alpha/job.proto;l=532
      * @param values The enum numeric values on the wire for provisioningModels to add.
      * @return This builder for chaining.
      */
@@ -14902,7 +15831,7 @@ public Builder addAllProvisioningModelsValue(java.lang.Iterable<java.lang.Intege
      * <code>string service_account_email = 5 [deprecated = true];</code>
      *
      * @deprecated google.cloud.batch.v1alpha.AllocationPolicy.service_account_email is deprecated.
-     *     See google/cloud/batch/v1alpha/job.proto;l=505
+     *     See google/cloud/batch/v1alpha/job.proto;l=535
      * @return The serviceAccountEmail.
      */
     @java.lang.Deprecated
@@ -14927,7 +15856,7 @@ public java.lang.String getServiceAccountEmail() {
      * <code>string service_account_email = 5 [deprecated = true];</code>
      *
      * @deprecated google.cloud.batch.v1alpha.AllocationPolicy.service_account_email is deprecated.
-     *     See google/cloud/batch/v1alpha/job.proto;l=505
+     *     See google/cloud/batch/v1alpha/job.proto;l=535
      * @return The bytes for serviceAccountEmail.
      */
     @java.lang.Deprecated
@@ -14952,7 +15881,7 @@ public com.google.protobuf.ByteString getServiceAccountEmailBytes() {
      * <code>string service_account_email = 5 [deprecated = true];</code>
      *
      * @deprecated google.cloud.batch.v1alpha.AllocationPolicy.service_account_email is deprecated.
-     *     See google/cloud/batch/v1alpha/job.proto;l=505
+     *     See google/cloud/batch/v1alpha/job.proto;l=535
      * @param value The serviceAccountEmail to set.
      * @return This builder for chaining.
      */
@@ -14976,7 +15905,7 @@ public Builder setServiceAccountEmail(java.lang.String value) {
      * <code>string service_account_email = 5 [deprecated = true];</code>
      *
      * @deprecated google.cloud.batch.v1alpha.AllocationPolicy.service_account_email is deprecated.
-     *     See google/cloud/batch/v1alpha/job.proto;l=505
+     *     See google/cloud/batch/v1alpha/job.proto;l=535
      * @return This builder for chaining.
      */
     @java.lang.Deprecated
@@ -14996,7 +15925,7 @@ public Builder clearServiceAccountEmail() {
      * <code>string service_account_email = 5 [deprecated = true];</code>
      *
      * @deprecated google.cloud.batch.v1alpha.AllocationPolicy.service_account_email is deprecated.
-     *     See google/cloud/batch/v1alpha/job.proto;l=505
+     *     See google/cloud/batch/v1alpha/job.proto;l=535
      * @param value The bytes for serviceAccountEmail to set.
      * @return This builder for chaining.
      */
@@ -15591,6 +16520,196 @@ public Builder clearNetwork() {
       return networkBuilder_;
     }
 
+    private com.google.cloud.batch.v1alpha.AllocationPolicy.PlacementPolicy placement_;
+    private com.google.protobuf.SingleFieldBuilderV3<
+            com.google.cloud.batch.v1alpha.AllocationPolicy.PlacementPolicy,
+            com.google.cloud.batch.v1alpha.AllocationPolicy.PlacementPolicy.Builder,
+            com.google.cloud.batch.v1alpha.AllocationPolicy.PlacementPolicyOrBuilder>
+        placementBuilder_;
+    /**
+     *
+     *
+     * <pre>
+     * The placement policy.
+     * </pre>
+     *
+     * <code>.google.cloud.batch.v1alpha.AllocationPolicy.PlacementPolicy placement = 10;</code>
+     *
+     * @return Whether the placement field is set.
+     */
+    public boolean hasPlacement() {
+      return ((bitField0_ & 0x00000200) != 0);
+    }
+    /**
+     *
+     *
+     * <pre>
+     * The placement policy.
+     * </pre>
+     *
+     * <code>.google.cloud.batch.v1alpha.AllocationPolicy.PlacementPolicy placement = 10;</code>
+     *
+     * @return The placement.
+     */
+    public com.google.cloud.batch.v1alpha.AllocationPolicy.PlacementPolicy getPlacement() {
+      if (placementBuilder_ == null) {
+        return placement_ == null
+            ? com.google.cloud.batch.v1alpha.AllocationPolicy.PlacementPolicy.getDefaultInstance()
+            : placement_;
+      } else {
+        return placementBuilder_.getMessage();
+      }
+    }
+    /**
+     *
+     *
+     * <pre>
+     * The placement policy.
+     * </pre>
+     *
+     * <code>.google.cloud.batch.v1alpha.AllocationPolicy.PlacementPolicy placement = 10;</code>
+     */
+    public Builder setPlacement(
+        com.google.cloud.batch.v1alpha.AllocationPolicy.PlacementPolicy value) {
+      if (placementBuilder_ == null) {
+        if (value == null) {
+          throw new NullPointerException();
+        }
+        placement_ = value;
+      } else {
+        placementBuilder_.setMessage(value);
+      }
+      bitField0_ |= 0x00000200;
+      onChanged();
+      return this;
+    }
+    /**
+     *
+     *
+     * <pre>
+     * The placement policy.
+     * </pre>
+     *
+     * <code>.google.cloud.batch.v1alpha.AllocationPolicy.PlacementPolicy placement = 10;</code>
+     */
+    public Builder setPlacement(
+        com.google.cloud.batch.v1alpha.AllocationPolicy.PlacementPolicy.Builder builderForValue) {
+      if (placementBuilder_ == null) {
+        placement_ = builderForValue.build();
+      } else {
+        placementBuilder_.setMessage(builderForValue.build());
+      }
+      bitField0_ |= 0x00000200;
+      onChanged();
+      return this;
+    }
+    /**
+     *
+     *
+     * <pre>
+     * The placement policy.
+     * </pre>
+     *
+     * <code>.google.cloud.batch.v1alpha.AllocationPolicy.PlacementPolicy placement = 10;</code>
+     */
+    public Builder mergePlacement(
+        com.google.cloud.batch.v1alpha.AllocationPolicy.PlacementPolicy value) {
+      if (placementBuilder_ == null) {
+        if (((bitField0_ & 0x00000200) != 0)
+            && placement_ != null
+            && placement_
+                != com.google.cloud.batch.v1alpha.AllocationPolicy.PlacementPolicy
+                    .getDefaultInstance()) {
+          getPlacementBuilder().mergeFrom(value);
+        } else {
+          placement_ = value;
+        }
+      } else {
+        placementBuilder_.mergeFrom(value);
+      }
+      bitField0_ |= 0x00000200;
+      onChanged();
+      return this;
+    }
+    /**
+     *
+     *
+     * <pre>
+     * The placement policy.
+     * </pre>
+     *
+     * <code>.google.cloud.batch.v1alpha.AllocationPolicy.PlacementPolicy placement = 10;</code>
+     */
+    public Builder clearPlacement() {
+      bitField0_ = (bitField0_ & ~0x00000200);
+      placement_ = null;
+      if (placementBuilder_ != null) {
+        placementBuilder_.dispose();
+        placementBuilder_ = null;
+      }
+      onChanged();
+      return this;
+    }
+    /**
+     *
+     *
+     * <pre>
+     * The placement policy.
+     * </pre>
+     *
+     * <code>.google.cloud.batch.v1alpha.AllocationPolicy.PlacementPolicy placement = 10;</code>
+     */
+    public com.google.cloud.batch.v1alpha.AllocationPolicy.PlacementPolicy.Builder
+        getPlacementBuilder() {
+      bitField0_ |= 0x00000200;
+      onChanged();
+      return getPlacementFieldBuilder().getBuilder();
+    }
+    /**
+     *
+     *
+     * <pre>
+     * The placement policy.
+     * </pre>
+     *
+     * <code>.google.cloud.batch.v1alpha.AllocationPolicy.PlacementPolicy placement = 10;</code>
+     */
+    public com.google.cloud.batch.v1alpha.AllocationPolicy.PlacementPolicyOrBuilder
+        getPlacementOrBuilder() {
+      if (placementBuilder_ != null) {
+        return placementBuilder_.getMessageOrBuilder();
+      } else {
+        return placement_ == null
+            ? com.google.cloud.batch.v1alpha.AllocationPolicy.PlacementPolicy.getDefaultInstance()
+            : placement_;
+      }
+    }
+    /**
+     *
+     *
+     * <pre>
+     * The placement policy.
+     * </pre>
+     *
+     * <code>.google.cloud.batch.v1alpha.AllocationPolicy.PlacementPolicy placement = 10;</code>
+     */
+    private com.google.protobuf.SingleFieldBuilderV3<
+            com.google.cloud.batch.v1alpha.AllocationPolicy.PlacementPolicy,
+            com.google.cloud.batch.v1alpha.AllocationPolicy.PlacementPolicy.Builder,
+            com.google.cloud.batch.v1alpha.AllocationPolicy.PlacementPolicyOrBuilder>
+        getPlacementFieldBuilder() {
+      if (placementBuilder_ == null) {
+        placementBuilder_ =
+            new com.google.protobuf.SingleFieldBuilderV3<
+                com.google.cloud.batch.v1alpha.AllocationPolicy.PlacementPolicy,
+                com.google.cloud.batch.v1alpha.AllocationPolicy.PlacementPolicy.Builder,
+                com.google.cloud.batch.v1alpha.AllocationPolicy.PlacementPolicyOrBuilder>(
+                getPlacement(), getParentForChildren(), isClean());
+        placement_ = null;
+      }
+      return placementBuilder_;
+    }
+
     @java.lang.Override
     public final Builder setUnknownFields(final com.google.protobuf.UnknownFieldSet unknownFields) {
       return super.setUnknownFields(unknownFields);
diff --git a/java-batch/proto-google-cloud-batch-v1alpha/src/main/java/com/google/cloud/batch/v1alpha/AllocationPolicyOrBuilder.java b/java-batch/proto-google-cloud-batch-v1alpha/src/main/java/com/google/cloud/batch/v1alpha/AllocationPolicyOrBuilder.java
index 7733e1347208..05b6348f52c9 100644
--- a/java-batch/proto-google-cloud-batch-v1alpha/src/main/java/com/google/cloud/batch/v1alpha/AllocationPolicyOrBuilder.java
+++ b/java-batch/proto-google-cloud-batch-v1alpha/src/main/java/com/google/cloud/batch/v1alpha/AllocationPolicyOrBuilder.java
@@ -70,7 +70,7 @@ public interface AllocationPolicyOrBuilder
    * </code>
    *
    * @deprecated google.cloud.batch.v1alpha.AllocationPolicy.instance is deprecated. See
-   *     google/cloud/batch/v1alpha/job.proto;l=492
+   *     google/cloud/batch/v1alpha/job.proto;l=522
    * @return Whether the instance field is set.
    */
   @java.lang.Deprecated
@@ -87,7 +87,7 @@ public interface AllocationPolicyOrBuilder
    * </code>
    *
    * @deprecated google.cloud.batch.v1alpha.AllocationPolicy.instance is deprecated. See
-   *     google/cloud/batch/v1alpha/job.proto;l=492
+   *     google/cloud/batch/v1alpha/job.proto;l=522
    * @return The instance.
    */
   @java.lang.Deprecated
@@ -187,7 +187,7 @@ public interface AllocationPolicyOrBuilder
    * <code>repeated string instance_templates = 3 [deprecated = true];</code>
    *
    * @deprecated google.cloud.batch.v1alpha.AllocationPolicy.instance_templates is deprecated. See
-   *     google/cloud/batch/v1alpha/job.proto;l=499
+   *     google/cloud/batch/v1alpha/job.proto;l=529
    * @return A list containing the instanceTemplates.
    */
   @java.lang.Deprecated
@@ -202,7 +202,7 @@ public interface AllocationPolicyOrBuilder
    * <code>repeated string instance_templates = 3 [deprecated = true];</code>
    *
    * @deprecated google.cloud.batch.v1alpha.AllocationPolicy.instance_templates is deprecated. See
-   *     google/cloud/batch/v1alpha/job.proto;l=499
+   *     google/cloud/batch/v1alpha/job.proto;l=529
    * @return The count of instanceTemplates.
    */
   @java.lang.Deprecated
@@ -217,7 +217,7 @@ public interface AllocationPolicyOrBuilder
    * <code>repeated string instance_templates = 3 [deprecated = true];</code>
    *
    * @deprecated google.cloud.batch.v1alpha.AllocationPolicy.instance_templates is deprecated. See
-   *     google/cloud/batch/v1alpha/job.proto;l=499
+   *     google/cloud/batch/v1alpha/job.proto;l=529
    * @param index The index of the element to return.
    * @return The instanceTemplates at the given index.
    */
@@ -233,7 +233,7 @@ public interface AllocationPolicyOrBuilder
    * <code>repeated string instance_templates = 3 [deprecated = true];</code>
    *
    * @deprecated google.cloud.batch.v1alpha.AllocationPolicy.instance_templates is deprecated. See
-   *     google/cloud/batch/v1alpha/job.proto;l=499
+   *     google/cloud/batch/v1alpha/job.proto;l=529
    * @param index The index of the value to return.
    * @return The bytes of the instanceTemplates at the given index.
    */
@@ -252,7 +252,7 @@ public interface AllocationPolicyOrBuilder
    * </code>
    *
    * @deprecated google.cloud.batch.v1alpha.AllocationPolicy.provisioning_models is deprecated. See
-   *     google/cloud/batch/v1alpha/job.proto;l=502
+   *     google/cloud/batch/v1alpha/job.proto;l=532
    * @return A list containing the provisioningModels.
    */
   @java.lang.Deprecated
@@ -270,7 +270,7 @@ public interface AllocationPolicyOrBuilder
    * </code>
    *
    * @deprecated google.cloud.batch.v1alpha.AllocationPolicy.provisioning_models is deprecated. See
-   *     google/cloud/batch/v1alpha/job.proto;l=502
+   *     google/cloud/batch/v1alpha/job.proto;l=532
    * @return The count of provisioningModels.
    */
   @java.lang.Deprecated
@@ -287,7 +287,7 @@ public interface AllocationPolicyOrBuilder
    * </code>
    *
    * @deprecated google.cloud.batch.v1alpha.AllocationPolicy.provisioning_models is deprecated. See
-   *     google/cloud/batch/v1alpha/job.proto;l=502
+   *     google/cloud/batch/v1alpha/job.proto;l=532
    * @param index The index of the element to return.
    * @return The provisioningModels at the given index.
    */
@@ -306,7 +306,7 @@ com.google.cloud.batch.v1alpha.AllocationPolicy.ProvisioningModel getProvisionin
    * </code>
    *
    * @deprecated google.cloud.batch.v1alpha.AllocationPolicy.provisioning_models is deprecated. See
-   *     google/cloud/batch/v1alpha/job.proto;l=502
+   *     google/cloud/batch/v1alpha/job.proto;l=532
    * @return A list containing the enum numeric values on the wire for provisioningModels.
    */
   @java.lang.Deprecated
@@ -323,7 +323,7 @@ com.google.cloud.batch.v1alpha.AllocationPolicy.ProvisioningModel getProvisionin
    * </code>
    *
    * @deprecated google.cloud.batch.v1alpha.AllocationPolicy.provisioning_models is deprecated. See
-   *     google/cloud/batch/v1alpha/job.proto;l=502
+   *     google/cloud/batch/v1alpha/job.proto;l=532
    * @param index The index of the value to return.
    * @return The enum numeric value on the wire of provisioningModels at the given index.
    */
@@ -340,7 +340,7 @@ com.google.cloud.batch.v1alpha.AllocationPolicy.ProvisioningModel getProvisionin
    * <code>string service_account_email = 5 [deprecated = true];</code>
    *
    * @deprecated google.cloud.batch.v1alpha.AllocationPolicy.service_account_email is deprecated.
-   *     See google/cloud/batch/v1alpha/job.proto;l=505
+   *     See google/cloud/batch/v1alpha/job.proto;l=535
    * @return The serviceAccountEmail.
    */
   @java.lang.Deprecated
@@ -355,7 +355,7 @@ com.google.cloud.batch.v1alpha.AllocationPolicy.ProvisioningModel getProvisionin
    * <code>string service_account_email = 5 [deprecated = true];</code>
    *
    * @deprecated google.cloud.batch.v1alpha.AllocationPolicy.service_account_email is deprecated.
-   *     See google/cloud/batch/v1alpha/job.proto;l=505
+   *     See google/cloud/batch/v1alpha/job.proto;l=535
    * @return The bytes for serviceAccountEmail.
    */
   @java.lang.Deprecated
@@ -518,4 +518,39 @@ java.lang.String getLabelsOrDefault(
    * <code>.google.cloud.batch.v1alpha.AllocationPolicy.NetworkPolicy network = 7;</code>
    */
   com.google.cloud.batch.v1alpha.AllocationPolicy.NetworkPolicyOrBuilder getNetworkOrBuilder();
+
+  /**
+   *
+   *
+   * <pre>
+   * The placement policy.
+   * </pre>
+   *
+   * <code>.google.cloud.batch.v1alpha.AllocationPolicy.PlacementPolicy placement = 10;</code>
+   *
+   * @return Whether the placement field is set.
+   */
+  boolean hasPlacement();
+  /**
+   *
+   *
+   * <pre>
+   * The placement policy.
+   * </pre>
+   *
+   * <code>.google.cloud.batch.v1alpha.AllocationPolicy.PlacementPolicy placement = 10;</code>
+   *
+   * @return The placement.
+   */
+  com.google.cloud.batch.v1alpha.AllocationPolicy.PlacementPolicy getPlacement();
+  /**
+   *
+   *
+   * <pre>
+   * The placement policy.
+   * </pre>
+   *
+   * <code>.google.cloud.batch.v1alpha.AllocationPolicy.PlacementPolicy placement = 10;</code>
+   */
+  com.google.cloud.batch.v1alpha.AllocationPolicy.PlacementPolicyOrBuilder getPlacementOrBuilder();
 }
diff --git a/java-batch/proto-google-cloud-batch-v1alpha/src/main/java/com/google/cloud/batch/v1alpha/BatchProto.java b/java-batch/proto-google-cloud-batch-v1alpha/src/main/java/com/google/cloud/batch/v1alpha/BatchProto.java
index 300c4db24566..f6f66d0909ca 100644
--- a/java-batch/proto-google-cloud-batch-v1alpha/src/main/java/com/google/cloud/batch/v1alpha/BatchProto.java
+++ b/java-batch/proto-google-cloud-batch-v1alpha/src/main/java/com/google/cloud/batch/v1alpha/BatchProto.java
@@ -88,61 +88,62 @@ public static com.google.protobuf.Descriptors.FileDescriptor getDescriptor() {
           + "A\001\"?\n\rGetJobRequest\022.\n\004name\030\001 \001(\tB \340A\002\372A"
           + "\032\n\030batch.googleapis.com/Job\"N\n\020DeleteJob"
           + "Request\022\014\n\004name\030\001 \001(\t\022\023\n\006reason\030\002 \001(\tB\003\340"
-          + "A\001\022\027\n\nrequest_id\030\004 \001(\tB\003\340A\001\"X\n\017ListJobsR"
-          + "equest\022\016\n\006parent\030\001 \001(\t\022\016\n\006filter\030\004 \001(\t\022\021"
-          + "\n\tpage_size\030\002 \001(\005\022\022\n\npage_token\030\003 \001(\t\"o\n"
-          + "\020ListJobsResponse\022-\n\004jobs\030\001 \003(\0132\037.google"
-          + ".cloud.batch.v1alpha.Job\022\027\n\017next_page_to"
-          + "ken\030\002 \001(\t\022\023\n\013unreachable\030\003 \003(\t\"\201\001\n\020ListT"
-          + "asksRequest\0226\n\006parent\030\001 \001(\tB&\340A\002\372A \n\036bat"
-          + "ch.googleapis.com/TaskGroup\022\016\n\006filter\030\002 "
-          + "\001(\t\022\021\n\tpage_size\030\003 \001(\005\022\022\n\npage_token\030\004 \001"
-          + "(\t\"r\n\021ListTasksResponse\022/\n\005tasks\030\001 \003(\0132 "
-          + ".google.cloud.batch.v1alpha.Task\022\027\n\017next"
-          + "_page_token\030\002 \001(\t\022\023\n\013unreachable\030\003 \003(\t\"A"
-          + "\n\016GetTaskRequest\022/\n\004name\030\001 \001(\tB!\340A\002\372A\033\n\031"
-          + "batch.googleapis.com/Task\"\200\002\n\021OperationM"
-          + "etadata\0224\n\013create_time\030\001 \001(\0132\032.google.pr"
-          + "otobuf.TimestampB\003\340A\003\0221\n\010end_time\030\002 \001(\0132"
-          + "\032.google.protobuf.TimestampB\003\340A\003\022\023\n\006targ"
-          + "et\030\003 \001(\tB\003\340A\003\022\021\n\004verb\030\004 \001(\tB\003\340A\003\022\033\n\016stat"
-          + "us_message\030\005 \001(\tB\003\340A\003\022#\n\026requested_cance"
-          + "llation\030\006 \001(\010B\003\340A\003\022\030\n\013api_version\030\007 \001(\tB"
-          + "\003\340A\0032\221\t\n\014BatchService\022\252\001\n\tCreateJob\022,.go"
-          + "ogle.cloud.batch.v1alpha.CreateJobReques"
-          + "t\032\037.google.cloud.batch.v1alpha.Job\"N\202\323\344\223"
-          + "\0024\"-/v1alpha/{parent=projects/*/location"
-          + "s/*}/jobs:\003job\332A\021parent,job,job_id\022\222\001\n\006G"
-          + "etJob\022).google.cloud.batch.v1alpha.GetJo"
-          + "bRequest\032\037.google.cloud.batch.v1alpha.Jo"
-          + "b\"<\202\323\344\223\002/\022-/v1alpha/{name=projects/*/loc"
-          + "ations/*/jobs/*}\332A\004name\022\337\001\n\tDeleteJob\022,."
-          + "google.cloud.batch.v1alpha.DeleteJobRequ"
-          + "est\032\035.google.longrunning.Operation\"\204\001\202\323\344"
-          + "\223\002/*-/v1alpha/{name=projects/*/locations"
-          + "/*/jobs/*}\332A\004name\312AE\n\025google.protobuf.Em"
-          + "pty\022,google.cloud.batch.v1alpha.Operatio"
-          + "nMetadata\022\245\001\n\010ListJobs\022+.google.cloud.ba"
-          + "tch.v1alpha.ListJobsRequest\032,.google.clo"
-          + "ud.batch.v1alpha.ListJobsResponse\">\202\323\344\223\002"
-          + "/\022-/v1alpha/{parent=projects/*/locations"
-          + "/*}/jobs\332A\006parent\022\252\001\n\007GetTask\022*.google.c"
-          + "loud.batch.v1alpha.GetTaskRequest\032 .goog"
-          + "le.cloud.batch.v1alpha.Task\"Q\202\323\344\223\002D\022B/v1"
-          + "alpha/{name=projects/*/locations/*/jobs/"
-          + "*/taskGroups/*/tasks/*}\332A\004name\022\275\001\n\tListT"
-          + "asks\022,.google.cloud.batch.v1alpha.ListTa"
-          + "sksRequest\032-.google.cloud.batch.v1alpha."
-          + "ListTasksResponse\"S\202\323\344\223\002D\022B/v1alpha/{par"
-          + "ent=projects/*/locations/*/jobs/*/taskGr"
-          + "oups/*}/tasks\332A\006parent\032H\312A\024batch.googlea"
-          + "pis.com\322A.https://www.googleapis.com/aut"
-          + "h/cloud-platformB\304\001\n\036com.google.cloud.ba"
-          + "tch.v1alphaB\nBatchProtoP\001Z4cloud.google."
-          + "com/go/batch/apiv1alpha/batchpb;batchpb\242"
-          + "\002\003GCB\252\002\032Google.Cloud.Batch.V1Alpha\312\002\032Goo"
-          + "gle\\Cloud\\Batch\\V1alpha\352\002\035Google::Cloud:"
-          + ":Batch::V1alphab\006proto3"
+          + "A\001\022\027\n\nrequest_id\030\004 \001(\tB\003\340A\001\"j\n\017ListJobsR"
+          + "equest\022\016\n\006parent\030\001 \001(\t\022\016\n\006filter\030\004 \001(\t\022\020"
+          + "\n\010order_by\030\005 \001(\t\022\021\n\tpage_size\030\002 \001(\005\022\022\n\np"
+          + "age_token\030\003 \001(\t\"o\n\020ListJobsResponse\022-\n\004j"
+          + "obs\030\001 \003(\0132\037.google.cloud.batch.v1alpha.J"
+          + "ob\022\027\n\017next_page_token\030\002 \001(\t\022\023\n\013unreachab"
+          + "le\030\003 \003(\t\"\223\001\n\020ListTasksRequest\0226\n\006parent\030"
+          + "\001 \001(\tB&\340A\002\372A \n\036batch.googleapis.com/Task"
+          + "Group\022\016\n\006filter\030\002 \001(\t\022\020\n\010order_by\030\005 \001(\t\022"
+          + "\021\n\tpage_size\030\003 \001(\005\022\022\n\npage_token\030\004 \001(\t\"r"
+          + "\n\021ListTasksResponse\022/\n\005tasks\030\001 \003(\0132 .goo"
+          + "gle.cloud.batch.v1alpha.Task\022\027\n\017next_pag"
+          + "e_token\030\002 \001(\t\022\023\n\013unreachable\030\003 \003(\t\"A\n\016Ge"
+          + "tTaskRequest\022/\n\004name\030\001 \001(\tB!\340A\002\372A\033\n\031batc"
+          + "h.googleapis.com/Task\"\200\002\n\021OperationMetad"
+          + "ata\0224\n\013create_time\030\001 \001(\0132\032.google.protob"
+          + "uf.TimestampB\003\340A\003\0221\n\010end_time\030\002 \001(\0132\032.go"
+          + "ogle.protobuf.TimestampB\003\340A\003\022\023\n\006target\030\003"
+          + " \001(\tB\003\340A\003\022\021\n\004verb\030\004 \001(\tB\003\340A\003\022\033\n\016status_m"
+          + "essage\030\005 \001(\tB\003\340A\003\022#\n\026requested_cancellat"
+          + "ion\030\006 \001(\010B\003\340A\003\022\030\n\013api_version\030\007 \001(\tB\003\340A\003"
+          + "2\221\t\n\014BatchService\022\252\001\n\tCreateJob\022,.google"
+          + ".cloud.batch.v1alpha.CreateJobRequest\032\037."
+          + "google.cloud.batch.v1alpha.Job\"N\202\323\344\223\0024\"-"
+          + "/v1alpha/{parent=projects/*/locations/*}"
+          + "/jobs:\003job\332A\021parent,job,job_id\022\222\001\n\006GetJo"
+          + "b\022).google.cloud.batch.v1alpha.GetJobReq"
+          + "uest\032\037.google.cloud.batch.v1alpha.Job\"<\202"
+          + "\323\344\223\002/\022-/v1alpha/{name=projects/*/locatio"
+          + "ns/*/jobs/*}\332A\004name\022\337\001\n\tDeleteJob\022,.goog"
+          + "le.cloud.batch.v1alpha.DeleteJobRequest\032"
+          + "\035.google.longrunning.Operation\"\204\001\202\323\344\223\002/*"
+          + "-/v1alpha/{name=projects/*/locations/*/j"
+          + "obs/*}\332A\004name\312AE\n\025google.protobuf.Empty\022"
+          + ",google.cloud.batch.v1alpha.OperationMet"
+          + "adata\022\245\001\n\010ListJobs\022+.google.cloud.batch."
+          + "v1alpha.ListJobsRequest\032,.google.cloud.b"
+          + "atch.v1alpha.ListJobsResponse\">\202\323\344\223\002/\022-/"
+          + "v1alpha/{parent=projects/*/locations/*}/"
+          + "jobs\332A\006parent\022\252\001\n\007GetTask\022*.google.cloud"
+          + ".batch.v1alpha.GetTaskRequest\032 .google.c"
+          + "loud.batch.v1alpha.Task\"Q\202\323\344\223\002D\022B/v1alph"
+          + "a/{name=projects/*/locations/*/jobs/*/ta"
+          + "skGroups/*/tasks/*}\332A\004name\022\275\001\n\tListTasks"
+          + "\022,.google.cloud.batch.v1alpha.ListTasksR"
+          + "equest\032-.google.cloud.batch.v1alpha.List"
+          + "TasksResponse\"S\202\323\344\223\002D\022B/v1alpha/{parent="
+          + "projects/*/locations/*/jobs/*/taskGroups"
+          + "/*}/tasks\332A\006parent\032H\312A\024batch.googleapis."
+          + "com\322A.https://www.googleapis.com/auth/cl"
+          + "oud-platformB\304\001\n\036com.google.cloud.batch."
+          + "v1alphaB\nBatchProtoP\001Z4cloud.google.com/"
+          + "go/batch/apiv1alpha/batchpb;batchpb\242\002\003GC"
+          + "B\252\002\032Google.Cloud.Batch.V1Alpha\312\002\032Google\\"
+          + "Cloud\\Batch\\V1alpha\352\002\035Google::Cloud::Bat"
+          + "ch::V1alphab\006proto3"
     };
     descriptor =
         com.google.protobuf.Descriptors.FileDescriptor.internalBuildGeneratedFileFrom(
@@ -188,7 +189,7 @@ public static com.google.protobuf.Descriptors.FileDescriptor getDescriptor() {
         new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
             internal_static_google_cloud_batch_v1alpha_ListJobsRequest_descriptor,
             new java.lang.String[] {
-              "Parent", "Filter", "PageSize", "PageToken",
+              "Parent", "Filter", "OrderBy", "PageSize", "PageToken",
             });
     internal_static_google_cloud_batch_v1alpha_ListJobsResponse_descriptor =
         getDescriptor().getMessageTypes().get(4);
@@ -204,7 +205,7 @@ public static com.google.protobuf.Descriptors.FileDescriptor getDescriptor() {
         new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
             internal_static_google_cloud_batch_v1alpha_ListTasksRequest_descriptor,
             new java.lang.String[] {
-              "Parent", "Filter", "PageSize", "PageToken",
+              "Parent", "Filter", "OrderBy", "PageSize", "PageToken",
             });
     internal_static_google_cloud_batch_v1alpha_ListTasksResponse_descriptor =
         getDescriptor().getMessageTypes().get(6);
diff --git a/java-batch/proto-google-cloud-batch-v1alpha/src/main/java/com/google/cloud/batch/v1alpha/JobProto.java b/java-batch/proto-google-cloud-batch-v1alpha/src/main/java/com/google/cloud/batch/v1alpha/JobProto.java
index 6612977cfb40..8614bf0c20f5 100644
--- a/java-batch/proto-google-cloud-batch-v1alpha/src/main/java/com/google/cloud/batch/v1alpha/JobProto.java
+++ b/java-batch/proto-google-cloud-batch-v1alpha/src/main/java/com/google/cloud/batch/v1alpha/JobProto.java
@@ -115,6 +115,10 @@ public static void registerAllExtensions(com.google.protobuf.ExtensionRegistry r
       internal_static_google_cloud_batch_v1alpha_AllocationPolicy_NetworkPolicy_descriptor;
   static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
       internal_static_google_cloud_batch_v1alpha_AllocationPolicy_NetworkPolicy_fieldAccessorTable;
+  static final com.google.protobuf.Descriptors.Descriptor
+      internal_static_google_cloud_batch_v1alpha_AllocationPolicy_PlacementPolicy_descriptor;
+  static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+      internal_static_google_cloud_batch_v1alpha_AllocationPolicy_PlacementPolicy_fieldAccessorTable;
   static final com.google.protobuf.Descriptors.Descriptor
       internal_static_google_cloud_batch_v1alpha_AllocationPolicy_LabelsEntry_descriptor;
   static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
@@ -217,7 +221,7 @@ public static com.google.protobuf.Descriptors.FileDescriptor getDescriptor() {
           + "e\030\003 \001(\0162,.google.cloud.batch.v1alpha.Tas"
           + "kStatus.State\"K\n\004Type\022\024\n\020TYPE_UNSPECIFIE"
           + "D\020\000\022\025\n\021JOB_STATE_CHANGED\020\001\022\026\n\022TASK_STATE"
-          + "_CHANGED\020\002\"\355\017\n\020AllocationPolicy\022M\n\010locat"
+          + "_CHANGED\020\002\"\374\020\n\020AllocationPolicy\022M\n\010locat"
           + "ion\030\001 \001(\0132;.google.cloud.batch.v1alpha.A"
           + "llocationPolicy.LocationPolicy\022Q\n\010instan"
           + "ce\030\002 \001(\0132;.google.cloud.batch.v1alpha.Al"
@@ -233,67 +237,71 @@ public static com.google.protobuf.Descriptors.FileDescriptor getDescriptor() {
           + "labels\030\006 \003(\01328.google.cloud.batch.v1alph"
           + "a.AllocationPolicy.LabelsEntry\022K\n\007networ"
           + "k\030\007 \001(\0132:.google.cloud.batch.v1alpha.All"
-          + "ocationPolicy.NetworkPolicy\032E\n\016LocationP"
-          + "olicy\022\031\n\021allowed_locations\030\001 \003(\t\022\030\n\020deni"
-          + "ed_locations\030\002 \003(\t\032q\n\004Disk\022\017\n\005image\030\004 \001("
-          + "\tH\000\022\022\n\010snapshot\030\005 \001(\tH\000\022\014\n\004type\030\001 \001(\t\022\017\n"
-          + "\007size_gb\030\002 \001(\003\022\026\n\016disk_interface\030\006 \001(\tB\r"
-          + "\n\013data_source\032\217\001\n\014AttachedDisk\022E\n\010new_di"
-          + "sk\030\001 \001(\01321.google.cloud.batch.v1alpha.Al"
-          + "locationPolicy.DiskH\000\022\027\n\rexisting_disk\030\002"
-          + " \001(\tH\000\022\023\n\013device_name\030\003 \001(\tB\n\n\010attached\032"
-          + "K\n\013Accelerator\022\014\n\004type\030\001 \001(\t\022\r\n\005count\030\002 "
-          + "\001(\003\022\037\n\023install_gpu_drivers\030\003 \001(\010B\002\030\001\032\264\003\n"
-          + "\016InstancePolicy\022!\n\025allowed_machine_types"
-          + "\030\001 \003(\tB\002\030\001\022\024\n\014machine_type\030\002 \001(\t\022\030\n\020min_"
-          + "cpu_platform\030\003 \001(\t\022Z\n\022provisioning_model"
-          + "\030\004 \001(\0162>.google.cloud.batch.v1alpha.Allo"
-          + "cationPolicy.ProvisioningModel\022N\n\014accele"
-          + "rators\030\005 \003(\01328.google.cloud.batch.v1alph"
-          + "a.AllocationPolicy.Accelerator\022D\n\tboot_d"
-          + "isk\030\010 \001(\01321.google.cloud.batch.v1alpha.A"
-          + "llocationPolicy.Disk\022H\n\005disks\030\006 \003(\01329.go"
+          + "ocationPolicy.NetworkPolicy\022O\n\tplacement"
+          + "\030\n \001(\0132<.google.cloud.batch.v1alpha.Allo"
+          + "cationPolicy.PlacementPolicy\032E\n\016Location"
+          + "Policy\022\031\n\021allowed_locations\030\001 \003(\t\022\030\n\020den"
+          + "ied_locations\030\002 \003(\t\032q\n\004Disk\022\017\n\005image\030\004 \001"
+          + "(\tH\000\022\022\n\010snapshot\030\005 \001(\tH\000\022\014\n\004type\030\001 \001(\t\022\017"
+          + "\n\007size_gb\030\002 \001(\003\022\026\n\016disk_interface\030\006 \001(\tB"
+          + "\r\n\013data_source\032\217\001\n\014AttachedDisk\022E\n\010new_d"
+          + "isk\030\001 \001(\01321.google.cloud.batch.v1alpha.A"
+          + "llocationPolicy.DiskH\000\022\027\n\rexisting_disk\030"
+          + "\002 \001(\tH\000\022\023\n\013device_name\030\003 \001(\tB\n\n\010attached"
+          + "\032K\n\013Accelerator\022\014\n\004type\030\001 \001(\t\022\r\n\005count\030\002"
+          + " \001(\003\022\037\n\023install_gpu_drivers\030\003 \001(\010B\002\030\001\032\264\003"
+          + "\n\016InstancePolicy\022!\n\025allowed_machine_type"
+          + "s\030\001 \003(\tB\002\030\001\022\024\n\014machine_type\030\002 \001(\t\022\030\n\020min"
+          + "_cpu_platform\030\003 \001(\t\022Z\n\022provisioning_mode"
+          + "l\030\004 \001(\0162>.google.cloud.batch.v1alpha.All"
+          + "ocationPolicy.ProvisioningModel\022N\n\014accel"
+          + "erators\030\005 \003(\01328.google.cloud.batch.v1alp"
+          + "ha.AllocationPolicy.Accelerator\022D\n\tboot_"
+          + "disk\030\010 \001(\01321.google.cloud.batch.v1alpha."
+          + "AllocationPolicy.Disk\022H\n\005disks\030\006 \003(\01329.g"
+          + "oogle.cloud.batch.v1alpha.AllocationPoli"
+          + "cy.AttachedDisk\022\023\n\013reservation\030\007 \001(\t\032\266\001\n"
+          + "\030InstancePolicyOrTemplate\022M\n\006policy\030\001 \001("
+          + "\0132;.google.cloud.batch.v1alpha.Allocatio"
+          + "nPolicy.InstancePolicyH\000\022\033\n\021instance_tem"
+          + "plate\030\002 \001(\tH\000\022\033\n\023install_gpu_drivers\030\003 \001"
+          + "(\010B\021\n\017policy_template\032W\n\020NetworkInterfac"
+          + "e\022\017\n\007network\030\001 \001(\t\022\022\n\nsubnetwork\030\002 \001(\t\022\036"
+          + "\n\026no_external_ip_address\030\003 \001(\010\032j\n\rNetwor"
+          + "kPolicy\022Y\n\022network_interfaces\030\001 \003(\0132=.go"
           + "ogle.cloud.batch.v1alpha.AllocationPolic"
-          + "y.AttachedDisk\022\023\n\013reservation\030\007 \001(\t\032\266\001\n\030"
-          + "InstancePolicyOrTemplate\022M\n\006policy\030\001 \001(\013"
-          + "2;.google.cloud.batch.v1alpha.Allocation"
-          + "Policy.InstancePolicyH\000\022\033\n\021instance_temp"
-          + "late\030\002 \001(\tH\000\022\033\n\023install_gpu_drivers\030\003 \001("
-          + "\010B\021\n\017policy_template\032W\n\020NetworkInterface"
-          + "\022\017\n\007network\030\001 \001(\t\022\022\n\nsubnetwork\030\002 \001(\t\022\036\n"
-          + "\026no_external_ip_address\030\003 \001(\010\032j\n\rNetwork"
-          + "Policy\022Y\n\022network_interfaces\030\001 \003(\0132=.goo"
-          + "gle.cloud.batch.v1alpha.AllocationPolicy"
-          + ".NetworkInterface\032-\n\013LabelsEntry\022\013\n\003key\030"
-          + "\001 \001(\t\022\r\n\005value\030\002 \001(\t:\0028\001\"`\n\021Provisioning"
-          + "Model\022\"\n\036PROVISIONING_MODEL_UNSPECIFIED\020"
-          + "\000\022\014\n\010STANDARD\020\001\022\010\n\004SPOT\020\002\022\017\n\013PREEMPTIBLE"
-          + "\020\003\"\351\005\n\tTaskGroup\022\021\n\004name\030\001 \001(\tB\003\340A\003\022<\n\tt"
-          + "ask_spec\030\003 \001(\0132$.google.cloud.batch.v1al"
-          + "pha.TaskSpecB\003\340A\002\022\022\n\ntask_count\030\004 \001(\003\022\023\n"
-          + "\013parallelism\030\005 \001(\003\022Q\n\021scheduling_policy\030"
-          + "\006 \001(\01626.google.cloud.batch.v1alpha.TaskG"
-          + "roup.SchedulingPolicy\022G\n\021allocation_poli"
-          + "cy\030\007 \001(\0132,.google.cloud.batch.v1alpha.Al"
-          + "locationPolicy\022A\n\006labels\030\010 \003(\01321.google."
-          + "cloud.batch.v1alpha.TaskGroup.LabelsEntr"
-          + "y\022B\n\021task_environments\030\t \003(\0132\'.google.cl"
-          + "oud.batch.v1alpha.Environment\022\033\n\023task_co"
-          + "unt_per_node\030\n \001(\003\022\032\n\022require_hosts_file"
-          + "\030\013 \001(\010\022\026\n\016permissive_ssh\030\014 \001(\010\032-\n\013Labels"
-          + "Entry\022\013\n\003key\030\001 \001(\t\022\r\n\005value\030\002 \001(\t:\0028\001\"N\n"
-          + "\020SchedulingPolicy\022!\n\035SCHEDULING_POLICY_U"
-          + "NSPECIFIED\020\000\022\027\n\023AS_SOON_AS_POSSIBLE\020\001:o\352"
-          + "Al\n\036batch.googleapis.com/TaskGroup\022Jproj"
-          + "ects/{project}/locations/{location}/jobs"
-          + "/{job}/taskGroups/{task_group}\"/\n\016Servic"
-          + "eAccount\022\r\n\005email\030\001 \001(\t\022\016\n\006scopes\030\002 \003(\tB"
-          + "\302\001\n\036com.google.cloud.batch.v1alphaB\010JobP"
-          + "rotoP\001Z4cloud.google.com/go/batch/apiv1a"
-          + "lpha/batchpb;batchpb\242\002\003GCB\252\002\032Google.Clou"
-          + "d.Batch.V1Alpha\312\002\032Google\\Cloud\\Batch\\V1a"
-          + "lpha\352\002\035Google::Cloud::Batch::V1alphab\006pr"
-          + "oto3"
+          + "y.NetworkInterface\032<\n\017PlacementPolicy\022\023\n"
+          + "\013collocation\030\001 \001(\t\022\024\n\014max_distance\030\002 \001(\003"
+          + "\032-\n\013LabelsEntry\022\013\n\003key\030\001 \001(\t\022\r\n\005value\030\002 "
+          + "\001(\t:\0028\001\"`\n\021ProvisioningModel\022\"\n\036PROVISIO"
+          + "NING_MODEL_UNSPECIFIED\020\000\022\014\n\010STANDARD\020\001\022\010"
+          + "\n\004SPOT\020\002\022\017\n\013PREEMPTIBLE\020\003\"\367\005\n\tTaskGroup\022"
+          + "\021\n\004name\030\001 \001(\tB\003\340A\003\022<\n\ttask_spec\030\003 \001(\0132$."
+          + "google.cloud.batch.v1alpha.TaskSpecB\003\340A\002"
+          + "\022\022\n\ntask_count\030\004 \001(\003\022\023\n\013parallelism\030\005 \001("
+          + "\003\022Q\n\021scheduling_policy\030\006 \001(\01626.google.cl"
+          + "oud.batch.v1alpha.TaskGroup.SchedulingPo"
+          + "licy\022G\n\021allocation_policy\030\007 \001(\0132,.google"
+          + ".cloud.batch.v1alpha.AllocationPolicy\022A\n"
+          + "\006labels\030\010 \003(\01321.google.cloud.batch.v1alp"
+          + "ha.TaskGroup.LabelsEntry\022B\n\021task_environ"
+          + "ments\030\t \003(\0132\'.google.cloud.batch.v1alpha"
+          + ".Environment\022\033\n\023task_count_per_node\030\n \001("
+          + "\003\022\032\n\022require_hosts_file\030\013 \001(\010\022\026\n\016permiss"
+          + "ive_ssh\030\014 \001(\010\032-\n\013LabelsEntry\022\013\n\003key\030\001 \001("
+          + "\t\022\r\n\005value\030\002 \001(\t:\0028\001\"\\\n\020SchedulingPolicy"
+          + "\022!\n\035SCHEDULING_POLICY_UNSPECIFIED\020\000\022\027\n\023A"
+          + "S_SOON_AS_POSSIBLE\020\001\022\014\n\010IN_ORDER\020\002:o\352Al\n"
+          + "\036batch.googleapis.com/TaskGroup\022Jproject"
+          + "s/{project}/locations/{location}/jobs/{j"
+          + "ob}/taskGroups/{task_group}\"/\n\016ServiceAc"
+          + "count\022\r\n\005email\030\001 \001(\t\022\016\n\006scopes\030\002 \003(\tB\302\001\n"
+          + "\036com.google.cloud.batch.v1alphaB\010JobProt"
+          + "oP\001Z4cloud.google.com/go/batch/apiv1alph"
+          + "a/batchpb;batchpb\242\002\003GCB\252\002\032Google.Cloud.B"
+          + "atch.V1Alpha\312\002\032Google\\Cloud\\Batch\\V1alph"
+          + "a\352\002\035Google::Cloud::Batch::V1alphab\006proto"
+          + "3"
     };
     descriptor =
         com.google.protobuf.Descriptors.FileDescriptor.internalBuildGeneratedFileFrom(
@@ -441,6 +449,7 @@ public static com.google.protobuf.Descriptors.FileDescriptor getDescriptor() {
               "ServiceAccount",
               "Labels",
               "Network",
+              "Placement",
             });
     internal_static_google_cloud_batch_v1alpha_AllocationPolicy_LocationPolicy_descriptor =
         internal_static_google_cloud_batch_v1alpha_AllocationPolicy_descriptor
@@ -529,10 +538,20 @@ public static com.google.protobuf.Descriptors.FileDescriptor getDescriptor() {
             new java.lang.String[] {
               "NetworkInterfaces",
             });
-    internal_static_google_cloud_batch_v1alpha_AllocationPolicy_LabelsEntry_descriptor =
+    internal_static_google_cloud_batch_v1alpha_AllocationPolicy_PlacementPolicy_descriptor =
         internal_static_google_cloud_batch_v1alpha_AllocationPolicy_descriptor
             .getNestedTypes()
             .get(8);
+    internal_static_google_cloud_batch_v1alpha_AllocationPolicy_PlacementPolicy_fieldAccessorTable =
+        new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
+            internal_static_google_cloud_batch_v1alpha_AllocationPolicy_PlacementPolicy_descriptor,
+            new java.lang.String[] {
+              "Collocation", "MaxDistance",
+            });
+    internal_static_google_cloud_batch_v1alpha_AllocationPolicy_LabelsEntry_descriptor =
+        internal_static_google_cloud_batch_v1alpha_AllocationPolicy_descriptor
+            .getNestedTypes()
+            .get(9);
     internal_static_google_cloud_batch_v1alpha_AllocationPolicy_LabelsEntry_fieldAccessorTable =
         new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
             internal_static_google_cloud_batch_v1alpha_AllocationPolicy_LabelsEntry_descriptor,
diff --git a/java-batch/proto-google-cloud-batch-v1alpha/src/main/java/com/google/cloud/batch/v1alpha/ListJobsRequest.java b/java-batch/proto-google-cloud-batch-v1alpha/src/main/java/com/google/cloud/batch/v1alpha/ListJobsRequest.java
index 335ea79b95b1..a5c8abbce823 100644
--- a/java-batch/proto-google-cloud-batch-v1alpha/src/main/java/com/google/cloud/batch/v1alpha/ListJobsRequest.java
+++ b/java-batch/proto-google-cloud-batch-v1alpha/src/main/java/com/google/cloud/batch/v1alpha/ListJobsRequest.java
@@ -40,6 +40,7 @@ private ListJobsRequest(com.google.protobuf.GeneratedMessageV3.Builder<?> builde
   private ListJobsRequest() {
     parent_ = "";
     filter_ = "";
+    orderBy_ = "";
     pageToken_ = "";
   }
 
@@ -171,6 +172,59 @@ public com.google.protobuf.ByteString getFilterBytes() {
     }
   }
 
+  public static final int ORDER_BY_FIELD_NUMBER = 5;
+
+  @SuppressWarnings("serial")
+  private volatile java.lang.Object orderBy_ = "";
+  /**
+   *
+   *
+   * <pre>
+   * Sort results. Supported are "name", "name desc", "create_time",
+   * "create_time desc", and "".
+   * </pre>
+   *
+   * <code>string order_by = 5;</code>
+   *
+   * @return The orderBy.
+   */
+  @java.lang.Override
+  public java.lang.String getOrderBy() {
+    java.lang.Object ref = orderBy_;
+    if (ref instanceof java.lang.String) {
+      return (java.lang.String) ref;
+    } else {
+      com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref;
+      java.lang.String s = bs.toStringUtf8();
+      orderBy_ = s;
+      return s;
+    }
+  }
+  /**
+   *
+   *
+   * <pre>
+   * Sort results. Supported are "name", "name desc", "create_time",
+   * "create_time desc", and "".
+   * </pre>
+   *
+   * <code>string order_by = 5;</code>
+   *
+   * @return The bytes for orderBy.
+   */
+  @java.lang.Override
+  public com.google.protobuf.ByteString getOrderByBytes() {
+    java.lang.Object ref = orderBy_;
+    if (ref instanceof java.lang.String) {
+      com.google.protobuf.ByteString b =
+          com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref);
+      orderBy_ = b;
+      return b;
+    } else {
+      return (com.google.protobuf.ByteString) ref;
+    }
+  }
+
   public static final int PAGE_SIZE_FIELD_NUMBER = 2;
   private int pageSize_ = 0;
   /**
@@ -266,6 +320,9 @@ public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io
     if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(filter_)) {
       com.google.protobuf.GeneratedMessageV3.writeString(output, 4, filter_);
     }
+    if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(orderBy_)) {
+      com.google.protobuf.GeneratedMessageV3.writeString(output, 5, orderBy_);
+    }
     getUnknownFields().writeTo(output);
   }
 
@@ -287,6 +344,9 @@ public int getSerializedSize() {
     if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(filter_)) {
       size += com.google.protobuf.GeneratedMessageV3.computeStringSize(4, filter_);
     }
+    if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(orderBy_)) {
+      size += com.google.protobuf.GeneratedMessageV3.computeStringSize(5, orderBy_);
+    }
     size += getUnknownFields().getSerializedSize();
     memoizedSize = size;
     return size;
@@ -305,6 +365,7 @@ public boolean equals(final java.lang.Object obj) {
 
     if (!getParent().equals(other.getParent())) return false;
     if (!getFilter().equals(other.getFilter())) return false;
+    if (!getOrderBy().equals(other.getOrderBy())) return false;
     if (getPageSize() != other.getPageSize()) return false;
     if (!getPageToken().equals(other.getPageToken())) return false;
     if (!getUnknownFields().equals(other.getUnknownFields())) return false;
@@ -322,6 +383,8 @@ public int hashCode() {
     hash = (53 * hash) + getParent().hashCode();
     hash = (37 * hash) + FILTER_FIELD_NUMBER;
     hash = (53 * hash) + getFilter().hashCode();
+    hash = (37 * hash) + ORDER_BY_FIELD_NUMBER;
+    hash = (53 * hash) + getOrderBy().hashCode();
     hash = (37 * hash) + PAGE_SIZE_FIELD_NUMBER;
     hash = (53 * hash) + getPageSize();
     hash = (37 * hash) + PAGE_TOKEN_FIELD_NUMBER;
@@ -467,6 +530,7 @@ public Builder clear() {
       bitField0_ = 0;
       parent_ = "";
       filter_ = "";
+      orderBy_ = "";
       pageSize_ = 0;
       pageToken_ = "";
       return this;
@@ -512,9 +576,12 @@ private void buildPartial0(com.google.cloud.batch.v1alpha.ListJobsRequest result
         result.filter_ = filter_;
       }
       if (((from_bitField0_ & 0x00000004) != 0)) {
-        result.pageSize_ = pageSize_;
+        result.orderBy_ = orderBy_;
       }
       if (((from_bitField0_ & 0x00000008) != 0)) {
+        result.pageSize_ = pageSize_;
+      }
+      if (((from_bitField0_ & 0x00000010) != 0)) {
         result.pageToken_ = pageToken_;
       }
     }
@@ -574,12 +641,17 @@ public Builder mergeFrom(com.google.cloud.batch.v1alpha.ListJobsRequest other) {
         bitField0_ |= 0x00000002;
         onChanged();
       }
+      if (!other.getOrderBy().isEmpty()) {
+        orderBy_ = other.orderBy_;
+        bitField0_ |= 0x00000004;
+        onChanged();
+      }
       if (other.getPageSize() != 0) {
         setPageSize(other.getPageSize());
       }
       if (!other.getPageToken().isEmpty()) {
         pageToken_ = other.pageToken_;
-        bitField0_ |= 0x00000008;
+        bitField0_ |= 0x00000010;
         onChanged();
       }
       this.mergeUnknownFields(other.getUnknownFields());
@@ -617,13 +689,13 @@ public Builder mergeFrom(
             case 16:
               {
                 pageSize_ = input.readInt32();
-                bitField0_ |= 0x00000004;
+                bitField0_ |= 0x00000008;
                 break;
               } // case 16
             case 26:
               {
                 pageToken_ = input.readStringRequireUtf8();
-                bitField0_ |= 0x00000008;
+                bitField0_ |= 0x00000010;
                 break;
               } // case 26
             case 34:
@@ -632,6 +704,12 @@ public Builder mergeFrom(
                 bitField0_ |= 0x00000002;
                 break;
               } // case 34
+            case 42:
+              {
+                orderBy_ = input.readStringRequireUtf8();
+                bitField0_ |= 0x00000004;
+                break;
+              } // case 42
             default:
               {
                 if (!super.parseUnknownField(input, extensionRegistry, tag)) {
@@ -863,6 +941,117 @@ public Builder setFilterBytes(com.google.protobuf.ByteString value) {
       return this;
     }
 
+    private java.lang.Object orderBy_ = "";
+    /**
+     *
+     *
+     * <pre>
+     * Sort results. Supported are "name", "name desc", "create_time",
+     * "create_time desc", and "".
+     * </pre>
+     *
+     * <code>string order_by = 5;</code>
+     *
+     * @return The orderBy.
+     */
+    public java.lang.String getOrderBy() {
+      java.lang.Object ref = orderBy_;
+      if (!(ref instanceof java.lang.String)) {
+        com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref;
+        java.lang.String s = bs.toStringUtf8();
+        orderBy_ = s;
+        return s;
+      } else {
+        return (java.lang.String) ref;
+      }
+    }
+    /**
+     *
+     *
+     * <pre>
+     * Sort results. Supported are "name", "name desc", "create_time",
+     * "create_time desc", and "".
+     * </pre>
+     *
+     * <code>string order_by = 5;</code>
+     *
+     * @return The bytes for orderBy.
+     */
+    public com.google.protobuf.ByteString getOrderByBytes() {
+      java.lang.Object ref = orderBy_;
+      if (ref instanceof String) {
+        com.google.protobuf.ByteString b =
+            com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref);
+        orderBy_ = b;
+        return b;
+      } else {
+        return (com.google.protobuf.ByteString) ref;
+      }
+    }
+    /**
+     *
+     *
+     * <pre>
+     * Sort results. Supported are "name", "name desc", "create_time",
+     * "create_time desc", and "".
+     * </pre>
+     *
+     * <code>string order_by = 5;</code>
+     *
+     * @param value The orderBy to set.
+     * @return This builder for chaining.
+     */
+    public Builder setOrderBy(java.lang.String value) {
+      if (value == null) {
+        throw new NullPointerException();
+      }
+      orderBy_ = value;
+      bitField0_ |= 0x00000004;
+      onChanged();
+      return this;
+    }
+    /**
+     *
+     *
+     * <pre>
+     * Sort results. Supported are "name", "name desc", "create_time",
+     * "create_time desc", and "".
+     * </pre>
+     *
+     * <code>string order_by = 5;</code>
+     *
+     * @return This builder for chaining.
+     */
+    public Builder clearOrderBy() {
+      orderBy_ = getDefaultInstance().getOrderBy();
+      bitField0_ = (bitField0_ & ~0x00000004);
+      onChanged();
+      return this;
+    }
+    /**
+     *
+     *
+     * <pre>
+     * Sort results. Supported are "name", "name desc", "create_time",
+     * "create_time desc", and "".
+     * </pre>
+     *
+     * <code>string order_by = 5;</code>
+     *
+     * @param value The bytes for orderBy to set.
+     * @return This builder for chaining.
+     */
+    public Builder setOrderByBytes(com.google.protobuf.ByteString value) {
+      if (value == null) {
+        throw new NullPointerException();
+      }
+      checkByteStringIsUtf8(value);
+      orderBy_ = value;
+      bitField0_ |= 0x00000004;
+      onChanged();
+      return this;
+    }
+
     private int pageSize_;
     /**
      *
@@ -894,7 +1083,7 @@ public int getPageSize() {
     public Builder setPageSize(int value) {
 
       pageSize_ = value;
-      bitField0_ |= 0x00000004;
+      bitField0_ |= 0x00000008;
       onChanged();
       return this;
     }
@@ -910,7 +1099,7 @@ public Builder setPageSize(int value) {
      * @return This builder for chaining.
      */
     public Builder clearPageSize() {
-      bitField0_ = (bitField0_ & ~0x00000004);
+      bitField0_ = (bitField0_ & ~0x00000008);
       pageSize_ = 0;
       onChanged();
       return this;
@@ -978,7 +1167,7 @@ public Builder setPageToken(java.lang.String value) {
         throw new NullPointerException();
       }
       pageToken_ = value;
-      bitField0_ |= 0x00000008;
+      bitField0_ |= 0x00000010;
       onChanged();
       return this;
     }
@@ -995,7 +1184,7 @@ public Builder setPageToken(java.lang.String value) {
      */
     public Builder clearPageToken() {
       pageToken_ = getDefaultInstance().getPageToken();
-      bitField0_ = (bitField0_ & ~0x00000008);
+      bitField0_ = (bitField0_ & ~0x00000010);
       onChanged();
       return this;
     }
@@ -1017,7 +1206,7 @@ public Builder setPageTokenBytes(com.google.protobuf.ByteString value) {
       }
       checkByteStringIsUtf8(value);
       pageToken_ = value;
-      bitField0_ |= 0x00000008;
+      bitField0_ |= 0x00000010;
       onChanged();
       return this;
     }
diff --git a/java-batch/proto-google-cloud-batch-v1alpha/src/main/java/com/google/cloud/batch/v1alpha/ListJobsRequestOrBuilder.java b/java-batch/proto-google-cloud-batch-v1alpha/src/main/java/com/google/cloud/batch/v1alpha/ListJobsRequestOrBuilder.java
index 2b57adfcb07b..8c162d9d4595 100644
--- a/java-batch/proto-google-cloud-batch-v1alpha/src/main/java/com/google/cloud/batch/v1alpha/ListJobsRequestOrBuilder.java
+++ b/java-batch/proto-google-cloud-batch-v1alpha/src/main/java/com/google/cloud/batch/v1alpha/ListJobsRequestOrBuilder.java
@@ -73,6 +73,33 @@ public interface ListJobsRequestOrBuilder
    */
   com.google.protobuf.ByteString getFilterBytes();
 
+  /**
+   *
+   *
+   * <pre>
+   * Sort results. Supported are "name", "name desc", "create_time",
+   * "create_time desc", and "".
+   * </pre>
+   *
+   * <code>string order_by = 5;</code>
+   *
+   * @return The orderBy.
+   */
+  java.lang.String getOrderBy();
+  /**
+   *
+   *
+   * <pre>
+   * Sort results. Supported are "name", "name desc", "create_time",
+   * "create_time desc", and "".
+   * </pre>
+   *
+   * <code>string order_by = 5;</code>
+   *
+   * @return The bytes for orderBy.
+   */
+  com.google.protobuf.ByteString getOrderByBytes();
+
   /**
    *
    *
diff --git a/java-batch/proto-google-cloud-batch-v1alpha/src/main/java/com/google/cloud/batch/v1alpha/ListTasksRequest.java b/java-batch/proto-google-cloud-batch-v1alpha/src/main/java/com/google/cloud/batch/v1alpha/ListTasksRequest.java
index 24597d1cbb47..b60711651866 100644
--- a/java-batch/proto-google-cloud-batch-v1alpha/src/main/java/com/google/cloud/batch/v1alpha/ListTasksRequest.java
+++ b/java-batch/proto-google-cloud-batch-v1alpha/src/main/java/com/google/cloud/batch/v1alpha/ListTasksRequest.java
@@ -40,6 +40,7 @@ private ListTasksRequest(com.google.protobuf.GeneratedMessageV3.Builder<?> build
   private ListTasksRequest() {
     parent_ = "";
     filter_ = "";
+    orderBy_ = "";
     pageToken_ = "";
   }
 
@@ -183,6 +184,59 @@ public com.google.protobuf.ByteString getFilterBytes() {
     }
   }
 
+  public static final int ORDER_BY_FIELD_NUMBER = 5;
+
+  @SuppressWarnings("serial")
+  private volatile java.lang.Object orderBy_ = "";
+  /**
+   *
+   *
+   * <pre>
+   * Sort results. Supported are "name", "name desc", "create_time",
+   * "create_time desc", and "".
+   * </pre>
+   *
+   * <code>string order_by = 5;</code>
+   *
+   * @return The orderBy.
+   */
+  @java.lang.Override
+  public java.lang.String getOrderBy() {
+    java.lang.Object ref = orderBy_;
+    if (ref instanceof java.lang.String) {
+      return (java.lang.String) ref;
+    } else {
+      com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref;
+      java.lang.String s = bs.toStringUtf8();
+      orderBy_ = s;
+      return s;
+    }
+  }
+  /**
+   *
+   *
+   * <pre>
+   * Sort results. Supported are "name", "name desc", "create_time",
+   * "create_time desc", and "".
+   * </pre>
+   *
+   * <code>string order_by = 5;</code>
+   *
+   * @return The bytes for orderBy.
+   */
+  @java.lang.Override
+  public com.google.protobuf.ByteString getOrderByBytes() {
+    java.lang.Object ref = orderBy_;
+    if (ref instanceof java.lang.String) {
+      com.google.protobuf.ByteString b =
+          com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref);
+      orderBy_ = b;
+      return b;
+    } else {
+      return (com.google.protobuf.ByteString) ref;
+    }
+  }
+
   public static final int PAGE_SIZE_FIELD_NUMBER = 3;
   private int pageSize_ = 0;
   /**
@@ -278,6 +332,9 @@ public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io
     if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(pageToken_)) {
       com.google.protobuf.GeneratedMessageV3.writeString(output, 4, pageToken_);
     }
+    if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(orderBy_)) {
+      com.google.protobuf.GeneratedMessageV3.writeString(output, 5, orderBy_);
+    }
     getUnknownFields().writeTo(output);
   }
 
@@ -299,6 +356,9 @@ public int getSerializedSize() {
     if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(pageToken_)) {
       size += com.google.protobuf.GeneratedMessageV3.computeStringSize(4, pageToken_);
     }
+    if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(orderBy_)) {
+      size += com.google.protobuf.GeneratedMessageV3.computeStringSize(5, orderBy_);
+    }
     size += getUnknownFields().getSerializedSize();
     memoizedSize = size;
     return size;
@@ -317,6 +377,7 @@ public boolean equals(final java.lang.Object obj) {
 
     if (!getParent().equals(other.getParent())) return false;
     if (!getFilter().equals(other.getFilter())) return false;
+    if (!getOrderBy().equals(other.getOrderBy())) return false;
     if (getPageSize() != other.getPageSize()) return false;
     if (!getPageToken().equals(other.getPageToken())) return false;
     if (!getUnknownFields().equals(other.getUnknownFields())) return false;
@@ -334,6 +395,8 @@ public int hashCode() {
     hash = (53 * hash) + getParent().hashCode();
     hash = (37 * hash) + FILTER_FIELD_NUMBER;
     hash = (53 * hash) + getFilter().hashCode();
+    hash = (37 * hash) + ORDER_BY_FIELD_NUMBER;
+    hash = (53 * hash) + getOrderBy().hashCode();
     hash = (37 * hash) + PAGE_SIZE_FIELD_NUMBER;
     hash = (53 * hash) + getPageSize();
     hash = (37 * hash) + PAGE_TOKEN_FIELD_NUMBER;
@@ -479,6 +542,7 @@ public Builder clear() {
       bitField0_ = 0;
       parent_ = "";
       filter_ = "";
+      orderBy_ = "";
       pageSize_ = 0;
       pageToken_ = "";
       return this;
@@ -524,9 +588,12 @@ private void buildPartial0(com.google.cloud.batch.v1alpha.ListTasksRequest resul
         result.filter_ = filter_;
       }
       if (((from_bitField0_ & 0x00000004) != 0)) {
-        result.pageSize_ = pageSize_;
+        result.orderBy_ = orderBy_;
       }
       if (((from_bitField0_ & 0x00000008) != 0)) {
+        result.pageSize_ = pageSize_;
+      }
+      if (((from_bitField0_ & 0x00000010) != 0)) {
         result.pageToken_ = pageToken_;
       }
     }
@@ -587,12 +654,17 @@ public Builder mergeFrom(com.google.cloud.batch.v1alpha.ListTasksRequest other)
         bitField0_ |= 0x00000002;
         onChanged();
       }
+      if (!other.getOrderBy().isEmpty()) {
+        orderBy_ = other.orderBy_;
+        bitField0_ |= 0x00000004;
+        onChanged();
+      }
       if (other.getPageSize() != 0) {
         setPageSize(other.getPageSize());
       }
       if (!other.getPageToken().isEmpty()) {
         pageToken_ = other.pageToken_;
-        bitField0_ |= 0x00000008;
+        bitField0_ |= 0x00000010;
         onChanged();
       }
       this.mergeUnknownFields(other.getUnknownFields());
@@ -636,15 +708,21 @@ public Builder mergeFrom(
             case 24:
               {
                 pageSize_ = input.readInt32();
-                bitField0_ |= 0x00000004;
+                bitField0_ |= 0x00000008;
                 break;
               } // case 24
             case 34:
               {
                 pageToken_ = input.readStringRequireUtf8();
-                bitField0_ |= 0x00000008;
+                bitField0_ |= 0x00000010;
                 break;
               } // case 34
+            case 42:
+              {
+                orderBy_ = input.readStringRequireUtf8();
+                bitField0_ |= 0x00000004;
+                break;
+              } // case 42
             default:
               {
                 if (!super.parseUnknownField(input, extensionRegistry, tag)) {
@@ -906,6 +984,117 @@ public Builder setFilterBytes(com.google.protobuf.ByteString value) {
       return this;
     }
 
+    private java.lang.Object orderBy_ = "";
+    /**
+     *
+     *
+     * <pre>
+     * Sort results. Supported are "name", "name desc", "create_time",
+     * "create_time desc", and "".
+     * </pre>
+     *
+     * <code>string order_by = 5;</code>
+     *
+     * @return The orderBy.
+     */
+    public java.lang.String getOrderBy() {
+      java.lang.Object ref = orderBy_;
+      if (!(ref instanceof java.lang.String)) {
+        com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref;
+        java.lang.String s = bs.toStringUtf8();
+        orderBy_ = s;
+        return s;
+      } else {
+        return (java.lang.String) ref;
+      }
+    }
+    /**
+     *
+     *
+     * <pre>
+     * Sort results. Supported are "name", "name desc", "create_time",
+     * "create_time desc", and "".
+     * </pre>
+     *
+     * <code>string order_by = 5;</code>
+     *
+     * @return The bytes for orderBy.
+     */
+    public com.google.protobuf.ByteString getOrderByBytes() {
+      java.lang.Object ref = orderBy_;
+      if (ref instanceof String) {
+        com.google.protobuf.ByteString b =
+            com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref);
+        orderBy_ = b;
+        return b;
+      } else {
+        return (com.google.protobuf.ByteString) ref;
+      }
+    }
+    /**
+     *
+     *
+     * <pre>
+     * Sort results. Supported are "name", "name desc", "create_time",
+     * "create_time desc", and "".
+     * </pre>
+     *
+     * <code>string order_by = 5;</code>
+     *
+     * @param value The orderBy to set.
+     * @return This builder for chaining.
+     */
+    public Builder setOrderBy(java.lang.String value) {
+      if (value == null) {
+        throw new NullPointerException();
+      }
+      orderBy_ = value;
+      bitField0_ |= 0x00000004;
+      onChanged();
+      return this;
+    }
+    /**
+     *
+     *
+     * <pre>
+     * Sort results. Supported are "name", "name desc", "create_time",
+     * "create_time desc", and "".
+     * </pre>
+     *
+     * <code>string order_by = 5;</code>
+     *
+     * @return This builder for chaining.
+     */
+    public Builder clearOrderBy() {
+      orderBy_ = getDefaultInstance().getOrderBy();
+      bitField0_ = (bitField0_ & ~0x00000004);
+      onChanged();
+      return this;
+    }
+    /**
+     *
+     *
+     * <pre>
+     * Sort results. Supported are "name", "name desc", "create_time",
+     * "create_time desc", and "".
+     * </pre>
+     *
+     * <code>string order_by = 5;</code>
+     *
+     * @param value The bytes for orderBy to set.
+     * @return This builder for chaining.
+     */
+    public Builder setOrderByBytes(com.google.protobuf.ByteString value) {
+      if (value == null) {
+        throw new NullPointerException();
+      }
+      checkByteStringIsUtf8(value);
+      orderBy_ = value;
+      bitField0_ |= 0x00000004;
+      onChanged();
+      return this;
+    }
+
     private int pageSize_;
     /**
      *
@@ -937,7 +1126,7 @@ public int getPageSize() {
     public Builder setPageSize(int value) {
 
       pageSize_ = value;
-      bitField0_ |= 0x00000004;
+      bitField0_ |= 0x00000008;
       onChanged();
       return this;
     }
@@ -953,7 +1142,7 @@ public Builder setPageSize(int value) {
      * @return This builder for chaining.
      */
     public Builder clearPageSize() {
-      bitField0_ = (bitField0_ & ~0x00000004);
+      bitField0_ = (bitField0_ & ~0x00000008);
       pageSize_ = 0;
       onChanged();
       return this;
@@ -1021,7 +1210,7 @@ public Builder setPageToken(java.lang.String value) {
         throw new NullPointerException();
       }
       pageToken_ = value;
-      bitField0_ |= 0x00000008;
+      bitField0_ |= 0x00000010;
       onChanged();
       return this;
     }
@@ -1038,7 +1227,7 @@ public Builder setPageToken(java.lang.String value) {
      */
     public Builder clearPageToken() {
       pageToken_ = getDefaultInstance().getPageToken();
-      bitField0_ = (bitField0_ & ~0x00000008);
+      bitField0_ = (bitField0_ & ~0x00000010);
       onChanged();
       return this;
     }
@@ -1060,7 +1249,7 @@ public Builder setPageTokenBytes(com.google.protobuf.ByteString value) {
       }
       checkByteStringIsUtf8(value);
       pageToken_ = value;
-      bitField0_ |= 0x00000008;
+      bitField0_ |= 0x00000010;
       onChanged();
       return this;
     }
diff --git a/java-batch/proto-google-cloud-batch-v1alpha/src/main/java/com/google/cloud/batch/v1alpha/ListTasksRequestOrBuilder.java b/java-batch/proto-google-cloud-batch-v1alpha/src/main/java/com/google/cloud/batch/v1alpha/ListTasksRequestOrBuilder.java
index f113786512d0..457988ec469c 100644
--- a/java-batch/proto-google-cloud-batch-v1alpha/src/main/java/com/google/cloud/batch/v1alpha/ListTasksRequestOrBuilder.java
+++ b/java-batch/proto-google-cloud-batch-v1alpha/src/main/java/com/google/cloud/batch/v1alpha/ListTasksRequestOrBuilder.java
@@ -85,6 +85,33 @@ public interface ListTasksRequestOrBuilder
    */
   com.google.protobuf.ByteString getFilterBytes();
 
+  /**
+   *
+   *
+   * <pre>
+   * Sort results. Supported are "name", "name desc", "create_time",
+   * "create_time desc", and "".
+   * </pre>
+   *
+   * <code>string order_by = 5;</code>
+   *
+   * @return The orderBy.
+   */
+  java.lang.String getOrderBy();
+  /**
+   *
+   *
+   * <pre>
+   * Sort results. Supported are "name", "name desc", "create_time",
+   * "create_time desc", and "".
+   * </pre>
+   *
+   * <code>string order_by = 5;</code>
+   *
+   * @return The bytes for orderBy.
+   */
+  com.google.protobuf.ByteString getOrderByBytes();
+
   /**
    *
    *
diff --git a/java-batch/proto-google-cloud-batch-v1alpha/src/main/java/com/google/cloud/batch/v1alpha/Runnable.java b/java-batch/proto-google-cloud-batch-v1alpha/src/main/java/com/google/cloud/batch/v1alpha/Runnable.java
index 571b0ebd3e95..a9e53f0f3834 100644
--- a/java-batch/proto-google-cloud-batch-v1alpha/src/main/java/com/google/cloud/batch/v1alpha/Runnable.java
+++ b/java-batch/proto-google-cloud-batch-v1alpha/src/main/java/com/google/cloud/batch/v1alpha/Runnable.java
@@ -282,8 +282,9 @@ public interface ContainerOrBuilder
      *
      * <pre>
      * If set to true, external network access to and from container will be
-     * blocked. The container will use the default internal network
-     * 'goog-internal'.
+     * blocked, containers that are with block_external_network as true can
+     * still communicate with each other, network cannot be specified in the
+     * `container.options` field.
      * </pre>
      *
      * <code>bool block_external_network = 9;</code>
@@ -709,8 +710,9 @@ public com.google.protobuf.ByteString getOptionsBytes() {
      *
      * <pre>
      * If set to true, external network access to and from container will be
-     * blocked. The container will use the default internal network
-     * 'goog-internal'.
+     * blocked, containers that are with block_external_network as true can
+     * still communicate with each other, network cannot be specified in the
+     * `container.options` field.
      * </pre>
      *
      * <code>bool block_external_network = 9;</code>
@@ -2082,8 +2084,9 @@ public Builder setOptionsBytes(com.google.protobuf.ByteString value) {
        *
        * <pre>
        * If set to true, external network access to and from container will be
-       * blocked. The container will use the default internal network
-       * 'goog-internal'.
+       * blocked, containers that are with block_external_network as true can
+       * still communicate with each other, network cannot be specified in the
+       * `container.options` field.
        * </pre>
        *
        * <code>bool block_external_network = 9;</code>
@@ -2099,8 +2102,9 @@ public boolean getBlockExternalNetwork() {
        *
        * <pre>
        * If set to true, external network access to and from container will be
-       * blocked. The container will use the default internal network
-       * 'goog-internal'.
+       * blocked, containers that are with block_external_network as true can
+       * still communicate with each other, network cannot be specified in the
+       * `container.options` field.
        * </pre>
        *
        * <code>bool block_external_network = 9;</code>
@@ -2120,8 +2124,9 @@ public Builder setBlockExternalNetwork(boolean value) {
        *
        * <pre>
        * If set to true, external network access to and from container will be
-       * blocked. The container will use the default internal network
-       * 'goog-internal'.
+       * blocked, containers that are with block_external_network as true can
+       * still communicate with each other, network cannot be specified in the
+       * `container.options` field.
        * </pre>
        *
        * <code>bool block_external_network = 9;</code>
diff --git a/java-batch/proto-google-cloud-batch-v1alpha/src/main/java/com/google/cloud/batch/v1alpha/TaskGroup.java b/java-batch/proto-google-cloud-batch-v1alpha/src/main/java/com/google/cloud/batch/v1alpha/TaskGroup.java
index ce01fdfc5b09..96e8a18c97db 100644
--- a/java-batch/proto-google-cloud-batch-v1alpha/src/main/java/com/google/cloud/batch/v1alpha/TaskGroup.java
+++ b/java-batch/proto-google-cloud-batch-v1alpha/src/main/java/com/google/cloud/batch/v1alpha/TaskGroup.java
@@ -106,11 +106,24 @@ public enum SchedulingPolicy implements com.google.protobuf.ProtocolMessageEnum
      *
      * <pre>
      * Run Tasks as soon as resources are available.
+     * Tasks might be executed in parallel depending on parallelism and
+     * task_count values.
      * </pre>
      *
      * <code>AS_SOON_AS_POSSIBLE = 1;</code>
      */
     AS_SOON_AS_POSSIBLE(1),
+    /**
+     *
+     *
+     * <pre>
+     * Run Tasks sequentially with increased task index.
+     * Not yet implemented.
+     * </pre>
+     *
+     * <code>IN_ORDER = 2;</code>
+     */
+    IN_ORDER(2),
     UNRECOGNIZED(-1),
     ;
 
@@ -129,11 +142,24 @@ public enum SchedulingPolicy implements com.google.protobuf.ProtocolMessageEnum
      *
      * <pre>
      * Run Tasks as soon as resources are available.
+     * Tasks might be executed in parallel depending on parallelism and
+     * task_count values.
      * </pre>
      *
      * <code>AS_SOON_AS_POSSIBLE = 1;</code>
      */
     public static final int AS_SOON_AS_POSSIBLE_VALUE = 1;
+    /**
+     *
+     *
+     * <pre>
+     * Run Tasks sequentially with increased task index.
+     * Not yet implemented.
+     * </pre>
+     *
+     * <code>IN_ORDER = 2;</code>
+     */
+    public static final int IN_ORDER_VALUE = 2;
 
     public final int getNumber() {
       if (this == UNRECOGNIZED) {
@@ -163,6 +189,8 @@ public static SchedulingPolicy forNumber(int value) {
           return SCHEDULING_POLICY_UNSPECIFIED;
         case 1:
           return AS_SOON_AS_POSSIBLE;
+        case 2:
+          return IN_ORDER;
         default:
           return null;
       }
@@ -338,7 +366,7 @@ public com.google.cloud.batch.v1alpha.TaskSpecOrBuilder getTaskSpecOrBuilder() {
    *
    * <pre>
    * Number of Tasks in the TaskGroup.
-   * default is 1
+   * Default is 1.
    * </pre>
    *
    * <code>int64 task_count = 4;</code>
@@ -358,6 +386,7 @@ public long getTaskCount() {
    * <pre>
    * Max number of tasks that can run in parallel.
    * Default to min(task_count, 1000).
+   * Field parallelism must be 1 if the scheduling_policy is IN_ORDER.
    * </pre>
    *
    * <code>int64 parallelism = 5;</code>
@@ -376,6 +405,7 @@ public long getParallelism() {
    *
    * <pre>
    * Scheduling policy for Tasks in the TaskGroup.
+   * The default value is AS_SOON_AS_POSSIBLE.
    * </pre>
    *
    * <code>.google.cloud.batch.v1alpha.TaskGroup.SchedulingPolicy scheduling_policy = 6;</code>
@@ -391,6 +421,7 @@ public int getSchedulingPolicyValue() {
    *
    * <pre>
    * Scheduling policy for Tasks in the TaskGroup.
+   * The default value is AS_SOON_AS_POSSIBLE.
    * </pre>
    *
    * <code>.google.cloud.batch.v1alpha.TaskGroup.SchedulingPolicy scheduling_policy = 6;</code>
@@ -1748,7 +1779,7 @@ public com.google.cloud.batch.v1alpha.TaskSpecOrBuilder getTaskSpecOrBuilder() {
      *
      * <pre>
      * Number of Tasks in the TaskGroup.
-     * default is 1
+     * Default is 1.
      * </pre>
      *
      * <code>int64 task_count = 4;</code>
@@ -1764,7 +1795,7 @@ public long getTaskCount() {
      *
      * <pre>
      * Number of Tasks in the TaskGroup.
-     * default is 1
+     * Default is 1.
      * </pre>
      *
      * <code>int64 task_count = 4;</code>
@@ -1784,7 +1815,7 @@ public Builder setTaskCount(long value) {
      *
      * <pre>
      * Number of Tasks in the TaskGroup.
-     * default is 1
+     * Default is 1.
      * </pre>
      *
      * <code>int64 task_count = 4;</code>
@@ -1805,6 +1836,7 @@ public Builder clearTaskCount() {
      * <pre>
      * Max number of tasks that can run in parallel.
      * Default to min(task_count, 1000).
+     * Field parallelism must be 1 if the scheduling_policy is IN_ORDER.
      * </pre>
      *
      * <code>int64 parallelism = 5;</code>
@@ -1821,6 +1853,7 @@ public long getParallelism() {
      * <pre>
      * Max number of tasks that can run in parallel.
      * Default to min(task_count, 1000).
+     * Field parallelism must be 1 if the scheduling_policy is IN_ORDER.
      * </pre>
      *
      * <code>int64 parallelism = 5;</code>
@@ -1841,6 +1874,7 @@ public Builder setParallelism(long value) {
      * <pre>
      * Max number of tasks that can run in parallel.
      * Default to min(task_count, 1000).
+     * Field parallelism must be 1 if the scheduling_policy is IN_ORDER.
      * </pre>
      *
      * <code>int64 parallelism = 5;</code>
@@ -1860,6 +1894,7 @@ public Builder clearParallelism() {
      *
      * <pre>
      * Scheduling policy for Tasks in the TaskGroup.
+     * The default value is AS_SOON_AS_POSSIBLE.
      * </pre>
      *
      * <code>.google.cloud.batch.v1alpha.TaskGroup.SchedulingPolicy scheduling_policy = 6;</code>
@@ -1875,6 +1910,7 @@ public int getSchedulingPolicyValue() {
      *
      * <pre>
      * Scheduling policy for Tasks in the TaskGroup.
+     * The default value is AS_SOON_AS_POSSIBLE.
      * </pre>
      *
      * <code>.google.cloud.batch.v1alpha.TaskGroup.SchedulingPolicy scheduling_policy = 6;</code>
@@ -1893,6 +1929,7 @@ public Builder setSchedulingPolicyValue(int value) {
      *
      * <pre>
      * Scheduling policy for Tasks in the TaskGroup.
+     * The default value is AS_SOON_AS_POSSIBLE.
      * </pre>
      *
      * <code>.google.cloud.batch.v1alpha.TaskGroup.SchedulingPolicy scheduling_policy = 6;</code>
@@ -1912,6 +1949,7 @@ public com.google.cloud.batch.v1alpha.TaskGroup.SchedulingPolicy getSchedulingPo
      *
      * <pre>
      * Scheduling policy for Tasks in the TaskGroup.
+     * The default value is AS_SOON_AS_POSSIBLE.
      * </pre>
      *
      * <code>.google.cloud.batch.v1alpha.TaskGroup.SchedulingPolicy scheduling_policy = 6;</code>
@@ -1934,6 +1972,7 @@ public Builder setSchedulingPolicy(
      *
      * <pre>
      * Scheduling policy for Tasks in the TaskGroup.
+     * The default value is AS_SOON_AS_POSSIBLE.
      * </pre>
      *
      * <code>.google.cloud.batch.v1alpha.TaskGroup.SchedulingPolicy scheduling_policy = 6;</code>
diff --git a/java-batch/proto-google-cloud-batch-v1alpha/src/main/java/com/google/cloud/batch/v1alpha/TaskGroupOrBuilder.java b/java-batch/proto-google-cloud-batch-v1alpha/src/main/java/com/google/cloud/batch/v1alpha/TaskGroupOrBuilder.java
index 73a981e54ae4..73536883615e 100644
--- a/java-batch/proto-google-cloud-batch-v1alpha/src/main/java/com/google/cloud/batch/v1alpha/TaskGroupOrBuilder.java
+++ b/java-batch/proto-google-cloud-batch-v1alpha/src/main/java/com/google/cloud/batch/v1alpha/TaskGroupOrBuilder.java
@@ -100,7 +100,7 @@ public interface TaskGroupOrBuilder
    *
    * <pre>
    * Number of Tasks in the TaskGroup.
-   * default is 1
+   * Default is 1.
    * </pre>
    *
    * <code>int64 task_count = 4;</code>
@@ -115,6 +115,7 @@ public interface TaskGroupOrBuilder
    * <pre>
    * Max number of tasks that can run in parallel.
    * Default to min(task_count, 1000).
+   * Field parallelism must be 1 if the scheduling_policy is IN_ORDER.
    * </pre>
    *
    * <code>int64 parallelism = 5;</code>
@@ -128,6 +129,7 @@ public interface TaskGroupOrBuilder
    *
    * <pre>
    * Scheduling policy for Tasks in the TaskGroup.
+   * The default value is AS_SOON_AS_POSSIBLE.
    * </pre>
    *
    * <code>.google.cloud.batch.v1alpha.TaskGroup.SchedulingPolicy scheduling_policy = 6;</code>
@@ -140,6 +142,7 @@ public interface TaskGroupOrBuilder
    *
    * <pre>
    * Scheduling policy for Tasks in the TaskGroup.
+   * The default value is AS_SOON_AS_POSSIBLE.
    * </pre>
    *
    * <code>.google.cloud.batch.v1alpha.TaskGroup.SchedulingPolicy scheduling_policy = 6;</code>
diff --git a/java-batch/proto-google-cloud-batch-v1alpha/src/main/java/com/google/cloud/batch/v1alpha/TaskProto.java b/java-batch/proto-google-cloud-batch-v1alpha/src/main/java/com/google/cloud/batch/v1alpha/TaskProto.java
index 322e7314a7db..b1691ad9228d 100644
--- a/java-batch/proto-google-cloud-batch-v1alpha/src/main/java/com/google/cloud/batch/v1alpha/TaskProto.java
+++ b/java-batch/proto-google-cloud-batch-v1alpha/src/main/java/com/google/cloud/batch/v1alpha/TaskProto.java
@@ -126,76 +126,76 @@ public static com.google.protobuf.Descriptors.FileDescriptor getDescriptor() {
           + "atch.v1alpha.TaskExecution\022@\n\ntask_state"
           + "\030\005 \001(\0162,.google.cloud.batch.v1alpha.Task"
           + "Status.State\"\"\n\rTaskExecution\022\021\n\texit_co"
-          + "de\030\001 \001(\005\"\263\002\n\nTaskStatus\022;\n\005state\030\001 \001(\0162,"
+          + "de\030\001 \001(\005\"\303\002\n\nTaskStatus\022;\n\005state\030\001 \001(\0162,"
           + ".google.cloud.batch.v1alpha.TaskStatus.S"
           + "tate\022>\n\rstatus_events\030\002 \003(\0132\'.google.clo"
           + "ud.batch.v1alpha.StatusEvent\022E\n\016resource"
           + "_usage\030\003 \001(\0132-.google.cloud.batch.v1alph"
-          + "a.TaskResourceUsage\"a\n\005State\022\025\n\021STATE_UN"
+          + "a.TaskResourceUsage\"q\n\005State\022\025\n\021STATE_UN"
           + "SPECIFIED\020\000\022\013\n\007PENDING\020\001\022\014\n\010ASSIGNED\020\002\022\013"
-          + "\n\007RUNNING\020\003\022\n\n\006FAILED\020\004\022\r\n\tSUCCEEDED\020\005\"\'"
-          + "\n\021TaskResourceUsage\022\022\n\ncore_hours\030\001 \001(\001\""
-          + "\367\005\n\010Runnable\022C\n\tcontainer\030\001 \001(\0132..google"
-          + ".cloud.batch.v1alpha.Runnable.ContainerH"
-          + "\000\022=\n\006script\030\002 \001(\0132+.google.cloud.batch.v"
-          + "1alpha.Runnable.ScriptH\000\022?\n\007barrier\030\006 \001("
-          + "\0132,.google.cloud.batch.v1alpha.Runnable."
-          + "BarrierH\000\022\032\n\022ignore_exit_status\030\003 \001(\010\022\022\n"
-          + "\nbackground\030\004 \001(\010\022\022\n\nalways_run\030\005 \001(\010\022<\n"
-          + "\013environment\030\007 \001(\0132\'.google.cloud.batch."
-          + "v1alpha.Environment\022*\n\007timeout\030\010 \001(\0132\031.g"
-          + "oogle.protobuf.Duration\022@\n\006labels\030\t \003(\0132"
-          + "0.google.cloud.batch.v1alpha.Runnable.La"
-          + "belsEntry\032\252\001\n\tContainer\022\021\n\timage_uri\030\001 \001"
-          + "(\t\022\020\n\010commands\030\002 \003(\t\022\022\n\nentrypoint\030\003 \001(\t"
-          + "\022\017\n\007volumes\030\007 \003(\t\022\017\n\007options\030\010 \001(\t\022\036\n\026bl"
-          + "ock_external_network\030\t \001(\010\022\020\n\010username\030\n"
-          + " \001(\t\022\020\n\010password\030\013 \001(\t\0323\n\006Script\022\016\n\004path"
-          + "\030\001 \001(\tH\000\022\016\n\004text\030\002 \001(\tH\000B\t\n\007command\032\027\n\007B"
-          + "arrier\022\014\n\004name\030\001 \001(\t\032-\n\013LabelsEntry\022\013\n\003k"
-          + "ey\030\001 \001(\t\022\r\n\005value\030\002 \001(\t:\0028\001B\014\n\nexecutabl"
-          + "e\"\233\004\n\010TaskSpec\0227\n\trunnables\030\010 \003(\0132$.goog"
-          + "le.cloud.batch.v1alpha.Runnable\022E\n\020compu"
-          + "te_resource\030\003 \001(\0132+.google.cloud.batch.v"
-          + "1alpha.ComputeResource\0223\n\020max_run_durati"
-          + "on\030\004 \001(\0132\031.google.protobuf.Duration\022\027\n\017m"
-          + "ax_retry_count\030\005 \001(\005\022G\n\022lifecycle_polici"
-          + "es\030\t \003(\0132+.google.cloud.batch.v1alpha.Li"
-          + "fecyclePolicy\022P\n\014environments\030\006 \003(\01326.go"
-          + "ogle.cloud.batch.v1alpha.TaskSpec.Enviro"
-          + "nmentsEntryB\002\030\001\0223\n\007volumes\030\007 \003(\0132\".googl"
-          + "e.cloud.batch.v1alpha.Volume\022<\n\013environm"
-          + "ent\030\n \001(\0132\'.google.cloud.batch.v1alpha.E"
-          + "nvironment\0323\n\021EnvironmentsEntry\022\013\n\003key\030\001"
-          + " \001(\t\022\r\n\005value\030\002 \001(\t:\0028\001\"\224\002\n\017LifecyclePol"
-          + "icy\022B\n\006action\030\001 \001(\01622.google.cloud.batch"
-          + ".v1alpha.LifecyclePolicy.Action\022U\n\020actio"
-          + "n_condition\030\002 \001(\0132;.google.cloud.batch.v"
-          + "1alpha.LifecyclePolicy.ActionCondition\032%"
-          + "\n\017ActionCondition\022\022\n\nexit_codes\030\001 \003(\005\"?\n"
-          + "\006Action\022\026\n\022ACTION_UNSPECIFIED\020\000\022\016\n\nRETRY"
-          + "_TASK\020\001\022\r\n\tFAIL_TASK\020\002\"\305\001\n\004Task\022\014\n\004name\030"
-          + "\001 \001(\t\0226\n\006status\030\002 \001(\0132&.google.cloud.bat"
-          + "ch.v1alpha.TaskStatus:w\352At\n\031batch.google"
-          + "apis.com/Task\022Wprojects/{project}/locati"
-          + "ons/{location}/jobs/{job}/taskGroups/{ta"
-          + "sk_group}/tasks/{task}\"\236\003\n\013Environment\022I"
-          + "\n\tvariables\030\001 \003(\01326.google.cloud.batch.v"
-          + "1alpha.Environment.VariablesEntry\022V\n\020sec"
-          + "ret_variables\030\002 \003(\0132<.google.cloud.batch"
-          + ".v1alpha.Environment.SecretVariablesEntr"
-          + "y\022N\n\023encrypted_variables\030\003 \001(\01321.google."
-          + "cloud.batch.v1alpha.Environment.KMSEnvMa"
-          + "p\0322\n\tKMSEnvMap\022\020\n\010key_name\030\001 \001(\t\022\023\n\013ciph"
-          + "er_text\030\002 \001(\t\0320\n\016VariablesEntry\022\013\n\003key\030\001"
-          + " \001(\t\022\r\n\005value\030\002 \001(\t:\0028\001\0326\n\024SecretVariabl"
-          + "esEntry\022\013\n\003key\030\001 \001(\t\022\r\n\005value\030\002 \001(\t:\0028\001B"
-          + "\303\001\n\036com.google.cloud.batch.v1alphaB\tTask"
-          + "ProtoP\001Z4cloud.google.com/go/batch/apiv1"
-          + "alpha/batchpb;batchpb\242\002\003GCB\252\002\032Google.Clo"
-          + "ud.Batch.V1Alpha\312\002\032Google\\Cloud\\Batch\\V1"
-          + "alpha\352\002\035Google::Cloud::Batch::V1alphab\006p"
-          + "roto3"
+          + "\n\007RUNNING\020\003\022\n\n\006FAILED\020\004\022\r\n\tSUCCEEDED\020\005\022\016"
+          + "\n\nUNEXECUTED\020\006\"\'\n\021TaskResourceUsage\022\022\n\nc"
+          + "ore_hours\030\001 \001(\001\"\367\005\n\010Runnable\022C\n\tcontaine"
+          + "r\030\001 \001(\0132..google.cloud.batch.v1alpha.Run"
+          + "nable.ContainerH\000\022=\n\006script\030\002 \001(\0132+.goog"
+          + "le.cloud.batch.v1alpha.Runnable.ScriptH\000"
+          + "\022?\n\007barrier\030\006 \001(\0132,.google.cloud.batch.v"
+          + "1alpha.Runnable.BarrierH\000\022\032\n\022ignore_exit"
+          + "_status\030\003 \001(\010\022\022\n\nbackground\030\004 \001(\010\022\022\n\nalw"
+          + "ays_run\030\005 \001(\010\022<\n\013environment\030\007 \001(\0132\'.goo"
+          + "gle.cloud.batch.v1alpha.Environment\022*\n\007t"
+          + "imeout\030\010 \001(\0132\031.google.protobuf.Duration\022"
+          + "@\n\006labels\030\t \003(\01320.google.cloud.batch.v1a"
+          + "lpha.Runnable.LabelsEntry\032\252\001\n\tContainer\022"
+          + "\021\n\timage_uri\030\001 \001(\t\022\020\n\010commands\030\002 \003(\t\022\022\n\n"
+          + "entrypoint\030\003 \001(\t\022\017\n\007volumes\030\007 \003(\t\022\017\n\007opt"
+          + "ions\030\010 \001(\t\022\036\n\026block_external_network\030\t \001"
+          + "(\010\022\020\n\010username\030\n \001(\t\022\020\n\010password\030\013 \001(\t\0323"
+          + "\n\006Script\022\016\n\004path\030\001 \001(\tH\000\022\016\n\004text\030\002 \001(\tH\000"
+          + "B\t\n\007command\032\027\n\007Barrier\022\014\n\004name\030\001 \001(\t\032-\n\013"
+          + "LabelsEntry\022\013\n\003key\030\001 \001(\t\022\r\n\005value\030\002 \001(\t:"
+          + "\0028\001B\014\n\nexecutable\"\233\004\n\010TaskSpec\0227\n\trunnab"
+          + "les\030\010 \003(\0132$.google.cloud.batch.v1alpha.R"
+          + "unnable\022E\n\020compute_resource\030\003 \001(\0132+.goog"
+          + "le.cloud.batch.v1alpha.ComputeResource\0223"
+          + "\n\020max_run_duration\030\004 \001(\0132\031.google.protob"
+          + "uf.Duration\022\027\n\017max_retry_count\030\005 \001(\005\022G\n\022"
+          + "lifecycle_policies\030\t \003(\0132+.google.cloud."
+          + "batch.v1alpha.LifecyclePolicy\022P\n\014environ"
+          + "ments\030\006 \003(\01326.google.cloud.batch.v1alpha"
+          + ".TaskSpec.EnvironmentsEntryB\002\030\001\0223\n\007volum"
+          + "es\030\007 \003(\0132\".google.cloud.batch.v1alpha.Vo"
+          + "lume\022<\n\013environment\030\n \001(\0132\'.google.cloud"
+          + ".batch.v1alpha.Environment\0323\n\021Environmen"
+          + "tsEntry\022\013\n\003key\030\001 \001(\t\022\r\n\005value\030\002 \001(\t:\0028\001\""
+          + "\224\002\n\017LifecyclePolicy\022B\n\006action\030\001 \001(\01622.go"
+          + "ogle.cloud.batch.v1alpha.LifecyclePolicy"
+          + ".Action\022U\n\020action_condition\030\002 \001(\0132;.goog"
+          + "le.cloud.batch.v1alpha.LifecyclePolicy.A"
+          + "ctionCondition\032%\n\017ActionCondition\022\022\n\nexi"
+          + "t_codes\030\001 \003(\005\"?\n\006Action\022\026\n\022ACTION_UNSPEC"
+          + "IFIED\020\000\022\016\n\nRETRY_TASK\020\001\022\r\n\tFAIL_TASK\020\002\"\305"
+          + "\001\n\004Task\022\014\n\004name\030\001 \001(\t\0226\n\006status\030\002 \001(\0132&."
+          + "google.cloud.batch.v1alpha.TaskStatus:w\352"
+          + "At\n\031batch.googleapis.com/Task\022Wprojects/"
+          + "{project}/locations/{location}/jobs/{job"
+          + "}/taskGroups/{task_group}/tasks/{task}\"\236"
+          + "\003\n\013Environment\022I\n\tvariables\030\001 \003(\01326.goog"
+          + "le.cloud.batch.v1alpha.Environment.Varia"
+          + "blesEntry\022V\n\020secret_variables\030\002 \003(\0132<.go"
+          + "ogle.cloud.batch.v1alpha.Environment.Sec"
+          + "retVariablesEntry\022N\n\023encrypted_variables"
+          + "\030\003 \001(\01321.google.cloud.batch.v1alpha.Envi"
+          + "ronment.KMSEnvMap\0322\n\tKMSEnvMap\022\020\n\010key_na"
+          + "me\030\001 \001(\t\022\023\n\013cipher_text\030\002 \001(\t\0320\n\016Variabl"
+          + "esEntry\022\013\n\003key\030\001 \001(\t\022\r\n\005value\030\002 \001(\t:\0028\001\032"
+          + "6\n\024SecretVariablesEntry\022\013\n\003key\030\001 \001(\t\022\r\n\005"
+          + "value\030\002 \001(\t:\0028\001B\303\001\n\036com.google.cloud.bat"
+          + "ch.v1alphaB\tTaskProtoP\001Z4cloud.google.co"
+          + "m/go/batch/apiv1alpha/batchpb;batchpb\242\002\003"
+          + "GCB\252\002\032Google.Cloud.Batch.V1Alpha\312\002\032Googl"
+          + "e\\Cloud\\Batch\\V1alpha\352\002\035Google::Cloud::B"
+          + "atch::V1alphab\006proto3"
     };
     descriptor =
         com.google.protobuf.Descriptors.FileDescriptor.internalBuildGeneratedFileFrom(
diff --git a/java-batch/proto-google-cloud-batch-v1alpha/src/main/java/com/google/cloud/batch/v1alpha/TaskStatus.java b/java-batch/proto-google-cloud-batch-v1alpha/src/main/java/com/google/cloud/batch/v1alpha/TaskStatus.java
index 0e1978ddd7a5..0a4401122f20 100644
--- a/java-batch/proto-google-cloud-batch-v1alpha/src/main/java/com/google/cloud/batch/v1alpha/TaskStatus.java
+++ b/java-batch/proto-google-cloud-batch-v1alpha/src/main/java/com/google/cloud/batch/v1alpha/TaskStatus.java
@@ -82,7 +82,7 @@ public enum State implements com.google.protobuf.ProtocolMessageEnum {
      *
      *
      * <pre>
-     * unknown state
+     * Unknown state.
      * </pre>
      *
      * <code>STATE_UNSPECIFIED = 0;</code>
@@ -138,6 +138,16 @@ public enum State implements com.google.protobuf.ProtocolMessageEnum {
      * <code>SUCCEEDED = 5;</code>
      */
     SUCCEEDED(5),
+    /**
+     *
+     *
+     * <pre>
+     * The Task has not been executed when the Job finishes.
+     * </pre>
+     *
+     * <code>UNEXECUTED = 6;</code>
+     */
+    UNEXECUTED(6),
     UNRECOGNIZED(-1),
     ;
 
@@ -145,7 +155,7 @@ public enum State implements com.google.protobuf.ProtocolMessageEnum {
      *
      *
      * <pre>
-     * unknown state
+     * Unknown state.
      * </pre>
      *
      * <code>STATE_UNSPECIFIED = 0;</code>
@@ -201,6 +211,16 @@ public enum State implements com.google.protobuf.ProtocolMessageEnum {
      * <code>SUCCEEDED = 5;</code>
      */
     public static final int SUCCEEDED_VALUE = 5;
+    /**
+     *
+     *
+     * <pre>
+     * The Task has not been executed when the Job finishes.
+     * </pre>
+     *
+     * <code>UNEXECUTED = 6;</code>
+     */
+    public static final int UNEXECUTED_VALUE = 6;
 
     public final int getNumber() {
       if (this == UNRECOGNIZED) {
@@ -238,6 +258,8 @@ public static State forNumber(int value) {
           return FAILED;
         case 5:
           return SUCCEEDED;
+        case 6:
+          return UNEXECUTED;
         default:
           return null;
       }
diff --git a/java-batch/proto-google-cloud-batch-v1alpha/src/main/proto/google/cloud/batch/v1alpha/batch.proto b/java-batch/proto-google-cloud-batch-v1alpha/src/main/proto/google/cloud/batch/v1alpha/batch.proto
index 33cccba15f25..c654d9c25960 100644
--- a/java-batch/proto-google-cloud-batch-v1alpha/src/main/proto/google/cloud/batch/v1alpha/batch.proto
+++ b/java-batch/proto-google-cloud-batch-v1alpha/src/main/proto/google/cloud/batch/v1alpha/batch.proto
@@ -177,6 +177,10 @@ message ListJobsRequest {
   // List filter.
   string filter = 4;
 
+  // Sort results. Supported are "name", "name desc", "create_time",
+  // "create_time desc", and "".
+  string order_by = 5;
+
   // Page size.
   int32 page_size = 2;
 
@@ -211,6 +215,10 @@ message ListTasksRequest {
   // State=RUNNING
   string filter = 2;
 
+  // Sort results. Supported are "name", "name desc", "create_time",
+  // "create_time desc", and "".
+  string order_by = 5;
+
   // Page size.
   int32 page_size = 3;
 
diff --git a/java-batch/proto-google-cloud-batch-v1alpha/src/main/proto/google/cloud/batch/v1alpha/job.proto b/java-batch/proto-google-cloud-batch-v1alpha/src/main/proto/google/cloud/batch/v1alpha/job.proto
index 9dc6dc85fbeb..c4a2201cfbcd 100644
--- a/java-batch/proto-google-cloud-batch-v1alpha/src/main/proto/google/cloud/batch/v1alpha/job.proto
+++ b/java-batch/proto-google-cloud-batch-v1alpha/src/main/proto/google/cloud/batch/v1alpha/job.proto
@@ -284,12 +284,14 @@ message JobNotification {
 message AllocationPolicy {
   message LocationPolicy {
     // A list of allowed location names represented by internal URLs.
+    //
     // Each location can be a region or a zone.
     // Only one region or multiple zones in one region is supported now.
     // For example,
     // ["regions/us-central1"] allow VMs in any zones in region us-central1.
     // ["zones/us-central1-a", "zones/us-central1-c"] only allow VMs
     // in zones us-central1-a and us-central1-c.
+    //
     // All locations end up in different regions would cause errors.
     // For example,
     // ["regions/us-central1", "zones/us-central1-a", "zones/us-central1-b",
@@ -305,25 +307,29 @@ message AllocationPolicy {
 
   // A new persistent disk or a local ssd.
   // A VM can only have one local SSD setting but multiple local SSD partitions.
-  // https://cloud.google.com/compute/docs/disks#pdspecs.
+  // See https://cloud.google.com/compute/docs/disks#pdspecs and
   // https://cloud.google.com/compute/docs/disks#localssds.
   message Disk {
     // A data source from which a PD will be created.
     oneof data_source {
       // Name of a public or custom image used as the data source.
       // For example, the following are all valid URLs:
-      // (1) Specify the image by its family name:
+      //
+      // * Specify the image by its family name:
       // projects/{project}/global/images/family/{image_family}
-      // (2) Specify the image version:
+      // * Specify the image version:
       // projects/{project}/global/images/{image_version}
+      //
       // You can also use Batch customized image in short names.
       // The following image values are supported for a boot disk:
-      // "batch-debian": use Batch Debian images.
-      // "batch-centos": use Batch CentOS images.
-      // "batch-cos": use Batch Container-Optimized images.
+      //
+      // * "batch-debian": use Batch Debian images.
+      // * "batch-centos": use Batch CentOS images.
+      // * "batch-cos": use Batch Container-Optimized images.
       string image = 4;
 
       // Name of a snapshot used as the data source.
+      // Snapshot is not supported as boot disk now.
       string snapshot = 5;
     }
 
@@ -334,6 +340,7 @@ message AllocationPolicy {
     string type = 1;
 
     // Disk size in GB.
+    //
     // For persistent disk, this field is ignored if `data_source` is `image` or
     // `snapshot`.
     // For local SSD, size_gb should be a multiple of 375GB,
@@ -391,7 +398,7 @@ message AllocationPolicy {
 
     // The minimum CPU platform.
     // See
-    // `https://cloud.google.com/compute/docs/instances/specify-min-cpu-platform`.
+    // https://cloud.google.com/compute/docs/instances/specify-min-cpu-platform.
     // Not yet implemented.
     string min_cpu_platform = 3;
 
@@ -401,15 +408,17 @@ message AllocationPolicy {
     // The accelerators attached to each VM instance.
     repeated Accelerator accelerators = 5;
 
-    // Book disk to be created and attached to each VM by this InstancePolicy.
+    // Boot disk to be created and attached to each VM by this InstancePolicy.
     // Boot disk will be deleted when the VM is deleted.
+    // Batch API now only supports booting from image.
     Disk boot_disk = 8;
 
     // Non-boot disks to be attached for each VM created by this InstancePolicy.
     // New disks will be deleted when the VM is deleted.
     repeated AttachedDisk disks = 6;
 
-    // If specified, VMs will be allocated only inside the matching reservation.
+    // If specified, VMs will consume only the specified reservation.
+    // If not specified (default), VMs will consume any applicable reservation.
     string reservation = 7;
   }
 
@@ -436,18 +445,22 @@ message AllocationPolicy {
   message NetworkInterface {
     // The URL of an existing network resource.
     // You can specify the network as a full or partial URL.
+    //
     // For example, the following are all valid URLs:
-    // https://www.googleapis.com/compute/v1/projects/{project}/global/networks/{network}
-    // projects/{project}/global/networks/{network}
-    // global/networks/{network}
+    //
+    // * https://www.googleapis.com/compute/v1/projects/{project}/global/networks/{network}
+    // * projects/{project}/global/networks/{network}
+    // * global/networks/{network}
     string network = 1;
 
     // The URL of an existing subnetwork resource in the network.
     // You can specify the subnetwork as a full or partial URL.
+    //
     // For example, the following are all valid URLs:
-    // https://www.googleapis.com/compute/v1/projects/{project}/regions/{region}/subnetworks/{subnetwork}
-    // projects/{project}/regions/{region}/subnetworks/{subnetwork}
-    // regions/{region}/subnetworks/{subnetwork}
+    //
+    // * https://www.googleapis.com/compute/v1/projects/{project}/regions/{region}/subnetworks/{subnetwork}
+    // * projects/{project}/regions/{region}/subnetworks/{subnetwork}
+    // * regions/{region}/subnetworks/{subnetwork}
     string subnetwork = 2;
 
     // Default is false (with an external IP address). Required if
@@ -466,6 +479,23 @@ message AllocationPolicy {
     repeated NetworkInterface network_interfaces = 1;
   }
 
+  // PlacementPolicy describes a group placement policy for the VMs controlled
+  // by this AllocationPolicy.
+  message PlacementPolicy {
+    // UNSPECIFIED vs. COLLOCATED (default UNSPECIFIED). Use COLLOCATED when you
+    // want VMs to be located close to each other for low network latency
+    // between the VMs. No placement policy will be generated when collocation
+    // is UNSPECIFIED.
+    string collocation = 1;
+
+    // When specified, causes the job to fail if more than max_distance logical
+    // switches are required between VMs. Batch uses the most compact possible
+    // placement of VMs even when max_distance is not specified. An explicit
+    // max_distance makes that level of compactness a strict requirement.
+    // Not yet implemented
+    int64 max_distance = 2;
+  }
+
   // Compute Engine VM instance provisioning model.
   enum ProvisioningModel {
     // Unspecified.
@@ -519,6 +549,9 @@ message AllocationPolicy {
 
   // The network policy.
   NetworkPolicy network = 7;
+
+  // The placement policy.
+  PlacementPolicy placement = 10;
 }
 
 // A TaskGroup contains one or multiple Tasks that share the same
@@ -535,7 +568,15 @@ message TaskGroup {
     SCHEDULING_POLICY_UNSPECIFIED = 0;
 
     // Run Tasks as soon as resources are available.
+    //
+    // Tasks might be executed in parallel depending on parallelism and
+    // task_count values.
     AS_SOON_AS_POSSIBLE = 1;
+
+    // Run Tasks sequentially with increased task index.
+    //
+    // Not yet implemented.
+    IN_ORDER = 2;
   }
 
   // Output only. TaskGroup name.
@@ -548,14 +589,16 @@ message TaskGroup {
   TaskSpec task_spec = 3 [(google.api.field_behavior) = REQUIRED];
 
   // Number of Tasks in the TaskGroup.
-  // default is 1
+  // Default is 1.
   int64 task_count = 4;
 
   // Max number of tasks that can run in parallel.
   // Default to min(task_count, 1000).
+  // Field parallelism must be 1 if the scheduling_policy is IN_ORDER.
   int64 parallelism = 5;
 
   // Scheduling policy for Tasks in the TaskGroup.
+  // The default value is AS_SOON_AS_POSSIBLE.
   SchedulingPolicy scheduling_policy = 6;
 
   // Compute resource allocation for the TaskGroup.
diff --git a/java-batch/proto-google-cloud-batch-v1alpha/src/main/proto/google/cloud/batch/v1alpha/task.proto b/java-batch/proto-google-cloud-batch-v1alpha/src/main/proto/google/cloud/batch/v1alpha/task.proto
index b31bd9eda596..c7db752b26a2 100644
--- a/java-batch/proto-google-cloud-batch-v1alpha/src/main/proto/google/cloud/batch/v1alpha/task.proto
+++ b/java-batch/proto-google-cloud-batch-v1alpha/src/main/proto/google/cloud/batch/v1alpha/task.proto
@@ -77,7 +77,7 @@ message TaskExecution {
 message TaskStatus {
   // Task states.
   enum State {
-    // unknown state
+    // Unknown state.
     STATE_UNSPECIFIED = 0;
 
     // The Task is created and waiting for resources.
@@ -94,6 +94,9 @@ message TaskStatus {
 
     // The Task has succeeded.
     SUCCEEDED = 5;
+
+    // The Task has not been executed when the Job finishes.
+    UNEXECUTED = 6;
   }
 
   // Task state
@@ -139,8 +142,9 @@ message Runnable {
     string options = 8;
 
     // If set to true, external network access to and from container will be
-    // blocked. The container will use the default internal network
-    // 'goog-internal'.
+    // blocked, containers that are with block_external_network as true can
+    // still communicate with each other, network cannot be specified in the
+    // `container.options` field.
     bool block_external_network = 9;
 
     // Optional username for logging in to a docker registry. If username
diff --git a/java-batch/samples/snippets/generated/com/google/cloud/batch/v1alpha/batchservice/listjobs/AsyncListJobs.java b/java-batch/samples/snippets/generated/com/google/cloud/batch/v1alpha/batchservice/listjobs/AsyncListJobs.java
index b00a12bc0018..b1b07411c50b 100644
--- a/java-batch/samples/snippets/generated/com/google/cloud/batch/v1alpha/batchservice/listjobs/AsyncListJobs.java
+++ b/java-batch/samples/snippets/generated/com/google/cloud/batch/v1alpha/batchservice/listjobs/AsyncListJobs.java
@@ -39,6 +39,7 @@ public static void asyncListJobs() throws Exception {
           ListJobsRequest.newBuilder()
               .setParent("parent-995424086")
               .setFilter("filter-1274492040")
+              .setOrderBy("orderBy-1207110587")
               .setPageSize(883849137)
               .setPageToken("pageToken873572522")
               .build();
diff --git a/java-batch/samples/snippets/generated/com/google/cloud/batch/v1alpha/batchservice/listjobs/AsyncListJobsPaged.java b/java-batch/samples/snippets/generated/com/google/cloud/batch/v1alpha/batchservice/listjobs/AsyncListJobsPaged.java
index b69ade2b5a25..051cd581d105 100644
--- a/java-batch/samples/snippets/generated/com/google/cloud/batch/v1alpha/batchservice/listjobs/AsyncListJobsPaged.java
+++ b/java-batch/samples/snippets/generated/com/google/cloud/batch/v1alpha/batchservice/listjobs/AsyncListJobsPaged.java
@@ -40,6 +40,7 @@ public static void asyncListJobsPaged() throws Exception {
           ListJobsRequest.newBuilder()
               .setParent("parent-995424086")
               .setFilter("filter-1274492040")
+              .setOrderBy("orderBy-1207110587")
               .setPageSize(883849137)
               .setPageToken("pageToken873572522")
               .build();
diff --git a/java-batch/samples/snippets/generated/com/google/cloud/batch/v1alpha/batchservice/listjobs/SyncListJobs.java b/java-batch/samples/snippets/generated/com/google/cloud/batch/v1alpha/batchservice/listjobs/SyncListJobs.java
index 76bb4fe1a604..f7b68c9cd4c7 100644
--- a/java-batch/samples/snippets/generated/com/google/cloud/batch/v1alpha/batchservice/listjobs/SyncListJobs.java
+++ b/java-batch/samples/snippets/generated/com/google/cloud/batch/v1alpha/batchservice/listjobs/SyncListJobs.java
@@ -38,6 +38,7 @@ public static void syncListJobs() throws Exception {
           ListJobsRequest.newBuilder()
               .setParent("parent-995424086")
               .setFilter("filter-1274492040")
+              .setOrderBy("orderBy-1207110587")
               .setPageSize(883849137)
               .setPageToken("pageToken873572522")
               .build();
diff --git a/java-batch/samples/snippets/generated/com/google/cloud/batch/v1alpha/batchservice/listtasks/AsyncListTasks.java b/java-batch/samples/snippets/generated/com/google/cloud/batch/v1alpha/batchservice/listtasks/AsyncListTasks.java
index 11fd3f548ddc..d3712b6b8efe 100644
--- a/java-batch/samples/snippets/generated/com/google/cloud/batch/v1alpha/batchservice/listtasks/AsyncListTasks.java
+++ b/java-batch/samples/snippets/generated/com/google/cloud/batch/v1alpha/batchservice/listtasks/AsyncListTasks.java
@@ -41,6 +41,7 @@ public static void asyncListTasks() throws Exception {
               .setParent(
                   TaskGroupName.of("[PROJECT]", "[LOCATION]", "[JOB]", "[TASK_GROUP]").toString())
               .setFilter("filter-1274492040")
+              .setOrderBy("orderBy-1207110587")
               .setPageSize(883849137)
               .setPageToken("pageToken873572522")
               .build();
diff --git a/java-batch/samples/snippets/generated/com/google/cloud/batch/v1alpha/batchservice/listtasks/AsyncListTasksPaged.java b/java-batch/samples/snippets/generated/com/google/cloud/batch/v1alpha/batchservice/listtasks/AsyncListTasksPaged.java
index 7b42d2cc895f..97cb45dde18e 100644
--- a/java-batch/samples/snippets/generated/com/google/cloud/batch/v1alpha/batchservice/listtasks/AsyncListTasksPaged.java
+++ b/java-batch/samples/snippets/generated/com/google/cloud/batch/v1alpha/batchservice/listtasks/AsyncListTasksPaged.java
@@ -42,6 +42,7 @@ public static void asyncListTasksPaged() throws Exception {
               .setParent(
                   TaskGroupName.of("[PROJECT]", "[LOCATION]", "[JOB]", "[TASK_GROUP]").toString())
               .setFilter("filter-1274492040")
+              .setOrderBy("orderBy-1207110587")
               .setPageSize(883849137)
               .setPageToken("pageToken873572522")
               .build();
diff --git a/java-batch/samples/snippets/generated/com/google/cloud/batch/v1alpha/batchservice/listtasks/SyncListTasks.java b/java-batch/samples/snippets/generated/com/google/cloud/batch/v1alpha/batchservice/listtasks/SyncListTasks.java
index 8fac95520c5c..8acd55c4d913 100644
--- a/java-batch/samples/snippets/generated/com/google/cloud/batch/v1alpha/batchservice/listtasks/SyncListTasks.java
+++ b/java-batch/samples/snippets/generated/com/google/cloud/batch/v1alpha/batchservice/listtasks/SyncListTasks.java
@@ -40,6 +40,7 @@ public static void syncListTasks() throws Exception {
               .setParent(
                   TaskGroupName.of("[PROJECT]", "[LOCATION]", "[JOB]", "[TASK_GROUP]").toString())
               .setFilter("filter-1274492040")
+              .setOrderBy("orderBy-1207110587")
               .setPageSize(883849137)
               .setPageToken("pageToken873572522")
               .build();