Testing traversal from head
This commit is contained in:
@@ -84,7 +84,7 @@ func main() {
|
||||
return
|
||||
}
|
||||
|
||||
for i := range 500 {
|
||||
for i := range 1000000 {
|
||||
data := fmt.Sprintf("test%d", i)
|
||||
|
||||
err = ledger.Append(ctx, []byte(data))
|
||||
@@ -107,34 +107,37 @@ func main() {
|
||||
return entries[i].Timestamp.Before(entries[j].Timestamp)
|
||||
})
|
||||
|
||||
fmt.Println("Entries:")
|
||||
if len(entries) == 0 {
|
||||
fmt.Println(" (none)")
|
||||
} else {
|
||||
for _, e := range entries {
|
||||
fmt.Printf(" ts=%d id=%s prev=%s payload=%q\n",
|
||||
e.Timestamp.UnixNano(),
|
||||
hex.EncodeToString(e.EntryID[:]),
|
||||
hex.EncodeToString(e.Previous[:]),
|
||||
e.Payload,
|
||||
)
|
||||
}
|
||||
headID, ok, err := referenceStore.Get(ctx, "HEAD")
|
||||
if err != nil {
|
||||
fmt.Println("get HEAD:", err)
|
||||
return
|
||||
}
|
||||
if !ok {
|
||||
fmt.Println("HEAD reference not set")
|
||||
return
|
||||
}
|
||||
|
||||
// ---- Print references (name -> EntryID hex) ----
|
||||
names := make([]string, 0, len(referenceStore.references))
|
||||
for name := range referenceStore.references {
|
||||
names = append(names, name)
|
||||
}
|
||||
sort.Strings(names)
|
||||
|
||||
fmt.Println("References:")
|
||||
if len(names) == 0 {
|
||||
fmt.Println(" (none)")
|
||||
} else {
|
||||
for _, name := range names {
|
||||
id := referenceStore.references[name]
|
||||
fmt.Printf(" %s -> %s\n", name, hex.EncodeToString(id[:]))
|
||||
isZero32 := func(b [32]byte) bool {
|
||||
for _, v := range b {
|
||||
if v != 0 {
|
||||
return false
|
||||
}
|
||||
}
|
||||
return true
|
||||
}
|
||||
|
||||
curID := headID
|
||||
for {
|
||||
ent, err := entryStore.Load(ctx, curID)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
|
||||
if isZero32(ent.Previous) {
|
||||
break
|
||||
}
|
||||
|
||||
// Follow the linked list backwards
|
||||
curID = core.EntryID(ent.Previous)
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user