Skip to content

Commit eeda8ff

Browse files
authored
feat(spanner): add samples for instance partitions (#2037)
1 parent 5a88478 commit eeda8ff

File tree

2 files changed

+111
-2
lines changed

2 files changed

+111
-2
lines changed
Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,71 @@
1+
<?php
2+
/**
3+
* Copyright 2024 Google Inc.
4+
*
5+
* Licensed under the Apache License, Version 2.0 (the "License");
6+
* you may not use this file except in compliance with the License.
7+
* You may obtain a copy of the License at
8+
*
9+
* http://www.apache.org/licenses/LICENSE-2.0
10+
*
11+
* Unless required by applicable law or agreed to in writing, software
12+
* distributed under the License is distributed on an "AS IS" BASIS,
13+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14+
* See the License for the specific language governing permissions and
15+
* limitations under the License.
16+
*/
17+
18+
/**
19+
* For instructions on how to run the full sample:
20+
*
21+
* @see https://github.com/GoogleCloudPlatform/php-docs-samples/tree/main/spanner/README.md
22+
*/
23+
24+
namespace Google\Cloud\Samples\Spanner;
25+
26+
// [START spanner_create_instance_partition]
27+
use Google\Cloud\Spanner\Admin\Instance\V1\Client\InstanceAdminClient;
28+
use Google\Cloud\Spanner\Admin\Instance\V1\CreateInstancePartitionRequest;
29+
use Google\Cloud\Spanner\Admin\Instance\V1\InstancePartition;
30+
31+
/**
32+
* Creates an instance partition.
33+
* Example:
34+
* ```
35+
* create_instance_partition($projectId, $instanceId, $instancePartitionId);
36+
* ```
37+
*
38+
* @param string $projectId The Google Cloud project ID.
39+
* @param string $instanceId The Spanner instance ID.
40+
* @param string $instancePartitionId The instance partition ID.
41+
*/
42+
function create_instance_partition(string $projectId, string $instanceId, string $instancePartitionId): void
43+
{
44+
$instanceAdminClient = new InstanceAdminClient();
45+
46+
$instanceName = $instanceAdminClient->instanceName($projectId, $instanceId);
47+
$instancePartitionName = $instanceAdminClient->instancePartitionName($projectId, $instanceId, $instancePartitionId);
48+
$configName = $instanceAdminClient->instanceConfigName($projectId, 'nam3');
49+
50+
$instancePartition = (new InstancePartition())
51+
->setConfig($configName)
52+
->setDisplayName('Test instance partition.')
53+
->setNodeCount(1);
54+
55+
$operation = $instanceAdminClient->createInstancePartition(
56+
(new CreateInstancePartitionRequest())
57+
->setParent($instanceName)
58+
->setInstancePartitionId($instancePartitionId)
59+
->setInstancePartition($instancePartition)
60+
);
61+
62+
print('Waiting for operation to complete...' . PHP_EOL);
63+
$operation->pollUntilComplete();
64+
65+
printf('Created instance partition %s' . PHP_EOL, $instancePartitionId);
66+
}
67+
// [END spanner_create_instance_partition]
68+
69+
// The following 2 lines are only needed to run the samples
70+
require_once __DIR__ . '/../../testing/sample_helpers.php';
71+
\Google\Cloud\Samples\execute_sample(__FILE__, __NAMESPACE__, $argv);

spanner/test/spannerTest.php

Lines changed: 40 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,12 @@ class spannerTest extends TestCase
5050
/** @var string lowCostInstanceId */
5151
protected static $lowCostInstanceId;
5252

53+
/** @var string instancePartitionInstanceId */
54+
protected static $instancePartitionInstanceId;
55+
56+
/** @var Instance instancePartitionInstance */
57+
protected static $instancePartitionInstance;
58+
5359
/** @var string databaseId */
5460
protected static $databaseId;
5561

@@ -123,6 +129,8 @@ public static function setUpBeforeClass(): void
123129
self::$autoscalingInstanceId = 'test-' . time() . rand();
124130
self::$instanceId = 'test-' . time() . rand();
125131
self::$lowCostInstanceId = 'test-' . time() . rand();
132+
self::$instancePartitionInstanceId = 'test-' . time() . rand();
133+
self::$instancePartitionInstance = $spanner->instance(self::$instancePartitionInstanceId);
126134
self::$databaseId = 'test-' . time() . rand();
127135
self::$encryptedDatabaseId = 'en-test-' . time() . rand();
128136
self::$backupId = 'backup-' . self::$databaseId;
@@ -236,6 +244,33 @@ public function testListInstanceConfigOperations()
236244
$output);
237245
}
238246

247+
public function testCreateInstancePartition()
248+
{
249+
$spanner = new SpannerClient([
250+
'projectId' => self::$projectId,
251+
]);
252+
$instanceConfig = $spanner->instanceConfiguration('regional-us-central1');
253+
$operation = $spanner->createInstance(
254+
$instanceConfig,
255+
self::$instancePartitionInstanceId,
256+
[
257+
'displayName' => 'Instance partitions test.',
258+
'nodeCount' => 1,
259+
'labels' => [
260+
'cloud_spanner_samples' => true,
261+
]
262+
]
263+
);
264+
$operation->pollUntilComplete();
265+
$output = $this->runAdminFunctionSnippet('create_instance_partition', [
266+
'project_id' => self::$projectId,
267+
'instance_id' => self::$instancePartitionInstanceId,
268+
'instance_partition_id' => 'my-instance-partition'
269+
]);
270+
$this->assertStringContainsString('Waiting for operation to complete...', $output);
271+
$this->assertStringContainsString('Created instance partition my-instance-partition', $output);
272+
}
273+
239274
/**
240275
* @depends testCreateInstance
241276
*/
@@ -1260,10 +1295,13 @@ public static function tearDownAfterClass(): void
12601295
$database = self::$instance->database(self::$databaseId);
12611296
$database->drop();
12621297
}
1263-
$database = self::$multiInstance->database(self::$databaseId);
1264-
$database->drop();
1298+
if (self::$multiInstance->exists()) {//Clean up database
1299+
$database = self::$multiInstance->database(self::$databaseId);
1300+
$database->drop();
1301+
}
12651302
self::$instance->delete();
12661303
self::$lowCostInstance->delete();
1304+
self::$instancePartitionInstance->delete();
12671305
if (self::$customInstanceConfig->exists()) {
12681306
self::$customInstanceConfig->delete();
12691307
}

0 commit comments

Comments
 (0)