Files
stream/state/state.go
T

51 lines
1.5 KiB
Go

package state
import (
"github.com/CefBoud/monkafka/types"
)
// Config holds the global configuration.
var Config *types.Configuration
// TopicStateInstance holds the state of topics.
var TopicStateInstance types.TopicsState = make(types.TopicsState)
// GroupMetadata stores metadata for consumer groups.
var GroupMetadata = make(map[types.GroupID]map[types.GroupMetadataTopicPartitionKey]types.GroupMetadataTopicPartitionValue)
// GetPartition returns a pointer to a partition for a specific topic and partition index.
func GetPartition(topic string, partition uint32) *types.Partition {
return TopicStateInstance[types.TopicName(topic)][types.PartitionIndex(partition)]
}
// GetPartitions returns all partitions for a specific topic.
func GetPartitions(topic string) []*types.Partition {
var partitions []*types.Partition
for _, p := range TopicStateInstance[types.TopicName(topic)] {
partitions = append(partitions, p)
}
return partitions
}
// GroupExists checks if a consumer group exists.
func GroupExists(groupID string) bool {
_, exists := GroupMetadata[types.GroupID(groupID)]
return exists
}
// TopicExists checks if a topic exists.
func TopicExists(topic string) bool {
_, exists := TopicStateInstance[types.TopicName(topic)]
return exists
}
// PartitionExists checks if a topic exists.
func PartitionExists(topic string, partition uint32) bool {
topicState, exists := TopicStateInstance[types.TopicName(topic)]
if !exists {
return false
}
_, exists = topicState[types.PartitionIndex(partition)]
return exists
}