MCPcopy Create free account
hub / github.com/brimdata/super / finalizeObject

Method finalizeObject

csup/writer.go:52–99  ·  view source on GitHub ↗
()

Source from the content-addressed store, hash-verified

50}
51
52func (w *Serializer) finalizeObject() error {
53 root, dataSize, err := w.dynamic.Encode()
54 if err != nil {
55 return fmt.Errorf("system error: could not encode CSUP metadata: %w", err)
56 }
57 // At this point all the vector data has been written out
58 // to the underlying spiller, so we start writing BSUP at this point.
59 var metaBuf bytes.Buffer
60 zw := bsupio.NewWriter(sio.NopCloser(&metaBuf))
61 // First, we write the root segmap of the vector of integer type IDs.
62 cctx := w.dynamic.cctx
63 m := sup.NewBSUPMarshalerWithContext(cctx.local)
64 m.Decorate(sup.StyleSimple)
65 for id := range len(cctx.metas) {
66 val, err := m.Marshal(cctx.Lookup(ID(id)))
67 if err != nil {
68 return fmt.Errorf("could not marshal CSUP metadata: %w", err)
69 }
70 if err := zw.Write(val); err != nil {
71 return fmt.Errorf("could not write CSUP metadata: %w", err)
72 }
73 }
74 zw.EndStream()
75 metaSize := zw.Position()
76 for _, val := range cctx.types() {
77 if err := zw.Write(val); err != nil {
78 return fmt.Errorf("could not write CSUP metadata: %w", err)
79 }
80 }
81 zw.EndStream()
82 typeSize := zw.Position() - metaSize
83
84 // Header
85 if _, err := w.writer.Write(Header{Version, uint64(metaSize), uint64(typeSize), dataSize, uint32(root)}.Serialize()); err != nil {
86 return fmt.Errorf("system error: could not write CSUP header: %w", err)
87 }
88 // Metadata section
89 if _, err := w.writer.Write(metaBuf.Bytes()); err != nil {
90 return fmt.Errorf("system error: could not write CSUP metadata section: %w", err)
91 }
92 // Data section
93 if err := w.dynamic.Emit(w.writer); err != nil {
94 return fmt.Errorf("system error: could not write CSUP data section: %w", err)
95 }
96 // Set new dynamic so we can write the next object.
97 w.dynamic = NewDynamicEncoder()
98 return nil
99}
100
101// XXX ValWriter provides a temporary interface to support writing super.Values
102// to CSUP. We should remove this at some point in factor of vector-only writes.

Callers 2

CloseMethod · 0.95
PushMethod · 0.95

Calls 15

WriteMethod · 0.95
EndStreamMethod · 0.95
PositionMethod · 0.95
NewWriterFunction · 0.92
NopCloserFunction · 0.92
NewDynamicEncoderFunction · 0.85
IDTypeAlias · 0.70
EncodeMethod · 0.65
LookupMethod · 0.65
WriteMethod · 0.65
SerializeMethod · 0.65

Tested by

no test coverage detected