From f65d479c1282c746eca0dbbc1de36f57b887dc14 Mon Sep 17 00:00:00 2001 From: Tetiana Yahodska Date: Sun, 24 Nov 2024 14:19:16 +0100 Subject: [PATCH 01/14] Implemented compute_instance_attach_regional_disk_force sample, created test --- .../disks/AttachRegionalDiskForce.java | 79 +++++++++++++++++++ .../src/test/java/compute/Util.java | 17 ++++ .../src/test/java/compute/disks/DisksIT.java | 43 +++++++--- 3 files changed, 129 insertions(+), 10 deletions(-) create mode 100644 compute/cloud-client/src/main/java/compute/disks/AttachRegionalDiskForce.java diff --git a/compute/cloud-client/src/main/java/compute/disks/AttachRegionalDiskForce.java b/compute/cloud-client/src/main/java/compute/disks/AttachRegionalDiskForce.java new file mode 100644 index 00000000000..1799be4c96e --- /dev/null +++ b/compute/cloud-client/src/main/java/compute/disks/AttachRegionalDiskForce.java @@ -0,0 +1,79 @@ +/* + * Copyright 2024 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package compute.disks; + +// [START compute_instance_attach_regional_disk_force] +import com.google.cloud.compute.v1.AttachDiskInstanceRequest; +import com.google.cloud.compute.v1.AttachedDisk; +import com.google.cloud.compute.v1.InstancesClient; +import com.google.cloud.compute.v1.Operation; +import java.io.IOException; +import java.util.concurrent.ExecutionException; +import java.util.concurrent.TimeUnit; +import java.util.concurrent.TimeoutException; + +public class AttachRegionalDiskForce { + public static void main(String[] args) + throws IOException, InterruptedException, ExecutionException, TimeoutException { + // TODO(developer): Replace these variables before running the sample. + // Project ID or project number of the Cloud project you want to use. + String projectId = "YOUR_PROJECT_ID"; + // Name of the zone in which the instance you want to use resides. + String zone = "zone-name"; + // Name of the compute instance you want to attach a disk to. + String instanceName = "YOUR_INSTANCE_NAME"; + // Full or partial URL of a persistent disk that you want to attach. + String diskLink = String.format( + "projects/%s/regions/DISK_REGION/disks/YOUR_DISK_NAME", projectId); + + attachRegionalDiskForce(projectId, zone, instanceName, diskLink); + } + + // Attaches a regional disk to the instance, + // forcing the attachment even if other VMs are using the disk. + public static void attachRegionalDiskForce( + String projectId, String zone, String instanceName, String diskLink) + throws IOException, InterruptedException, ExecutionException, TimeoutException { + // Initialize client that will be used to send requests. This client only needs to be created + // once, and can be reused for multiple requests. + try (InstancesClient instancesClient = InstancesClient.create()) { + AttachedDisk attachedDisk = AttachedDisk.newBuilder() + .setSource(diskLink) + .setMode(AttachedDisk.Mode.READ_WRITE.toString()) + .build(); + + AttachDiskInstanceRequest attachDiskRequest = AttachDiskInstanceRequest.newBuilder() + .setProject(projectId) + .setZone(zone) + .setInstance(instanceName) + .setAttachedDiskResource(attachedDisk) + .setForceAttach(true) //Force the attachment + .build(); + + + Operation response = instancesClient.attachDiskAsync(attachDiskRequest) + .get(3, TimeUnit.MINUTES); + + if (response.hasError()) { + System.out.printf("Error attaching regional disk: %s%n", response.getError()); + return; + } + System.out.println("Regional disk attached successfully."); + } + } +} +// [END compute_instance_attach_regional_disk_force] diff --git a/compute/cloud-client/src/test/java/compute/Util.java b/compute/cloud-client/src/test/java/compute/Util.java index 5c89de8faa8..63fbc18ffdb 100644 --- a/compute/cloud-client/src/test/java/compute/Util.java +++ b/compute/cloud-client/src/test/java/compute/Util.java @@ -37,6 +37,7 @@ import compute.deleteprotection.SetDeleteProtection; import compute.disks.DeleteDisk; import compute.disks.DeleteSnapshot; +import compute.disks.RegionalDelete; import compute.reservation.DeleteReservation; import java.io.IOException; import java.nio.charset.StandardCharsets; @@ -266,6 +267,22 @@ public static void deleteStoragePool(String project, String zone, String storage } } + // Delete regional disks which starts with the given prefixToDelete and + // has creation timestamp >24 hours. + public static void cleanUpExistingRegionalDisks( + String prefixToDelete, String projectId, String region) + throws IOException, ExecutionException, InterruptedException, TimeoutException { + try (RegionDisksClient disksClient = RegionDisksClient.create()) { + for (Disk disk : disksClient.list(projectId, region).iterateAll()) { + if (disk.getName().contains(prefixToDelete) + && disk.getRegion().equals(region) + && isCreatedBeforeThresholdTime(disk.getCreationTimestamp())) { + RegionalDelete.deleteRegionalDisk(projectId, region, disk.getName()); + } + } + } + } + public static boolean containPrefixToDeleteAndZone( Object resource, String prefixToDelete, String zone) { boolean containPrefixAndZone = false; diff --git a/compute/cloud-client/src/test/java/compute/disks/DisksIT.java b/compute/cloud-client/src/test/java/compute/disks/DisksIT.java index 07dfc9cd3dd..f8415dbd64b 100644 --- a/compute/cloud-client/src/test/java/compute/disks/DisksIT.java +++ b/compute/cloud-client/src/test/java/compute/disks/DisksIT.java @@ -50,13 +50,17 @@ import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.MethodOrderer; +import org.junit.jupiter.api.Order; import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.TestMethodOrder; import org.junit.jupiter.api.Timeout; import org.junit.runner.RunWith; import org.junit.runners.JUnit4; @RunWith(JUnit4.class) @Timeout(value = 10, unit = TimeUnit.MINUTES) +@TestMethodOrder(MethodOrderer.OrderAnnotation.class) public class DisksIT { private static final String PROJECT_ID = System.getenv("GOOGLE_CLOUD_PROJECT"); @@ -69,10 +73,9 @@ public class DisksIT { private static String EMPTY_DISK_NAME; private static String SNAPSHOT_NAME; private static String DISK_TYPE; - private static String ZONAL_BLANK_DISK; - private static String REGIONAL_BLANK_DISK; + private static String REGIONAL_ATTACHED_DISK; private ByteArrayOutputStream stdOut; @@ -101,11 +104,14 @@ public static void setup() DISK_TYPE = String.format("zones/%s/diskTypes/pd-ssd", ZONE); ZONAL_BLANK_DISK = "gcloud-test-disk-zattach-" + uuid; REGIONAL_BLANK_DISK = "gcloud-test-disk-rattach-" + uuid; + REGIONAL_ATTACHED_DISK = "gcloud-test-disk-regional-" + uuid; // Cleanup existing stale instances. Util.cleanUpExistingInstances("test-disks", PROJECT_ID, ZONE); Util.cleanUpExistingDisks("gcloud-test-", PROJECT_ID, ZONE); Util.cleanUpExistingSnapshots("gcloud-test-snapshot-", PROJECT_ID); + Util.cleanUpExistingRegionalDisks("gcloud-test-disk-rattach-", PROJECT_ID, REGION); + Util.cleanUpExistingRegionalDisks("gcloud-test-disk-regional-", PROJECT_ID, REGION); // Create disk from image. Image debianImage = null; @@ -140,7 +146,9 @@ public static void setup() // Create zonal and regional blank disks for testing attach and resize. createZonalDisk(); - createRegionalDisk(); + createRegionalDisk(PROJECT_ID, REGION, REGIONAL_BLANK_DISK); + createRegionalDisk(PROJECT_ID, REGION, REGIONAL_ATTACHED_DISK); + TimeUnit.SECONDS.sleep(30); stdOut.close(); @@ -170,6 +178,7 @@ public static void cleanUp() DeleteDisk.deleteDisk(PROJECT_ID, ZONE, EMPTY_DISK_NAME); DeleteDisk.deleteDisk(PROJECT_ID, ZONE, ZONAL_BLANK_DISK); RegionalDelete.deleteRegionalDisk(PROJECT_ID, REGION, REGIONAL_BLANK_DISK); + RegionalDelete.deleteRegionalDisk(PROJECT_ID, REGION, REGIONAL_ATTACHED_DISK); stdOut.close(); System.setOut(out); @@ -242,14 +251,15 @@ public static void createZonalDisk() CreateEmptyDisk.createEmptyDisk(PROJECT_ID, ZONE, ZONAL_BLANK_DISK, diskType, 12); } - public static void createRegionalDisk() - throws IOException, ExecutionException, InterruptedException, TimeoutException { - String diskType = String.format("regions/%s/diskTypes/pd-balanced", REGION); + public static void createRegionalDisk( + String projectId, String region, String diskName) + throws IOException, ExecutionException, InterruptedException, TimeoutException { + String diskType = String.format("regions/%s/diskTypes/pd-balanced", region); List replicaZones = Arrays.asList( - String.format("projects/%s/zones/%s-a", PROJECT_ID, REGION), - String.format("projects/%s/zones/%s-b", PROJECT_ID, REGION)); - RegionalCreateFromSource.createRegionalDisk(PROJECT_ID, REGION, replicaZones, - REGIONAL_BLANK_DISK, diskType, 11, Optional.empty(), Optional.empty()); + String.format("projects/%s/zones/%s-a", projectId, region), + String.format("projects/%s/zones/%s-b", projectId, region)); + RegionalCreateFromSource.createRegionalDisk(projectId, region, replicaZones, + diskName, diskType, 11, Optional.empty(), Optional.empty()); } @BeforeEach @@ -265,6 +275,7 @@ public void afterEach() { } @Test + @Order(1) public void testListDisks() throws IOException { ListDisks.listDisks(PROJECT_ID, ZONE, ""); assertThat(stdOut.toString()).contains(DISK_NAME); @@ -272,6 +283,7 @@ public void testListDisks() throws IOException { } @Test + @Order(1) public void testDiskAttachResize() throws IOException, ExecutionException, InterruptedException, TimeoutException { // Test disk attach. @@ -301,4 +313,15 @@ public void testDiskAttachResize() Util.getRegionalDisk(PROJECT_ID, REGION, REGIONAL_BLANK_DISK).getSizeGb()); } + @Test + @Order(2) + public void testAttachRegionalDiskForceAttach() + throws IOException, ExecutionException, InterruptedException, TimeoutException { + String diskLink = String.format("projects/%s/regions/%s/disks/%s", + PROJECT_ID, REGION, REGIONAL_ATTACHED_DISK); + + AttachRegionalDiskForce.attachRegionalDiskForce(PROJECT_ID, ZONE, INSTANCE_NAME, diskLink); + + assertThat(stdOut.toString()).contains("Regional disk attached successfully."); + } } From e4bc6b34b476994a8fec7517bac9443cd66db922 Mon Sep 17 00:00:00 2001 From: Tetiana Yahodska Date: Sun, 24 Nov 2024 16:14:55 +0100 Subject: [PATCH 02/14] Added clean up method --- .../cloud-client/src/test/java/compute/disks/HyperdisksIT.java | 3 +++ 1 file changed, 3 insertions(+) diff --git a/compute/cloud-client/src/test/java/compute/disks/HyperdisksIT.java b/compute/cloud-client/src/test/java/compute/disks/HyperdisksIT.java index 4b61e5bf16d..e672d4dbfd1 100644 --- a/compute/cloud-client/src/test/java/compute/disks/HyperdisksIT.java +++ b/compute/cloud-client/src/test/java/compute/disks/HyperdisksIT.java @@ -62,6 +62,9 @@ public static void setUp() throws IOException, ExecutionException, InterruptedException, TimeoutException { requireEnvVar("GOOGLE_APPLICATION_CREDENTIALS"); requireEnvVar("GOOGLE_CLOUD_PROJECT"); + + Util.cleanUpExistingStoragePool("test-storage-pool-enc-", PROJECT_ID, ZONE); + Util.cleanUpExistingDisks("test-hyperdisk-enc-", PROJECT_ID, ZONE); } @AfterAll From 366d8336a7bbee444aa5bd919946e3f8cd17e7fd Mon Sep 17 00:00:00 2001 From: Tetiana Yahodska Date: Wed, 27 Nov 2024 21:38:39 +0100 Subject: [PATCH 03/14] Fixed comments and parameters --- .../disks/AttachRegionalDiskForce.java | 25 ++++++++++--------- .../src/test/java/compute/disks/DisksIT.java | 8 +++--- 2 files changed, 16 insertions(+), 17 deletions(-) diff --git a/compute/cloud-client/src/main/java/compute/disks/AttachRegionalDiskForce.java b/compute/cloud-client/src/main/java/compute/disks/AttachRegionalDiskForce.java index 1799be4c96e..75a5b7e5f5f 100644 --- a/compute/cloud-client/src/main/java/compute/disks/AttachRegionalDiskForce.java +++ b/compute/cloud-client/src/main/java/compute/disks/AttachRegionalDiskForce.java @@ -32,22 +32,24 @@ public static void main(String[] args) // TODO(developer): Replace these variables before running the sample. // Project ID or project number of the Cloud project you want to use. String projectId = "YOUR_PROJECT_ID"; - // Name of the zone in which the instance you want to use resides. - String zone = "zone-name"; - // Name of the compute instance you want to attach a disk to. + // Name of the zone of your compute instance. + String zone = "us-central1-a"; + // The name of the compute instance where you are adding the replicated disk. String instanceName = "YOUR_INSTANCE_NAME"; - // Full or partial URL of a persistent disk that you want to attach. - String diskLink = String.format( - "projects/%s/regions/DISK_REGION/disks/YOUR_DISK_NAME", projectId); + // The region where your replicated disk is located. + String region = "us-central1"; + // The name of the replicated disk. + String diskName = "YOUR_DISK_NAME"; - attachRegionalDiskForce(projectId, zone, instanceName, diskLink); + attachRegionalDiskForce(projectId, zone, instanceName, region, diskName); } // Attaches a regional disk to the instance, // forcing the attachment even if other VMs are using the disk. - public static void attachRegionalDiskForce( - String projectId, String zone, String instanceName, String diskLink) + public static Operation.Status attachRegionalDiskForce( + String projectId, String zone, String instanceName, String region, String diskName) throws IOException, InterruptedException, ExecutionException, TimeoutException { + String diskLink = String.format("projects/%s/regions/%s/disks/%s", projectId, region, diskName); // Initialize client that will be used to send requests. This client only needs to be created // once, and can be reused for multiple requests. try (InstancesClient instancesClient = InstancesClient.create()) { @@ -69,10 +71,9 @@ public static void attachRegionalDiskForce( .get(3, TimeUnit.MINUTES); if (response.hasError()) { - System.out.printf("Error attaching regional disk: %s%n", response.getError()); - return; + throw new Error("Error attaching regional disk! " + response); } - System.out.println("Regional disk attached successfully."); + return response.getStatus(); } } } diff --git a/compute/cloud-client/src/test/java/compute/disks/DisksIT.java b/compute/cloud-client/src/test/java/compute/disks/DisksIT.java index f8415dbd64b..3a7911694f3 100644 --- a/compute/cloud-client/src/test/java/compute/disks/DisksIT.java +++ b/compute/cloud-client/src/test/java/compute/disks/DisksIT.java @@ -317,11 +317,9 @@ public void testDiskAttachResize() @Order(2) public void testAttachRegionalDiskForceAttach() throws IOException, ExecutionException, InterruptedException, TimeoutException { - String diskLink = String.format("projects/%s/regions/%s/disks/%s", - PROJECT_ID, REGION, REGIONAL_ATTACHED_DISK); + Operation.Status status = AttachRegionalDiskForce + .attachRegionalDiskForce(PROJECT_ID, ZONE, INSTANCE_NAME, REGION, REGIONAL_ATTACHED_DISK); - AttachRegionalDiskForce.attachRegionalDiskForce(PROJECT_ID, ZONE, INSTANCE_NAME, diskLink); - - assertThat(stdOut.toString()).contains("Regional disk attached successfully."); + assertThat(status).isEqualTo(Operation.Status.DONE); } } From 5ff07e0b42c40d3c3dc4e19b4317b33bdc9ad0bf Mon Sep 17 00:00:00 2001 From: Tetiana Yahodska Date: Wed, 11 Dec 2024 16:28:17 +0100 Subject: [PATCH 04/14] Test order deleted --- .../disks/AttachRegionalDiskForce.java | 12 +++--- .../src/test/java/compute/disks/DisksIT.java | 38 +++++-------------- .../compute/disks/InstanceAttachDiskIT.java | 27 +++++++++++++ 3 files changed, 42 insertions(+), 35 deletions(-) create mode 100644 compute/cloud-client/src/test/java/compute/disks/InstanceAttachDiskIT.java diff --git a/compute/cloud-client/src/main/java/compute/disks/AttachRegionalDiskForce.java b/compute/cloud-client/src/main/java/compute/disks/AttachRegionalDiskForce.java index 75a5b7e5f5f..644f8130e06 100644 --- a/compute/cloud-client/src/main/java/compute/disks/AttachRegionalDiskForce.java +++ b/compute/cloud-client/src/main/java/compute/disks/AttachRegionalDiskForce.java @@ -33,23 +33,23 @@ public static void main(String[] args) // Project ID or project number of the Cloud project you want to use. String projectId = "YOUR_PROJECT_ID"; // Name of the zone of your compute instance. - String zone = "us-central1-a"; + String instanceLocation = "us-central1-a"; // The name of the compute instance where you are adding the replicated disk. String instanceName = "YOUR_INSTANCE_NAME"; // The region where your replicated disk is located. - String region = "us-central1"; + String diskLocation = "us-central1"; // The name of the replicated disk. String diskName = "YOUR_DISK_NAME"; - attachRegionalDiskForce(projectId, zone, instanceName, region, diskName); + attachRegionalDiskForce(projectId, instanceLocation, instanceName, diskLocation, diskName); } // Attaches a regional disk to the instance, // forcing the attachment even if other VMs are using the disk. public static Operation.Status attachRegionalDiskForce( - String projectId, String zone, String instanceName, String region, String diskName) + String projectId, String instanceLocation, String instanceName, String diskLocation, String diskName) throws IOException, InterruptedException, ExecutionException, TimeoutException { - String diskLink = String.format("projects/%s/regions/%s/disks/%s", projectId, region, diskName); + String diskLink = String.format("projects/%s/regions/%s/disks/%s", projectId, diskLocation, diskName); // Initialize client that will be used to send requests. This client only needs to be created // once, and can be reused for multiple requests. try (InstancesClient instancesClient = InstancesClient.create()) { @@ -60,7 +60,7 @@ public static Operation.Status attachRegionalDiskForce( AttachDiskInstanceRequest attachDiskRequest = AttachDiskInstanceRequest.newBuilder() .setProject(projectId) - .setZone(zone) + .setZone(instanceLocation) .setInstance(instanceName) .setAttachedDiskResource(attachedDisk) .setForceAttach(true) //Force the attachment diff --git a/compute/cloud-client/src/test/java/compute/disks/DisksIT.java b/compute/cloud-client/src/test/java/compute/disks/DisksIT.java index 3a7911694f3..e71f602d477 100644 --- a/compute/cloud-client/src/test/java/compute/disks/DisksIT.java +++ b/compute/cloud-client/src/test/java/compute/disks/DisksIT.java @@ -50,17 +50,13 @@ import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.MethodOrderer; -import org.junit.jupiter.api.Order; import org.junit.jupiter.api.Test; -import org.junit.jupiter.api.TestMethodOrder; import org.junit.jupiter.api.Timeout; import org.junit.runner.RunWith; import org.junit.runners.JUnit4; @RunWith(JUnit4.class) @Timeout(value = 10, unit = TimeUnit.MINUTES) -@TestMethodOrder(MethodOrderer.OrderAnnotation.class) public class DisksIT { private static final String PROJECT_ID = System.getenv("GOOGLE_CLOUD_PROJECT"); @@ -73,9 +69,10 @@ public class DisksIT { private static String EMPTY_DISK_NAME; private static String SNAPSHOT_NAME; private static String DISK_TYPE; + private static String ZONAL_BLANK_DISK; + private static String REGIONAL_BLANK_DISK; - private static String REGIONAL_ATTACHED_DISK; private ByteArrayOutputStream stdOut; @@ -104,14 +101,12 @@ public static void setup() DISK_TYPE = String.format("zones/%s/diskTypes/pd-ssd", ZONE); ZONAL_BLANK_DISK = "gcloud-test-disk-zattach-" + uuid; REGIONAL_BLANK_DISK = "gcloud-test-disk-rattach-" + uuid; - REGIONAL_ATTACHED_DISK = "gcloud-test-disk-regional-" + uuid; // Cleanup existing stale instances. Util.cleanUpExistingInstances("test-disks", PROJECT_ID, ZONE); Util.cleanUpExistingDisks("gcloud-test-", PROJECT_ID, ZONE); Util.cleanUpExistingSnapshots("gcloud-test-snapshot-", PROJECT_ID); Util.cleanUpExistingRegionalDisks("gcloud-test-disk-rattach-", PROJECT_ID, REGION); - Util.cleanUpExistingRegionalDisks("gcloud-test-disk-regional-", PROJECT_ID, REGION); // Create disk from image. Image debianImage = null; @@ -146,8 +141,7 @@ public static void setup() // Create zonal and regional blank disks for testing attach and resize. createZonalDisk(); - createRegionalDisk(PROJECT_ID, REGION, REGIONAL_BLANK_DISK); - createRegionalDisk(PROJECT_ID, REGION, REGIONAL_ATTACHED_DISK); + createRegionalDisk(); TimeUnit.SECONDS.sleep(30); @@ -178,7 +172,6 @@ public static void cleanUp() DeleteDisk.deleteDisk(PROJECT_ID, ZONE, EMPTY_DISK_NAME); DeleteDisk.deleteDisk(PROJECT_ID, ZONE, ZONAL_BLANK_DISK); RegionalDelete.deleteRegionalDisk(PROJECT_ID, REGION, REGIONAL_BLANK_DISK); - RegionalDelete.deleteRegionalDisk(PROJECT_ID, REGION, REGIONAL_ATTACHED_DISK); stdOut.close(); System.setOut(out); @@ -251,15 +244,14 @@ public static void createZonalDisk() CreateEmptyDisk.createEmptyDisk(PROJECT_ID, ZONE, ZONAL_BLANK_DISK, diskType, 12); } - public static void createRegionalDisk( - String projectId, String region, String diskName) + public static void createRegionalDisk() throws IOException, ExecutionException, InterruptedException, TimeoutException { - String diskType = String.format("regions/%s/diskTypes/pd-balanced", region); + String diskType = String.format("regions/%s/diskTypes/pd-balanced", REGION); List replicaZones = Arrays.asList( - String.format("projects/%s/zones/%s-a", projectId, region), - String.format("projects/%s/zones/%s-b", projectId, region)); - RegionalCreateFromSource.createRegionalDisk(projectId, region, replicaZones, - diskName, diskType, 11, Optional.empty(), Optional.empty()); + String.format("projects/%s/zones/%s-a", PROJECT_ID, REGION), + String.format("projects/%s/zones/%s-b", PROJECT_ID, REGION)); + RegionalCreateFromSource.createRegionalDisk(PROJECT_ID, REGION, replicaZones, + REGIONAL_BLANK_DISK, diskType, 11, Optional.empty(), Optional.empty()); } @BeforeEach @@ -275,7 +267,6 @@ public void afterEach() { } @Test - @Order(1) public void testListDisks() throws IOException { ListDisks.listDisks(PROJECT_ID, ZONE, ""); assertThat(stdOut.toString()).contains(DISK_NAME); @@ -283,7 +274,6 @@ public void testListDisks() throws IOException { } @Test - @Order(1) public void testDiskAttachResize() throws IOException, ExecutionException, InterruptedException, TimeoutException { // Test disk attach. @@ -312,14 +302,4 @@ public void testDiskAttachResize() Assert.assertEquals(23, Util.getRegionalDisk(PROJECT_ID, REGION, REGIONAL_BLANK_DISK).getSizeGb()); } - - @Test - @Order(2) - public void testAttachRegionalDiskForceAttach() - throws IOException, ExecutionException, InterruptedException, TimeoutException { - Operation.Status status = AttachRegionalDiskForce - .attachRegionalDiskForce(PROJECT_ID, ZONE, INSTANCE_NAME, REGION, REGIONAL_ATTACHED_DISK); - - assertThat(status).isEqualTo(Operation.Status.DONE); - } } diff --git a/compute/cloud-client/src/test/java/compute/disks/InstanceAttachDiskIT.java b/compute/cloud-client/src/test/java/compute/disks/InstanceAttachDiskIT.java new file mode 100644 index 00000000000..a649be37d3a --- /dev/null +++ b/compute/cloud-client/src/test/java/compute/disks/InstanceAttachDiskIT.java @@ -0,0 +1,27 @@ +package compute.disks; + +import com.google.cloud.compute.v1.Operation; +import org.junit.jupiter.api.Test; + +import java.io.IOException; +import java.util.concurrent.ExecutionException; +import java.util.concurrent.TimeoutException; + +import static com.google.common.truth.Truth.assertThat; + +public class InstanceAttachDiskIT { + private static final String PROJECT_ID = System.getenv("GOOGLE_CLOUD_PROJECT"); + private static final String ZONE = "us-west1-a"; + private static final String REGION = ZONE.substring(0, ZONE.length() - 2); + private static String REGIONAL_ATTACHED_DISK = "disk-regional"; + private static String INSTANCE_NAME = "test-disks"; + + @Test + public void testAttachRegionalDiskForceAttach() + throws IOException, ExecutionException, InterruptedException, TimeoutException { + Operation.Status status = AttachRegionalDiskForce + .attachRegionalDiskForce(PROJECT_ID, ZONE, INSTANCE_NAME, REGION, REGIONAL_ATTACHED_DISK); + + assertThat(status).isEqualTo(Operation.Status.DONE); + } +} From bf4f29973678749f08304d88e78804171bf52003 Mon Sep 17 00:00:00 2001 From: Tetiana Yahodska Date: Wed, 18 Dec 2024 22:27:40 +0100 Subject: [PATCH 05/14] Fixed code --- compute/cloud-client/src/test/java/compute/disks/DisksIT.java | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/compute/cloud-client/src/test/java/compute/disks/DisksIT.java b/compute/cloud-client/src/test/java/compute/disks/DisksIT.java index ee0758087ac..0791810b597 100644 --- a/compute/cloud-client/src/test/java/compute/disks/DisksIT.java +++ b/compute/cloud-client/src/test/java/compute/disks/DisksIT.java @@ -110,7 +110,6 @@ public static void setup() Util.cleanUpExistingSnapshots("gcloud-test-snapshot-", PROJECT_ID); Util.cleanUpExistingRegionalDisks("gcloud-test-disk-", PROJECT_ID, REGION); Util.cleanUpExistingRegionalDisks("gcloud-test-disk-rattach-", PROJECT_ID, REGION); - // Create disk from image. Image debianImage = null; try (ImagesClient imagesClient = ImagesClient.create()) { @@ -248,7 +247,7 @@ public static void createZonalDisk() } public static void createRegionalDisk() - throws IOException, ExecutionException, InterruptedException, TimeoutException { + throws IOException, ExecutionException, InterruptedException, TimeoutException { String diskType = String.format("regions/%s/diskTypes/pd-balanced", REGION); RegionalCreateFromSource.createRegionalDisk(PROJECT_ID, REGION, replicaZones, From d4fc5704b154db8924b916ae7bcfd747e1a3f3a8 Mon Sep 17 00:00:00 2001 From: Tetiana Yahodska Date: Thu, 19 Dec 2024 00:13:27 +0100 Subject: [PATCH 06/14] Fixed code --- .../src/test/java/compute/reservation/ReservationIT.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/compute/cloud-client/src/test/java/compute/reservation/ReservationIT.java b/compute/cloud-client/src/test/java/compute/reservation/ReservationIT.java index 22be75ea98a..e1f33b11ed1 100644 --- a/compute/cloud-client/src/test/java/compute/reservation/ReservationIT.java +++ b/compute/cloud-client/src/test/java/compute/reservation/ReservationIT.java @@ -36,6 +36,7 @@ import compute.CreateRegionalInstanceTemplate; import compute.DeleteInstanceTemplate; import compute.DeleteRegionalInstanceTemplate; +import compute.Util; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.PrintStream; @@ -93,6 +94,7 @@ public static void setUp() requireEnvVar("GOOGLE_CLOUD_PROJECT"); stdOut = new ByteArrayOutputStream(); System.setOut(new PrintStream(stdOut)); + Util.cleanUpExistingReservations("test-reservation-", PROJECT_ID, ZONE); // Create instance template with GLOBAL location. CreateInstanceTemplate.createInstanceTemplate(PROJECT_ID, GLOBAL_INSTANCE_TEMPLATE_NAME); From 9fe159083e33454dd7d502d0dde6f2044838461d Mon Sep 17 00:00:00 2001 From: Tetiana Yahodska Date: Thu, 19 Dec 2024 00:56:16 +0100 Subject: [PATCH 07/14] Fixed code --- .../src/test/java/compute/disks/InstanceAttachDiskIT.java | 2 +- .../src/test/java/compute/reservation/ReservationIT.java | 2 -- 2 files changed, 1 insertion(+), 3 deletions(-) diff --git a/compute/cloud-client/src/test/java/compute/disks/InstanceAttachDiskIT.java b/compute/cloud-client/src/test/java/compute/disks/InstanceAttachDiskIT.java index 2fdb8e287f6..2e758bb6d04 100644 --- a/compute/cloud-client/src/test/java/compute/disks/InstanceAttachDiskIT.java +++ b/compute/cloud-client/src/test/java/compute/disks/InstanceAttachDiskIT.java @@ -41,7 +41,7 @@ import org.mockito.MockedStatic; @RunWith(JUnit4.class) -@Timeout(value = 3) +@Timeout(value = 5) public class InstanceAttachDiskIT { private static final String PROJECT_ID = System.getenv("GOOGLE_CLOUD_PROJECT"); private static final String ZONE = "us-west1-a"; diff --git a/compute/cloud-client/src/test/java/compute/reservation/ReservationIT.java b/compute/cloud-client/src/test/java/compute/reservation/ReservationIT.java index e1f33b11ed1..22be75ea98a 100644 --- a/compute/cloud-client/src/test/java/compute/reservation/ReservationIT.java +++ b/compute/cloud-client/src/test/java/compute/reservation/ReservationIT.java @@ -36,7 +36,6 @@ import compute.CreateRegionalInstanceTemplate; import compute.DeleteInstanceTemplate; import compute.DeleteRegionalInstanceTemplate; -import compute.Util; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.PrintStream; @@ -94,7 +93,6 @@ public static void setUp() requireEnvVar("GOOGLE_CLOUD_PROJECT"); stdOut = new ByteArrayOutputStream(); System.setOut(new PrintStream(stdOut)); - Util.cleanUpExistingReservations("test-reservation-", PROJECT_ID, ZONE); // Create instance template with GLOBAL location. CreateInstanceTemplate.createInstanceTemplate(PROJECT_ID, GLOBAL_INSTANCE_TEMPLATE_NAME); From 1c0453d5e2930492c4a18bc61c12f394771e21a0 Mon Sep 17 00:00:00 2001 From: Tetiana Yahodska Date: Thu, 19 Dec 2024 19:39:00 +0100 Subject: [PATCH 08/14] Increased timeout --- .../src/main/java/compute/disks/AttachRegionalDiskForce.java | 3 +-- .../src/test/java/compute/InstancesAdvancedIT.java | 2 +- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/compute/cloud-client/src/main/java/compute/disks/AttachRegionalDiskForce.java b/compute/cloud-client/src/main/java/compute/disks/AttachRegionalDiskForce.java index 929d3bf28eb..b24e9b4649f 100644 --- a/compute/cloud-client/src/main/java/compute/disks/AttachRegionalDiskForce.java +++ b/compute/cloud-client/src/main/java/compute/disks/AttachRegionalDiskForce.java @@ -65,10 +65,9 @@ public static Status attachRegionalDiskForce(String projectId, .setZone(instanceLocation) .setInstance(instanceName) .setAttachedDiskResource(attachedDisk) - .setForceAttach(true) //Force the attachment + .setForceAttach(true) // Force the attachment .build(); - Operation response = instancesClient.attachDiskAsync(attachDiskRequest) .get(3, TimeUnit.MINUTES); diff --git a/compute/cloud-client/src/test/java/compute/InstancesAdvancedIT.java b/compute/cloud-client/src/test/java/compute/InstancesAdvancedIT.java index 105e39f2a1c..f8ada6369da 100644 --- a/compute/cloud-client/src/test/java/compute/InstancesAdvancedIT.java +++ b/compute/cloud-client/src/test/java/compute/InstancesAdvancedIT.java @@ -42,7 +42,7 @@ import org.junit.runners.JUnit4; @RunWith(JUnit4.class) -@Timeout(value = 10, unit = TimeUnit.MINUTES) +@Timeout(value = 30, unit = TimeUnit.MINUTES) public class InstancesAdvancedIT { private static final String PROJECT_ID = System.getenv("GOOGLE_CLOUD_PROJECT"); From 7c6ed3cf29259ff6e8f81a320e65dfb8bb2c6f9a Mon Sep 17 00:00:00 2001 From: Tetiana Yahodska Date: Thu, 19 Dec 2024 20:12:20 +0100 Subject: [PATCH 09/14] Increased timeout --- .../src/test/java/compute/disks/InstanceAttachDiskIT.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/compute/cloud-client/src/test/java/compute/disks/InstanceAttachDiskIT.java b/compute/cloud-client/src/test/java/compute/disks/InstanceAttachDiskIT.java index 2e758bb6d04..1eb35b76579 100644 --- a/compute/cloud-client/src/test/java/compute/disks/InstanceAttachDiskIT.java +++ b/compute/cloud-client/src/test/java/compute/disks/InstanceAttachDiskIT.java @@ -41,7 +41,7 @@ import org.mockito.MockedStatic; @RunWith(JUnit4.class) -@Timeout(value = 5) +@Timeout(value = 1, unit = TimeUnit.MINUTES) public class InstanceAttachDiskIT { private static final String PROJECT_ID = System.getenv("GOOGLE_CLOUD_PROJECT"); private static final String ZONE = "us-west1-a"; From 8b55b929814baf590bc6f350537d8e90aede5447 Mon Sep 17 00:00:00 2001 From: Tetiana Yahodska Date: Thu, 19 Dec 2024 21:28:31 +0100 Subject: [PATCH 10/14] Increased timeout --- .../src/test/java/compute/disks/InstanceAttachDiskIT.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/compute/cloud-client/src/test/java/compute/disks/InstanceAttachDiskIT.java b/compute/cloud-client/src/test/java/compute/disks/InstanceAttachDiskIT.java index 1eb35b76579..47ba47b66df 100644 --- a/compute/cloud-client/src/test/java/compute/disks/InstanceAttachDiskIT.java +++ b/compute/cloud-client/src/test/java/compute/disks/InstanceAttachDiskIT.java @@ -41,7 +41,7 @@ import org.mockito.MockedStatic; @RunWith(JUnit4.class) -@Timeout(value = 1, unit = TimeUnit.MINUTES) +@Timeout(value = 4, unit = TimeUnit.MINUTES) public class InstanceAttachDiskIT { private static final String PROJECT_ID = System.getenv("GOOGLE_CLOUD_PROJECT"); private static final String ZONE = "us-west1-a"; From 95f153e21bf31fd1d4b5e7fdfa62dd338ad57f03 Mon Sep 17 00:00:00 2001 From: Tetiana Yahodska Date: Thu, 19 Dec 2024 22:48:01 +0100 Subject: [PATCH 11/14] Fixed code --- .../cloud-client/src/test/java/compute/InstancesAdvancedIT.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/compute/cloud-client/src/test/java/compute/InstancesAdvancedIT.java b/compute/cloud-client/src/test/java/compute/InstancesAdvancedIT.java index f8ada6369da..105e39f2a1c 100644 --- a/compute/cloud-client/src/test/java/compute/InstancesAdvancedIT.java +++ b/compute/cloud-client/src/test/java/compute/InstancesAdvancedIT.java @@ -42,7 +42,7 @@ import org.junit.runners.JUnit4; @RunWith(JUnit4.class) -@Timeout(value = 30, unit = TimeUnit.MINUTES) +@Timeout(value = 10, unit = TimeUnit.MINUTES) public class InstancesAdvancedIT { private static final String PROJECT_ID = System.getenv("GOOGLE_CLOUD_PROJECT"); From 10de584bec1c5d471030dbd1b234fba23315a3b7 Mon Sep 17 00:00:00 2001 From: Tetiana Yahodska Date: Thu, 19 Dec 2024 22:50:13 +0100 Subject: [PATCH 12/14] Fixed code --- compute/cloud-client/src/test/java/compute/disks/DisksIT.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/compute/cloud-client/src/test/java/compute/disks/DisksIT.java b/compute/cloud-client/src/test/java/compute/disks/DisksIT.java index 93bd63f5a6f..9f9423a32b6 100644 --- a/compute/cloud-client/src/test/java/compute/disks/DisksIT.java +++ b/compute/cloud-client/src/test/java/compute/disks/DisksIT.java @@ -110,7 +110,7 @@ public static void setup() Util.cleanUpExistingDisks("gcloud-test-", PROJECT_ID, ZONE); Util.cleanUpExistingSnapshots("gcloud-test-snapshot-", PROJECT_ID); Util.cleanUpExistingRegionalDisks("gcloud-test-disk-", PROJECT_ID, REGION); - Util.cleanUpExistingRegionalDisks("gcloud-test-disk-rattach-", PROJECT_ID, REGION); + // Create disk from image. Image debianImage = null; try (ImagesClient imagesClient = ImagesClient.create()) { From 2eee7b501a9e8a9d25b09a88e76c97e4def59025 Mon Sep 17 00:00:00 2001 From: Tetiana Yahodska Date: Thu, 19 Dec 2024 22:50:40 +0100 Subject: [PATCH 13/14] Fixed code --- compute/cloud-client/src/test/java/compute/disks/DisksIT.java | 1 - 1 file changed, 1 deletion(-) diff --git a/compute/cloud-client/src/test/java/compute/disks/DisksIT.java b/compute/cloud-client/src/test/java/compute/disks/DisksIT.java index 9f9423a32b6..94e1dec864e 100644 --- a/compute/cloud-client/src/test/java/compute/disks/DisksIT.java +++ b/compute/cloud-client/src/test/java/compute/disks/DisksIT.java @@ -110,7 +110,6 @@ public static void setup() Util.cleanUpExistingDisks("gcloud-test-", PROJECT_ID, ZONE); Util.cleanUpExistingSnapshots("gcloud-test-snapshot-", PROJECT_ID); Util.cleanUpExistingRegionalDisks("gcloud-test-disk-", PROJECT_ID, REGION); - // Create disk from image. Image debianImage = null; try (ImagesClient imagesClient = ImagesClient.create()) { From 3db9964b2085099041abdb532e214c2bd26d4b3e Mon Sep 17 00:00:00 2001 From: Tetiana Yahodska Date: Mon, 30 Dec 2024 11:15:56 +0100 Subject: [PATCH 14/14] Fixed naming --- .../java/compute/disks/AttachRegionalDiskForce.java | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/compute/cloud-client/src/main/java/compute/disks/AttachRegionalDiskForce.java b/compute/cloud-client/src/main/java/compute/disks/AttachRegionalDiskForce.java index b24e9b4649f..20e13376e5e 100644 --- a/compute/cloud-client/src/main/java/compute/disks/AttachRegionalDiskForce.java +++ b/compute/cloud-client/src/main/java/compute/disks/AttachRegionalDiskForce.java @@ -34,24 +34,24 @@ public static void main(String[] args) // Project ID or project number of the Cloud project you want to use. String projectId = "YOUR_PROJECT_ID"; // Name of the zone of your compute instance. - String instanceLocation = "us-central1-a"; + String zone = "us-central1-a"; // The name of the compute instance where you are adding the replicated disk. String instanceName = "YOUR_INSTANCE_NAME"; // The region where your replicated disk is located. - String diskLocation = "us-central1"; + String region = "us-central1"; // The name of the replicated disk. String diskName = "YOUR_DISK_NAME"; - attachRegionalDiskForce(projectId, instanceLocation, instanceName, diskLocation, diskName); + attachRegionalDiskForce(projectId, zone, instanceName, region, diskName); } // Attaches a regional disk to the instance, // forcing the attachment even if other VMs are using the disk. public static Status attachRegionalDiskForce(String projectId, - String instanceLocation, String instanceName, String diskLocation, String diskName) + String zone, String instanceName, String region, String diskName) throws IOException, InterruptedException, ExecutionException, TimeoutException { String diskLink = String.format("projects/%s/regions/%s/disks/%s", - projectId, diskLocation, diskName); + projectId, region, diskName); // Initialize client that will be used to send requests. This client only needs to be created // once, and can be reused for multiple requests. try (InstancesClient instancesClient = InstancesClient.create()) { @@ -62,7 +62,7 @@ public static Status attachRegionalDiskForce(String projectId, AttachDiskInstanceRequest attachDiskRequest = AttachDiskInstanceRequest.newBuilder() .setProject(projectId) - .setZone(instanceLocation) + .setZone(zone) .setInstance(instanceName) .setAttachedDiskResource(attachedDisk) .setForceAttach(true) // Force the attachment