History

xl-meta: Add header titles (#13880)

Add type for headers and create custom marshal to make it easier to read. Group headers and metadata. Restore functionality that will read `xl.meta` in the current dir with no params. Before: ``` { "Headers": [ [ "8M04bTiYRDmEMQGeAsk1yg==", 1639150471630100400, "rLD1Rw==", 1, 6 ], ], "Versions": [ { "Type": 1, "V2Obj": { "CSumAlgo": 1, "DDir": "oC1Xpg4tRfW03g8o8w7Bzg==", "EcAlgo": 1, "EcBSize": 1048576, "EcDist": [ 7, 8, 1, 2, 3, 4, 5, 6 ], "EcIndex": 1, "EcM": 4, "EcN": 4, "ID": "8M04bTiYRDmEMQGeAsk1yg==", "MTime": 1639150471630100400, "MetaSys": { "x-minio-internal-inline-data": "dHJ1ZQ==" }, "MetaUsr": { "content-type": "application/octet-stream", "etag": "b8252c86fad2d8937300aa92b467a3aa" }, "PartASizes": [ 1000 ], "PartETags": null, "PartNums": [ 1 ], "PartSizes": [ 1000 ], "Size": 1000 } } ] } ```

Klaus Post committed 4 years ago

Commit 51861241 parent 81e43b81 file · +96 −16Browse files

Showing the changes to docs/debugging (1 of 1 file). Show all

Unified · Split

docs/debugging/xl-meta/main.go+96−16
@@ -20,6 +20,7 @@ package main · 19 unmodified lines
2020 import (
2121 "bytes"
2222 "encoding/binary"
23+ "encoding/hex"
2324 "encoding/json"
2425 "errors"
2526 "fmt"
@@ -28,6 +29,7 @@ import ( · 2 unmodified lines
2829 "log"
2930 "os"
3031 "strings"
32+ "time"
3133
3234 "github.com/klauspost/compress/zip"
3335 "github.com/minio/cli"
@@ -76,10 +78,6 @@ FLAGS: · 42 unmodified lines
7678 }
7779
7880 app.Action = func(c *cli.Context) error {
79− if !c.Args().Present() {
80− cli.ShowAppHelpAndExit(c, 1) // last argument is exit code
81− }
82−
8381 ndjson := c.Bool("ndjson")
8482 decode := func(r io.Reader, file string) ([]byte, error) {
8583 b, err := ioutil.ReadAll(r)
@@ -128,31 +126,39 @@ FLAGS: · 42 unmodified lines
128126 if err != nil {
129127 return nil, err
130128 }
131− var versions = struct {
132− Versions []json.RawMessage
133− Headers []json.RawMessage
134− }{
135− Versions: make([]json.RawMessage, nVers),
136− Headers: make([]json.RawMessage, nVers),
129+ type version struct {
130+ Idx int
131+ Header json.RawMessage
132+ Metadata json.RawMessage
137133 }
134+ var versions = make([]version, nVers)
138135 err = decodeVersions(v, nVers, func(idx int, hdr, meta []byte) error {
139− var buf bytes.Buffer
140− if _, err := msgp.UnmarshalAsJSON(&buf, hdr); err != nil {
136+ var header xlMetaV2VersionHeaderV2
137+ if _, err := header.UnmarshalMsg(hdr); err != nil {
138+ return err
139+ }
140+ b, err := header.MarshalJSON()
141+ if err != nil {
141142 return err
142143 }
143− versions.Headers[idx] = buf.Bytes()
144− buf = bytes.Buffer{}
144+ var buf bytes.Buffer
145145 if _, err := msgp.UnmarshalAsJSON(&buf, meta); err != nil {
146146 return err
147147 }
148− versions.Versions[idx] = buf.Bytes()
148+ versions[idx] = version{
149+ Idx: idx,
150+ Header: b,
151+ Metadata: buf.Bytes(),
152+ }
149153 return nil
150154 })
151155 if err != nil {
152156 return nil, err
153157 }
154158 enc := json.NewEncoder(buf)
155− if err := enc.Encode(versions); err != nil {
159+ if err := enc.Encode(struct {
160+ Versions []version
161+ }{Versions: versions}); err != nil {
156162 return nil, err
157163 }
158164 data = b
@@ -509,3 +515,77 @@ func decodeVersions(buf []byte, versions int, fn func(idx int, hdr, meta []byte) · 350 unmodified lines
509515 }
510516 return nil
511517 }
518+
519+type xlMetaV2VersionHeaderV2 struct {
520+ VersionID [16]byte
521+ ModTime int64
522+ Signature [4]byte
523+ Type uint8
524+ Flags uint8
525+}
526+
527+// UnmarshalMsg implements msgp.Unmarshaler
528+func (z *xlMetaV2VersionHeaderV2) UnmarshalMsg(bts []byte) (o []byte, err error) {
529+ var zb0001 uint32
530+ zb0001, bts, err = msgp.ReadArrayHeaderBytes(bts)
531+ if err != nil {
532+ err = msgp.WrapError(err)
533+ return
534+ }
535+ if zb0001 != 5 {
536+ err = msgp.ArrayError{Wanted: 5, Got: zb0001}
537+ return
538+ }
539+ bts, err = msgp.ReadExactBytes(bts, (z.VersionID)[:])
540+ if err != nil {
541+ err = msgp.WrapError(err, "VersionID")
542+ return
543+ }
544+ z.ModTime, bts, err = msgp.ReadInt64Bytes(bts)
545+ if err != nil {
546+ err = msgp.WrapError(err, "ModTime")
547+ return
548+ }
549+ bts, err = msgp.ReadExactBytes(bts, (z.Signature)[:])
550+ if err != nil {
551+ err = msgp.WrapError(err, "Signature")
552+ return
553+ }
554+ {
555+ var zb0002 uint8
556+ zb0002, bts, err = msgp.ReadUint8Bytes(bts)
557+ if err != nil {
558+ err = msgp.WrapError(err, "Type")
559+ return
560+ }
561+ z.Type = zb0002
562+ }
563+ {
564+ var zb0003 uint8
565+ zb0003, bts, err = msgp.ReadUint8Bytes(bts)
566+ if err != nil {
567+ err = msgp.WrapError(err, "Flags")
568+ return
569+ }
570+ z.Flags = zb0003
571+ }
572+ o = bts
573+ return
574+}
575+
576+func (z xlMetaV2VersionHeaderV2) MarshalJSON() (o []byte, err error) {
577+ tmp := struct {
578+ VersionID string
579+ ModTime time.Time
580+ Signature string
581+ Type uint8
582+ Flags uint8
583+ }{
584+ VersionID: hex.EncodeToString(z.VersionID[:]),
585+ ModTime: time.Unix(0, z.ModTime),
586+ Signature: hex.EncodeToString(z.Signature[:]),
587+ Type: z.Type,
588+ Flags: z.Flags,
589+ }
590+ return json.Marshal(tmp)
591+}

Keyboard shortcuts

General

Show keyboard shortcuts
?
Focus the current search
/

Issues and pull requests

Open filters
f

Issues, pull requests and Inbox

Select next item
j↓
Select previous item
k↑
Open selected item
Enter
Dismiss filters or clear selection
Esc

Repository code

Go to file
t