use of org.apache.kafka.server.common.ApiMessageAndVersion in project kafka by apache.
the class ProducerIdControlManager method generateNextProducerId.
ControllerResult<ProducerIdsBlock> generateNextProducerId(int brokerId, long brokerEpoch) {
clusterControlManager.checkBrokerEpoch(brokerId, brokerEpoch);
long firstProducerIdInBlock = nextProducerId.get();
if (firstProducerIdInBlock > Long.MAX_VALUE - ProducerIdsBlock.PRODUCER_ID_BLOCK_SIZE) {
throw new UnknownServerException("Exhausted all producerIds as the next block's end producerId " + "has exceeded the int64 type limit");
}
ProducerIdsBlock block = new ProducerIdsBlock(brokerId, firstProducerIdInBlock, ProducerIdsBlock.PRODUCER_ID_BLOCK_SIZE);
long newNextProducerId = block.nextBlockFirstId();
ProducerIdsRecord record = new ProducerIdsRecord().setNextProducerId(newNextProducerId).setBrokerId(brokerId).setBrokerEpoch(brokerEpoch);
return ControllerResult.of(Collections.singletonList(new ApiMessageAndVersion(record, (short) 0)), block);
}
use of org.apache.kafka.server.common.ApiMessageAndVersion in project kafka by apache.
the class ProducerIdControlManager method iterator.
Iterator<List<ApiMessageAndVersion>> iterator(long epoch) {
List<ApiMessageAndVersion> records = new ArrayList<>(1);
long producerId = nextProducerId.get(epoch);
if (producerId > 0) {
records.add(new ApiMessageAndVersion(new ProducerIdsRecord().setNextProducerId(producerId).setBrokerId(0).setBrokerEpoch(0L), (short) 0));
}
return Collections.singleton(records).iterator();
}
use of org.apache.kafka.server.common.ApiMessageAndVersion in project kafka by apache.
the class ClusterControlManager method registerBroker.
/**
* Process an incoming broker registration request.
*/
public ControllerResult<BrokerRegistrationReply> registerBroker(BrokerRegistrationRequestData request, long brokerEpoch, FeatureMapAndEpoch finalizedFeatures) {
if (heartbeatManager == null) {
throw new RuntimeException("ClusterControlManager is not active.");
}
if (!clusterId.equals(request.clusterId())) {
throw new InconsistentClusterIdException("Expected cluster ID " + clusterId + ", but got cluster ID " + request.clusterId());
}
int brokerId = request.brokerId();
BrokerRegistration existing = brokerRegistrations.get(brokerId);
if (existing != null) {
if (heartbeatManager.hasValidSession(brokerId)) {
if (!existing.incarnationId().equals(request.incarnationId())) {
throw new DuplicateBrokerRegistrationException("Another broker is " + "registered with that broker id.");
}
} else {
if (!existing.incarnationId().equals(request.incarnationId())) {
// Remove any existing session for the old broker incarnation.
heartbeatManager.remove(brokerId);
existing = null;
}
}
}
RegisterBrokerRecord record = new RegisterBrokerRecord().setBrokerId(brokerId).setIncarnationId(request.incarnationId()).setBrokerEpoch(brokerEpoch).setRack(request.rack());
for (BrokerRegistrationRequestData.Listener listener : request.listeners()) {
record.endPoints().add(new BrokerEndpoint().setHost(listener.host()).setName(listener.name()).setPort(listener.port()).setSecurityProtocol(listener.securityProtocol()));
}
for (BrokerRegistrationRequestData.Feature feature : request.features()) {
Optional<VersionRange> finalized = finalizedFeatures.map().get(feature.name());
if (finalized.isPresent()) {
if (!finalized.get().contains(new VersionRange(feature.minSupportedVersion(), feature.maxSupportedVersion()))) {
throw new UnsupportedVersionException("Unable to register because " + "the broker has an unsupported version of " + feature.name());
}
}
record.features().add(new BrokerFeature().setName(feature.name()).setMinSupportedVersion(feature.minSupportedVersion()).setMaxSupportedVersion(feature.maxSupportedVersion()));
}
if (existing == null) {
heartbeatManager.touch(brokerId, true, -1);
} else {
heartbeatManager.touch(brokerId, existing.fenced(), -1);
}
List<ApiMessageAndVersion> records = new ArrayList<>();
records.add(new ApiMessageAndVersion(record, REGISTER_BROKER_RECORD.highestSupportedVersion()));
return ControllerResult.atomicOf(records, new BrokerRegistrationReply(brokerEpoch));
}
use of org.apache.kafka.server.common.ApiMessageAndVersion in project kafka by apache.
the class AclsImage method write.
public void write(Consumer<List<ApiMessageAndVersion>> out) {
List<ApiMessageAndVersion> batch = new ArrayList<>();
for (Entry<Uuid, StandardAcl> entry : acls.entrySet()) {
StandardAclWithId aclWithId = new StandardAclWithId(entry.getKey(), entry.getValue());
batch.add(new ApiMessageAndVersion(aclWithId.toRecord(), (short) 0));
}
out.accept(batch);
}
use of org.apache.kafka.server.common.ApiMessageAndVersion in project kafka by apache.
the class ClientQuotaImage method write.
public void write(ClientQuotaEntity entity, Consumer<List<ApiMessageAndVersion>> out) {
List<ApiMessageAndVersion> records = new ArrayList<>(quotas.size());
for (Entry<String, Double> entry : quotas.entrySet()) {
records.add(new ApiMessageAndVersion(new ClientQuotaRecord().setEntity(entityToData(entity)).setKey(entry.getKey()).setValue(entry.getValue()).setRemove(false), CLIENT_QUOTA_RECORD.highestSupportedVersion()));
}
out.accept(records);
}
Aggregations