Skip to content

Commit e5e965c

Browse files
authored
[chore] Use pooling when CopyTo and SetEmpty oneOf fields (#13696)
Updates #13631 Signed-off-by: Bogdan Drutu <[email protected]>
1 parent 213afc4 commit e5e965c

17 files changed

+279
-166
lines changed

internal/cmd/pdatagen/internal/pdata/one_of_message_value.go

Lines changed: 22 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -31,9 +31,15 @@ func (ms {{ .structName }}) {{ .fieldName }}() {{ .returnType }} {
3131
// Calling this function on zero-initialized {{ .structName }} will cause a panic.
3232
func (ms {{ .structName }}) SetEmpty{{ .fieldName }}() {{ .returnType }} {
3333
ms.state.AssertMutable()
34-
val := &{{ .originFieldPackageName }}.{{ .fieldName }}{}
35-
ms.orig.{{ .originOneOfFieldName }} = &{{ .originStructType }}{{ "{" }}{{ .fieldName }}: val}
36-
return new{{ .returnType }}(val, ms.state)
34+
var ov *{{ .originStructType }}
35+
if !internal.UseProtoPooling.IsEnabled() {
36+
ov = &{{ .originStructType }}{}
37+
} else {
38+
ov = internal.ProtoPool{{ .oneOfName }}.Get().(*{{ .originStructType }})
39+
}
40+
ov.{{ .fieldName }} = internal.NewOrig{{ .fieldOriginName }}()
41+
ms.orig.{{ .originOneOfFieldName }} = ov
42+
return new{{ .returnType }}(ov.{{ .fieldName }}, ms.state)
3743
}`
3844

3945
const oneOfMessageAccessorsTestTemplate = `func Test{{ .structName }}_{{ .fieldName }}(t *testing.T) {
@@ -53,20 +59,23 @@ const oneOfMessageSetTestTemplate = `orig.{{ .originOneOfFieldName }} = &{{ .ori
5359
{{- .fieldName }}: GenTestOrig{{ .fieldOriginName }}() }`
5460

5561
const oneOfMessageCopyOrigTemplate = ` case *{{ .originStructType }}:
56-
{{ .lowerFieldName }} := &{{ .originFieldPackageName}}.{{ .fieldName }}{}
57-
CopyOrig{{ .fieldOriginName }}({{ .lowerFieldName }}, t.{{ .fieldName }})
58-
dest.{{ .originOneOfFieldName }} = &{{ .originStructType }}{
59-
{{ .fieldName }}: {{ .lowerFieldName }},
60-
}`
62+
var ov *{{ .originStructType }}
63+
if !UseProtoPooling.IsEnabled() {
64+
ov = &{{ .originStructType }}{}
65+
} else {
66+
ov = ProtoPool{{ .oneOfName }}.Get().(*{{ .originStructType }})
67+
}
68+
ov.{{ .fieldName }} = NewOrig{{ .fieldOriginName }}()
69+
CopyOrig{{ .fieldOriginName }}(ov.{{ .fieldName }}, t.{{ .fieldName }})
70+
dest.{{ .originOneOfFieldName }} = ov`
6171

6272
const oneOfMessageTypeTemplate = `case *{{ .originStructType }}:
6373
return {{ .typeName }}`
6474

6575
type OneOfMessageValue struct {
66-
fieldName string
67-
protoID uint32
68-
originFieldPackageName string
69-
returnMessage *messageStruct
76+
fieldName string
77+
protoID uint32
78+
returnMessage *messageStruct
7079
}
7180

7281
func (omv *OneOfMessageValue) GetOriginFieldName() string {
@@ -149,17 +158,16 @@ func (omv *OneOfMessageValue) toProtoField(ms *messageStruct, of *OneOfField) *p
149158
func (omv *OneOfMessageValue) templateFields(ms *messageStruct, of *OneOfField) map[string]any {
150159
return map[string]any{
151160
"fieldName": omv.fieldName,
152-
"originFieldName": omv.fieldName,
153161
"originOneOfFieldName": of.originFieldName,
154162
"fieldOriginName": omv.returnMessage.getOriginName(),
155163
"typeName": of.typeName + omv.fieldName,
156164
"structName": ms.getName(),
157165
"returnType": omv.returnMessage.getName(),
158166
"originOneOfTypeFuncName": of.typeFuncName(),
159167
"lowerFieldName": strings.ToLower(omv.fieldName),
160-
"originFieldPackageName": omv.originFieldPackageName,
161168
"originStructName": ms.originFullName,
162169
"originStructType": ms.originFullName + "_" + omv.fieldName,
170+
"oneOfName": proto.ExtractNameFromFull(ms.originFullName + "_" + omv.fieldName),
163171
}
164172
}
165173

internal/cmd/pdatagen/internal/pdata/one_of_primitive_value.go

Lines changed: 16 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -18,9 +18,14 @@ func (ms {{ .structName }}) {{ .accessorFieldName }}() {{ .returnType }} {
1818
// Set{{ .accessorFieldName }} replaces the {{ .lowerFieldName }} associated with this {{ .structName }}.
1919
func (ms {{ .structName }}) Set{{ .accessorFieldName }}(v {{ .returnType }}) {
2020
ms.state.AssertMutable()
21-
ms.orig.{{ .originOneOfFieldName }} = &{{ .originStructType }}{
22-
{{ .originFieldName }}: v,
21+
var ov *{{ .originStructType }}
22+
if !internal.UseProtoPooling.IsEnabled() {
23+
ov = &{{ .originStructType }}{}
24+
} else {
25+
ov = internal.ProtoPool{{ .oneOfName }}.Get().(*{{ .originStructType }})
2326
}
27+
ov.{{ .originFieldName }} = v
28+
ms.orig.{{ .originOneOfFieldName }} = ov
2429
}`
2530

2631
const oneOfPrimitiveAccessorTestTemplate = `func Test{{ .structName }}_{{ .accessorFieldName }}(t *testing.T) {
@@ -51,8 +56,14 @@ const oneOfPrimitiveSetTestTemplate = `orig.{{ .originOneOfFieldName }} = &{{ .o
5156
{{- .originFieldName }}: {{ .testValue }}}`
5257

5358
const oneOfPrimitiveCopyOrigTemplate = `case *{{ .originStructType }}:
54-
dest.{{ .originOneOfFieldName }} = &{{ .originStructType }}{
55-
{{- .originFieldName }}: t.{{ .originFieldName }}}`
59+
var ov *{{ .originStructType }}
60+
if !UseProtoPooling.IsEnabled() {
61+
ov = &{{ .originStructType }}{}
62+
} else {
63+
ov = ProtoPool{{ .oneOfName }}.Get().(*{{ .originStructType }})
64+
}
65+
ov.{{ .originFieldName }} = t.{{ .originFieldName }}
66+
dest.{{ .originOneOfFieldName }} = ov`
5667

5768
const oneOfPrimitiveTypeTemplate = `case *{{ .originStructType }}:
5869
return {{ .typeName }}`
@@ -157,6 +168,7 @@ func (opv *OneOfPrimitiveValue) templateFields(ms *messageStruct, of *OneOfField
157168
"originOneOfFieldName": of.originFieldName,
158169
"originStructName": ms.originFullName,
159170
"originStructType": ms.originFullName + "_" + opv.originFieldName,
171+
"oneOfName": proto.ExtractNameFromFull(ms.originFullName + "_" + opv.originFieldName),
160172
}
161173
}
162174

internal/cmd/pdatagen/internal/pdata/pmetric_package.go

Lines changed: 15 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -183,34 +183,29 @@ var metric = &messageStruct{
183183
omitOriginFieldNameInNames: true,
184184
values: []oneOfValue{
185185
&OneOfMessageValue{
186-
fieldName: "Gauge",
187-
protoID: 5,
188-
originFieldPackageName: "otlpmetrics",
189-
returnMessage: gauge,
186+
fieldName: "Gauge",
187+
protoID: 5,
188+
returnMessage: gauge,
190189
},
191190
&OneOfMessageValue{
192-
fieldName: "Sum",
193-
protoID: 7,
194-
originFieldPackageName: "otlpmetrics",
195-
returnMessage: sum,
191+
fieldName: "Sum",
192+
protoID: 7,
193+
returnMessage: sum,
196194
},
197195
&OneOfMessageValue{
198-
fieldName: "Histogram",
199-
protoID: 9,
200-
originFieldPackageName: "otlpmetrics",
201-
returnMessage: histogram,
196+
fieldName: "Histogram",
197+
protoID: 9,
198+
returnMessage: histogram,
202199
},
203200
&OneOfMessageValue{
204-
fieldName: "ExponentialHistogram",
205-
protoID: 10,
206-
originFieldPackageName: "otlpmetrics",
207-
returnMessage: exponentialHistogram,
201+
fieldName: "ExponentialHistogram",
202+
protoID: 10,
203+
returnMessage: exponentialHistogram,
208204
},
209205
&OneOfMessageValue{
210-
fieldName: "Summary",
211-
protoID: 11,
212-
originFieldPackageName: "otlpmetrics",
213-
returnMessage: summary,
206+
fieldName: "Summary",
207+
protoID: 11,
208+
returnMessage: summary,
214209
},
215210
},
216211
},

internal/cmd/pdatagen/internal/proto/delete.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ import (
1010
const deleteOrigOther = `{{ if ne .oneOfGroup "" -}}
1111
if UseProtoPooling.IsEnabled() {
1212
ov.{{ .fieldName }} = {{ .defaultValue }}
13-
protoPool{{ .oneOfMessageName }}.Put(ov)
13+
ProtoPool{{ .oneOfMessageName }}.Put(ov)
1414
}
1515
{{ end }}`
1616

@@ -26,7 +26,7 @@ const deleteOrigMessage = `{{ if .repeated -}}
2626
if UseProtoPooling.IsEnabled() {
2727
DeleteOrig{{ .origName }}(ov.{{ .fieldName }}, true)
2828
ov.{{ .fieldName }} = nil
29-
protoPool{{ .oneOfMessageName }}.Put(ov)
29+
ProtoPool{{ .oneOfMessageName }}.Put(ov)
3030
}
3131
DeleteOrig{{ .origName }}(ov.{{ .fieldName }}, true)
3232
{{- else if .nullable -}}

internal/cmd/pdatagen/internal/proto/json_unmarshal.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ const unmarshalJSONPrimitive = ` case {{ .allJSONTags }}:
2323
if !UseProtoPooling.IsEnabled() {
2424
ov = &{{ .oneOfMessageFullName }}{}
2525
} else {
26-
ov = protoPool{{ .oneOfMessageName }}.Get().(*{{ .oneOfMessageFullName }})
26+
ov = ProtoPool{{ .oneOfMessageName }}.Get().(*{{ .oneOfMessageFullName }})
2727
}
2828
ov.{{ .fieldName }} = iter.Read{{ upperFirst .goType }}()
2929
orig.{{ .oneOfGroup }} = ov
@@ -53,7 +53,7 @@ const unmarshalJSONMessage = ` case {{ .allJSONTags }}:
5353
if !UseProtoPooling.IsEnabled() {
5454
ov = &{{ .oneOfMessageFullName }}{}
5555
} else {
56-
ov = protoPool{{ .oneOfMessageName }}.Get().(*{{ .oneOfMessageFullName }})
56+
ov = ProtoPool{{ .oneOfMessageName }}.Get().(*{{ .oneOfMessageFullName }})
5757
}
5858
ov.{{ .fieldName }} = NewOrig{{ .origName }}()
5959
UnmarshalJSONOrig{{ .origName }}(ov.{{ .fieldName }}, iter)

internal/cmd/pdatagen/internal/proto/pools.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ import (
88
)
99

1010
const poolVarOrigTemplate = `
11-
protoPool{{ .oneOfMessageName }} = sync.Pool{
11+
ProtoPool{{ .oneOfMessageName }} = sync.Pool{
1212
New: func() any {
1313
return &{{ .oneOfMessageFullName }}{}
1414
},

internal/cmd/pdatagen/internal/proto/proto_unmarshal.go

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ const unmarshalProtoFloat = `{{ if .repeated -}}
4848
if !UseProtoPooling.IsEnabled() {
4949
ov = &{{ .oneOfMessageFullName }}{}
5050
} else {
51-
ov = protoPool{{ .oneOfMessageName }}.Get().(*{{ .oneOfMessageFullName }})
51+
ov = ProtoPool{{ .oneOfMessageName }}.Get().(*{{ .oneOfMessageFullName }})
5252
}
5353
ov.{{ .fieldName }} = math.Float{{ .bitSize }}frombits(num)
5454
orig.{{ .oneOfGroup }} = ov
@@ -95,7 +95,7 @@ const unmarshalProtoFixed = `{{ if .repeated -}}
9595
if !UseProtoPooling.IsEnabled() {
9696
ov = &{{ .oneOfMessageFullName }}{}
9797
} else {
98-
ov = protoPool{{ .oneOfMessageName }}.Get().(*{{ .oneOfMessageFullName }})
98+
ov = ProtoPool{{ .oneOfMessageName }}.Get().(*{{ .oneOfMessageFullName }})
9999
}
100100
ov.{{ .fieldName }} = {{ .goType }}(num)
101101
orig.{{ .oneOfGroup }} = ov
@@ -142,7 +142,7 @@ const unmarshalProtoBool = `{{ if .repeated -}}
142142
if !UseProtoPooling.IsEnabled() {
143143
ov = &{{ .oneOfMessageFullName }}{}
144144
} else {
145-
ov = protoPool{{ .oneOfMessageName }}.Get().(*{{ .oneOfMessageFullName }})
145+
ov = ProtoPool{{ .oneOfMessageName }}.Get().(*{{ .oneOfMessageFullName }})
146146
}
147147
ov.{{ .fieldName }} = num != 0
148148
orig.{{ .oneOfGroup }} = ov
@@ -187,7 +187,7 @@ const unmarshalProtoVarint = `{{ if .repeated -}}
187187
if !UseProtoPooling.IsEnabled() {
188188
ov = &{{ .oneOfMessageFullName }}{}
189189
} else {
190-
ov = protoPool{{ .oneOfMessageName }}.Get().(*{{ .oneOfMessageFullName }})
190+
ov = ProtoPool{{ .oneOfMessageName }}.Get().(*{{ .oneOfMessageFullName }})
191191
}
192192
ov.{{ .fieldName }} = {{ .goType }}(num)
193193
orig.{{ .oneOfGroup }} = ov
@@ -211,7 +211,7 @@ const unmarshalProtoString = `
211211
if !UseProtoPooling.IsEnabled() {
212212
ov = &{{ .oneOfMessageFullName }}{}
213213
} else {
214-
ov = protoPool{{ .oneOfMessageName }}.Get().(*{{ .oneOfMessageFullName }})
214+
ov = ProtoPool{{ .oneOfMessageName }}.Get().(*{{ .oneOfMessageFullName }})
215215
}
216216
ov.{{ .fieldName }} = string(buf[startPos:pos])
217217
orig.{{ .oneOfGroup }} = ov
@@ -237,7 +237,7 @@ const unmarshalProtoBytes = `
237237
if !UseProtoPooling.IsEnabled() {
238238
ov = &{{ .oneOfMessageFullName }}{}
239239
} else {
240-
ov = protoPool{{ .oneOfMessageName }}.Get().(*{{ .oneOfMessageFullName }})
240+
ov = ProtoPool{{ .oneOfMessageName }}.Get().(*{{ .oneOfMessageFullName }})
241241
}
242242
ov.{{ .fieldName }} = make([]byte, length)
243243
copy(ofv.{{ .fieldName }}, buf[startPos:pos])
@@ -266,7 +266,7 @@ const unmarshalProtoMessage = `
266266
if !UseProtoPooling.IsEnabled() {
267267
ov = &{{ .oneOfMessageFullName }}{}
268268
} else {
269-
ov = protoPool{{ .oneOfMessageName }}.Get().(*{{ .oneOfMessageFullName }})
269+
ov = ProtoPool{{ .oneOfMessageName }}.Get().(*{{ .oneOfMessageFullName }})
270270
}
271271
ov.{{ .fieldName }} = NewOrig{{ .origName }}()
272272
err = UnmarshalProtoOrig{{ .origName }}(ov.{{ .fieldName }}, buf[startPos:pos])
@@ -327,7 +327,7 @@ const unmarshalProtoSignedVarint = `{{ if .repeated -}}
327327
if !UseProtoPooling.IsEnabled() {
328328
ov = &{{ .oneOfMessageFullName }}{}
329329
} else {
330-
ov = protoPool{{ .oneOfMessageName }}.Get().(*{{ .oneOfMessageFullName }})
330+
ov = ProtoPool{{ .oneOfMessageName }}.Get().(*{{ .oneOfMessageFullName }})
331331
}
332332
ov.{{ .fieldName }} = int{{ .bitSize }}(uint{{ .bitSize }}(num >> 1) ^ uint{{ .bitSize }}(int{{ .bitSize }}((num&1)<<{{ sub .bitSize 1 }})>>{{ sub .bitSize 1 }}))
333333
orig.{{ .oneOfGroup }} = ov

pdata/internal/generated_wrapper_exemplar.go

Lines changed: 24 additions & 10 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)