Skip to content

Commit

Permalink
fix: set keepalive configuration (#836)
Browse files Browse the repository at this point in the history
- [PHP reference implementation](googleapis/google-cloud-php#3565)

This adds two gRPC keepalive options:

- `GRPC_ARG_KEEPALIVE_TIME_MS` to 30s
- `GRPC_ARG_KEEPALIVE_TIMEOUT_MS` to 10s
  • Loading branch information
stephenplusplus committed Jan 27, 2021
1 parent 448465d commit 8105dea
Show file tree
Hide file tree
Showing 2 changed files with 85 additions and 70 deletions.
2 changes: 2 additions & 0 deletions src/index.ts
Expand Up @@ -390,6 +390,8 @@ export class Bigtable {
libName: 'gccl',
libVersion: PKG.version,
scopes,
'grpc.keepalive_time_ms': 30000,
'grpc.keepalive_timeout_ms': 10000,
},
options
);
Expand Down
153 changes: 83 additions & 70 deletions test/index.ts
Expand Up @@ -148,6 +148,38 @@ describe('Bigtable', () => {
assert.deepStrictEqual(bigtable.api, {});
});

it('should set grpc keepalive options', () => {
const bigtable = Bigtable();
assert.strictEqual(
bigtable.options.BigtableClient['grpc.keepalive_time_ms'],
30000
);
assert.strictEqual(
bigtable.options.BigtableClient['grpc.keepalive_timeout_ms'],
10000
);

assert.strictEqual(
bigtable.options.BigtableInstanceAdminClient['grpc.keepalive_time_ms'],
30000
);
assert.strictEqual(
bigtable.options.BigtableInstanceAdminClient[
'grpc.keepalive_timeout_ms'
],
10000
);

assert.strictEqual(
bigtable.options.BigtableTableAdminClient['grpc.keepalive_time_ms'],
30000
);
assert.strictEqual(
bigtable.options.BigtableTableAdminClient['grpc.keepalive_timeout_ms'],
10000
);
});

it('should cache a local google-auth-library instance', () => {
const fakeGoogleAuthInstance = {};
const options = {
Expand All @@ -163,6 +195,8 @@ describe('Bigtable', () => {
libName: 'gccl',
libVersion: PKG.version,
scopes: EXPECTED_SCOPES,
'grpc.keepalive_time_ms': 30000,
'grpc.keepalive_timeout_ms': 10000,
},
options
)
Expand All @@ -185,38 +219,37 @@ describe('Bigtable', () => {
};

const bigtable = new Bigtable(options);
const defaultOptions = {
a: 'b',
c: 'd',
libName: 'gccl',
libVersion: PKG.version,
scopes: EXPECTED_SCOPES,
};
const expectedOptions = Object.assign(
{
port: 443,
sslCreds: undefined,
libName: 'gccl',
libVersion: PKG.version,
scopes: EXPECTED_SCOPES,
'grpc.keepalive_time_ms': 30000,
'grpc.keepalive_timeout_ms': 10000,
},
options
);

assert.deepStrictEqual(bigtable.options, {
BigtableClient: Object.assign(
{
servicePath: 'bigtable.googleapis.com',
port: 443,
sslCreds: undefined,
},
defaultOptions
expectedOptions
),
BigtableInstanceAdminClient: Object.assign(
{
servicePath: 'bigtableadmin.googleapis.com',
port: 443,
sslCreds: undefined,
},
defaultOptions
expectedOptions
),
BigtableTableAdminClient: Object.assign(
{
servicePath: 'bigtableadmin.googleapis.com',
port: 443,
sslCreds: undefined,
},
defaultOptions
expectedOptions
),
});
});
Expand All @@ -227,11 +260,22 @@ describe('Bigtable', () => {
const options = {
a: 'b',
c: 'd',
libName: 'gccl',
libVersion: PKG.version,
scopes: EXPECTED_SCOPES,
};

const expectedOptions = Object.assign(
{
servicePath: 'override',
port: 8080,
sslCreds: grpc.credentials.createInsecure(),
libName: 'gccl',
libVersion: PKG.version,
scopes: EXPECTED_SCOPES,
'grpc.keepalive_time_ms': 30000,
'grpc.keepalive_timeout_ms': 10000,
},
options
);

const bigtable = new Bigtable(options);

assert.strictEqual(
Expand All @@ -240,30 +284,9 @@ describe('Bigtable', () => {
);

assert.deepStrictEqual(bigtable.options, {
BigtableClient: Object.assign(
{
servicePath: 'override',
port: 8080,
sslCreds: grpc.credentials.createInsecure(),
},
options
),
BigtableInstanceAdminClient: Object.assign(
{
servicePath: 'override',
port: 8080,
sslCreds: grpc.credentials.createInsecure(),
},
options
),
BigtableTableAdminClient: Object.assign(
{
servicePath: 'override',
port: 8080,
sslCreds: grpc.credentials.createInsecure(),
},
options
),
BigtableClient: expectedOptions,
BigtableInstanceAdminClient: expectedOptions,
BigtableTableAdminClient: expectedOptions,
});
});

Expand All @@ -272,40 +295,30 @@ describe('Bigtable', () => {
apiEndpoint: 'customEndpoint:9090',
a: 'b',
c: 'd',
libName: 'gccl',
libVersion: PKG.version,
scopes: EXPECTED_SCOPES,
};

const expectedOptions = Object.assign(
{
servicePath: 'customEndpoint',
port: 9090,
sslCreds: grpc.credentials.createInsecure(),
libName: 'gccl',
libVersion: PKG.version,
scopes: EXPECTED_SCOPES,
'grpc.keepalive_time_ms': 30000,
'grpc.keepalive_timeout_ms': 10000,
},
options
);

const bigtable = new Bigtable(options);

assert.strictEqual(bigtable.customEndpoint, options.apiEndpoint);

assert.deepStrictEqual(bigtable.options, {
BigtableClient: Object.assign(
{
servicePath: 'customEndpoint',
port: 9090,
sslCreds: grpc.credentials.createInsecure(),
},
options
),
BigtableInstanceAdminClient: Object.assign(
{
servicePath: 'customEndpoint',
port: 9090,
sslCreds: grpc.credentials.createInsecure(),
},
options
),
BigtableTableAdminClient: Object.assign(
{
servicePath: 'customEndpoint',
port: 9090,
sslCreds: grpc.credentials.createInsecure(),
},
options
),
BigtableClient: expectedOptions,
BigtableInstanceAdminClient: expectedOptions,
BigtableTableAdminClient: expectedOptions,
});
});

Expand Down

0 comments on commit 8105dea

Please sign in to comment.