Skip to content

Commit

Permalink
samples: add support for CMMR Phase 2 (#1718)
Browse files Browse the repository at this point in the history
* feat: support customer managed instance configurations

Co-authored-by: Knut Olav Løite <[email protected]>
Co-authored-by: Owl Bot <gcf-owl-bot[bot]@users.noreply.github.com>
  • Loading branch information
3 people authored Oct 3, 2022
1 parent bbe8f69 commit bf16afd
Show file tree
Hide file tree
Showing 7 changed files with 453 additions and 0 deletions.
4 changes: 4 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -119,6 +119,10 @@ Samples are in the [`samples/`](https://github.com/googleapis/nodejs-spanner/tre
| Reads data using an existing storing index. | [source code](https://github.com/googleapis/nodejs-spanner/blob/main/samples/index-read-data-with-storing.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/index-read-data-with-storing.js,samples/README.md) |
| Read data using an existing index. | [source code](https://github.com/googleapis/nodejs-spanner/blob/main/samples/index-read-data.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/index-read-data.js,samples/README.md) |
| Indexing | [source code](https://github.com/googleapis/nodejs-spanner/blob/main/samples/indexing.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/indexing.js,samples/README.md) |
| Creates a user-managed instance configuration. | [source code](https://github.com/googleapis/nodejs-spanner/blob/main/samples/instance-config-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-config-create.js,samples/README.md) |
| 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) |
| 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) |
| Json-add-column | [source code](https://github.com/googleapis/nodejs-spanner/blob/main/samples/json-add-column.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/json-add-column.js,samples/README.md) |
Expand Down
72 changes: 72 additions & 0 deletions samples/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,10 @@ and automatic, synchronous replication for high availability.
* [Reads data using an existing storing index.](#reads-data-using-an-existing-storing-index.)
* [Read data using an existing index.](#read-data-using-an-existing-index.)
* [Indexing](#indexing)
* [Creates a user-managed instance configuration.](#creates-a-user-managed-instance-configuration.)
* [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.)
* [Instance-with-processing-units](#instance-with-processing-units)
* [Instance](#instance)
* [Json-add-column](#json-add-column)
Expand Down Expand Up @@ -609,6 +613,74 @@ __Usage:__



### Creates a user-managed instance configuration.

View the [source code](https://github.com/googleapis/nodejs-spanner/blob/main/samples/instance-config-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-config-create.js,samples/README.md)

__Usage:__


`node instance-config-create <INSTANCE_CONFIG_ID> <BASE_INSTANCE_CONFIG_ID> <PROJECT_ID>`


-----




### Deletes a user-managed instance configuration.

View the [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)

__Usage:__


`node instance-config-delete <INSTANCE_CONFIG_ID> <PROJECT_ID>`


-----




### Lists the instance configuration operations.

View the [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)

__Usage:__


`node instance-config-get-operations <PROJECT_ID>`


-----




### Updates a user-managed instance configuration.

View the [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)

__Usage:__


`node instance-config-update <INSTANCE_CONFIG_ID> <PROJECT_ID>`


-----




### Instance-with-processing-units

View the [source code](https://github.com/googleapis/nodejs-spanner/blob/main/samples/instance-with-processing-units.js).
Expand Down
80 changes: 80 additions & 0 deletions samples/instance-config-create.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,80 @@
/**
* Copyright 2022 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 user-managed instance configuration.
// usage: node instance-config-create <INSTANCE_CONFIG_ID> <BASE_INSTANCE_CONFIG_ID> <PROJECT_ID>

'use strict';

function main(
instanceConfigId = 'custom-my-instance-config',
baseInstanceConfigId = 'my-base-instance-config',
projectId = 'my-project-id'
) {
// [START spanner_create_instance_config]

/**
* TODO(developer): Uncomment the following lines before running the sample.
*/
// const instanceConfigId = 'custom-my-instance-config-id'
// const baseInstanceConfigId = 'my-base-instance-config-id';
// const projectId = 'my-project-id';

// Imports the Google Cloud client library
const {Spanner} = require('@google-cloud/spanner');

// Creates a client
const spanner = new Spanner({
projectId: projectId,
});
async function createInstanceConfig() {
// Creates a new instance config
const instanceConfig = spanner.instanceConfig(instanceConfigId);
try {
const [baseInstanceConfig] = await spanner.getInstanceConfig(
baseInstanceConfigId
);
console.log(`Creating instance config ${instanceConfig.formattedName_}.`);
const [, operation] = await instanceConfig.create({
displayName: instanceConfigId,
baseConfig: baseInstanceConfig.name,
replicas: baseInstanceConfig.replicas.concat(
baseInstanceConfig.optionalReplicas[0]
),
});
console.log(
`Waiting for create operation for ${instanceConfig.id} to complete...`
);
await operation.promise();
console.log(`Created instance config ${instanceConfigId}.`);
} catch (err) {
console.error(
'ERROR: Creating instance config ',
instanceConfigId,
' failed with error message ',
err
);
}
}
createInstanceConfig();
// [END spanner_create_instance_config]
}

process.on('unhandledRejection', err => {
console.error(err.message);
process.exitCode = 1;
});
main(...process.argv.slice(2));
76 changes: 76 additions & 0 deletions samples/instance-config-delete.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,76 @@
/**
* Copyright 2022 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: Deletes a user-managed instance configuration.
// usage: node instance-config-delete <INSTANCE_CONFIG_ID> <PROJECT_ID>

'use strict';

function main(
instanceConfigId = 'custom-my-instance-config',
projectId = 'my-project-id'
) {
// [START spanner_delete_instance_config]

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

// Imports the Google Cloud client library
const {Spanner} = require('@google-cloud/spanner');

// Creates a client
const spanner = new Spanner({
projectId: projectId,
});
async function deleteInstanceConfig() {
// Deletes an instance config.
const instanceConfig = spanner.instanceConfig(instanceConfigId);
try {
// Delete the instance config.
console.log(`Deleting ${instanceConfig.id}...\n`);
await instanceConfig.delete();
// Verify that the instance config no longer exists
const exists = await instanceConfig.exists();
if (exists) {
console.error(
'Error: Instance config ',
instanceConfigId,
' still exists'
);
} else {
console.log(`Deleted instance config ${instanceConfigId}.\n`);
}
} catch (err) {
console.error(
'ERROR: Deleting instance config ',
instanceConfigId,
' failed with error message ',
err
);
}
}
deleteInstanceConfig();
// [END spanner_delete_instance_config]
}

process.on('unhandledRejection', err => {
console.error(err.message);
process.exitCode = 1;
});
main(...process.argv.slice(2));
76 changes: 76 additions & 0 deletions samples/instance-config-get-operations.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,76 @@
/**
* Copyright 2022 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: Lists the instance configuration operations.
// usage: node instance-config-get-operations <PROJECT_ID>

'use strict';

function main(projectId = 'my-project-id') {
// [START spanner_list_instance_config_operations]

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

// Imports the Google Cloud client library
const {Spanner, protos} = require('@google-cloud/spanner');

// Creates a client
const spanner = new Spanner({
projectId: projectId,
});
async function getInstanceConfigOperations() {
// Lists the instance config operations.
try {
console.log(
`Getting list of instance config operations on project ${projectId}...\n`
);
const [instanceConfigOperations] =
await spanner.getInstanceConfigOperations({
filter:
'(metadata.@type=type.googleapis.com/google.spanner.admin.instance.v1.CreateInstanceConfigMetadata)',
});
console.log(
`Available instance config operations for project ${projectId}:`
);
instanceConfigOperations.forEach(instanceConfigOperation => {
const metadata = instanceConfigOperation.metadata;
const instanceConfig =
protos.google.spanner.admin.instance.v1.CreateInstanceConfigMetadata.decode(
instanceConfigOperation.metadata.value
).instanceConfig;
console.log(
`Instance config operation for ${instanceConfig.name} of type` +
` ${metadata.type_url} has status ${
instanceConfigOperation.done ? 'done' : 'running'
}.`
);
});
} catch (err) {
console.error('ERROR:', err);
}
}
getInstanceConfigOperations();
// [END spanner_list_instance_config_operations]
}

process.on('unhandledRejection', err => {
console.error(err.message);
process.exitCode = 1;
});
main(...process.argv.slice(2));
Loading

0 comments on commit bf16afd

Please sign in to comment.