mirror of
https://github.com/hanzoai/traces.git
synced 2026-10-30 18:20:41 +00:00
* Update proto for v1 backend * Functioning blocklist with new package * Functioning blocklist with existing package * Generate proto to existing package * Add wrapper around google UUID for proto marshaling * Update blocklist for wrapper type * Test WriteTenantIndex * Implement json for uuid * Almost functional backend tests * Passing backend tests * Improve UUID coverage and utility * TempoDB updates for UUID and struct type changes * Update method style for uuid.New() * Update method style for uuid.MustParse() * Add uuid.From helper * Update modules for UUID and proto struct types * Update poller integration test for UUID * Update tempo-cli for UUID and proto struct type changes * Lint and clean up * Fix serverless * Fix cli * Fix cli * Add fixture tests for roundtrip assurance between versions * Clean up notes from proto definition * Update backend/test * Be more specific about unmarshal UUID * Include event for compacted block * Use better json tag for compacted meta * Implement UnmarshalJson on CompcatedBlockMeta for embedded struct * Test for CompactedMeta marshal/unmarshal * Drop benchmark index * Clean commented code * Extend mocks to capture multiple writes * Update backend/test fixtures * Write both proto and json to the backend for all three files in all backends * Fix lint * Back UUID with google.UUID to avoid struct * Relocate pkg/uuid to tempodb/backend * Re-plumb UUID through tempodb * Re-plumb UUID through cmd * Re-plumb UUID through modules * Re-plumb UUID through integration/ * Drop package spec from tempo.proto * Improve encoding marshal performance * Drop block proto and tenantindex json * Drop additional proto include * Implement zstd tenant index compression * Add note about use of json in the dedicatedcolumns * Fix ingester local block * Spell * Revert mock update * Drop json fallback from tenantindex read * Replace single-tenant test fixtures * Update fixture replacement test * Improve error handling and fix test * Extend test for tenantindex round-trip * Small fixes * Revert "Drop json fallback from tenantindex read" This reverts commit 834ff5b85d8a8a4d7eb560fbb67ba8f3a5a3959a. * Add back mocks to capture multiple backend writes * Add back proto & json writitng/reading for tenantindex * Change TotalObjects type from int32 -> int64 The original change was int -> int32, which on 64bit machines is a downgrade that I overlooked. Raising here to int64 to maintain the size. * Store write buffer at object path in mocks to improve readability in tests * Avoid allocation in interface validation * Update note to include intern * Pluralize metas and compacted_metas fields * Fallback to json only on ErrDoesNotExist * Lint * Drop debug * Revert "Pluralize metas and compacted_metas fields" This reverts commit 46a8c36e37ac33e1ffc104287d898930e02cdd97. * Import original tenantindex and test contents for backwards compatibility * Update changelog
92 lines
2.0 KiB
Go
92 lines
2.0 KiB
Go
package main
|
|
|
|
import (
|
|
"context"
|
|
"fmt"
|
|
"sort"
|
|
|
|
"github.com/google/uuid"
|
|
"github.com/grafana/tempo/tempodb/encoding/vparquet3"
|
|
"github.com/parquet-go/parquet-go"
|
|
)
|
|
|
|
type viewSchemaCmd struct {
|
|
backendOptions
|
|
|
|
TenantID string `arg:"" help:"tenant-id within the bucket"`
|
|
BlockID string `arg:"" help:"block ID to list"`
|
|
}
|
|
|
|
func (cmd *viewSchemaCmd) Run(ctx *globalOptions) error {
|
|
blockID, err := uuid.Parse(cmd.BlockID)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
r, _, _, err := loadBackend(&cmd.backendOptions, ctx)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
meta, err := r.BlockMeta(context.TODO(), blockID, cmd.TenantID)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
fmt.Printf("\n*************** block meta *********************\n\n\n")
|
|
fmt.Printf("%+v\n", meta)
|
|
|
|
rr := vparquet3.NewBackendReaderAt(context.Background(), r, vparquet3.DataFileName, meta)
|
|
pf, err := parquet.OpenFile(rr, int64(meta.Size_))
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
fmt.Printf("\n*************** schema ********************\n\n\n")
|
|
fmt.Println(pf.Schema().String())
|
|
|
|
columnSizes := map[string]int64{}
|
|
for _, rg := range pf.RowGroups() {
|
|
for _, cc := range rg.ColumnChunks() {
|
|
path, _ := getNodePathByIndex(pf.Root(), "", cc.Column())
|
|
|
|
var size int64
|
|
idx, err := cc.OffsetIndex()
|
|
if err != nil {
|
|
return err
|
|
}
|
|
for pg := 0; pg < idx.NumPages(); pg++ {
|
|
size += idx.CompressedPageSize(pg)
|
|
}
|
|
|
|
columnSizes[path] = columnSizes[path] + size
|
|
}
|
|
}
|
|
sizes := []string{}
|
|
for k, v := range columnSizes {
|
|
sizes = append(sizes, fmt.Sprint(k, " size ", v/1024, " KB"))
|
|
}
|
|
sort.Strings(sizes)
|
|
|
|
fmt.Printf("\n*************** column sizes *********************\n\n\n")
|
|
for _, s := range sizes {
|
|
fmt.Println(s)
|
|
}
|
|
|
|
return nil
|
|
}
|
|
|
|
func getNodePathByIndex(root *parquet.Column, s string, i int) (string, bool) {
|
|
s = s + "." + root.Name()
|
|
|
|
if root.Index() == i {
|
|
return s, true
|
|
}
|
|
for _, col := range root.Columns() {
|
|
if path, ok := getNodePathByIndex(col, s, i); ok {
|
|
return path, true
|
|
}
|
|
}
|
|
return "", false
|
|
}
|