package migrate import ( "time" "github.com/gogo/protobuf/proto" "github.com/influxdata/influxdb/v2/tsdb/migrate/internal" ) //go:generate protoc --gogo_out=. internal/meta.proto // Data represents the top level collection of all metadata. type Data struct { Term uint64 // associated raft term Index uint64 // associated raft index ClusterID uint64 Databases []DatabaseInfo MaxShardGroupID uint64 MaxShardID uint64 } // unmarshal deserializes from a protobuf representation. func (data *Data) unmarshal(pb *internal.Data) { data.Databases = make([]DatabaseInfo, len(pb.GetDatabases())) for i, x := range pb.GetDatabases() { data.Databases[i].unmarshal(x) } } // UnmarshalBinary decodes the object from a binary format. func (data *Data) UnmarshalBinary(buf []byte) error { var pb internal.Data if err := proto.Unmarshal(buf, &pb); err != nil { return err } data.unmarshal(&pb) return nil } // DatabaseInfo represents information about a database in the system. type DatabaseInfo struct { Name string DefaultRetentionPolicy string RetentionPolicies []RetentionPolicyInfo } // unmarshal deserializes from a protobuf representation. func (di *DatabaseInfo) unmarshal(pb *internal.DatabaseInfo) { di.Name = pb.GetName() di.DefaultRetentionPolicy = pb.GetDefaultRetentionPolicy() if len(pb.GetRetentionPolicies()) > 0 { di.RetentionPolicies = make([]RetentionPolicyInfo, len(pb.GetRetentionPolicies())) for i, x := range pb.GetRetentionPolicies() { di.RetentionPolicies[i].unmarshal(x) } } } // RetentionPolicyInfo represents metadata about a retention policy. type RetentionPolicyInfo struct { Name string ReplicaN int Duration time.Duration ShardGroupDuration time.Duration } // unmarshal deserializes from a protobuf representation. func (rpi *RetentionPolicyInfo) unmarshal(pb *internal.RetentionPolicyInfo) { rpi.Name = pb.GetName() rpi.ReplicaN = int(pb.GetReplicaN()) rpi.Duration = time.Duration(pb.GetDuration()) rpi.ShardGroupDuration = time.Duration(pb.GetShardGroupDuration()) }