Skip to content

Commit

Permalink
fix: JOIN-49161 do not throw when empty string as filter is returned …
Browse files Browse the repository at this point in the history
…from gcloud (#111)
  • Loading branch information
eugene-taran authored Dec 17, 2024
1 parent b84faae commit fcb946b
Show file tree
Hide file tree
Showing 2 changed files with 26 additions and 2 deletions.
4 changes: 2 additions & 2 deletions packages/pubsub/src/Subscriber.ts
Original file line number Diff line number Diff line change
Expand Up @@ -228,9 +228,9 @@ export class Subscriber<T = unknown> {
this.logger?.info(`PubSub: Subscription ${subscriptionName} is created`)
} else if (options) {
const [existingSubscription] = await subscription.getMetadata()
if (options.filter != existingSubscription.filter) {
if ((options.filter || existingSubscription.filter) && options.filter != existingSubscription.filter) {
throw new Error(`PubSub: Subscriptions filters are immutable, they can't be changed, subscription: ${subscriptionName},` +
` currentFilter: ${existingSubscription.filter || 'undefined'}, newFilter: ${options.filter || 'undefined'}`)
` currentFilter: ${existingSubscription.filter as string}, newFilter: ${options.filter as string}`)
}
if (this.isMetadataChanged(existingSubscription, options)) {
await subscription.setMetadata(options)
Expand Down
24 changes: 24 additions & 0 deletions packages/pubsub/src/__tests__/Subscriber.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -74,6 +74,9 @@ describe('Subscriber', () => {
iamTopicMock.setPolicy.mockReset()
iamSubscriptionMock.setPolicy.mockReset()
schemaClientMock.getSchema.mockReset()
loggerMock.info.mockReset()
loggerMock.warn.mockReset()
loggerMock.error.mockReset()
})

describe('initialize', () => {
Expand Down Expand Up @@ -182,6 +185,27 @@ describe('Subscriber', () => {
processAbortSpy.mockClear()
})

it('does not throw when deployed again without filter', async () => {
topicMock.exists.mockResolvedValue([true])
subscriptionMock.exists.mockResolvedValue([true])
// google cloud returns filter as empty string when no filter is set
subscriptionMock.getMetadata.mockResolvedValue([{
filter: '',
}])

const subscriberWithFilter = new Subscriber({
topicName, subscriptionName,
subscriptionOptions: {
...subscriptionOptions,
},
}, clientMock as unknown as PubSub,
schemaClientMock as unknown as SchemaServiceClient, undefined as unknown as SubscriberClient, loggerMock)

await subscriberWithFilter.initialize()

expect(loggerMock.error).not.toHaveBeenCalled()
})

it('updates metadata if backoff has changed', async () => {
topicMock.exists.mockResolvedValue([true])
subscriptionMock.exists.mockResolvedValue([true])
Expand Down

0 comments on commit fcb946b

Please sign in to comment.