package topic import ( "fmt" "github.com/seaweedfs/seaweedfs/weed/filer" "github.com/seaweedfs/seaweedfs/weed/pb/mq_pb" "time" ) type Namespace string type Topic struct { Namespace Namespace Name string } func NewTopic(namespace Namespace, name string) Topic { return Topic{ Namespace: namespace, Name: name, } } func FromPbTopic(topic *mq_pb.Topic) Topic { return Topic{ Namespace: Namespace(topic.Namespace), Name: topic.Name, } } func (tp Topic) String() string { return fmt.Sprintf("%s.%s", tp.Namespace, tp.Name) } type Segment struct { Topic Topic Id int32 Partition Partition LastModified time.Time } func FromPbSegment(segment *mq_pb.Segment) *Segment { return &Segment{ Topic: Topic{ Namespace: Namespace(segment.Namespace), Name: segment.Topic, }, Id: segment.Id, Partition: Partition{ RangeStart: segment.Partition.RangeStart, RangeStop: segment.Partition.RangeStop, RingSize: segment.Partition.RingSize, }, } } func (segment *Segment) ToPbSegment() *mq_pb.Segment { return &mq_pb.Segment{ Namespace: string(segment.Topic.Namespace), Topic: segment.Topic.Name, Id: segment.Id, Partition: &mq_pb.Partition{ RingSize: segment.Partition.RingSize, RangeStart: segment.Partition.RangeStart, RangeStop: segment.Partition.RangeStop, }, } } func (segment *Segment) DirAndName() (dir string, name string) { dir = fmt.Sprintf("%s/%s/%s", filer.TopicsDir, segment.Topic.Namespace, segment.Topic.Name) name = fmt.Sprintf("%4d.segment", segment.Id) return }