Przeglądaj źródła

Transport: fix potential NPE in new tracer log if request timeout

Closes #9994
Boaz Leskes 10 lat temu
rodzic
commit
955ff05a5e

+ 2 - 2
src/main/java/org/elasticsearch/transport/TransportService.java

@@ -390,8 +390,8 @@ public class TransportService extends AbstractLifecycleComponent<TransportServic
                     // lets see if its in the timeout holder
                     TimeoutInfoHolder timeoutInfoHolder = timeoutInfoHandlers.get(requestId);
                     if (timeoutInfoHolder != null) {
-                        action = holder.action();
-                        sourceNode = holder.node();
+                        action = timeoutInfoHolder.action();
+                        sourceNode = timeoutInfoHolder.node();
                     }
                 }
                 if (action == null) {

+ 20 - 2
src/test/java/org/elasticsearch/transport/AbstractSimpleTransportTests.java

@@ -616,7 +616,11 @@ public abstract class AbstractSimpleTransportTests extends ElasticsearchTestCase
 
             @Override
             public void messageReceived(StringMessageRequest request, TransportChannel channel) throws Exception {
+                if (request.timeout() > 0) {
+                    Thread.sleep(request.timeout);
+                }
                 channel.sendResponse(new RuntimeException(""));
+
             }
 
             @Override
@@ -659,7 +663,9 @@ public abstract class AbstractSimpleTransportTests extends ElasticsearchTestCase
         serviceB.addTracer(tracer);
 
         tracer.reset(4);
-        serviceA.sendRequest(nodeB, "test", new StringMessageRequest(""), noopResponseHandler);
+        boolean timeout = randomBoolean();
+        TransportRequestOptions options = timeout ? new TransportRequestOptions().withTimeout(1) : TransportRequestOptions.EMPTY;
+        serviceA.sendRequest(nodeB, "test", new StringMessageRequest("", 10), options, noopResponseHandler);
         requestCompleted.acquire();
         tracer.expectedEvents.get().await();
         assertThat("didn't see request sent", tracer.sawRequestSent, equalTo(true));
@@ -773,24 +779,36 @@ public abstract class AbstractSimpleTransportTests extends ElasticsearchTestCase
     static class StringMessageRequest extends TransportRequest {
 
         private String message;
+        private long timeout;
 
-        StringMessageRequest(String message) {
+        StringMessageRequest(String message, long timeout) {
             this.message = message;
+            this.timeout = timeout;
         }
 
         StringMessageRequest() {
         }
 
+        public StringMessageRequest(String message) {
+            this(message, -1);
+        }
+
+        public long timeout() {
+            return timeout;
+        }
+
         @Override
         public void readFrom(StreamInput in) throws IOException {
             super.readFrom(in);
             message = in.readString();
+            timeout = in.readLong();
         }
 
         @Override
         public void writeTo(StreamOutput out) throws IOException {
             super.writeTo(out);
             out.writeString(message);
+            out.writeLong(timeout);
         }
     }