|
37 | 37 | import org.elasticsearch.test.tasks.MockTaskManager;
|
38 | 38 | import org.elasticsearch.threadpool.ThreadPool;
|
39 | 39 | import org.elasticsearch.tracing.Tracer;
|
| 40 | +import org.elasticsearch.transport.BytesTransportRequest; |
40 | 41 | import org.elasticsearch.transport.ClusterConnectionManager;
|
41 | 42 | import org.elasticsearch.transport.ConnectTransportException;
|
42 | 43 | import org.elasticsearch.transport.ConnectionProfile;
|
@@ -502,10 +503,21 @@ public void sendRequest(
|
502 | 503 | }
|
503 | 504 |
|
504 | 505 | // poor mans request cloning...
|
505 |
| - RequestHandlerRegistry<?> reg = MockTransportService.this.getRequestHandler(action); |
506 | 506 | BytesStreamOutput bStream = new BytesStreamOutput();
|
507 | 507 | request.writeTo(bStream);
|
508 |
| - final TransportRequest clonedRequest = reg.newRequest(bStream.bytes().streamInput()); |
| 508 | + final TransportRequest clonedRequest; |
| 509 | + if (request instanceof BytesTransportRequest) { |
| 510 | + // Some request handlers read back a BytesTransportRequest |
| 511 | + // into a different class that cannot be re-serialized (i.e. JOIN_VALIDATE_ACTION_NAME), |
| 512 | + // in those cases we just copy the raw bytes back to a BytesTransportRequest. |
| 513 | + // This is only needed for the BwC for JOIN_VALIDATE_ACTION_NAME and can be removed in the next major |
| 514 | + assert Version.CURRENT.major == Version.V_7_17_0.major + 1; |
| 515 | + clonedRequest = new BytesTransportRequest(bStream.bytes().streamInput()); |
| 516 | + } else { |
| 517 | + RequestHandlerRegistry<?> reg = MockTransportService.this.getRequestHandler(action); |
| 518 | + clonedRequest = reg.newRequest(bStream.bytes().streamInput()); |
| 519 | + } |
| 520 | + assert clonedRequest.getClass().equals(request.getClass()) : clonedRequest + " vs " + request; |
509 | 521 |
|
510 | 522 | final RunOnce runnable = new RunOnce(new AbstractRunnable() {
|
511 | 523 | @Override
|
|
0 commit comments