Skip to content

Commit

Permalink
feat(spanner): add samples for instance partitions (#2083)
Browse files Browse the repository at this point in the history
Thank you for opening a Pull Request! Before submitting your PR, there are a few things you can do to make sure it goes smoothly:
- [ ] Make sure to open an issue as a [bug/issue](https://togithub.com/googleapis/nodejs-spanner/issues/new/choose) before writing your code!  That way we can discuss the change, evaluate designs, and agree on the general idea
- [x] Ensure the tests and linter pass
- [ ] Code coverage does not decrease (if any source code was changed)
- [ ] Appropriate docs were updated (if necessary)

Fixes #<issue_number_goes_here> 🦕
  • Loading branch information
varuncnaik authored Jul 26, 2024
1 parent 217d256 commit b91e284
Show file tree
Hide file tree
Showing 4 changed files with 141 additions and 0 deletions.
1 change: 1 addition & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -132,6 +132,7 @@ Samples are in the [`samples/`](https://github.com/googleapis/nodejs-spanner/tre
| Deletes a user-managed instance configuration. | [source code](https://github.com/googleapis/nodejs-spanner/blob/main/samples/instance-config-delete.js) | [![Open in Cloud Shell][shell_img]](https://console.cloud.google.com/cloudshell/open?git_repo=https://github.com/googleapis/nodejs-spanner&page=editor&open_in_editor=samples/instance-config-delete.js,samples/README.md) |
| Lists the instance configuration operations. | [source code](https://github.com/googleapis/nodejs-spanner/blob/main/samples/instance-config-get-operations.js) | [![Open in Cloud Shell][shell_img]](https://console.cloud.google.com/cloudshell/open?git_repo=https://github.com/googleapis/nodejs-spanner&page=editor&open_in_editor=samples/instance-config-get-operations.js,samples/README.md) |
| Updates a user-managed instance configuration. | [source code](https://github.com/googleapis/nodejs-spanner/blob/main/samples/instance-config-update.js) | [![Open in Cloud Shell][shell_img]](https://console.cloud.google.com/cloudshell/open?git_repo=https://github.com/googleapis/nodejs-spanner&page=editor&open_in_editor=samples/instance-config-update.js,samples/README.md) |
| Creates a new instance partition | [source code](https://github.com/googleapis/nodejs-spanner/blob/main/samples/instance-partition-create.js) | [![Open in Cloud Shell][shell_img]](https://console.cloud.google.com/cloudshell/open?git_repo=https://github.com/googleapis/nodejs-spanner&page=editor&open_in_editor=samples/instance-partition-create.js,samples/README.md) |
| Creates a instance with autoscaling config. | [source code](https://github.com/googleapis/nodejs-spanner/blob/main/samples/instance-with-autoscaling-config.js) | [![Open in Cloud Shell][shell_img]](https://console.cloud.google.com/cloudshell/open?git_repo=https://github.com/googleapis/nodejs-spanner&page=editor&open_in_editor=samples/instance-with-autoscaling-config.js,samples/README.md) |
| Instance-with-processing-units | [source code](https://github.com/googleapis/nodejs-spanner/blob/main/samples/instance-with-processing-units.js) | [![Open in Cloud Shell][shell_img]](https://console.cloud.google.com/cloudshell/open?git_repo=https://github.com/googleapis/nodejs-spanner&page=editor&open_in_editor=samples/instance-with-processing-units.js,samples/README.md) |
| Instance | [source code](https://github.com/googleapis/nodejs-spanner/blob/main/samples/instance.js) | [![Open in Cloud Shell][shell_img]](https://console.cloud.google.com/cloudshell/open?git_repo=https://github.com/googleapis/nodejs-spanner&page=editor&open_in_editor=samples/instance.js,samples/README.md) |
Expand Down
18 changes: 18 additions & 0 deletions samples/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -57,6 +57,7 @@ and automatic, synchronous replication for high availability.
* [Deletes a user-managed instance configuration.](#deletes-a-user-managed-instance-configuration.)
* [Lists the instance configuration operations.](#lists-the-instance-configuration-operations.)
* [Updates a user-managed instance configuration.](#updates-a-user-managed-instance-configuration.)
* [Creates a new instance partition](#creates-a-new-instance-partition)
* [Creates a instance with autoscaling config.](#creates-a-instance-with-autoscaling-config.)
* [Instance-with-processing-units](#instance-with-processing-units)
* [Instance](#instance)
Expand Down Expand Up @@ -865,6 +866,23 @@ __Usage:__



### Creates a new instance partition

View the [source code](https://github.com/googleapis/nodejs-spanner/blob/main/samples/instance-partition-create.js).

[![Open in Cloud Shell][shell_img]](https://console.cloud.google.com/cloudshell/open?git_repo=https://github.com/googleapis/nodejs-spanner&page=editor&open_in_editor=samples/instance-partition-create.js,samples/README.md)

__Usage:__


`node instance-partition-create.js <INSTANCE_ID> <INSTANCE_PARTITION_ID> <PROJECT_ID>`


-----




### Creates a instance with autoscaling config.

View the [source code](https://github.com/googleapis/nodejs-spanner/blob/main/samples/instance-with-autoscaling-config.js).
Expand Down
84 changes: 84 additions & 0 deletions samples/instance-partition-create.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,84 @@
/**
* 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.
*/

// sample-metadata:
// title: Creates a new instance partition
// usage: node instance-partition-create.js <INSTANCE_ID> <INSTANCE_PARTITION_ID> <PROJECT_ID>

'use strict';

function main(
instanceId = 'my-instance',
instancePartitionId = 'my-instance-partition',
projectId = 'my-project-id'
) {
async function createInstancePartition() {
// [START spanner_create_instance_partition]
// Imports the Google Cloud client library
const {Spanner} = require('@google-cloud/spanner');

/**
* TODO(developer): Uncomment the following lines before running the sample.
*/
// const projectId = 'my-project-id';
// const instanceId = 'my-instance';
// const instancePartitionId = 'my-instance-partition';

// Creates a client
const spanner = new Spanner({
projectId: projectId,
});

// Get the instance admin client
const instanceAdminClient = spanner.getInstanceAdminClient();

// Creates a new instance partition
try {
console.log(
`Creating instance partition ${instanceAdminClient.instancePartitionPath(
projectId,
instanceId,
instancePartitionId
)}.`
);
const [operation] = await instanceAdminClient.createInstancePartition({
instancePartitionId: instancePartitionId,
parent: instanceAdminClient.instancePath(projectId, instanceId),
instancePartition: {
config: instanceAdminClient.instanceConfigPath(projectId, 'nam3'),
nodeCount: 1,
displayName: 'Test instance partition',
},
});

console.log(
`Waiting for operation on ${instancePartitionId} to complete...`
);
await operation.promise();

console.log(`Created instance partition ${instancePartitionId}.`);
} catch (err) {
console.error('ERROR:', err);
}
// [END spanner_create_instance_partition]
}
createInstancePartition();
}

process.on('unhandledRejection', err => {
console.error(err.message);
process.exitCode = 1;
});
main(...process.argv.slice(2));
38 changes: 38 additions & 0 deletions samples/system-test/spanner.test.js
Original file line number Diff line number Diff line change
Expand Up @@ -1732,6 +1732,44 @@ describe('Autogenerated Admin Clients', () => {
});
});

describe('instance partition', () => {
before(async () => {
const instance = spanner.instance(SAMPLE_INSTANCE_ID);
const [, operation] = await instance.create({
config: 'regional-us-central1',
nodes: 1,
displayName: 'Instance partitions test',
labels: {
['cloud_spanner_samples']: 'true',
created: Math.round(Date.now() / 1000).toString(), // current time
},
});
await operation.promise();
});

after(async () => {
const instance = spanner.instance(SAMPLE_INSTANCE_ID);
await instance.delete();
});

// create_instance_partition
it('should create an instance partition', async () => {
const output = execSync(
`node instance-partition-create.js "${SAMPLE_INSTANCE_ID}" "my-instance-partition" "${PROJECT_ID}"`
);
assert.match(
output,
new RegExp(
'Waiting for operation on my-instance-partition to complete...'
)
);
assert.match(
output,
new RegExp('Created instance partition my-instance-partition.')
);
});
});

describe('postgreSQL', () => {
before(async () => {
const instance = spanner.instance(SAMPLE_INSTANCE_ID);
Expand Down

0 comments on commit b91e284

Please sign in to comment.