Skip to content

Commit e39ca6a

Browse files
author
Joanna Grycz
committed
refactor for create and delete
1 parent bc43fbd commit e39ca6a

File tree

5 files changed

+101
-13
lines changed

5 files changed

+101
-13
lines changed

tpu/queuedResource/createQueuedResource.js

Lines changed: 19 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -108,10 +108,27 @@ async function main(
108108
const [operation] = await tpuClient.createQueuedResource(request);
109109

110110
// Wait for the create operation to complete.
111-
const [response] = await operation.promise();
111+
await operation.promise();
112112

113-
console.log(JSON.stringify(response));
114113
console.log(`Queued resource ${queuedResourceName} created.`);
114+
115+
const getNodeRequest = {
116+
name: `projects/${projectId}/locations/${zone}/nodes/${nodeName}`,
117+
};
118+
119+
console.log(`Waiting for TPU node ${nodeName} to become ready...`);
120+
121+
// Poll for TPU node state every 30 seconds
122+
const intervalId = setInterval(async () => {
123+
const [node] = await tpuClient.getNode(getNodeRequest);
124+
125+
if (node.state === 'READY') {
126+
clearInterval(intervalId);
127+
console.log(`TPU node ${nodeName} is ready.`);
128+
} else {
129+
console.log(`TPU node ${nodeName} is in state: ${node.state}`);
130+
}
131+
}, 30000);
115132
}
116133
await callCreateQueuedResource();
117134
// [END tpu_queued_resources_create]

tpu/queuedResource/deleteQueuedResource.js

Lines changed: 21 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -36,17 +36,36 @@ async function main(queuedResourceName, zone) {
3636
// The zone of your queued resource.
3737
// zone = 'europe-west4-a';
3838

39+
async function callDeleteTpuVM(nodeName) {
40+
const request = {
41+
name: `projects/${projectId}/locations/${zone}/nodes/${nodeName}`,
42+
};
43+
44+
const [operation] = await tpuClient.deleteNode(request);
45+
46+
// Wait for the delete operation to complete.
47+
await operation.promise();
48+
49+
console.log(`Node: ${nodeName} deleted.`);
50+
}
51+
3952
async function callDeleteQueuedResource() {
4053
const request = {
4154
name: `projects/${projectId}/locations/${zone}/queuedResources/${queuedResourceName}`,
4255
};
4356

57+
// Retrive node name
58+
const [response] = await tpuClient.getQueuedResource(request);
59+
const nodeName = response.tpu.nodeSpec[0].nodeId;
60+
61+
// Before deleting the queued resource it is required to delete the TPU VM.
62+
await callDeleteTpuVM(nodeName);
63+
4464
const [operation] = await tpuClient.deleteQueuedResource(request);
4565

4666
// Wait for the delete operation to complete.
47-
const [response] = await operation.promise();
67+
await operation.promise();
4868

49-
console.log(JSON.stringify(response));
5069
console.log(`Queued resource ${queuedResourceName} deleted.`);
5170
}
5271
await callDeleteQueuedResource();

tpu/queuedResource/forceDeleteQueuedResource.js

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -45,9 +45,8 @@ async function main(queuedResourceName, zone) {
4545
const [operation] = await tpuClient.deleteQueuedResource(request);
4646

4747
// Wait for the delete operation to complete.
48-
const [response] = await operation.promise();
48+
await operation.promise();
4949

50-
console.log(JSON.stringify(response));
5150
console.log(`Queued resource ${queuedResourceName} deletion forced.`);
5251
}
5352
await callForceDeleteQueuedResource();
Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
/*
2+
* Copyright 2024 Google LLC
3+
*
4+
* Licensed under the Apache License, Version 2.0 (the "License");
5+
* you may not use this file except in compliance with the License.
6+
* You may obtain a copy of the License at
7+
*
8+
* https://www.apache.org/licenses/LICENSE-2.0
9+
*
10+
* Unless required by applicable law or agreed to in writing, software
11+
* distributed under the License is distributed on an "AS IS" BASIS,
12+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13+
* See the License for the specific language governing permissions and
14+
* limitations under the License.
15+
*/
16+
17+
'use strict';
18+
19+
const path = require('path');
20+
const assert = require('node:assert/strict');
21+
const {describe, it} = require('mocha');
22+
const cp = require('child_process');
23+
24+
const execSync = cmd => cp.execSync(cmd, {encoding: 'utf-8'});
25+
const cwd = path.join(__dirname, '..');
26+
27+
describe('TPU queued resource force deletion', async () => {
28+
const queuedResourceName = `queued-resource-force-delete-${Math.floor(Math.random() * 1000 + 1)}`;
29+
const nodePrefix = 'node-force-delete-2a2b3c';
30+
const nodeName = `${nodePrefix}${Math.floor(Math.random() * 1000 + 1)}`;
31+
const zone = 'us-central1-c';
32+
const tpuType = 'v2-8';
33+
const tpuSoftwareVersion = 'tpu-vm-tf-2.14.1';
34+
35+
it('should force queued resource deletion', () => {
36+
// Create queued resource
37+
execSync(
38+
`node ./queuedResource/createQueuedResource.js ${nodeName} ${queuedResourceName} ${zone} ${tpuType} ${tpuSoftwareVersion}`,
39+
{
40+
cwd,
41+
}
42+
);
43+
44+
const response = execSync(
45+
`node ./queuedResource/forceDeleteQueuedResource.js ${queuedResourceName} ${zone}`,
46+
{
47+
cwd,
48+
}
49+
);
50+
51+
assert(
52+
response.includes(
53+
`Queued resource ${queuedResourceName} deletion forced.`
54+
)
55+
);
56+
});
57+
});

tpu/test/queuedResource.test.js

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -56,18 +56,14 @@ describe('TPU queued resource', async () => {
5656
);
5757
});
5858

59-
it('should force queued resource deletion', () => {
59+
it('should delete queued resource', () => {
6060
const response = execSync(
61-
`node ./queuedResource/forceDeleteQueuedResource.js ${queuedResourceName} ${zone}`,
61+
`node ./queuedResource/deleteQueuedResource.js ${queuedResourceName} ${zone}`,
6262
{
6363
cwd,
6464
}
6565
);
6666

67-
assert(
68-
response.includes(
69-
`Queued resource ${queuedResourceName} deletion forced.`
70-
)
71-
);
67+
assert(response.includes(`Queued resource ${queuedResourceName} deleted.`));
7268
});
7369
});

0 commit comments

Comments
 (0)