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
20import (20import (
21 "bytes"21 "bytes"
22 "encoding/binary"22 "encoding/binary"
23 "encoding/hex"
23 "encoding/json"24 "encoding/json"
24 "errors"25 "errors"
25 "fmt"26 "fmt"
@@ -28,6 +29,7 @@ import ( · 2 unmodified lines
28 "log"29 "log"
29 "os"30 "os"
30 "strings"31 "strings"
32 "time"
31 33
32 "github.com/klauspost/compress/zip"34 "github.com/klauspost/compress/zip"
33 "github.com/minio/cli"35 "github.com/minio/cli"
@@ -76,10 +78,6 @@ FLAGS: · 42 unmodified lines
76 }78 }
77 79
78 app.Action = func(c *cli.Context) error {80 app.Action = func(c *cli.Context) error {
79 if !c.Args().Present() {
80 cli.ShowAppHelpAndExit(c, 1) // last argument is exit code
81 }
82
83 ndjson := c.Bool("ndjson")81 ndjson := c.Bool("ndjson")
84 decode := func(r io.Reader, file string) ([]byte, error) {82 decode := func(r io.Reader, file string) ([]byte, error) {
85 b, err := ioutil.ReadAll(r)83 b, err := ioutil.ReadAll(r)
@@ -128,31 +126,39 @@ FLAGS: · 42 unmodified lines
128 if err != nil {126 if err != nil {
129 return nil, err127 return nil, err
130 }128 }
131 var versions = struct {129 type version struct {
132 Versions []json.RawMessage130 Idx int
133 Headers []json.RawMessage131 Header json.RawMessage
134 }{132 Metadata json.RawMessage
135 Versions: make([]json.RawMessage, nVers),
136 Headers: make([]json.RawMessage, nVers),
137 }133 }
134 var versions = make([]version, nVers)
138 err = decodeVersions(v, nVers, func(idx int, hdr, meta []byte) error {135 err = decodeVersions(v, nVers, func(idx int, hdr, meta []byte) error {
139 var buf bytes.Buffer136 var header xlMetaV2VersionHeaderV2
140 if _, err := msgp.UnmarshalAsJSON(&buf, hdr); err != nil {137 if _, err := header.UnmarshalMsg(hdr); err != nil {
138 return err
139 }
140 b, err := header.MarshalJSON()
141 if err != nil {
141 return err142 return err
142 }143 }
143 versions.Headers[idx] = buf.Bytes()144 var buf bytes.Buffer
144 buf = bytes.Buffer{}
145 if _, err := msgp.UnmarshalAsJSON(&buf, meta); err != nil {145 if _, err := msgp.UnmarshalAsJSON(&buf, meta); err != nil {
146 return err146 return err
147 }147 }
148 versions.Versions[idx] = buf.Bytes()148 versions[idx] = version{
149 Idx: idx,
150 Header: b,
151 Metadata: buf.Bytes(),
152 }
149 return nil153 return nil
150 })154 })
151 if err != nil {155 if err != nil {
152 return nil, err156 return nil, err
153 }157 }
154 enc := json.NewEncoder(buf)158 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 {
156 return nil, err162 return nil, err
157 }163 }
158 data = b164 data = b
@@ -509,3 +515,77 @@ func decodeVersions(buf []byte, versions int, fn func(idx int, hdr, meta []byte) · 350 unmodified lines
509 }515 }
510 return nil516 return nil
511}517}
518
519type 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
528func (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
576func (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