53
}
54
55
>
func collectBuildIdInfo(sets []*persistencespb.CompatibleVersionSet) map[string]buildIDInfo {
version_sets_merge.go
56
>
buildIDToInfo := make(map[string]buildIDInfo, 0)
57
>
for _, set := range sets {
58
>
for _, buildID := range set.BuildIds {
59
>
if info, found := buildIDToInfo[buildID.Id]; found {
60
>
// A build ID appears in more than one source, merge its information, and track it
61
>
state := info.state
62
>
stateUpdateTimestamp := hlc.Max(buildID.StateUpdateTimestamp, info.stateUpdateTimestamp)
63
>
if hlc.Equal(stateUpdateTimestamp, buildID.StateUpdateTimestamp) {
64
>
state = buildID.State
65
>
}
66
>
buildIDToInfo[buildID.Id] = buildIDInfo{
67
>
state: state,
68
>
stateUpdateTimestamp: stateUpdateTimestamp,
69
>
setIDs: mergeSetIDs(info.setIDs, set.SetIds),
70
>
madeDefaultAt: hlc.Max(buildID.BecameDefaultTimestamp, info.madeDefaultAt),
71
>
setMadeDefaultAt: hlc.Max(set.BecameDefaultTimestamp, info.setMadeDefaultAt),
72
>
}
73
>
} else {
74
>
// A build ID was seen for the first time, track it
75
>
buildIDToInfo[buildID.Id] = buildIDInfo{
76
>
state: buildID.State,
77
>
stateUpdateTimestamp: buildID.StateUpdateTimestamp,
78
>
setIDs: set.SetIds,
79
>
madeDefaultAt: buildID.BecameDefaultTimestamp,
80
>
setMadeDefaultAt: set.BecameDefaultTimestamp,
81
>
}
82
>
}
83
}
84
}
86
}
87
88
>
func intoVersionSets(buildIDToInfo map[string]buildIDInfo) []*persistencespb.CompatibleVersionSet {
version_sets_merge.go
89
>
sets := make([]*persistencespb.CompatibleVersionSet, 0)
90
>
for id, info := range buildIDToInfo {
91
>
set := findSetWithSetIDs(sets, info.setIDs)
92
>
if set == nil {
93
>
set = &persistencespb.CompatibleVersionSet{
94
>
SetIds: info.setIDs,
95
>
BuildIds: make([]*persistencespb.BuildId, 0),
96
>
BecameDefaultTimestamp: info.setMadeDefaultAt,
97
>
}
98
>
sets = append(sets, set)
99
>
} else {
100
set.SetIds = mergeSetIDs(set.SetIds, info.setIDs)
101
set.BecameDefaultTimestamp = hlc.Max(info.setMadeDefaultAt, set.BecameDefaultTimestamp)
102
}
104
>
Id: id,
105
>
State: info.state,
106
>
StateUpdateTimestamp: info.stateUpdateTimestamp,
107
>
BecameDefaultTimestamp: info.madeDefaultAt,
108
>
}
109
>
set.BuildIds = append(set.BuildIds, buildID)
110
}
111
// Sort the sets based on their default update timestamp, ensuring the default set comes last
113
>
for _, set := range sets {
114
>
sortBuildIds(set.BuildIds)
115
>
}
116
>
return sets
117
}
118
120
>
sort.Slice(sets, func(i, j int) bool {
121
return hlc.Less(sets[i].BecameDefaultTimestamp, sets[j].BecameDefaultTimestamp)
122
})
123
}
124
126
>
sort.Slice(buildIds, func(i, j int) bool {
127
return hlc.Less(buildIds[i].BecameDefaultTimestamp, buildIds[j].BecameDefaultTimestamp)
128
})