Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,8 @@ enum ConfigEntityType {
*/
interface ConfigEntity {
/**
* Returns the name of this entity. For default quotas, an empty string is returned.
* Returns the name of this entity. For default quotas, {@code null} is returned,
* consistent with how the Admin API represents default client quota entities.
*/
String name();

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ package kafka.server.metadata

import org.apache.kafka.image.ClientQuotaDelta
import org.apache.kafka.server.quota.ClientQuotaManager
import org.junit.jupiter.api.Assertions.{assertDoesNotThrow, assertEquals, assertThrows}
import org.junit.jupiter.api.Assertions.{assertDoesNotThrow, assertEquals, assertNull, assertThrows}
import org.junit.jupiter.api.Test
import org.junit.jupiter.api.function.Executable
import java.util.Optional
Expand Down Expand Up @@ -73,4 +73,29 @@ class ClientQuotaMetadataManagerTest {
ClientQuotaMetadataManager.transferToClientQuotaEntity(DefaultUserDefaultClientIdEntity)
)
}
}

@Test
def testDefaultConfigEntityNameReturnsNull(): Unit = {
assertNull(ClientQuotaManager.DEFAULT_USER_ENTITY.name())
assertNull(ClientQuotaManager.DEFAULT_USER_CLIENT_ID.name())

val (defaultUser, _) = ClientQuotaMetadataManager.transferToClientQuotaEntity(DefaultUserEntity)
assertNull(defaultUser.get().name())

val (_, defaultClientId) = ClientQuotaMetadataManager.transferToClientQuotaEntity(DefaultClientIdEntity)
assertNull(defaultClientId.get().name())

val (defaultUser2, defaultClientId2) = ClientQuotaMetadataManager.transferToClientQuotaEntity(DefaultUserDefaultClientIdEntity)
assertNull(defaultUser2.get().name())
assertNull(defaultClientId2.get().name())
}

@Test
def testExplicitConfigEntityNameReturnsValue(): Unit = {
val (user, _) = ClientQuotaMetadataManager.transferToClientQuotaEntity(UserEntity("testUser"))
assertEquals("testUser", user.get().name())

val (_, clientId) = ClientQuotaMetadataManager.transferToClientQuotaEntity(ClientIdEntity("testClient"))
assertEquals("testClient", clientId.get().name())
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -60,7 +60,6 @@ public class ClientQuotaManager {

// Purge sensors after 1 hour of inactivity
private static final int INACTIVE_SENSOR_EXPIRATION_TIME_SECONDS = 3600;
private static final String DEFAULT_NAME = "<default>";

public record UserEntity(String sanitizedUser) implements ClientQuotaEntity.ConfigEntity {

Expand Down Expand Up @@ -105,7 +104,7 @@ public ClientQuotaEntity.ConfigEntityType entityType() {

@Override
public String name() {
return DEFAULT_NAME;
return null;
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It's a small but breaking change, so it requires a KIP, even though I'd personally love to merge it directly.

}

@Override
Expand All @@ -121,7 +120,7 @@ public ClientQuotaEntity.ConfigEntityType entityType() {
}
@Override
public String name() {
return DEFAULT_NAME;
return null;
}
@Override
public String toString() {
Expand Down Expand Up @@ -154,14 +153,15 @@ public List<ConfigEntity> configEntities() {
public String sanitizedUser() {
if (userEntity instanceof UserEntity userRecord) {
return userRecord.sanitizedUser();
} else if (userEntity == DEFAULT_USER_ENTITY) {
return DEFAULT_NAME;
}
return "";
}

public String clientId() {
return clientIdEntity != null ? clientIdEntity.name() : "";
if (clientIdEntity instanceof ClientIdEntity clientIdRecord) {
return clientIdRecord.clientId();
}
return "";
}

@Override
Expand Down
Loading