@@ -178,8 +178,12 @@ public <T extends TransportResponse> void sendRequestDecorate(
178178 requestHeadersToCopy .removeAll (Task .REQUEST_HEADERS ); // Special case where this header is preserved during stashContext.
179179 }
180180
181+ final Supplier <ThreadContext .StoredContext > restorableContextSupplier = getThreadContext ().newRestorableContext (true );
181182 try (ThreadContext .StoredContext stashedContext = getThreadContext ().stashContext ()) {
182- final TransportResponseHandler <T > restoringHandler = new RestoringTransportResponseHandler <T >(handler , stashedContext );
183+ final TransportResponseHandler <T > restoringHandler = new RestoringTransportResponseHandler <T >(
184+ handler ,
185+ restorableContextSupplier
186+ );
183187 getThreadContext ().putHeader ("_opendistro_security_remotecn" , cs .getClusterName ().value ());
184188
185189 final Map <String , String > headerMap = new HashMap <>(
@@ -377,10 +381,13 @@ private ThreadContext getThreadContext() {
377381 // which is private scoped
378382 private class RestoringTransportResponseHandler <T extends TransportResponse > implements TransportResponseHandler <T > {
379383
380- private final ThreadContext .StoredContext contextToRestore ;
384+ private final Supplier < ThreadContext .StoredContext > contextToRestore ;
381385 private final TransportResponseHandler <T > innerHandler ;
382386
383- private RestoringTransportResponseHandler (TransportResponseHandler <T > innerHandler , ThreadContext .StoredContext contextToRestore ) {
387+ private RestoringTransportResponseHandler (
388+ TransportResponseHandler <T > innerHandler ,
389+ Supplier <ThreadContext .StoredContext > contextToRestore
390+ ) {
384391 this .contextToRestore = contextToRestore ;
385392 this .innerHandler = innerHandler ;
386393 }
@@ -407,7 +414,7 @@ public void handleResponse(T response) {
407414 List <String > dlsResponseHeader = responseHeaders .get (ConfigConstants .OPENDISTRO_SECURITY_DLS_QUERY_HEADER );
408415 List <String > maskedFieldsResponseHeader = responseHeaders .get (ConfigConstants .OPENDISTRO_SECURITY_MASKED_FIELD_HEADER );
409416
410- contextToRestore .restore ();
417+ contextToRestore .get ();
411418
412419 final boolean isDebugEnabled = log .isDebugEnabled ();
413420 if (response instanceof ClusterSearchShardsResponse ) {
@@ -438,7 +445,7 @@ public void handleResponse(T response) {
438445
439446 @ Override
440447 public void handleException (TransportException e ) {
441- contextToRestore .restore ();
448+ contextToRestore .get ();
442449 innerHandler .handleException (e );
443450 }
444451
0 commit comments