@@ -135,17 +135,15 @@ class KafkaApis(val requestChannel: RequestChannel,
135
135
info(" Shutdown complete." )
136
136
}
137
137
138
- private def maybeForwardToController (
139
- request : RequestChannel .Request ,
140
- handler : RequestChannel .Request => Unit
141
- ): Unit = {
138
+ private def forwardToController (request : RequestChannel .Request ): Unit = {
142
139
def responseCallback (responseOpt : Option [AbstractResponse ]): Unit = {
143
140
responseOpt match {
144
141
case Some (response) => requestHelper.sendForwardedResponse(request, response)
145
142
case None => handleInvalidVersionsDuringForwarding(request)
146
143
}
147
144
}
148
- metadataSupport.maybeForward(request, handler, responseCallback)
145
+
146
+ metadataSupport.forward(request, responseCallback)
149
147
}
150
148
151
149
private def handleInvalidVersionsDuringForwarding (request : RequestChannel .Request ): Unit = {
@@ -155,16 +153,6 @@ class KafkaApis(val requestChannel: RequestChannel,
155
153
requestChannel.closeConnection(request, Collections .emptyMap())
156
154
}
157
155
158
- private def forwardToControllerOrFail (
159
- request : RequestChannel .Request
160
- ): Unit = {
161
- def errorHandler (request : RequestChannel .Request ): Unit = {
162
- throw new IllegalStateException (s " Unable to forward $request to the controller " )
163
- }
164
-
165
- maybeForwardToController(request, errorHandler)
166
- }
167
-
168
156
/**
169
157
* Top-level method that handles all requests and multiplexes to the right api
170
158
*/
@@ -201,8 +189,8 @@ class KafkaApis(val requestChannel: RequestChannel,
201
189
case ApiKeys .LIST_GROUPS => handleListGroupsRequest(request).exceptionally(handleError)
202
190
case ApiKeys .SASL_HANDSHAKE => handleSaslHandshakeRequest(request)
203
191
case ApiKeys .API_VERSIONS => handleApiVersionsRequest(request)
204
- case ApiKeys .CREATE_TOPICS => maybeForwardToController (request, handleCreateTopicsRequest )
205
- case ApiKeys .DELETE_TOPICS => maybeForwardToController (request, handleDeleteTopicsRequest )
192
+ case ApiKeys .CREATE_TOPICS => forwardToController (request)
193
+ case ApiKeys .DELETE_TOPICS => forwardToController (request)
206
194
case ApiKeys .DELETE_RECORDS => handleDeleteRecordsRequest(request)
207
195
case ApiKeys .INIT_PRODUCER_ID => handleInitProducerIdRequest(request, requestLocal)
208
196
case ApiKeys .OFFSET_FOR_LEADER_EPOCH => handleOffsetForLeaderEpochRequest(request)
@@ -212,47 +200,47 @@ class KafkaApis(val requestChannel: RequestChannel,
212
200
case ApiKeys .WRITE_TXN_MARKERS => handleWriteTxnMarkersRequest(request, requestLocal)
213
201
case ApiKeys .TXN_OFFSET_COMMIT => handleTxnOffsetCommitRequest(request, requestLocal).exceptionally(handleError)
214
202
case ApiKeys .DESCRIBE_ACLS => handleDescribeAcls(request)
215
- case ApiKeys .CREATE_ACLS => maybeForwardToController (request, handleCreateAcls )
216
- case ApiKeys .DELETE_ACLS => maybeForwardToController (request, handleDeleteAcls )
203
+ case ApiKeys .CREATE_ACLS => forwardToController (request)
204
+ case ApiKeys .DELETE_ACLS => forwardToController (request)
217
205
case ApiKeys .ALTER_CONFIGS => handleAlterConfigsRequest(request)
218
206
case ApiKeys .DESCRIBE_CONFIGS => handleDescribeConfigsRequest(request)
219
207
case ApiKeys .ALTER_REPLICA_LOG_DIRS => handleAlterReplicaLogDirsRequest(request)
220
208
case ApiKeys .DESCRIBE_LOG_DIRS => handleDescribeLogDirsRequest(request)
221
209
case ApiKeys .SASL_AUTHENTICATE => handleSaslAuthenticateRequest(request)
222
- case ApiKeys .CREATE_PARTITIONS => maybeForwardToController (request, handleCreatePartitionsRequest )
210
+ case ApiKeys .CREATE_PARTITIONS => forwardToController (request)
223
211
// Create, renew and expire DelegationTokens must first validate that the connection
224
212
// itself is not authenticated with a delegation token before maybeForwardToController.
225
213
case ApiKeys .CREATE_DELEGATION_TOKEN => handleCreateTokenRequest(request)
226
214
case ApiKeys .RENEW_DELEGATION_TOKEN => handleRenewTokenRequest(request)
227
215
case ApiKeys .EXPIRE_DELEGATION_TOKEN => handleExpireTokenRequest(request)
228
216
case ApiKeys .DESCRIBE_DELEGATION_TOKEN => handleDescribeTokensRequest(request)
229
217
case ApiKeys .DELETE_GROUPS => handleDeleteGroupsRequest(request, requestLocal).exceptionally(handleError)
230
- case ApiKeys .ELECT_LEADERS => maybeForwardToController (request, handleElectLeaders )
218
+ case ApiKeys .ELECT_LEADERS => forwardToController (request)
231
219
case ApiKeys .INCREMENTAL_ALTER_CONFIGS => handleIncrementalAlterConfigsRequest(request)
232
- case ApiKeys .ALTER_PARTITION_REASSIGNMENTS => maybeForwardToController (request, handleAlterPartitionReassignmentsRequest )
233
- case ApiKeys .LIST_PARTITION_REASSIGNMENTS => maybeForwardToController (request, handleListPartitionReassignmentsRequest )
220
+ case ApiKeys .ALTER_PARTITION_REASSIGNMENTS => forwardToController (request)
221
+ case ApiKeys .LIST_PARTITION_REASSIGNMENTS => forwardToController (request)
234
222
case ApiKeys .OFFSET_DELETE => handleOffsetDeleteRequest(request, requestLocal).exceptionally(handleError)
235
223
case ApiKeys .DESCRIBE_CLIENT_QUOTAS => handleDescribeClientQuotasRequest(request)
236
- case ApiKeys .ALTER_CLIENT_QUOTAS => maybeForwardToController (request, handleAlterClientQuotasRequest )
224
+ case ApiKeys .ALTER_CLIENT_QUOTAS => forwardToController (request)
237
225
case ApiKeys .DESCRIBE_USER_SCRAM_CREDENTIALS => handleDescribeUserScramCredentialsRequest(request)
238
- case ApiKeys .ALTER_USER_SCRAM_CREDENTIALS => maybeForwardToController (request, handleAlterUserScramCredentialsRequest )
226
+ case ApiKeys .ALTER_USER_SCRAM_CREDENTIALS => forwardToController (request)
239
227
case ApiKeys .ALTER_PARTITION => handleAlterPartitionRequest(request)
240
- case ApiKeys .UPDATE_FEATURES => maybeForwardToController (request, handleUpdateFeatures )
228
+ case ApiKeys .UPDATE_FEATURES => forwardToController (request)
241
229
case ApiKeys .DESCRIBE_CLUSTER => handleDescribeCluster(request)
242
230
case ApiKeys .DESCRIBE_PRODUCERS => handleDescribeProducersRequest(request)
243
- case ApiKeys .UNREGISTER_BROKER => forwardToControllerOrFail (request)
231
+ case ApiKeys .UNREGISTER_BROKER => forwardToController (request)
244
232
case ApiKeys .DESCRIBE_TRANSACTIONS => handleDescribeTransactionsRequest(request)
245
233
case ApiKeys .LIST_TRANSACTIONS => handleListTransactionsRequest(request)
246
234
case ApiKeys .ALLOCATE_PRODUCER_IDS => handleAllocateProducerIdsRequest(request)
247
- case ApiKeys .DESCRIBE_QUORUM => forwardToControllerOrFail (request)
235
+ case ApiKeys .DESCRIBE_QUORUM => forwardToController (request)
248
236
case ApiKeys .CONSUMER_GROUP_HEARTBEAT => handleConsumerGroupHeartbeat(request).exceptionally(handleError)
249
237
case ApiKeys .CONSUMER_GROUP_DESCRIBE => handleConsumerGroupDescribe(request).exceptionally(handleError)
250
238
case ApiKeys .DESCRIBE_TOPIC_PARTITIONS => handleDescribeTopicPartitionsRequest(request)
251
239
case ApiKeys .GET_TELEMETRY_SUBSCRIPTIONS => handleGetTelemetrySubscriptionsRequest(request)
252
240
case ApiKeys .PUSH_TELEMETRY => handlePushTelemetryRequest(request)
253
241
case ApiKeys .LIST_CLIENT_METRICS_RESOURCES => handleListClientMetricsResources(request)
254
- case ApiKeys .ADD_RAFT_VOTER => forwardToControllerOrFail (request)
255
- case ApiKeys .REMOVE_RAFT_VOTER => forwardToControllerOrFail (request)
242
+ case ApiKeys .ADD_RAFT_VOTER => forwardToController (request)
243
+ case ApiKeys .REMOVE_RAFT_VOTER => forwardToController (request)
256
244
case ApiKeys .SHARE_GROUP_HEARTBEAT => handleShareGroupHeartbeat(request).exceptionally(handleError)
257
245
case ApiKeys .SHARE_GROUP_DESCRIBE => handleShareGroupDescribe(request).exceptionally(handleError)
258
246
case ApiKeys .SHARE_FETCH => handleShareFetchRequest(request)
@@ -2771,7 +2759,7 @@ class KafkaApis(val requestChannel: RequestChannel,
2771
2759
CreateDelegationTokenResponse .prepareResponse(request.context.requestVersion, requestThrottleMs,
2772
2760
Errors .INVALID_PRINCIPAL_TYPE , owner, requester))
2773
2761
} else {
2774
- maybeForwardToController (request, handleCreateTokenRequestZk )
2762
+ forwardToController (request)
2775
2763
}
2776
2764
}
2777
2765
@@ -2824,7 +2812,7 @@ class KafkaApis(val requestChannel: RequestChannel,
2824
2812
.setErrorCode(Errors .DELEGATION_TOKEN_REQUEST_NOT_ALLOWED .code)
2825
2813
.setExpiryTimestampMs(DelegationTokenManager .ErrorTimestamp )))
2826
2814
} else {
2827
- maybeForwardToController (request, handleRenewTokenRequestZk )
2815
+ forwardToController (request)
2828
2816
}
2829
2817
}
2830
2818
@@ -2870,7 +2858,7 @@ class KafkaApis(val requestChannel: RequestChannel,
2870
2858
.setErrorCode(Errors .DELEGATION_TOKEN_REQUEST_NOT_ALLOWED .code)
2871
2859
.setExpiryTimestampMs(DelegationTokenManager .ErrorTimestamp )))
2872
2860
} else {
2873
- maybeForwardToController (request, handleExpireTokenRequestZk )
2861
+ forwardToController (request)
2874
2862
}
2875
2863
}
2876
2864
@@ -3173,37 +3161,16 @@ class KafkaApis(val requestChannel: RequestChannel,
3173
3161
describeUserScramCredentialsRequest.getErrorResponse(requestThrottleMs, Errors .CLUSTER_AUTHORIZATION_FAILED .exception))
3174
3162
} else {
3175
3163
metadataSupport match {
3176
- case ZkSupport (adminManager, controller, zkClient, forwardingManager, metadataCache, _) =>
3177
- val result = adminManager.describeUserScramCredentials(
3178
- Option (describeUserScramCredentialsRequest.data.users).map(_.asScala.map(_.name).toList))
3179
- requestHelper.sendResponseMaybeThrottle(request, requestThrottleMs =>
3180
- new DescribeUserScramCredentialsResponse (result.setThrottleTimeMs(requestThrottleMs)))
3181
3164
case RaftSupport (_, metadataCache) =>
3182
3165
val result = metadataCache.describeScramCredentials(describeUserScramCredentialsRequest.data())
3183
3166
requestHelper.sendResponseMaybeThrottle(request, requestThrottleMs =>
3184
3167
new DescribeUserScramCredentialsResponse (result.setThrottleTimeMs(requestThrottleMs)))
3168
+ case _ =>
3169
+ throw KafkaApis .shouldNeverReceive(request)
3185
3170
}
3186
3171
}
3187
3172
}
3188
3173
3189
- def handleAlterUserScramCredentialsRequest (request : RequestChannel .Request ): Unit = {
3190
- val zkSupport = metadataSupport.requireZkOrThrow(KafkaApis .shouldAlwaysForward(request))
3191
- val alterUserScramCredentialsRequest = request.body[AlterUserScramCredentialsRequest ]
3192
-
3193
- if (! zkSupport.controller.isActive) {
3194
- requestHelper.sendResponseMaybeThrottle(request, requestThrottleMs =>
3195
- alterUserScramCredentialsRequest.getErrorResponse(requestThrottleMs, Errors .NOT_CONTROLLER .exception))
3196
- } else if (authHelper.authorize(request.context, ALTER , CLUSTER , CLUSTER_NAME )) {
3197
- val result = zkSupport.adminManager.alterUserScramCredentials(
3198
- alterUserScramCredentialsRequest.data.upsertions().asScala, alterUserScramCredentialsRequest.data.deletions().asScala)
3199
- requestHelper.sendResponseMaybeThrottle(request, requestThrottleMs =>
3200
- new AlterUserScramCredentialsResponse (result.setThrottleTimeMs(requestThrottleMs)))
3201
- } else {
3202
- requestHelper.sendResponseMaybeThrottle(request, requestThrottleMs =>
3203
- alterUserScramCredentialsRequest.getErrorResponse(requestThrottleMs, Errors .CLUSTER_AUTHORIZATION_FAILED .exception))
3204
- }
3205
- }
3206
-
3207
3174
def handleAlterPartitionRequest (request : RequestChannel .Request ): Unit = {
3208
3175
val zkSupport = metadataSupport.requireZkOrThrow(KafkaApis .shouldNeverReceive(request))
3209
3176
val alterPartitionRequest = request.body[AlterPartitionRequest ]
0 commit comments