@@ -136,17 +136,19 @@ class KafkaApis(val requestChannel: RequestChannel,
136
136
info(" Shutdown complete." )
137
137
}
138
138
139
- private def maybeForwardToController (
140
- request : RequestChannel .Request ,
141
- handler : RequestChannel .Request => Unit
142
- ): Unit = {
139
+ private def forwardToController (request : RequestChannel .Request ): Unit = {
143
140
def responseCallback (responseOpt : Option [AbstractResponse ]): Unit = {
144
141
responseOpt match {
145
142
case Some (response) => requestHelper.sendForwardedResponse(request, response)
146
143
case None => handleInvalidVersionsDuringForwarding(request)
147
144
}
148
145
}
149
- metadataSupport.maybeForward(request, handler, responseCallback)
146
+
147
+ def errorHandler (request : RequestChannel .Request ): Unit = {
148
+ throw new IllegalStateException (s " Unable to forward $request to the controller " )
149
+ }
150
+
151
+ metadataSupport.maybeForward(request, errorHandler, responseCallback)
150
152
}
151
153
152
154
private def handleInvalidVersionsDuringForwarding (request : RequestChannel .Request ): Unit = {
@@ -156,16 +158,6 @@ class KafkaApis(val requestChannel: RequestChannel,
156
158
requestChannel.closeConnection(request, Collections .emptyMap())
157
159
}
158
160
159
- private def forwardToControllerOrFail (
160
- request : RequestChannel .Request
161
- ): Unit = {
162
- def errorHandler (request : RequestChannel .Request ): Unit = {
163
- throw new IllegalStateException (s " Unable to forward $request to the controller " )
164
- }
165
-
166
- maybeForwardToController(request, errorHandler)
167
- }
168
-
169
161
/**
170
162
* Top-level method that handles all requests and multiplexes to the right api
171
163
*/
@@ -202,8 +194,8 @@ class KafkaApis(val requestChannel: RequestChannel,
202
194
case ApiKeys .LIST_GROUPS => handleListGroupsRequest(request).exceptionally(handleError)
203
195
case ApiKeys .SASL_HANDSHAKE => handleSaslHandshakeRequest(request)
204
196
case ApiKeys .API_VERSIONS => handleApiVersionsRequest(request)
205
- case ApiKeys .CREATE_TOPICS => maybeForwardToController (request, handleCreateTopicsRequest )
206
- case ApiKeys .DELETE_TOPICS => maybeForwardToController (request, handleDeleteTopicsRequest )
197
+ case ApiKeys .CREATE_TOPICS => forwardToController (request)
198
+ case ApiKeys .DELETE_TOPICS => forwardToController (request)
207
199
case ApiKeys .DELETE_RECORDS => handleDeleteRecordsRequest(request)
208
200
case ApiKeys .INIT_PRODUCER_ID => handleInitProducerIdRequest(request, requestLocal)
209
201
case ApiKeys .OFFSET_FOR_LEADER_EPOCH => handleOffsetForLeaderEpochRequest(request)
@@ -213,47 +205,47 @@ class KafkaApis(val requestChannel: RequestChannel,
213
205
case ApiKeys .WRITE_TXN_MARKERS => handleWriteTxnMarkersRequest(request, requestLocal)
214
206
case ApiKeys .TXN_OFFSET_COMMIT => handleTxnOffsetCommitRequest(request, requestLocal).exceptionally(handleError)
215
207
case ApiKeys .DESCRIBE_ACLS => handleDescribeAcls(request)
216
- case ApiKeys .CREATE_ACLS => maybeForwardToController (request, handleCreateAcls )
217
- case ApiKeys .DELETE_ACLS => maybeForwardToController (request, handleDeleteAcls )
208
+ case ApiKeys .CREATE_ACLS => forwardToController (request)
209
+ case ApiKeys .DELETE_ACLS => forwardToController (request)
218
210
case ApiKeys .ALTER_CONFIGS => handleAlterConfigsRequest(request)
219
211
case ApiKeys .DESCRIBE_CONFIGS => handleDescribeConfigsRequest(request)
220
212
case ApiKeys .ALTER_REPLICA_LOG_DIRS => handleAlterReplicaLogDirsRequest(request)
221
213
case ApiKeys .DESCRIBE_LOG_DIRS => handleDescribeLogDirsRequest(request)
222
214
case ApiKeys .SASL_AUTHENTICATE => handleSaslAuthenticateRequest(request)
223
- case ApiKeys .CREATE_PARTITIONS => maybeForwardToController (request, handleCreatePartitionsRequest )
215
+ case ApiKeys .CREATE_PARTITIONS => forwardToController (request)
224
216
// Create, renew and expire DelegationTokens must first validate that the connection
225
217
// itself is not authenticated with a delegation token before maybeForwardToController.
226
218
case ApiKeys .CREATE_DELEGATION_TOKEN => handleCreateTokenRequest(request)
227
219
case ApiKeys .RENEW_DELEGATION_TOKEN => handleRenewTokenRequest(request)
228
220
case ApiKeys .EXPIRE_DELEGATION_TOKEN => handleExpireTokenRequest(request)
229
221
case ApiKeys .DESCRIBE_DELEGATION_TOKEN => handleDescribeTokensRequest(request)
230
222
case ApiKeys .DELETE_GROUPS => handleDeleteGroupsRequest(request, requestLocal).exceptionally(handleError)
231
- case ApiKeys .ELECT_LEADERS => maybeForwardToController (request, handleElectLeaders )
223
+ case ApiKeys .ELECT_LEADERS => forwardToController (request)
232
224
case ApiKeys .INCREMENTAL_ALTER_CONFIGS => handleIncrementalAlterConfigsRequest(request)
233
- case ApiKeys .ALTER_PARTITION_REASSIGNMENTS => maybeForwardToController (request, handleAlterPartitionReassignmentsRequest )
234
- case ApiKeys .LIST_PARTITION_REASSIGNMENTS => maybeForwardToController (request, handleListPartitionReassignmentsRequest )
225
+ case ApiKeys .ALTER_PARTITION_REASSIGNMENTS => forwardToController (request)
226
+ case ApiKeys .LIST_PARTITION_REASSIGNMENTS => forwardToController (request)
235
227
case ApiKeys .OFFSET_DELETE => handleOffsetDeleteRequest(request, requestLocal).exceptionally(handleError)
236
228
case ApiKeys .DESCRIBE_CLIENT_QUOTAS => handleDescribeClientQuotasRequest(request)
237
- case ApiKeys .ALTER_CLIENT_QUOTAS => maybeForwardToController (request, handleAlterClientQuotasRequest )
229
+ case ApiKeys .ALTER_CLIENT_QUOTAS => forwardToController (request)
238
230
case ApiKeys .DESCRIBE_USER_SCRAM_CREDENTIALS => handleDescribeUserScramCredentialsRequest(request)
239
- case ApiKeys .ALTER_USER_SCRAM_CREDENTIALS => maybeForwardToController (request, handleAlterUserScramCredentialsRequest )
231
+ case ApiKeys .ALTER_USER_SCRAM_CREDENTIALS => forwardToController (request)
240
232
case ApiKeys .ALTER_PARTITION => handleAlterPartitionRequest(request)
241
- case ApiKeys .UPDATE_FEATURES => maybeForwardToController (request, handleUpdateFeatures )
233
+ case ApiKeys .UPDATE_FEATURES => forwardToController (request)
242
234
case ApiKeys .DESCRIBE_CLUSTER => handleDescribeCluster(request)
243
235
case ApiKeys .DESCRIBE_PRODUCERS => handleDescribeProducersRequest(request)
244
- case ApiKeys .UNREGISTER_BROKER => forwardToControllerOrFail (request)
236
+ case ApiKeys .UNREGISTER_BROKER => forwardToController (request)
245
237
case ApiKeys .DESCRIBE_TRANSACTIONS => handleDescribeTransactionsRequest(request)
246
238
case ApiKeys .LIST_TRANSACTIONS => handleListTransactionsRequest(request)
247
239
case ApiKeys .ALLOCATE_PRODUCER_IDS => handleAllocateProducerIdsRequest(request)
248
- case ApiKeys .DESCRIBE_QUORUM => forwardToControllerOrFail (request)
240
+ case ApiKeys .DESCRIBE_QUORUM => forwardToController (request)
249
241
case ApiKeys .CONSUMER_GROUP_HEARTBEAT => handleConsumerGroupHeartbeat(request).exceptionally(handleError)
250
242
case ApiKeys .CONSUMER_GROUP_DESCRIBE => handleConsumerGroupDescribe(request).exceptionally(handleError)
251
243
case ApiKeys .DESCRIBE_TOPIC_PARTITIONS => handleDescribeTopicPartitionsRequest(request)
252
244
case ApiKeys .GET_TELEMETRY_SUBSCRIPTIONS => handleGetTelemetrySubscriptionsRequest(request)
253
245
case ApiKeys .PUSH_TELEMETRY => handlePushTelemetryRequest(request)
254
246
case ApiKeys .LIST_CLIENT_METRICS_RESOURCES => handleListClientMetricsResources(request)
255
- case ApiKeys .ADD_RAFT_VOTER => forwardToControllerOrFail (request)
256
- case ApiKeys .REMOVE_RAFT_VOTER => forwardToControllerOrFail (request)
247
+ case ApiKeys .ADD_RAFT_VOTER => forwardToController (request)
248
+ case ApiKeys .REMOVE_RAFT_VOTER => forwardToController (request)
257
249
case ApiKeys .SHARE_GROUP_HEARTBEAT => handleShareGroupHeartbeat(request).exceptionally(handleError)
258
250
case ApiKeys .SHARE_GROUP_DESCRIBE => handleShareGroupDescribe(request).exceptionally(handleError)
259
251
case ApiKeys .SHARE_FETCH => handleShareFetchRequest(request)
@@ -2806,7 +2798,7 @@ class KafkaApis(val requestChannel: RequestChannel,
2806
2798
CreateDelegationTokenResponse .prepareResponse(request.context.requestVersion, requestThrottleMs,
2807
2799
Errors .INVALID_PRINCIPAL_TYPE , owner, requester))
2808
2800
} else {
2809
- maybeForwardToController (request, handleCreateTokenRequestZk )
2801
+ forwardToController (request)
2810
2802
}
2811
2803
}
2812
2804
@@ -2859,7 +2851,7 @@ class KafkaApis(val requestChannel: RequestChannel,
2859
2851
.setErrorCode(Errors .DELEGATION_TOKEN_REQUEST_NOT_ALLOWED .code)
2860
2852
.setExpiryTimestampMs(DelegationTokenManager .ErrorTimestamp )))
2861
2853
} else {
2862
- maybeForwardToController (request, handleRenewTokenRequestZk )
2854
+ forwardToController (request)
2863
2855
}
2864
2856
}
2865
2857
@@ -2905,7 +2897,7 @@ class KafkaApis(val requestChannel: RequestChannel,
2905
2897
.setErrorCode(Errors .DELEGATION_TOKEN_REQUEST_NOT_ALLOWED .code)
2906
2898
.setExpiryTimestampMs(DelegationTokenManager .ErrorTimestamp )))
2907
2899
} else {
2908
- maybeForwardToController (request, handleExpireTokenRequestZk )
2900
+ forwardToController (request)
2909
2901
}
2910
2902
}
2911
2903
@@ -3208,37 +3200,16 @@ class KafkaApis(val requestChannel: RequestChannel,
3208
3200
describeUserScramCredentialsRequest.getErrorResponse(requestThrottleMs, Errors .CLUSTER_AUTHORIZATION_FAILED .exception))
3209
3201
} else {
3210
3202
metadataSupport match {
3211
- case ZkSupport (adminManager, controller, zkClient, forwardingManager, metadataCache, _) =>
3212
- val result = adminManager.describeUserScramCredentials(
3213
- Option (describeUserScramCredentialsRequest.data.users).map(_.asScala.map(_.name).toList))
3214
- requestHelper.sendResponseMaybeThrottle(request, requestThrottleMs =>
3215
- new DescribeUserScramCredentialsResponse (result.setThrottleTimeMs(requestThrottleMs)))
3216
3203
case RaftSupport (_, metadataCache) =>
3217
3204
val result = metadataCache.describeScramCredentials(describeUserScramCredentialsRequest.data())
3218
3205
requestHelper.sendResponseMaybeThrottle(request, requestThrottleMs =>
3219
3206
new DescribeUserScramCredentialsResponse (result.setThrottleTimeMs(requestThrottleMs)))
3207
+ case _ =>
3208
+ throw KafkaApis .shouldNeverReceive(request)
3220
3209
}
3221
3210
}
3222
3211
}
3223
3212
3224
- def handleAlterUserScramCredentialsRequest (request : RequestChannel .Request ): Unit = {
3225
- val zkSupport = metadataSupport.requireZkOrThrow(KafkaApis .shouldAlwaysForward(request))
3226
- val alterUserScramCredentialsRequest = request.body[AlterUserScramCredentialsRequest ]
3227
-
3228
- if (! zkSupport.controller.isActive) {
3229
- requestHelper.sendResponseMaybeThrottle(request, requestThrottleMs =>
3230
- alterUserScramCredentialsRequest.getErrorResponse(requestThrottleMs, Errors .NOT_CONTROLLER .exception))
3231
- } else if (authHelper.authorize(request.context, ALTER , CLUSTER , CLUSTER_NAME )) {
3232
- val result = zkSupport.adminManager.alterUserScramCredentials(
3233
- alterUserScramCredentialsRequest.data.upsertions().asScala, alterUserScramCredentialsRequest.data.deletions().asScala)
3234
- requestHelper.sendResponseMaybeThrottle(request, requestThrottleMs =>
3235
- new AlterUserScramCredentialsResponse (result.setThrottleTimeMs(requestThrottleMs)))
3236
- } else {
3237
- requestHelper.sendResponseMaybeThrottle(request, requestThrottleMs =>
3238
- alterUserScramCredentialsRequest.getErrorResponse(requestThrottleMs, Errors .CLUSTER_AUTHORIZATION_FAILED .exception))
3239
- }
3240
- }
3241
-
3242
3213
def handleAlterPartitionRequest (request : RequestChannel .Request ): Unit = {
3243
3214
val zkSupport = metadataSupport.requireZkOrThrow(KafkaApis .shouldNeverReceive(request))
3244
3215
val alterPartitionRequest = request.body[AlterPartitionRequest ]
0 commit comments