@@ -138,29 +138,33 @@ func (r *LogsReader) Read(ctx context.Context, s []Record) (int, error) {
138
138
return n , nil
139
139
}
140
140
141
+ // Columns returns the column descriptions for the logs section.
141
142
func (r * LogsReader ) Columns (ctx context.Context ) ([]* logsmd.ColumnDesc , error ) {
142
143
if r .columnDesc != nil {
143
144
return r .columnDesc , nil
144
145
}
145
146
146
- dec := r .obj .dec .LogsDecoder ()
147
147
si , err := r .findSection (ctx )
148
148
if err != nil {
149
149
return nil , fmt .Errorf ("finding section: %w" , err )
150
150
}
151
- r .sectionInfo = si
152
151
153
- columnDescs , err := dec .Columns (ctx , r . sectionInfo )
152
+ columnDesc , err := r . obj . dec .LogsDecoder (). Columns (ctx , si )
154
153
if err != nil {
155
154
return nil , fmt .Errorf ("reading columns: %w" , err )
156
155
}
157
156
158
- r .columnDesc = columnDescs
157
+ r .sectionInfo = si
158
+ r .columnDesc = columnDesc
159
+
159
160
return r .columnDesc , nil
160
161
}
161
162
162
163
func (r * LogsReader ) initReader (ctx context.Context ) error {
163
164
dec := r .obj .dec .LogsDecoder ()
165
+
166
+ // sectionInfo and columnDesc could be populated by a previous call to Columns method.
167
+ // avoid re-reading them.
164
168
if r .sectionInfo == nil {
165
169
si , err := r .findSection (ctx )
166
170
if err != nil {
@@ -170,9 +174,13 @@ func (r *LogsReader) initReader(ctx context.Context) error {
170
174
r .sectionInfo = si
171
175
}
172
176
173
- columnDescs , err := dec .Columns (ctx , r .sectionInfo )
174
- if err != nil {
175
- return fmt .Errorf ("reading columns: %w" , err )
177
+ if r .columnDesc == nil {
178
+ columnDescs , err := dec .Columns (ctx , r .sectionInfo )
179
+ if err != nil {
180
+ return fmt .Errorf ("reading columns: %w" , err )
181
+ }
182
+
183
+ r .columnDesc = columnDescs
176
184
}
177
185
178
186
dset := encoding .LogsDataset (dec , r .sectionInfo )
@@ -183,11 +191,11 @@ func (r *LogsReader) initReader(ctx context.Context) error {
183
191
184
192
// r.predicate doesn't contain mappings of stream IDs; we need to build
185
193
// that as a separate predicate and AND them together.
186
- predicate := streamIDPredicate (maps .Keys (r .matchIDs ), columns , columnDescs )
194
+ predicate := streamIDPredicate (maps .Keys (r .matchIDs ), columns , r . columnDesc )
187
195
if r .predicate != nil {
188
196
predicate = dataset.AndPredicate {
189
197
Left : predicate ,
190
- Right : translateLogsPredicate (r .predicate , columns , columnDescs ),
198
+ Right : translateLogsPredicate (r .predicate , columns , r . columnDesc ),
191
199
}
192
200
}
193
201
@@ -205,7 +213,6 @@ func (r *LogsReader) initReader(ctx context.Context) error {
205
213
r .reader .Reset (readerOpts )
206
214
}
207
215
208
- r .columnDesc = columnDescs
209
216
r .columns = columns
210
217
r .ready = true
211
218
return nil
0 commit comments