Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: add resource header prefix #1196

Merged
merged 20 commits into from
Aug 26, 2020
Merged
Show file tree
Hide file tree
Changes from 14 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 9 additions & 0 deletions src/backup.ts
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@ import {
RequestCallback,
ResourceCallback,
NormalCallback,
CLOUD_RESOURCE_HEADER,
} from './common';
import {EnumKey, Spanner, RequestConfig, TranslateEnumKeys} from '.';
import {
Expand Down Expand Up @@ -100,12 +101,16 @@ class Backup {
id: string;
formattedName_: string;
instanceFormattedName_: string;
resourceHeader_: {[k: string]: string};
request: BackupRequest;
constructor(instance: Instance, name: string) {
this.request = instance.request;
this.instanceFormattedName_ = instance.formattedName_;
this.formattedName_ = Backup.formatName_(instance.formattedName_, name);
this.id = this.formattedName_.split('/').pop() || '';
this.resourceHeader_ = {
stephenplusplus marked this conversation as resolved.
Show resolved Hide resolved
[CLOUD_RESOURCE_HEADER]: this.instanceFormattedName_,
};
}

create(options: CreateBackupOptions): Promise<CreateBackupResponse>;
Expand Down Expand Up @@ -180,6 +185,7 @@ class Backup {
method: 'createBackup',
reqOpts,
gaxOpts,
headers: this.resourceHeader_,
},
(err, operation, resp) => {
if (err) {
Expand Down Expand Up @@ -246,6 +252,7 @@ class Backup {
method: 'getBackup',
reqOpts,
gaxOpts,
headers: this.resourceHeader_,
},
(err, response) => {
callback!(err, response);
Expand Down Expand Up @@ -420,6 +427,7 @@ class Backup {
method: 'updateBackup',
reqOpts,
gaxOpts,
headers: this.resourceHeader_,
},
(err, response) => {
callback!(err, response);
Expand Down Expand Up @@ -467,6 +475,7 @@ class Backup {
method: 'deleteBackup',
reqOpts,
gaxOpts,
headers: this.resourceHeader_,
},
err => {
callback!(err);
Expand Down
6 changes: 5 additions & 1 deletion src/batch-transaction.ts
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,8 @@ import * as extend from 'extend';
import * as is from 'is';
import {Snapshot} from './transaction';
import {google} from '../protos/protos';
import {Session} from '.';
import {Session, Database} from '.';
import {CLOUD_RESOURCE_HEADER} from '../src/common';

export interface TransactionIdentifier {
session: string | Session;
Expand Down Expand Up @@ -155,6 +156,9 @@ class BatchTransaction extends Snapshot {
transaction: {id: this.id},
});
config.reqOpts = extend({}, query);
config.headers = {
[CLOUD_RESOURCE_HEADER]: (this.session.parent as Database).formattedName_,
};
delete query.partitionOptions;
this.session.request(config, (err, resp) => {
if (err) {
Expand Down
6 changes: 6 additions & 0 deletions src/common.ts
Original file line number Diff line number Diff line change
Expand Up @@ -69,3 +69,9 @@ export interface PagedOptions {
export interface PagedOptionsWithFilter extends PagedOptions {
filter?: string;
}

/*!
* HTTP header for the resource prefix to improve routing
* by the backend.
*/
export const CLOUD_RESOURCE_HEADER = 'google-cloud-resource-prefix';
stephenplusplus marked this conversation as resolved.
Show resolved Hide resolved
14 changes: 14 additions & 0 deletions src/database.ts
Original file line number Diff line number Diff line change
Expand Up @@ -74,6 +74,7 @@ import {
LongRunningCallback,
NormalCallback,
PagedOptionsWithFilter,
CLOUD_RESOURCE_HEADER,
PagedResponse,
RequestCallback,
ResourceCallback,
Expand Down Expand Up @@ -248,6 +249,7 @@ class Database extends common.GrpcServiceObject {
formattedName_: string;
pool_: SessionPoolInterface;
queryOptions_?: spannerClient.spanner.v1.ExecuteSqlRequest.IQueryOptions;
resourceHeader_: {[k: string]: string};
request: DatabaseRequest;
constructor(
instance: Instance,
Expand Down Expand Up @@ -320,6 +322,9 @@ class Database extends common.GrpcServiceObject {
: new SessionPool(this, poolOptions);
this.formattedName_ = formattedName_;
this.instance = instance;
this.resourceHeader_ = {
[CLOUD_RESOURCE_HEADER]: this.formattedName_,
};
this.request = instance.request;
// eslint-disable-next-line @typescript-eslint/no-explicit-any
this.requestStream = instance.requestStream as any;
Expand Down Expand Up @@ -424,6 +429,7 @@ class Database extends common.GrpcServiceObject {
method: 'batchCreateSessions',
reqOpts,
gaxOpts: options.gaxOptions,
headers: this.resourceHeader_,
},
(err, resp) => {
if (err) {
Expand Down Expand Up @@ -679,6 +685,7 @@ class Database extends common.GrpcServiceObject {
method: 'createSession',
reqOpts,
gaxOpts: options.gaxOptions,
headers: this.resourceHeader_,
},
(err, resp) => {
if (err) {
Expand Down Expand Up @@ -868,6 +875,7 @@ class Database extends common.GrpcServiceObject {
method: 'dropDatabase',
reqOpts,
gaxOpts,
headers: this.resourceHeader_,
},
callback!
);
Expand Down Expand Up @@ -1084,6 +1092,7 @@ class Database extends common.GrpcServiceObject {
method: 'getDatabase',
reqOpts,
gaxOpts,
headers: this.resourceHeader_,
},
callback!
);
Expand Down Expand Up @@ -1220,6 +1229,7 @@ class Database extends common.GrpcServiceObject {
method: 'getDatabaseDdl',
reqOpts,
gaxOpts,
headers: this.resourceHeader_,
},
// eslint-disable-next-line @typescript-eslint/no-explicit-any
(err, statements, ...args: any[]) => {
Expand Down Expand Up @@ -1354,6 +1364,7 @@ class Database extends common.GrpcServiceObject {
method: 'listSessions',
reqOpts,
gaxOpts,
headers: this.resourceHeader_,
},
(err, sessions, nextPageRequest, ...args) => {
let sessionInstances: Session[] | null = null;
Expand Down Expand Up @@ -1438,6 +1449,7 @@ class Database extends common.GrpcServiceObject {
method: 'listSessionsStream',
reqOpts,
gaxOpts,
headers: this.resourceHeader_,
});
}

Expand Down Expand Up @@ -1812,6 +1824,7 @@ class Database extends common.GrpcServiceObject {
method: 'restoreDatabase',
reqOpts,
gaxOpts,
headers: this.resourceHeader_,
},
(err, operation, resp) => {
if (err) {
Expand Down Expand Up @@ -2627,6 +2640,7 @@ class Database extends common.GrpcServiceObject {
method: 'updateDatabaseDdl',
reqOpts,
gaxOpts,
headers: this.resourceHeader_,
},
callback!
);
Expand Down
24 changes: 21 additions & 3 deletions src/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,7 @@ import {
PagedResponse,
PagedCallback,
PagedOptionsWithFilter,
CLOUD_RESOURCE_HEADER,
} from './common';
import {Session} from './session';
import {SessionPool} from './session-pool';
Expand Down Expand Up @@ -86,6 +87,7 @@ export interface RequestConfig {
// eslint-disable-next-line @typescript-eslint/no-explicit-any
reqOpts: any;
gaxOpts?: CallOptions;
headers: {[k: string]: string};
}
export interface CreateInstanceRequest {
config?: string;
Expand Down Expand Up @@ -154,6 +156,8 @@ class Spanner extends GrpcService {
auth: GoogleAuth;
clients_: Map<string, {}>;
instances_: Map<string, Instance>;
projectFormattedName_: string;
resourceHeader_: {[k: string]: string};

/**
* Placeholder used to auto populate a column with the commit timestamp.
Expand Down Expand Up @@ -254,6 +258,10 @@ class Spanner extends GrpcService {
this.auth = new GoogleAuth(this.options);
this.clients_ = new Map();
this.instances_ = new Map();
this.projectFormattedName_ = 'projects/' + this.projectId;
stephenplusplus marked this conversation as resolved.
Show resolved Hide resolved
this.resourceHeader_ = {
[CLOUD_RESOURCE_HEADER]: this.projectFormattedName_,
};
}

createInstance(
Expand Down Expand Up @@ -368,7 +376,7 @@ class Spanner extends GrpcService {
const formattedName = Instance.formatName_(this.projectId, name);
const displayName = config.displayName || formattedName.split('/').pop();
const reqOpts = {
parent: 'projects/' + this.projectId,
parent: this.projectFormattedName_,
instanceId: formattedName.split('/').pop(),
instance: extend(
{
Expand All @@ -392,6 +400,7 @@ class Spanner extends GrpcService {
method: 'createInstance',
reqOpts,
gaxOpts: config.gaxOptions,
headers: this.resourceHeader_,
},
(err, operation, resp) => {
if (err) {
Expand Down Expand Up @@ -523,8 +532,8 @@ class Spanner extends GrpcService {
},
reqOpts
);
delete gaxOpts.pageSize;
delete gaxOpts.pageToken;
delete gaxOpts.pageSize;
}

this.request(
Expand All @@ -533,6 +542,7 @@ class Spanner extends GrpcService {
method: 'listInstances',
reqOpts,
gaxOpts,
headers: this.resourceHeader_,
},
(err, instances, nextPageRequest, ...args) => {
let instanceInstances: Instance[] | null = null;
Expand Down Expand Up @@ -614,6 +624,7 @@ class Spanner extends GrpcService {
method: 'listInstancesStream',
reqOpts,
gaxOpts,
headers: this.resourceHeader_,
});
}

Expand Down Expand Up @@ -739,6 +750,7 @@ class Spanner extends GrpcService {
method: 'listInstanceConfigs',
reqOpts,
gaxOpts,
headers: this.resourceHeader_,
},
(err, instanceConfigs, nextPageRequest, ...args) => {
const nextQuery = nextPageRequest!
Expand Down Expand Up @@ -812,6 +824,7 @@ class Spanner extends GrpcService {
method: 'listInstanceConfigsStream',
reqOpts,
gaxOpts,
headers: this.resourceHeader_,
});
}

Expand Down Expand Up @@ -864,7 +877,12 @@ class Spanner extends GrpcService {
const requestFn = gaxClient[config.method].bind(
gaxClient,
reqOpts,
config.gaxOpts
// Add headers to `gaxOpts`
extend(true, {}, config.gaxOpts, {
otherArgs: {
headers: config.headers,
},
})
);
callback(null, requestFn);
});
Expand Down
15 changes: 15 additions & 0 deletions src/instance.ts
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@ import {
NormalCallback,
ResourceCallback,
PagedOptionsWithFilter,
CLOUD_RESOURCE_HEADER,
} from './common';
import {Duplex} from 'stream';
import {SessionPoolOptions, SessionPool} from './session-pool';
Expand Down Expand Up @@ -151,6 +152,7 @@ class Instance extends common.GrpcServiceObject {
requestStream: (config: RequestConfig) => Duplex;
databases_: Map<string, Database>;
metadata?: IInstance;
resourceHeader_: {[k: string]: string};
constructor(spanner: Spanner, name: string) {
const formattedName_ = Instance.formatName_(spanner.projectId, name);
const methods = {
Expand Down Expand Up @@ -221,6 +223,9 @@ class Instance extends common.GrpcServiceObject {
this.request = spanner.request.bind(spanner);
this.requestStream = spanner.requestStream.bind(spanner);
this.databases_ = new Map<string, Database>();
this.resourceHeader_ = {
[CLOUD_RESOURCE_HEADER]: this.formattedName_,
};
}

/**
Expand Down Expand Up @@ -350,6 +355,7 @@ class Instance extends common.GrpcServiceObject {
method: 'listBackups',
reqOpts,
gaxOpts,
headers: this.resourceHeader_,
},
(err, backups, nextPageRequest, ...args) => {
let backupInstances: Backup[] | null = null;
Expand Down Expand Up @@ -432,6 +438,7 @@ class Instance extends common.GrpcServiceObject {
method: 'listBackupsStream',
reqOpts,
gaxOpts,
headers: this.resourceHeader_,
});
}

Expand Down Expand Up @@ -547,6 +554,7 @@ class Instance extends common.GrpcServiceObject {
method: 'listBackupOperations',
reqOpts,
gaxOpts,
headers: this.resourceHeader_,
},
(err, operations, nextPageRequest, ...args) => {
const nextQuery = nextPageRequest!
Expand Down Expand Up @@ -671,6 +679,7 @@ class Instance extends common.GrpcServiceObject {
method: 'listDatabaseOperations',
reqOpts,
gaxOpts,
headers: this.resourceHeader_,
},
(err, operations, nextPageRequest, ...args) => {
const nextQuery = nextPageRequest!
Expand Down Expand Up @@ -815,6 +824,7 @@ class Instance extends common.GrpcServiceObject {
method: 'createDatabase',
reqOpts,
gaxOpts: options.gaxOptions,
headers: this.resourceHeader_,
},
(err, operation, resp) => {
if (err) {
Expand Down Expand Up @@ -948,6 +958,7 @@ class Instance extends common.GrpcServiceObject {
method: 'deleteInstance',
reqOpts,
gaxOpts,
headers: this.resourceHeader_,
},
(err, resp) => {
if (!err) {
Expand Down Expand Up @@ -1235,6 +1246,7 @@ class Instance extends common.GrpcServiceObject {
method: 'listDatabases',
reqOpts,
gaxOpts,
headers: this.resourceHeader_,
},
(err, rowDatabases, nextPageRequest, ...args) => {
let databases: Database[] | null = null;
Expand Down Expand Up @@ -1319,6 +1331,7 @@ class Instance extends common.GrpcServiceObject {
method: 'listDatabasesStream',
reqOpts,
gaxOpts,
headers: this.resourceHeader_,
});
}

Expand Down Expand Up @@ -1413,6 +1426,7 @@ class Instance extends common.GrpcServiceObject {
method: 'getInstance',
reqOpts,
gaxOpts: options.gaxOptions,
headers: this.resourceHeader_,
},
callback!
);
Expand Down Expand Up @@ -1500,6 +1514,7 @@ class Instance extends common.GrpcServiceObject {
method: 'updateInstance',
reqOpts,
gaxOpts,
headers: this.resourceHeader_,
},
callback!
);
Expand Down
Loading