Search in sources :

Example 1 with Resource

use of io.streamnative.pulsar.handlers.kop.security.auth.Resource in project starlight-for-kafka by datastax.

the class KafkaRequestHandler method handleDescribeConfigs.

@Override
protected void handleDescribeConfigs(KafkaHeaderAndRequest describeConfigs, CompletableFuture<AbstractResponse> resultFuture) {
    checkArgument(describeConfigs.getRequest() instanceof DescribeConfigsRequest);
    DescribeConfigsRequest request = (DescribeConfigsRequest) describeConfigs.getRequest();
    if (request.resources().isEmpty()) {
        resultFuture.complete(new DescribeConfigsResponse(0, Maps.newHashMap()));
        return;
    }
    Collection<ConfigResource> authorizedResources = Collections.synchronizedList(new ArrayList<>());
    Map<ConfigResource, DescribeConfigsResponse.Config> failedConfigResourceMap = Maps.newConcurrentMap();
    AtomicInteger unfinishedAuthorizationCount = new AtomicInteger(request.resources().size());
    String namespacePrefix = currentNamespacePrefix();
    Consumer<Runnable> completeOne = (action) -> {
        // When complete one authorization or failed, will do the action first.
        action.run();
        if (unfinishedAuthorizationCount.decrementAndGet() == 0) {
            adminManager.describeConfigsAsync(authorizedResources.stream().collect(Collectors.toMap(resource -> resource, resource -> Optional.ofNullable(request.configNames(resource)).map(HashSet::new))), namespacePrefix).thenApply(configResourceConfigMap -> {
                configResourceConfigMap.putAll(failedConfigResourceMap);
                resultFuture.complete(new DescribeConfigsResponse(0, configResourceConfigMap));
                return null;
            });
        }
    };
    // Do authorization for each of resource
    request.resources().forEach(configResource -> {
        switch(configResource.type()) {
            case TOPIC:
                KopTopic kopTopic;
                try {
                    kopTopic = new KopTopic(configResource.name(), namespacePrefix);
                } catch (KoPTopicException e) {
                    completeOne.accept(() -> {
                        final ApiError error = new ApiError(Errors.UNKNOWN_TOPIC_OR_PARTITION, "Topic " + configResource.name() + " doesn't exist");
                        failedConfigResourceMap.put(configResource, new DescribeConfigsResponse.Config(error, Collections.emptyList()));
                    });
                    return;
                }
                String fullTopicName = kopTopic.getFullName();
                authorize(AclOperation.DESCRIBE_CONFIGS, Resource.of(ResourceType.TOPIC, fullTopicName)).whenComplete((isAuthorized, ex) -> {
                    if (ex != null) {
                        log.error("DescribeConfigs in topic authorize failed, topic - {}. {}", fullTopicName, ex.getMessage());
                        completeOne.accept(() -> failedConfigResourceMap.put(configResource, new DescribeConfigsResponse.Config(new ApiError(Errors.TOPIC_AUTHORIZATION_FAILED, null), Collections.emptyList())));
                        return;
                    }
                    if (isAuthorized) {
                        completeOne.accept(() -> authorizedResources.add(configResource));
                        return;
                    }
                    completeOne.accept(() -> failedConfigResourceMap.put(configResource, new DescribeConfigsResponse.Config(new ApiError(Errors.TOPIC_AUTHORIZATION_FAILED, null), Collections.emptyList())));
                });
                break;
            case BROKER:
                // Current KoP don't support Broker Resource.
                // but we are not exposing anything to the client, so it is fine to serve requests.
                completeOne.accept(() -> authorizedResources.add(configResource));
                break;
            case UNKNOWN:
            default:
                completeOne.accept(() -> log.error("KoP doesn't support resource type: " + configResource.type()));
                break;
        }
    });
}
Also used : IsolationLevel(org.apache.kafka.common.requests.IsolationLevel) KafkaResponseUtils(io.streamnative.pulsar.handlers.kop.utils.KafkaResponseUtils) LeaveGroupRequest(org.apache.kafka.common.requests.LeaveGroupRequest) AppendRecordsContext(io.streamnative.pulsar.handlers.kop.storage.AppendRecordsContext) HeartbeatResponse(org.apache.kafka.common.requests.HeartbeatResponse) SaslAuthenticator(io.streamnative.pulsar.handlers.kop.security.SaslAuthenticator) Pair(org.apache.commons.lang3.tuple.Pair) SyncGroupRequest(org.apache.kafka.common.requests.SyncGroupRequest) ApiVersionsResponse(org.apache.kafka.common.requests.ApiVersionsResponse) MetadataUtils(io.streamnative.pulsar.handlers.kop.utils.MetadataUtils) Map(java.util.Map) RecordBatch(org.apache.kafka.common.record.RecordBatch) MutableRecordBatch(org.apache.kafka.common.record.MutableRecordBatch) PositionImpl(org.apache.bookkeeper.mledger.impl.PositionImpl) DeleteGroupsRequest(org.apache.kafka.common.requests.DeleteGroupsRequest) Set(java.util.Set) CopyOnWriteArraySet(java.util.concurrent.CopyOnWriteArraySet) AddPartitionsToTxnRequest(org.apache.kafka.common.requests.AddPartitionsToTxnRequest) ListOffsetResponse(org.apache.kafka.common.requests.ListOffsetResponse) ListGroupsRequest(org.apache.kafka.common.requests.ListGroupsRequest) Slf4j(lombok.extern.slf4j.Slf4j) MemoryRecords(org.apache.kafka.common.record.MemoryRecords) Stream(java.util.stream.Stream) DeleteRecordsRequest(org.apache.kafka.common.requests.DeleteRecordsRequest) ListOffsetRequest(org.apache.kafka.common.requests.ListOffsetRequest) Errors(org.apache.kafka.common.protocol.Errors) Murmur3_32Hash(org.apache.pulsar.common.util.Murmur3_32Hash) Node(org.apache.kafka.common.Node) FetchRequest(org.apache.kafka.common.requests.FetchRequest) OffsetAndMetadata(io.streamnative.pulsar.handlers.kop.offset.OffsetAndMetadata) EntryFormatterFactory(io.streamnative.pulsar.handlers.kop.format.EntryFormatterFactory) Joiner(com.google.common.base.Joiner) AsyncCallbacks(org.apache.bookkeeper.mledger.AsyncCallbacks) AuthenticationException(org.apache.kafka.common.errors.AuthenticationException) TopicNameUtils(io.streamnative.pulsar.handlers.kop.utils.TopicNameUtils) AbstractResponse(org.apache.kafka.common.requests.AbstractResponse) WriteTxnMarkersRequest(org.apache.kafka.common.requests.WriteTxnMarkersRequest) MetadataStoreExtended(org.apache.pulsar.metadata.api.extended.MetadataStoreExtended) PulsarAdmin(org.apache.pulsar.client.admin.PulsarAdmin) InvalidRecordException(org.apache.kafka.common.record.InvalidRecordException) ArrayList(java.util.ArrayList) GroupOverview(io.streamnative.pulsar.handlers.kop.coordinator.group.GroupMetadata.GroupOverview) FindCoordinatorRequest(org.apache.kafka.common.requests.FindCoordinatorRequest) ScheduledExecutorService(java.util.concurrent.ScheduledExecutorService) BiConsumer(java.util.function.BiConsumer) THROTTLE_TIME_MS(org.apache.kafka.common.protocol.CommonFields.THROTTLE_TIME_MS) OffsetFetchResponse(org.apache.kafka.common.requests.OffsetFetchResponse) ProduceResponse(org.apache.kafka.common.requests.ProduceResponse) TENANT_ALLNAMESPACES_PLACEHOLDER(io.streamnative.pulsar.handlers.kop.KafkaServiceConfiguration.TENANT_ALLNAMESPACES_PLACEHOLDER) GroupIdUtils(io.streamnative.pulsar.handlers.kop.utils.GroupIdUtils) OffsetCommitResponse(org.apache.kafka.common.requests.OffsetCommitResponse) ResourceType(io.streamnative.pulsar.handlers.kop.security.auth.ResourceType) TxnOffsetCommitResponse(org.apache.kafka.common.requests.TxnOffsetCommitResponse) Executor(java.util.concurrent.Executor) SystemTime(org.apache.kafka.common.utils.SystemTime) OffsetMetadata(io.streamnative.pulsar.handlers.kop.offset.OffsetMetadata) DeleteRecordsResponse(org.apache.kafka.common.requests.DeleteRecordsResponse) AclOperation(org.apache.kafka.common.acl.AclOperation) PulsarService(org.apache.pulsar.broker.PulsarService) TENANT_PLACEHOLDER(io.streamnative.pulsar.handlers.kop.KafkaServiceConfiguration.TENANT_PLACEHOLDER) ExecutionException(java.util.concurrent.ExecutionException) AtomicLong(java.util.concurrent.atomic.AtomicLong) AddOffsetsToTxnResponse(org.apache.kafka.common.requests.AddOffsetsToTxnResponse) WriteTxnMarkersResponse(org.apache.kafka.common.requests.WriteTxnMarkersResponse) SimpleAclAuthorizer(io.streamnative.pulsar.handlers.kop.security.auth.SimpleAclAuthorizer) GroupCoordinator(io.streamnative.pulsar.handlers.kop.coordinator.group.GroupCoordinator) InitProducerIdRequest(org.apache.kafka.common.requests.InitProducerIdRequest) JoinGroupRequest(org.apache.kafka.common.requests.JoinGroupRequest) TopicDetails(org.apache.kafka.common.requests.CreateTopicsRequest.TopicDetails) ProduceRequest(org.apache.kafka.common.requests.ProduceRequest) AbstractRequest(org.apache.kafka.common.requests.AbstractRequest) ControlRecordType(org.apache.kafka.common.record.ControlRecordType) DescribeGroupsRequest(org.apache.kafka.common.requests.DescribeGroupsRequest) ByteBuffer(java.nio.ByteBuffer) AddPartitionsToTxnResponse(org.apache.kafka.common.requests.AddPartitionsToTxnResponse) TopicMetadata(org.apache.kafka.common.requests.MetadataResponse.TopicMetadata) Preconditions.checkArgument(com.google.common.base.Preconditions.checkArgument) AtomicInteger(java.util.concurrent.atomic.AtomicInteger) CreatePartitionsRequest(org.apache.kafka.common.requests.CreatePartitionsRequest) ListUtils(org.apache.commons.collections4.ListUtils) DelayedOperationPurgatory(io.streamnative.pulsar.handlers.kop.utils.delayed.DelayedOperationPurgatory) NamespaceName(org.apache.pulsar.common.naming.NamespaceName) TopicPartition(org.apache.kafka.common.TopicPartition) OrderedScheduler(org.apache.bookkeeper.common.util.OrderedScheduler) Time(org.apache.kafka.common.utils.Time) Collection(java.util.Collection) EndTxnResponse(org.apache.kafka.common.requests.EndTxnResponse) PartitionLog(io.streamnative.pulsar.handlers.kop.storage.PartitionLog) ConcurrentHashMap(java.util.concurrent.ConcurrentHashMap) MessageMetadataUtils(io.streamnative.pulsar.handlers.kop.utils.MessageMetadataUtils) PulsarMetadataAccessor(io.streamnative.pulsar.handlers.kop.security.auth.PulsarMetadataAccessor) Position(org.apache.bookkeeper.mledger.Position) TransactionCoordinator(io.streamnative.pulsar.handlers.kop.coordinator.transaction.TransactionCoordinator) InetSocketAddress(java.net.InetSocketAddress) Collectors(java.util.stream.Collectors) Sets(com.google.common.collect.Sets) Preconditions.checkState(com.google.common.base.Preconditions.checkState) CoreUtils(io.streamnative.pulsar.handlers.kop.utils.CoreUtils) DescribeConfigsRequest(org.apache.kafka.common.requests.DescribeConfigsRequest) ManagedLedgerException(org.apache.bookkeeper.mledger.ManagedLedgerException) List(java.util.List) PersistentTopic(org.apache.pulsar.broker.service.persistent.PersistentTopic) FutureUtil(org.apache.pulsar.common.util.FutureUtil) InitProducerIdResponse(org.apache.kafka.common.requests.InitProducerIdResponse) Optional(java.util.Optional) OffsetFinder(io.streamnative.pulsar.handlers.kop.utils.OffsetFinder) HeartbeatRequest(org.apache.kafka.common.requests.HeartbeatRequest) ReplicaManager(io.streamnative.pulsar.handlers.kop.storage.ReplicaManager) JoinGroupResponse(org.apache.kafka.common.requests.JoinGroupResponse) KoPTopicException(io.streamnative.pulsar.handlers.kop.exceptions.KoPTopicException) NotImplementedException(org.apache.commons.lang3.NotImplementedException) DeleteTopicsRequest(org.apache.kafka.common.requests.DeleteTopicsRequest) AddOffsetsToTxnRequest(org.apache.kafka.common.requests.AddOffsetsToTxnRequest) TopicName(org.apache.pulsar.common.naming.TopicName) Getter(lombok.Getter) CreateTopicsRequest(org.apache.kafka.common.requests.CreateTopicsRequest) EndTransactionMarker(org.apache.kafka.common.record.EndTransactionMarker) HashMap(java.util.HashMap) CompletableFuture(java.util.concurrent.CompletableFuture) Function(java.util.function.Function) LeaderNotAvailableException(org.apache.kafka.common.errors.LeaderNotAvailableException) DescribeConfigsResponse(org.apache.kafka.common.requests.DescribeConfigsResponse) ApiError(org.apache.kafka.common.requests.ApiError) PartitionMetadata(org.apache.kafka.common.requests.MetadataResponse.PartitionMetadata) HashSet(java.util.HashSet) KeyValue(org.apache.pulsar.common.schema.KeyValue) ChannelHandlerContext(io.netty.channel.ChannelHandlerContext) Resource(io.streamnative.pulsar.handlers.kop.security.auth.Resource) ConfigResource(org.apache.kafka.common.config.ConfigResource) EntryFormatter(io.streamnative.pulsar.handlers.kop.format.EntryFormatter) PartitionResponse(org.apache.kafka.common.requests.ProduceResponse.PartitionResponse) ByteBuf(io.netty.buffer.ByteBuf) EndTxnRequest(org.apache.kafka.common.requests.EndTxnRequest) MetadataRequest(org.apache.kafka.common.requests.MetadataRequest) SyncGroupResponse(org.apache.kafka.common.requests.SyncGroupResponse) Session(io.streamnative.pulsar.handlers.kop.security.Session) Authorizer(io.streamnative.pulsar.handlers.kop.security.auth.Authorizer) ManagedLedgerImpl(org.apache.bookkeeper.mledger.impl.ManagedLedgerImpl) Utils(org.apache.kafka.common.utils.Utils) DelayedOperation(io.streamnative.pulsar.handlers.kop.utils.delayed.DelayedOperation) KafkaRequestUtils(io.streamnative.pulsar.handlers.kop.utils.KafkaRequestUtils) KopTopic(io.streamnative.pulsar.handlers.kop.utils.KopTopic) OffsetCommitRequest(org.apache.kafka.common.requests.OffsetCommitRequest) Iterator(java.util.Iterator) SaslAuthenticateResponse(org.apache.kafka.common.requests.SaslAuthenticateResponse) AlterConfigsResponse(org.apache.kafka.common.requests.AlterConfigsResponse) TransactionResult(org.apache.kafka.common.requests.TransactionResult) UTF_8(java.nio.charset.StandardCharsets.UTF_8) PulsarAdminException(org.apache.pulsar.client.admin.PulsarAdminException) OffsetFetchRequest(org.apache.kafka.common.requests.OffsetFetchRequest) TxnOffsetCommitRequest(org.apache.kafka.common.requests.TxnOffsetCommitRequest) ApiKeys(org.apache.kafka.common.protocol.ApiKeys) Maps(com.google.common.collect.Maps) TimeUnit(java.util.concurrent.TimeUnit) Consumer(java.util.function.Consumer) AlterConfigsRequest(org.apache.kafka.common.requests.AlterConfigsRequest) VisibleForTesting(com.google.common.annotations.VisibleForTesting) Collections(java.util.Collections) ApiException(org.apache.kafka.common.errors.ApiException) ConfigResource(org.apache.kafka.common.config.ConfigResource) DescribeConfigsRequest(org.apache.kafka.common.requests.DescribeConfigsRequest) KoPTopicException(io.streamnative.pulsar.handlers.kop.exceptions.KoPTopicException) AtomicInteger(java.util.concurrent.atomic.AtomicInteger) ApiError(org.apache.kafka.common.requests.ApiError) KopTopic(io.streamnative.pulsar.handlers.kop.utils.KopTopic) DescribeConfigsResponse(org.apache.kafka.common.requests.DescribeConfigsResponse)

Example 2 with Resource

use of io.streamnative.pulsar.handlers.kop.security.auth.Resource in project kop by streamnative.

the class KafkaRequestHandler method handleDescribeConfigs.

@Override
protected void handleDescribeConfigs(KafkaHeaderAndRequest describeConfigs, CompletableFuture<AbstractResponse> resultFuture) {
    checkArgument(describeConfigs.getRequest() instanceof DescribeConfigsRequest);
    DescribeConfigsRequest request = (DescribeConfigsRequest) describeConfigs.getRequest();
    if (request.resources().isEmpty()) {
        resultFuture.complete(new DescribeConfigsResponse(0, Maps.newHashMap()));
        return;
    }
    Collection<ConfigResource> authorizedResources = Collections.synchronizedList(new ArrayList<>());
    Map<ConfigResource, DescribeConfigsResponse.Config> failedConfigResourceMap = Maps.newConcurrentMap();
    AtomicInteger unfinishedAuthorizationCount = new AtomicInteger(request.resources().size());
    String namespacePrefix = currentNamespacePrefix();
    Consumer<Runnable> completeOne = (action) -> {
        // When complete one authorization or failed, will do the action first.
        action.run();
        if (unfinishedAuthorizationCount.decrementAndGet() == 0) {
            adminManager.describeConfigsAsync(authorizedResources.stream().collect(Collectors.toMap(resource -> resource, resource -> Optional.ofNullable(request.configNames(resource)).map(HashSet::new))), namespacePrefix).thenApply(configResourceConfigMap -> {
                configResourceConfigMap.putAll(failedConfigResourceMap);
                resultFuture.complete(new DescribeConfigsResponse(0, configResourceConfigMap));
                return null;
            });
        }
    };
    // Do authorization for each of resource
    request.resources().forEach(configResource -> {
        switch(configResource.type()) {
            case TOPIC:
                KopTopic kopTopic;
                try {
                    kopTopic = new KopTopic(configResource.name(), namespacePrefix);
                } catch (KoPTopicException e) {
                    completeOne.accept(() -> {
                        final ApiError error = new ApiError(Errors.UNKNOWN_TOPIC_OR_PARTITION, "Topic " + configResource.name() + " doesn't exist");
                        failedConfigResourceMap.put(configResource, new DescribeConfigsResponse.Config(error, Collections.emptyList()));
                    });
                    return;
                }
                String fullTopicName = kopTopic.getFullName();
                authorize(AclOperation.DESCRIBE_CONFIGS, Resource.of(ResourceType.TOPIC, fullTopicName)).whenComplete((isAuthorized, ex) -> {
                    if (ex != null) {
                        log.error("DescribeConfigs in topic authorize failed, topic - {}. {}", fullTopicName, ex.getMessage());
                        completeOne.accept(() -> failedConfigResourceMap.put(configResource, new DescribeConfigsResponse.Config(new ApiError(Errors.TOPIC_AUTHORIZATION_FAILED, null), Collections.emptyList())));
                        return;
                    }
                    if (isAuthorized) {
                        completeOne.accept(() -> authorizedResources.add(configResource));
                        return;
                    }
                    completeOne.accept(() -> failedConfigResourceMap.put(configResource, new DescribeConfigsResponse.Config(new ApiError(Errors.TOPIC_AUTHORIZATION_FAILED, null), Collections.emptyList())));
                });
                break;
            case BROKER:
                // Current KoP don't support Broker Resource.
                // but we are not exposing anything to the client, so it is fine to serve requests.
                completeOne.accept(() -> authorizedResources.add(configResource));
                break;
            case UNKNOWN:
            default:
                completeOne.accept(() -> log.error("KoP doesn't support resource type: " + configResource.type()));
                break;
        }
    });
}
Also used : IsolationLevel(org.apache.kafka.common.requests.IsolationLevel) KafkaResponseUtils(io.streamnative.pulsar.handlers.kop.utils.KafkaResponseUtils) LeaveGroupRequest(org.apache.kafka.common.requests.LeaveGroupRequest) AppendRecordsContext(io.streamnative.pulsar.handlers.kop.storage.AppendRecordsContext) HeartbeatResponse(org.apache.kafka.common.requests.HeartbeatResponse) SaslAuthenticator(io.streamnative.pulsar.handlers.kop.security.SaslAuthenticator) Pair(org.apache.commons.lang3.tuple.Pair) SyncGroupRequest(org.apache.kafka.common.requests.SyncGroupRequest) ApiVersionsResponse(org.apache.kafka.common.requests.ApiVersionsResponse) MetadataUtils(io.streamnative.pulsar.handlers.kop.utils.MetadataUtils) Map(java.util.Map) RecordBatch(org.apache.kafka.common.record.RecordBatch) MutableRecordBatch(org.apache.kafka.common.record.MutableRecordBatch) PositionImpl(org.apache.bookkeeper.mledger.impl.PositionImpl) DeleteGroupsRequest(org.apache.kafka.common.requests.DeleteGroupsRequest) Set(java.util.Set) CopyOnWriteArraySet(java.util.concurrent.CopyOnWriteArraySet) AddPartitionsToTxnRequest(org.apache.kafka.common.requests.AddPartitionsToTxnRequest) ListOffsetResponse(org.apache.kafka.common.requests.ListOffsetResponse) ListGroupsRequest(org.apache.kafka.common.requests.ListGroupsRequest) Slf4j(lombok.extern.slf4j.Slf4j) MemoryRecords(org.apache.kafka.common.record.MemoryRecords) Stream(java.util.stream.Stream) DeleteRecordsRequest(org.apache.kafka.common.requests.DeleteRecordsRequest) ListOffsetRequest(org.apache.kafka.common.requests.ListOffsetRequest) Errors(org.apache.kafka.common.protocol.Errors) Murmur3_32Hash(org.apache.pulsar.common.util.Murmur3_32Hash) Node(org.apache.kafka.common.Node) FetchRequest(org.apache.kafka.common.requests.FetchRequest) OffsetAndMetadata(io.streamnative.pulsar.handlers.kop.offset.OffsetAndMetadata) EntryFormatterFactory(io.streamnative.pulsar.handlers.kop.format.EntryFormatterFactory) AsyncCallbacks(org.apache.bookkeeper.mledger.AsyncCallbacks) AuthenticationException(org.apache.kafka.common.errors.AuthenticationException) TopicNameUtils(io.streamnative.pulsar.handlers.kop.utils.TopicNameUtils) AbstractResponse(org.apache.kafka.common.requests.AbstractResponse) NewPartitions(org.apache.kafka.clients.admin.NewPartitions) WriteTxnMarkersRequest(org.apache.kafka.common.requests.WriteTxnMarkersRequest) MetadataStoreExtended(org.apache.pulsar.metadata.api.extended.MetadataStoreExtended) PulsarAdmin(org.apache.pulsar.client.admin.PulsarAdmin) InvalidRecordException(org.apache.kafka.common.record.InvalidRecordException) ArrayList(java.util.ArrayList) GroupOverview(io.streamnative.pulsar.handlers.kop.coordinator.group.GroupMetadata.GroupOverview) FindCoordinatorRequest(org.apache.kafka.common.requests.FindCoordinatorRequest) ScheduledExecutorService(java.util.concurrent.ScheduledExecutorService) BiConsumer(java.util.function.BiConsumer) THROTTLE_TIME_MS(org.apache.kafka.common.protocol.CommonFields.THROTTLE_TIME_MS) OffsetFetchResponse(org.apache.kafka.common.requests.OffsetFetchResponse) ProduceResponse(org.apache.kafka.common.requests.ProduceResponse) TENANT_ALLNAMESPACES_PLACEHOLDER(io.streamnative.pulsar.handlers.kop.KafkaServiceConfiguration.TENANT_ALLNAMESPACES_PLACEHOLDER) GroupIdUtils(io.streamnative.pulsar.handlers.kop.utils.GroupIdUtils) OffsetCommitResponse(org.apache.kafka.common.requests.OffsetCommitResponse) ResourceType(io.streamnative.pulsar.handlers.kop.security.auth.ResourceType) TxnOffsetCommitResponse(org.apache.kafka.common.requests.TxnOffsetCommitResponse) Executor(java.util.concurrent.Executor) SystemTime(org.apache.kafka.common.utils.SystemTime) OffsetMetadata(io.streamnative.pulsar.handlers.kop.offset.OffsetMetadata) DeleteRecordsResponse(org.apache.kafka.common.requests.DeleteRecordsResponse) AclOperation(org.apache.kafka.common.acl.AclOperation) PulsarService(org.apache.pulsar.broker.PulsarService) TENANT_PLACEHOLDER(io.streamnative.pulsar.handlers.kop.KafkaServiceConfiguration.TENANT_PLACEHOLDER) ExecutionException(java.util.concurrent.ExecutionException) AtomicLong(java.util.concurrent.atomic.AtomicLong) AddOffsetsToTxnResponse(org.apache.kafka.common.requests.AddOffsetsToTxnResponse) WriteTxnMarkersResponse(org.apache.kafka.common.requests.WriteTxnMarkersResponse) SimpleAclAuthorizer(io.streamnative.pulsar.handlers.kop.security.auth.SimpleAclAuthorizer) GroupCoordinator(io.streamnative.pulsar.handlers.kop.coordinator.group.GroupCoordinator) InitProducerIdRequest(org.apache.kafka.common.requests.InitProducerIdRequest) JoinGroupRequest(org.apache.kafka.common.requests.JoinGroupRequest) TopicDetails(org.apache.kafka.common.requests.CreateTopicsRequest.TopicDetails) ProduceRequest(org.apache.kafka.common.requests.ProduceRequest) AbstractRequest(org.apache.kafka.common.requests.AbstractRequest) ControlRecordType(org.apache.kafka.common.record.ControlRecordType) DescribeGroupsRequest(org.apache.kafka.common.requests.DescribeGroupsRequest) ByteBuffer(java.nio.ByteBuffer) AddPartitionsToTxnResponse(org.apache.kafka.common.requests.AddPartitionsToTxnResponse) TopicMetadata(org.apache.kafka.common.requests.MetadataResponse.TopicMetadata) Preconditions.checkArgument(com.google.common.base.Preconditions.checkArgument) AtomicInteger(java.util.concurrent.atomic.AtomicInteger) CreatePartitionsRequest(org.apache.kafka.common.requests.CreatePartitionsRequest) ListUtils(org.apache.commons.collections4.ListUtils) DelayedOperationPurgatory(io.streamnative.pulsar.handlers.kop.utils.delayed.DelayedOperationPurgatory) NamespaceName(org.apache.pulsar.common.naming.NamespaceName) TopicPartition(org.apache.kafka.common.TopicPartition) OrderedScheduler(org.apache.bookkeeper.common.util.OrderedScheduler) Time(org.apache.kafka.common.utils.Time) Collection(java.util.Collection) EndTxnResponse(org.apache.kafka.common.requests.EndTxnResponse) PartitionLog(io.streamnative.pulsar.handlers.kop.storage.PartitionLog) ConcurrentHashMap(java.util.concurrent.ConcurrentHashMap) MessageMetadataUtils(io.streamnative.pulsar.handlers.kop.utils.MessageMetadataUtils) Position(org.apache.bookkeeper.mledger.Position) TransactionCoordinator(io.streamnative.pulsar.handlers.kop.coordinator.transaction.TransactionCoordinator) InetSocketAddress(java.net.InetSocketAddress) Collectors(java.util.stream.Collectors) Sets(com.google.common.collect.Sets) Preconditions.checkState(com.google.common.base.Preconditions.checkState) CoreUtils(io.streamnative.pulsar.handlers.kop.utils.CoreUtils) DescribeConfigsRequest(org.apache.kafka.common.requests.DescribeConfigsRequest) ManagedLedgerException(org.apache.bookkeeper.mledger.ManagedLedgerException) List(java.util.List) PersistentTopic(org.apache.pulsar.broker.service.persistent.PersistentTopic) FutureUtil(org.apache.pulsar.common.util.FutureUtil) InitProducerIdResponse(org.apache.kafka.common.requests.InitProducerIdResponse) Optional(java.util.Optional) OffsetFinder(io.streamnative.pulsar.handlers.kop.utils.OffsetFinder) HeartbeatRequest(org.apache.kafka.common.requests.HeartbeatRequest) ReplicaManager(io.streamnative.pulsar.handlers.kop.storage.ReplicaManager) JoinGroupResponse(org.apache.kafka.common.requests.JoinGroupResponse) KoPTopicException(io.streamnative.pulsar.handlers.kop.exceptions.KoPTopicException) NotImplementedException(org.apache.commons.lang3.NotImplementedException) DeleteTopicsRequest(org.apache.kafka.common.requests.DeleteTopicsRequest) AddOffsetsToTxnRequest(org.apache.kafka.common.requests.AddOffsetsToTxnRequest) TopicName(org.apache.pulsar.common.naming.TopicName) Getter(lombok.Getter) CreateTopicsRequest(org.apache.kafka.common.requests.CreateTopicsRequest) EndTransactionMarker(org.apache.kafka.common.record.EndTransactionMarker) HashMap(java.util.HashMap) CompletableFuture(java.util.concurrent.CompletableFuture) Function(java.util.function.Function) LeaderNotAvailableException(org.apache.kafka.common.errors.LeaderNotAvailableException) DescribeConfigsResponse(org.apache.kafka.common.requests.DescribeConfigsResponse) ApiError(org.apache.kafka.common.requests.ApiError) PartitionMetadata(org.apache.kafka.common.requests.MetadataResponse.PartitionMetadata) HashSet(java.util.HashSet) KeyValue(org.apache.pulsar.common.schema.KeyValue) ChannelHandlerContext(io.netty.channel.ChannelHandlerContext) Resource(io.streamnative.pulsar.handlers.kop.security.auth.Resource) ConfigResource(org.apache.kafka.common.config.ConfigResource) EntryFormatter(io.streamnative.pulsar.handlers.kop.format.EntryFormatter) PartitionResponse(org.apache.kafka.common.requests.ProduceResponse.PartitionResponse) ByteBuf(io.netty.buffer.ByteBuf) EndTxnRequest(org.apache.kafka.common.requests.EndTxnRequest) MetadataRequest(org.apache.kafka.common.requests.MetadataRequest) SyncGroupResponse(org.apache.kafka.common.requests.SyncGroupResponse) Session(io.streamnative.pulsar.handlers.kop.security.Session) Authorizer(io.streamnative.pulsar.handlers.kop.security.auth.Authorizer) ManagedLedgerImpl(org.apache.bookkeeper.mledger.impl.ManagedLedgerImpl) Utils(org.apache.kafka.common.utils.Utils) DelayedOperation(io.streamnative.pulsar.handlers.kop.utils.delayed.DelayedOperation) KafkaRequestUtils(io.streamnative.pulsar.handlers.kop.utils.KafkaRequestUtils) KopTopic(io.streamnative.pulsar.handlers.kop.utils.KopTopic) OffsetCommitRequest(org.apache.kafka.common.requests.OffsetCommitRequest) Iterator(java.util.Iterator) SaslAuthenticateResponse(org.apache.kafka.common.requests.SaslAuthenticateResponse) AlterConfigsResponse(org.apache.kafka.common.requests.AlterConfigsResponse) TransactionResult(org.apache.kafka.common.requests.TransactionResult) UTF_8(java.nio.charset.StandardCharsets.UTF_8) PulsarAdminException(org.apache.pulsar.client.admin.PulsarAdminException) OffsetFetchRequest(org.apache.kafka.common.requests.OffsetFetchRequest) TxnOffsetCommitRequest(org.apache.kafka.common.requests.TxnOffsetCommitRequest) ApiKeys(org.apache.kafka.common.protocol.ApiKeys) Maps(com.google.common.collect.Maps) TimeUnit(java.util.concurrent.TimeUnit) Consumer(java.util.function.Consumer) AlterConfigsRequest(org.apache.kafka.common.requests.AlterConfigsRequest) VisibleForTesting(com.google.common.annotations.VisibleForTesting) Collections(java.util.Collections) ApiException(org.apache.kafka.common.errors.ApiException) ConfigResource(org.apache.kafka.common.config.ConfigResource) DescribeConfigsRequest(org.apache.kafka.common.requests.DescribeConfigsRequest) KoPTopicException(io.streamnative.pulsar.handlers.kop.exceptions.KoPTopicException) AtomicInteger(java.util.concurrent.atomic.AtomicInteger) ApiError(org.apache.kafka.common.requests.ApiError) KopTopic(io.streamnative.pulsar.handlers.kop.utils.KopTopic) DescribeConfigsResponse(org.apache.kafka.common.requests.DescribeConfigsResponse)

Aggregations

VisibleForTesting (com.google.common.annotations.VisibleForTesting)2 Preconditions.checkArgument (com.google.common.base.Preconditions.checkArgument)2 Preconditions.checkState (com.google.common.base.Preconditions.checkState)2 Maps (com.google.common.collect.Maps)2 Sets (com.google.common.collect.Sets)2 ByteBuf (io.netty.buffer.ByteBuf)2 ChannelHandlerContext (io.netty.channel.ChannelHandlerContext)2 TENANT_ALLNAMESPACES_PLACEHOLDER (io.streamnative.pulsar.handlers.kop.KafkaServiceConfiguration.TENANT_ALLNAMESPACES_PLACEHOLDER)2 TENANT_PLACEHOLDER (io.streamnative.pulsar.handlers.kop.KafkaServiceConfiguration.TENANT_PLACEHOLDER)2 GroupCoordinator (io.streamnative.pulsar.handlers.kop.coordinator.group.GroupCoordinator)2 GroupOverview (io.streamnative.pulsar.handlers.kop.coordinator.group.GroupMetadata.GroupOverview)2 TransactionCoordinator (io.streamnative.pulsar.handlers.kop.coordinator.transaction.TransactionCoordinator)2 KoPTopicException (io.streamnative.pulsar.handlers.kop.exceptions.KoPTopicException)2 EntryFormatter (io.streamnative.pulsar.handlers.kop.format.EntryFormatter)2 EntryFormatterFactory (io.streamnative.pulsar.handlers.kop.format.EntryFormatterFactory)2 OffsetAndMetadata (io.streamnative.pulsar.handlers.kop.offset.OffsetAndMetadata)2 OffsetMetadata (io.streamnative.pulsar.handlers.kop.offset.OffsetMetadata)2 SaslAuthenticator (io.streamnative.pulsar.handlers.kop.security.SaslAuthenticator)2 Session (io.streamnative.pulsar.handlers.kop.security.Session)2 Authorizer (io.streamnative.pulsar.handlers.kop.security.auth.Authorizer)2