Refactor genchanges

This commit is contained in:
mcrakhman 2023-04-20 11:26:53 +02:00 committed by Mikhail Iudin
parent 4a22eabebd
commit 077cdd6278
No known key found for this signature in database
GPG Key ID: FAAAA8BAABDFF1C0

View File

@ -382,7 +382,7 @@ type genResult struct {
snapshotId string snapshotId string
} }
// genChanges generates several levels of tree changes where each level is connected with only previous one // genChanges generates several levels of tree changes where each level is connected only with previous one
func genChanges(creator *objecttree.MockChangeCreator, params genParams) (res genResult) { func genChanges(creator *objecttree.MockChangeCreator, params genParams) (res genResult) {
src := rand.NewSource(time.Now().Unix()) src := rand.NewSource(time.Now().Unix())
rnd := rand.New(src) rnd := rand.New(src)
@ -393,10 +393,18 @@ func genChanges(creator *objecttree.MockChangeCreator, params genParams) (res ge
prevHeads = append(prevHeads, params.prevHeads...) prevHeads = append(prevHeads, params.prevHeads...)
for i := 0; i < params.levels; i++ { for i := 0; i < params.levels; i++ {
if params.isSnapshot() { var (
newId := fmt.Sprintf("%s.%d.%d", params.prefix, params.startIdx+i, 0) newHeads []string
newCh := creator.CreateRaw(newId, params.aclId, snapshotId, true, prevHeads...) usedIds = map[string]struct{}{}
)
newChange := func(isSnapshot bool, idx int, prevIds []string) string {
newId := fmt.Sprintf("%s.%d.%d", params.prefix, params.startIdx+i, idx)
newCh := creator.CreateRaw(newId, params.aclId, snapshotId, isSnapshot, prevIds...)
res.changes = append(res.changes, newCh) res.changes = append(res.changes, newCh)
return newId
}
if params.isSnapshot() {
newId := newChange(true, 0, prevHeads)
prevHeads = []string{newId} prevHeads = []string{newId}
snapshotId = newId snapshotId = newId
continue continue
@ -405,10 +413,6 @@ func genChanges(creator *objecttree.MockChangeCreator, params genParams) (res ge
if perLevel == 0 { if perLevel == 0 {
perLevel = 1 perLevel = 1
} }
var (
newHeads []string
usedIds = map[string]struct{}{}
)
for j := 0; j < perLevel; j++ { for j := 0; j < perLevel; j++ {
prevConns := rnd.Intn(len(prevHeads)) prevConns := rnd.Intn(len(prevHeads))
if prevConns == 0 { if prevConns == 0 {
@ -428,14 +432,12 @@ func genChanges(creator *objecttree.MockChangeCreator, params genParams) (res ge
prevHeads = unusedIds prevHeads = unusedIds
prevConns = len(prevHeads) prevConns = len(prevHeads)
} }
var prevChId []string var prevIds []string
for k := 0; k < prevConns; k++ { for k := 0; k < prevConns; k++ {
prevChId = append(prevChId, prevHeads[k]) prevIds = append(prevIds, prevHeads[k])
usedIds[prevHeads[k]] = struct{}{} usedIds[prevHeads[k]] = struct{}{}
} }
newId := fmt.Sprintf("%s.%d.%d", params.prefix, params.startIdx+i, j) newId := newChange(false, j, prevIds)
newCh := creator.CreateRaw(newId, params.aclId, snapshotId, false, prevChId...)
res.changes = append(res.changes, newCh)
newHeads = append(newHeads, newId) newHeads = append(newHeads, newId)
} }
prevHeads = newHeads prevHeads = newHeads