shield: restore the original context when the listener is called

Also, restores running the watcher tests.

See elastic/elasticsearch#1380

Original commit: elastic/x-pack-elasticsearch@0e0c748c04
This commit is contained in:
jaymode 2016-01-28 09:48:26 -05:00
parent 0b73e3ef33
commit 9c080681d8
2 changed files with 10 additions and 6 deletions

View File

@ -87,7 +87,8 @@ public class ShieldActionFilter extends AbstractComponent implements ActionFilte
throw LicenseUtils.newComplianceException(ShieldPlugin.NAME); throw LicenseUtils.newComplianceException(ShieldPlugin.NAME);
} }
try (ThreadContext.StoredContext original = threadContext.newStoredContext()) { final ThreadContext.StoredContext original = threadContext.newStoredContext();
try {
if (licenseState.securityEnabled()) { if (licenseState.securityEnabled()) {
// FIXME yet another hack. Needed to work around something like // FIXME yet another hack. Needed to work around something like
/* /*
@ -131,7 +132,7 @@ public class ShieldActionFilter extends AbstractComponent implements ActionFilte
interceptor.intercept(request, user); interceptor.intercept(request, user);
} }
} }
chain.proceed(task, action, request, new SigningListener(this, listener)); chain.proceed(task, action, request, new SigningListener(this, listener, original));
return; return;
} }
} }
@ -158,11 +159,12 @@ public class ShieldActionFilter extends AbstractComponent implements ActionFilte
interceptor.intercept(request, user); interceptor.intercept(request, user);
} }
} }
chain.proceed(task, action, request, new SigningListener(this, listener)); chain.proceed(task, action, request, new SigningListener(this, listener, original));
} else { } else {
chain.proceed(task, action, request, listener); chain.proceed(task, action, request, listener);
} }
} catch (Throwable t) { } catch (Throwable t) {
original.restore();
listener.onFailure(t); listener.onFailure(t);
} }
} }
@ -228,14 +230,17 @@ public class ShieldActionFilter extends AbstractComponent implements ActionFilte
private final ShieldActionFilter filter; private final ShieldActionFilter filter;
private final ActionListener innerListener; private final ActionListener innerListener;
private final ThreadContext.StoredContext threadContext;
private SigningListener(ShieldActionFilter filter, ActionListener innerListener) { private SigningListener(ShieldActionFilter filter, ActionListener innerListener, ThreadContext.StoredContext threadContext) {
this.filter = filter; this.filter = filter;
this.innerListener = innerListener; this.innerListener = innerListener;
this.threadContext = threadContext;
} }
@Override @SuppressWarnings("unchecked") @Override @SuppressWarnings("unchecked")
public void onResponse(Response response) { public void onResponse(Response response) {
threadContext.restore();
try { try {
response = this.filter.sign(response); response = this.filter.sign(response);
innerListener.onResponse(response); innerListener.onResponse(response);
@ -246,6 +251,7 @@ public class ShieldActionFilter extends AbstractComponent implements ActionFilte
@Override @Override
public void onFailure(Throwable e) { public void onFailure(Throwable e) {
threadContext.restore();
innerListener.onFailure(e); innerListener.onFailure(e);
} }
} }

View File

@ -5,7 +5,6 @@
*/ */
package org.elasticsearch.watcher.test; package org.elasticsearch.watcher.test;
import org.apache.lucene.util.LuceneTestCase;
import org.elasticsearch.ElasticsearchException; import org.elasticsearch.ElasticsearchException;
import org.elasticsearch.action.admin.indices.template.get.GetIndexTemplatesResponse; import org.elasticsearch.action.admin.indices.template.get.GetIndexTemplatesResponse;
import org.elasticsearch.action.search.SearchRequestBuilder; import org.elasticsearch.action.search.SearchRequestBuilder;
@ -102,7 +101,6 @@ import static org.hamcrest.core.IsNot.not;
/** /**
*/ */
@ClusterScope(scope = SUITE, numClientNodes = 0, transportClientRatio = 0, randomDynamicTemplates = false, maxNumDataNodes = 3) @ClusterScope(scope = SUITE, numClientNodes = 0, transportClientRatio = 0, randomDynamicTemplates = false, maxNumDataNodes = 3)
@LuceneTestCase.AwaitsFix(bugUrl = "https://github.com/elastic/x-plugins/issues/1380")
public abstract class AbstractWatcherIntegrationTestCase extends ESIntegTestCase { public abstract class AbstractWatcherIntegrationTestCase extends ESIntegTestCase {
private static final boolean timeWarpEnabled = SystemPropertyUtil.getBoolean("tests.timewarp", true); private static final boolean timeWarpEnabled = SystemPropertyUtil.getBoolean("tests.timewarp", true);