@@ -23,6 +23,7 @@ const metaManager = require('../lib/metaManager');
2323const datasetManager = require ( '../datasets/dataManager' ) ;
2424const procurementManager = require ( '../procurements/dataManager' ) ;
2525const fs = require ( 'fs' ) ;
26+ const retry = require ( 'async-retry' ) ;
2627
2728require . extensions [ '.sql' ] = function ( module , filename ) {
2829 module . exports = fs . readFileSync ( filename , 'utf8' ) ;
@@ -241,6 +242,26 @@ async function setupDatasharePrerequisites(projectId) {
241242 } ) ;
242243}
243244
245+ /**
246+ * Starts the PubSub listener, and retries if launch failure
247+ */
248+ async function startPubSubListener ( ) {
249+ function logRetry ( error , attempt ) {
250+ console . warn ( `PubSub listener performing retry attempt: ${ attempt } after ${ error } ` ) ;
251+ }
252+
253+ // eslint-disable-next-line no-unused-vars
254+ await retry ( async bail => {
255+ await initializePubSubListener ( ) ;
256+ } , {
257+ // retries: 5,
258+ forever : true ,
259+ minTimeout : 30000 ,
260+ maxTimeout : 60000 ,
261+ onRetry : logRetry
262+ } )
263+ }
264+
244265/**
245266 * Initializes PubSub listener for entitlement auto approvals
246267 */
@@ -348,6 +369,13 @@ async function initializePubSubListener() {
348369 let subscription = pubSubUtil . getSubscription ( subscriptionName , subscriberOptions ) ;
349370 subscription . on ( 'message' , messageHandler ) ;
350371 subscription . on ( 'error' , errorHandler ) ;
372+ subscription . on ( 'close' , ( ) => { console . error ( 'Subscription closed' ) } ) ;
373+ subscription . detached ( ( cb ) => {
374+ console . warn ( 'Subscription detached' ) ;
375+ if ( cb ) {
376+ console . error ( cb ) ;
377+ }
378+ } ) ;
351379 } catch ( err ) {
352380 console . error ( err ) ;
353381 }
@@ -362,6 +390,6 @@ async function initializePubSubListener() {
362390module . exports = {
363391 initializeSchema,
364392 syncResources,
365- initializePubSubListener
393+ startPubSubListener
366394} ;
367395
0 commit comments