Skip to content

Commit 8002709

Browse files
authored
feat(rdb): add read replica (#36)
1 parent 2374a02 commit 8002709

File tree

3 files changed

+318
-25
lines changed

3 files changed

+318
-25
lines changed

packages/clients/src/api/rdb/v1/api.gen.ts

Lines changed: 126 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,8 @@ import {
2323
marshalCreateEndpointRequest,
2424
marshalCreateInstanceFromSnapshotRequest,
2525
marshalCreateInstanceRequest,
26+
marshalCreateReadReplicaEndpointRequest,
27+
marshalCreateReadReplicaRequest,
2628
marshalCreateSnapshotRequest,
2729
marshalCreateUserRequest,
2830
marshalDeleteInstanceACLRulesRequest,
@@ -61,6 +63,7 @@ import {
6163
unmarshalListUsersResponse,
6264
unmarshalPrepareInstanceLogsResponse,
6365
unmarshalPrivilege,
66+
unmarshalReadReplica,
6467
unmarshalSetInstanceACLRulesResponse,
6568
unmarshalSetInstanceSettingsResponse,
6669
unmarshalSnapshot,
@@ -77,6 +80,8 @@ import type {
7780
CreateEndpointRequest,
7881
CreateInstanceFromSnapshotRequest,
7982
CreateInstanceRequest,
83+
CreateReadReplicaEndpointRequest,
84+
CreateReadReplicaRequest,
8085
CreateSnapshotRequest,
8186
CreateUserRequest,
8287
Database,
@@ -89,6 +94,7 @@ import type {
8994
DeleteInstanceRequest,
9095
DeleteInstanceSettingsRequest,
9196
DeleteInstanceSettingsResponse,
97+
DeleteReadReplicaRequest,
9298
DeleteSnapshotRequest,
9399
DeleteUserRequest,
94100
Endpoint,
@@ -99,6 +105,7 @@ import type {
99105
GetInstanceLogRequest,
100106
GetInstanceMetricsRequest,
101107
GetInstanceRequest,
108+
GetReadReplicaRequest,
102109
GetSnapshotRequest,
103110
Instance,
104111
InstanceLog,
@@ -129,7 +136,9 @@ import type {
129136
PrepareInstanceLogsResponse,
130137
Privilege,
131138
PurgeInstanceLogsRequest,
139+
ReadReplica,
132140
RenewInstanceCertificateRequest,
141+
ResetReadReplicaRequest,
133142
RestartInstanceRequest,
134143
RestoreDatabaseBackupRequest,
135144
SetInstanceACLRulesRequest,
@@ -703,6 +712,123 @@ export class RdbV1GenAPI extends API {
703712
unmarshalInstanceMetrics,
704713
)
705714

715+
/**
716+
* Create a read replica
717+
*
718+
* @param request - The request {@link CreateReadReplicaRequest}
719+
* @returns A Promise of ReadReplica
720+
*/
721+
createReadReplica = (request: Readonly<CreateReadReplicaRequest>) =>
722+
this.client.fetch<ReadReplica>(
723+
{
724+
body: JSON.stringify(
725+
marshalCreateReadReplicaRequest(request, this.client.settings),
726+
),
727+
headers: jsonContentHeaders,
728+
method: 'POST',
729+
path: `/rdb/v1/regions/${validatePathParam(
730+
'region',
731+
request.region ?? this.client.settings.defaultRegion,
732+
)}/read-replicas`,
733+
},
734+
unmarshalReadReplica,
735+
)
736+
737+
/**
738+
* Get a read replica
739+
*
740+
* @param request - The request {@link GetReadReplicaRequest}
741+
* @returns A Promise of ReadReplica
742+
*/
743+
getReadReplica = (request: Readonly<GetReadReplicaRequest>) =>
744+
this.client.fetch<ReadReplica>(
745+
{
746+
method: 'GET',
747+
path: `/rdb/v1/regions/${validatePathParam(
748+
'region',
749+
request.region ?? this.client.settings.defaultRegion,
750+
)}/read-replicas/${validatePathParam(
751+
'readReplicaId',
752+
request.readReplicaId,
753+
)}`,
754+
},
755+
unmarshalReadReplica,
756+
)
757+
758+
/**
759+
* Delete a read replica
760+
*
761+
* @param request - The request {@link DeleteReadReplicaRequest}
762+
* @returns A Promise of ReadReplica
763+
*/
764+
deleteReadReplica = (request: Readonly<DeleteReadReplicaRequest>) =>
765+
this.client.fetch<ReadReplica>(
766+
{
767+
method: 'DELETE',
768+
path: `/rdb/v1/regions/${validatePathParam(
769+
'region',
770+
request.region ?? this.client.settings.defaultRegion,
771+
)}/read-replicas/${validatePathParam(
772+
'readReplicaId',
773+
request.readReplicaId,
774+
)}`,
775+
},
776+
unmarshalReadReplica,
777+
)
778+
779+
/**
780+
* Reset a read replica
781+
*
782+
* @param request - The request {@link ResetReadReplicaRequest}
783+
* @returns A Promise of ReadReplica
784+
*/
785+
resetReadReplica = (request: Readonly<ResetReadReplicaRequest>) =>
786+
this.client.fetch<ReadReplica>(
787+
{
788+
body: '{}',
789+
headers: jsonContentHeaders,
790+
method: 'POST',
791+
path: `/rdb/v1/regions/${validatePathParam(
792+
'region',
793+
request.region ?? this.client.settings.defaultRegion,
794+
)}/read-replicas/${validatePathParam(
795+
'readReplicaId',
796+
request.readReplicaId,
797+
)}/reset`,
798+
},
799+
unmarshalReadReplica,
800+
)
801+
802+
/**
803+
* Create a new endpoint for a given read replica
804+
*
805+
* @param request - The request {@link CreateReadReplicaEndpointRequest}
806+
* @returns A Promise of ReadReplica
807+
*/
808+
createReadReplicaEndpoint = (
809+
request: Readonly<CreateReadReplicaEndpointRequest>,
810+
) =>
811+
this.client.fetch<ReadReplica>(
812+
{
813+
body: JSON.stringify(
814+
marshalCreateReadReplicaEndpointRequest(
815+
request,
816+
this.client.settings,
817+
),
818+
),
819+
headers: jsonContentHeaders,
820+
method: 'POST',
821+
path: `/rdb/v1/regions/${validatePathParam(
822+
'region',
823+
request.region ?? this.client.settings.defaultRegion,
824+
)}/read-replicas/${validatePathParam(
825+
'readReplicaId',
826+
request.readReplicaId,
827+
)}/endpoints`,
828+
},
829+
unmarshalReadReplica,
830+
)
831+
706832
/**
707833
* Prepare your instance logs. Logs will be grouped on a minimum interval of a day.
708834
*

packages/clients/src/api/rdb/v1/marshalling.gen.ts

Lines changed: 110 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,8 @@ import type {
2323
CreateEndpointRequest,
2424
CreateInstanceFromSnapshotRequest,
2525
CreateInstanceRequest,
26+
CreateReadReplicaEndpointRequest,
27+
CreateReadReplicaRequest,
2628
CreateSnapshotRequest,
2729
CreateUserRequest,
2830
Database,
@@ -66,6 +68,10 @@ import type {
6668
PrepareInstanceLogsResponse,
6769
Privilege,
6870
PurgeInstanceLogsRequest,
71+
ReadReplica,
72+
ReadReplicaEndpointSpec,
73+
ReadReplicaEndpointSpecDirectAccess,
74+
ReadReplicaEndpointSpecPrivateNetwork,
6975
RestoreDatabaseBackupRequest,
7076
SetInstanceACLRulesRequest,
7177
SetInstanceACLRulesResponse,
@@ -116,6 +122,31 @@ const unmarshalEndpointPrivateNetworkDetails = (data: unknown) => {
116122
} as EndpointPrivateNetworkDetails
117123
}
118124

125+
export const unmarshalEndpoint = (data: unknown) => {
126+
if (!isJSONObject(data)) {
127+
throw new TypeError(
128+
`Unmarshalling the type 'Endpoint' failed as data isn't a dictionary.`,
129+
)
130+
}
131+
132+
return {
133+
directAccess: data.direct_access
134+
? unmarshalEndpointDirectAccessDetails(data.direct_access)
135+
: undefined,
136+
hostname: data.hostname,
137+
id: data.id,
138+
ip: data.ip,
139+
loadBalancer: data.load_balancer
140+
? unmarshalEndpointLoadBalancerDetails(data.load_balancer)
141+
: undefined,
142+
name: data.name,
143+
port: data.port,
144+
privateNetwork: data.private_network
145+
? unmarshalEndpointPrivateNetworkDetails(data.private_network)
146+
: undefined,
147+
} as Endpoint
148+
}
149+
119150
const unmarshalEngineSetting = (data: unknown) => {
120151
if (!isJSONObject(data)) {
121152
throw new TypeError(
@@ -152,31 +183,6 @@ const unmarshalBackupSchedule = (data: unknown) => {
152183
} as BackupSchedule
153184
}
154185

155-
export const unmarshalEndpoint = (data: unknown) => {
156-
if (!isJSONObject(data)) {
157-
throw new TypeError(
158-
`Unmarshalling the type 'Endpoint' failed as data isn't a dictionary.`,
159-
)
160-
}
161-
162-
return {
163-
directAccess: data.direct_access
164-
? unmarshalEndpointDirectAccessDetails(data.direct_access)
165-
: undefined,
166-
hostname: data.hostname,
167-
id: data.id,
168-
ip: data.ip,
169-
loadBalancer: data.load_balancer
170-
? unmarshalEndpointLoadBalancerDetails(data.load_balancer)
171-
: undefined,
172-
name: data.name,
173-
port: data.port,
174-
privateNetwork: data.private_network
175-
? unmarshalEndpointPrivateNetworkDetails(data.private_network)
176-
: undefined,
177-
} as Endpoint
178-
}
179-
180186
const unmarshalEngineVersion = (data: unknown) => {
181187
if (!isJSONObject(data)) {
182188
throw new TypeError(
@@ -269,6 +275,21 @@ const unmarshalNodeTypeVolumeType = (data: unknown) => {
269275
} as NodeTypeVolumeType
270276
}
271277

278+
export const unmarshalReadReplica = (data: unknown) => {
279+
if (!isJSONObject(data)) {
280+
throw new TypeError(
281+
`Unmarshalling the type 'ReadReplica' failed as data isn't a dictionary.`,
282+
)
283+
}
284+
285+
return {
286+
endpoints: unmarshalArrayOfObject(data.endpoints, unmarshalEndpoint),
287+
id: data.id,
288+
region: data.region,
289+
status: data.status,
290+
} as ReadReplica
291+
}
292+
272293
const unmarshalVolume = (data: unknown) => {
273294
if (!isJSONObject(data)) {
274295
throw new TypeError(
@@ -384,6 +405,10 @@ export const unmarshalInstance = (data: unknown) => {
384405
nodeType: data.node_type,
385406
organizationId: data.organization_id,
386407
projectId: data.project_id,
408+
readReplicas: unmarshalArrayOfObject(
409+
data.read_replicas,
410+
unmarshalReadReplica,
411+
),
387412
region: data.region,
388413
settings: unmarshalArrayOfObject(data.settings, unmarshalInstanceSetting),
389414
status: data.status,
@@ -760,6 +785,19 @@ const marshalEndpointSpecPrivateNetwork = (
760785
service_ip: request.serviceIp,
761786
})
762787

788+
const marshalReadReplicaEndpointSpecDirectAccess = (
789+
request: ReadReplicaEndpointSpecDirectAccess,
790+
defaults: DefaultValues,
791+
): Record<string, unknown> => ({})
792+
793+
const marshalReadReplicaEndpointSpecPrivateNetwork = (
794+
request: ReadReplicaEndpointSpecPrivateNetwork,
795+
defaults: DefaultValues,
796+
): Record<string, unknown> => ({
797+
private_network_id: request.privateNetworkId,
798+
service_ip: request.serviceIp,
799+
})
800+
763801
const marshalACLRuleRequest = (
764802
request: ACLRuleRequest,
765803
defaults: DefaultValues,
@@ -804,6 +842,32 @@ const marshalLogsPolicy = (
804842
total_disk_retention: request.totalDiskRetention,
805843
})
806844

845+
const marshalReadReplicaEndpointSpec = (
846+
request: ReadReplicaEndpointSpec,
847+
defaults: DefaultValues,
848+
): Record<string, unknown> => ({
849+
...resolveOneOf<unknown>([
850+
{
851+
param: 'direct_access',
852+
value: request.directAccess
853+
? marshalReadReplicaEndpointSpecDirectAccess(
854+
request.directAccess,
855+
defaults,
856+
)
857+
: undefined,
858+
},
859+
{
860+
param: 'private_network',
861+
value: request.privateNetwork
862+
? marshalReadReplicaEndpointSpecPrivateNetwork(
863+
request.privateNetwork,
864+
defaults,
865+
)
866+
: undefined,
867+
},
868+
]),
869+
})
870+
807871
export const marshalAddInstanceACLRulesRequest = (
808872
request: AddInstanceACLRulesRequest,
809873
defaults: DefaultValues,
@@ -896,6 +960,27 @@ export const marshalCreateInstanceRequest = (
896960
]),
897961
})
898962

963+
export const marshalCreateReadReplicaEndpointRequest = (
964+
request: CreateReadReplicaEndpointRequest,
965+
defaults: DefaultValues,
966+
): Record<string, unknown> => ({
967+
endpoint_spec: request.endpointSpec.map(elt =>
968+
marshalReadReplicaEndpointSpec(elt, defaults),
969+
),
970+
})
971+
972+
export const marshalCreateReadReplicaRequest = (
973+
request: CreateReadReplicaRequest,
974+
defaults: DefaultValues,
975+
): Record<string, unknown> => ({
976+
endpoint_spec: request.endpointSpec
977+
? request.endpointSpec.map(elt =>
978+
marshalReadReplicaEndpointSpec(elt, defaults),
979+
)
980+
: undefined,
981+
instance_id: request.instanceId,
982+
})
983+
899984
export const marshalCreateSnapshotRequest = (
900985
request: CreateSnapshotRequest,
901986
defaults: DefaultValues,

0 commit comments

Comments
 (0)