@@ -416,7 +416,8 @@ impl<'a> GatewayContext<'a> {
416416 }
417417 // Read config and make API call
418418 let response = ' out: {
419- for url in self . shared . sys_config . gateway_urls . iter ( ) {
419+ let mut error = anyhow ! ( "unknown error" ) ;
420+ for ( i, url) in self . shared . sys_config . gateway_urls . iter ( ) . enumerate ( ) {
420421 let response = self
421422 . register_cvm ( url, client_key. clone ( ) , client_cert. clone ( ) , pk. clone ( ) )
422423 . await ;
@@ -426,10 +427,13 @@ impl<'a> GatewayContext<'a> {
426427 }
427428 Err ( err) => {
428429 warn ! ( "Failed to register CVM: {err:?}, retrying with next dstack-gateway" ) ;
430+ if i == 0 {
431+ error = err;
432+ }
429433 }
430434 }
431435 }
432- bail ! ( "Failed to register CVM, all dstack-gateway urls are down" ) ;
436+ return Err ( error ) . context ( "Failed to register CVM, all dstack-gateway urls are down" ) ;
433437 } ;
434438 let wg_info = response. wg . context ( "Missing wg info" ) ?;
435439
@@ -699,7 +703,8 @@ impl<'a> Stage0<'a> {
699703 bail ! ( "No KMS URLs are set" ) ;
700704 }
701705 let keys = ' out: {
702- for kms_url in self . shared . sys_config . kms_urls . iter ( ) {
706+ let mut error = anyhow ! ( "unknown error" ) ;
707+ for ( i, kms_url) in self . shared . sys_config . kms_urls . iter ( ) . enumerate ( ) {
703708 let kms_url = format ! ( "{kms_url}/prpc" ) ;
704709 let response = self . request_app_keys_from_kms_url ( kms_url. clone ( ) ) . await ;
705710 match response {
@@ -708,10 +713,14 @@ impl<'a> Stage0<'a> {
708713 }
709714 Err ( err) => {
710715 warn ! ( "Failed to get app keys from KMS {kms_url}: {err:?}" ) ;
716+ // Record the first error
717+ if i == 0 {
718+ error = err;
719+ }
711720 }
712721 }
713722 }
714- bail ! ( "Failed to get app keys from KMS" ) ;
723+ return Err ( error ) . context ( "Failed to get app keys from KMS" ) ;
715724 } ;
716725 Ok ( keys)
717726 }
0 commit comments