Skip to content

Commit 3f978d4

Browse files
authored
Wait for (CoorpAcademy#140)
1 parent bc57fb3 commit 3f978d4

File tree

4 files changed

+51
-11
lines changed

4 files changed

+51
-11
lines changed

packages/serverless-offline-dynamodb-streams/src/dynamodb-streams.js

Lines changed: 14 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,19 @@ class DynamodbStreams {
4646
return this._dynamodbStreamsEvent(functionKey, dynamodbStreamsEvent);
4747
}
4848

49+
async _describeTable(tableName) {
50+
try {
51+
await this.client.waitFor('tableExists', {TableName: tableName}).promise();
52+
return await this.client
53+
.describeTable({
54+
TableName: tableName
55+
})
56+
.promise();
57+
} catch (err) {
58+
return this._waitFor(tableName);
59+
}
60+
}
61+
4962
async _dynamodbStreamsEvent(functionKey, dynamodbStreamsEvent) {
5063
const {
5164
enabled,
@@ -60,11 +73,7 @@ class DynamodbStreams {
6073

6174
const {
6275
Table: {LatestStreamArn}
63-
} = await this.client
64-
.describeTable({
65-
TableName: tableName
66-
})
67-
.promise();
76+
} = await this._describeTable(tableName);
6877

6978
const {
7079
StreamDescription: {Shards: shards}

packages/serverless-offline-kinesis/src/kinesis.js

Lines changed: 14 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -41,18 +41,27 @@ class Kinesis {
4141
return this._kinesisEvent(functionKey, kinesisEvent);
4242
}
4343

44+
async _describeStream(streamName) {
45+
try {
46+
await this.client.waitFor('streamExists', {StreamName: streamName}).promise();
47+
return await this.client
48+
.describeStream({
49+
StreamName: streamName
50+
})
51+
.promise();
52+
} catch (err) {
53+
return this._waitFor(streamName);
54+
}
55+
}
56+
4457
async _kinesisEvent(functionKey, kinesisEvent) {
4558
const {enabled, streamName, arn, batchSize, startingPosition} = kinesisEvent;
4659

4760
if (!enabled) return;
4861

4962
const {
5063
StreamDescription: {Shards: shards}
51-
} = await this.client
52-
.describeStream({
53-
StreamName: streamName
54-
})
55-
.promise();
64+
} = await this._describeStream(streamName);
5665

5766
shards.forEach(({ShardId: shardId}) => {
5867
const readable = KinesisReadable(

packages/serverless-offline-s3/src/s3.js

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@ const {assign, toNumber} = require('lodash/fp');
44
const S3EventDefinition = require('./s3-event-definition');
55
const S3Event = require('./s3-event');
66

7+
const delay = timeout => new Promise(resolve => setTimeout(resolve, timeout));
8+
79
class S3 {
810
constructor(lambda, resources, options) {
911
this.lambda = null;
@@ -43,8 +45,17 @@ class S3 {
4345
return this._s3Event(functionKey, s3Event);
4446
}
4547

46-
_s3Event(functionKey, s3Event) {
48+
async _waitFor(bucket) {
49+
const exists = await this.client.bucketExists(bucket);
50+
if (exists) return;
51+
52+
await delay(1000);
53+
return this._waitFor(bucket);
54+
}
55+
56+
async _s3Event(functionKey, s3Event) {
4757
const {event, bucket} = s3Event;
58+
await this._waitFor(bucket);
4859

4960
const listener = this.client.listenBucketNotification(bucket, '*', '*', [event]);
5061

packages/serverless-offline-sqs/src/sqs.js

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,8 @@ const {logWarning} = require('serverless-offline/dist/serverlessLog');
66
const SQSEventDefinition = require('./sqs-event-definition');
77
const SQSEvent = require('./sqs-event');
88

9+
const delay = timeout => new Promise(resolve => setTimeout(resolve, timeout));
10+
911
class SQS {
1012
constructor(lambda, resources, options) {
1113
this.lambda = null;
@@ -43,6 +45,15 @@ class SQS {
4345
return this._sqsEvent(functionKey, sqsEvent);
4446
}
4547

48+
async _getQueueUrl(queueName) {
49+
try {
50+
return await this.client.getQueueUrl({QueueName: queueName}).promise();
51+
} catch (err) {
52+
await delay(10000);
53+
return this._getQueueUrl(queueName);
54+
}
55+
}
56+
4657
async _sqsEvent(functionKey, sqsEvent) {
4758
const {enabled, arn, queueName, batchSize} = sqsEvent;
4859

0 commit comments

Comments
 (0)