@@ -86,23 +86,26 @@ func GetRDSToken(ctx context.Context, connConfig RDSConnectionConfig, rdsAuth *R
8686 logger .Info ("Using cached RDS token for connector" , slog .String ("connector" , connectorName ))
8787 return rdsAuth .token , nil
8888 }
89- return func () (string , error ) {
90- logger .Info ("Generating new RDS token for connector" , slog .String ("connector" , connectorName ))
91- rdsAuth .lock .Lock ()
92- defer rdsAuth .lock .Unlock ()
93- newUpdateTime := time .Now ()
94- if rdsAuth .updateTime .Add (RDSAuthTokenTTL ).After (now ) && rdsAuth .token != "" {
95- return rdsAuth .token , nil
96- }
97- peerAWSCredentials := BuildPeerAWSCredentials (rdsAuth .AwsAuthConfig )
98- token , err := buildRdsToken (ctx , connConfig , peerAWSCredentials , connectorName )
99- if err != nil {
100- return "" , err
101- }
102- rdsAuth .token = token
103- rdsAuth .updateTime = newUpdateTime
104- return token , nil
105- }()
89+ logger .Info ("Generating new RDS token for connector" , slog .String ("connector" , connectorName ))
90+ return rdsAuth .GetFreshRdsToken (ctx , connConfig , connectorName )
91+ }
92+
93+ // GetFreshRdsToken bypasses the cache TTL and immediately fetches a new RDS IAM token.
94+ // Use this when a connection break requires a guaranteed-fresh token for reconnect.
95+ func (r * RDSAuth ) GetFreshRdsToken (
96+ ctx context.Context ,
97+ connConfig RDSConnectionConfig ,
98+ connectorName string ,
99+ ) (string , error ) {
100+ r .lock .Lock ()
101+ defer r .lock .Unlock ()
102+ token , err := buildRdsToken (ctx , connConfig , BuildPeerAWSCredentials (r .AwsAuthConfig ), connectorName )
103+ if err != nil {
104+ return "" , err
105+ }
106+ r .token = token
107+ r .updateTime = time .Now ()
108+ return token , nil
106109}
107110
108111func buildRdsToken (
0 commit comments