@Override public AbstractResponse getErrorResponse(int throttleTimeMs, Throwable e) { // The error is indicated in two ways: by setting the same error code in all partitions, and by // setting the top-level error code. The form where we set the same error code in all partitions // is needed in order to maintain backwards compatibility with older versions of the protocol // in which there was no top-level error code. Note that for incremental fetch responses, there // may not be any partitions at all in the response. For this reason, the top-level error code // is essential for them. Errors error = Errors.forException(e); LinkedHashMap<TopicPartition, FetchResponse.PartitionData<MemoryRecords>> responseData = new LinkedHashMap<>(); for (Map.Entry<TopicPartition, PartitionData> entry : fetchData.entrySet()) { FetchResponse.PartitionData<MemoryRecords> partitionResponse = new FetchResponse.PartitionData<>(error, FetchResponse.INVALID_HIGHWATERMARK, FetchResponse.INVALID_LAST_STABLE_OFFSET, FetchResponse.INVALID_LOG_START_OFFSET, null, MemoryRecords.EMPTY); responseData.put(entry.getKey(), partitionResponse); } return new FetchResponse<>(error, responseData, throttleTimeMs, metadata.sessionId()); }
struct.setIfExists(MAX_BYTES, maxBytes); struct.setIfExists(ISOLATION_LEVEL, isolationLevel.id()); struct.setIfExists(SESSION_ID, metadata.sessionId()); struct.setIfExists(SESSION_EPOCH, metadata.epoch());
node, nextMetadata.sessionId(), responseDataToLogString(response)); nextMetadata = FetchMetadata.INITIAL; return true;
new ReqEntry("foo", 1, 10, 110, 210)), data.toSend(), data.sessionPartitions()); assertEquals(INVALID_SESSION_ID, data.metadata().sessionId()); assertEquals(INITIAL_EPOCH, data.metadata().epoch()); new FetchRequest.PartitionData(0, 100, 200, Optional.empty())); FetchSessionHandler.FetchRequestData data2 = builder2.build(); assertEquals(INVALID_SESSION_ID, data2.metadata().sessionId()); assertEquals(INITIAL_EPOCH, data2.metadata().epoch()); assertMapsEqual(reqMap(new ReqEntry("foo", 0, 0, 100, 200)),
new ReqEntry("foo", 1, 10, 110, 210)), data.toSend(), data.sessionPartitions()); assertEquals(INVALID_SESSION_ID, data.metadata().sessionId()); assertEquals(INITIAL_EPOCH, data.metadata().epoch()); FetchSessionHandler.FetchRequestData data4 = builder4.build(); assertTrue(data4.metadata().isFull()); assertEquals(data2.metadata().sessionId(), data4.metadata().sessionId()); assertEquals(INITIAL_EPOCH, data4.metadata().epoch()); assertMapsEqual(reqMap(new ReqEntry("foo", 0, 0, 100, 200),
FetchSessionHandler.FetchRequestData data2 = builder2.build(); assertFalse(data2.metadata().isFull()); assertEquals(123, data2.metadata().sessionId()); assertEquals(1, data2.metadata().epoch()); assertMapEquals(reqMap(new ReqEntry("foo", 1, 10, 110, 210)), FetchSessionHandler.FetchRequestData data3 = builder3.build(); assertTrue(data3.metadata().isFull()); assertEquals(INVALID_SESSION_ID, data3.metadata().sessionId()); assertEquals(INITIAL_EPOCH, data3.metadata().epoch()); assertMapsEqual(reqMap(new ReqEntry("foo", 0, 0, 100, 200)),