-
Notifications
You must be signed in to change notification settings - Fork 242
Open
Labels
bugSomething isn't workingSomething isn't workingterraform-plugin-frameworkResolved in terraform-plugin-frameworkResolved in terraform-plugin-framework
Description
SDK version
latest
Relevant provider source code
Terraform reads it correctly in first place, until it reaches grpc_provider.go, here is an example where it's read properly:
then in grpc_provider.go this code makes it lose its precision:
newStateVal, err := hcl2shim.HCL2ValueFromFlatmap(newInstanceState.Attributes, schemaBlock.ImpliedType())
if err != nil {
resp.Diagnostics = convert.AppendProtoDiag(ctx, resp.Diagnostics, err)
return resp, nil
}here's what debugger shows:
and if you convert it to string or float64 by calling big.Float's relevant methods, it becomes wrong:
newStateVal then doesn't have the correct data stored for the field that had 9223372036854775807 as its value, instead it has 9223372036854776000 which leads to the crash:
panic: Error reading level state: strconv.ParseInt: parsing "9223372036854776000": value out of range
goroutine 79 [running]:
github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema.(*ResourceData).get(0xc0000fd000, {0xc000ac7720, 0x1, 0x1}, 0x8?)
github.com/hashicorp/terraform-plugin-sdk/[email protected]/helper/schema/resource_data.go:553 +0x328
github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema.(*ResourceData).State(0xc0000fd000)
github.com/hashicorp/terraform-plugin-sdk/[email protected]/helper/schema/resource_data.go:351 +0x393
github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema.(*Resource).ShimInstanceStateFromValue(0xc0007a89a0, {{{0xf528e0?, 0xc00000e9f0?}}, {0xcea680?, 0xc00031d680?}})
github.com/hashicorp/terraform-plugin-sdk/[email protected]/helper/schema/resource.go:599 +0x1c9
github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema.(*GRPCProviderServer).ReadResource(0xc0001861b0, {0xf521e0?, 0xc0007dcf90?}, 0xc0006b05c0)
github.com/hashicorp/terraform-plugin-sdk/[email protected]/helper/schema/grpc_provider.go:587 +0x205
github.com/hashicorp/terraform-plugin-mux/tf5to6server.v5tov6Server.ReadResource({{0xf55798?, 0xc0001861b0?}}, {0xf521e0?, 0xc0007dcf90?}, 0xc0006b0440?)
github.com/hashicorp/[email protected]/tf5to6server/tf5to6server.go:105 +0x242
github.com/hashicorp/terraform-plugin-mux/tf6muxserver.muxServer.ReadResource({0xc0007ddb00, 0xc0007ddb60, {0xc00082f1f0, 0x1, 0x1}, {0x0, 0x0, 0x0}, {0x0, 0x0, ...}, ...}, ...)
github.com/hashicorp/[email protected]/tf6muxserver/mux_server_ReadResource.go:26 +0x102
github.com/hashicorp/terraform-plugin-go/tfprotov6/tf6server.(*server).ReadResource(0xc0000caf00, {0xf521e0?, 0xc0002d8780?}, 0xc00070c600)
github.com/hashicorp/[email protected]/tfprotov6/tf6server/server.go:746 +0x49e
github.com/hashicorp/terraform-plugin-go/tfprotov6/internal/tfplugin6._Provider_ReadResource_Handler({0xdac4c0?, 0xc0000caf00}, {0xf521e0, 0xc0002d8780}, 0xc000282000, 0x0)
github.com/hashicorp/[email protected]/tfprotov6/internal/tfplugin6/tfplugin6_grpc.pb.go:383 +0x170
google.golang.org/grpc.(*Server).processUnaryRPC(0xc0000001e0, {0xf55000, 0xc0007da4e0}, 0xc000828360, 0xc0006c1a40, 0x14b2d10, 0x0)
google.golang.org/[email protected]/server.go:1345 +0xde3
google.golang.org/grpc.(*Server).handleStream(0xc0000001e0, {0xf55000, 0xc0007da4e0}, 0xc000828360, 0x0)
google.golang.org/[email protected]/server.go:1722 +0xa1b
google.golang.org/grpc.(*Server).serveStreams.func1.2()
google.golang.org/[email protected]/server.go:966 +0x98
created by google.golang.org/grpc.(*Server).serveStreams.func1
google.golang.org/[email protected]/server.go:964 +0x28a
Expected Behavior
it should have worked properly and returned 9223372036854775807 instead
Actual Behavior
it returns 9223372036854776000
Steps to Reproduce
- add a numeric field
- fill it with
9223372036854775807 - Terraform is going to crash when attempting to read this resource from the state
N.B. it only crashes when it's read after it's already created, i.e. during resource's creation—it won't fail
References
- panic: Error reading level state: strconv.ParseInt: parsing "-9223372036854776000": value out of range terraform#31930
- terraform crash ParseInt function on reading level state yandex-cloud/terraform-provider-yandex#190
- panic: Error reading level state: strconv.ParseInt: parsing "9223372036854776000": value out of range aiven/terraform-provider-aiven#1187
Metadata
Metadata
Assignees
Labels
bugSomething isn't workingSomething isn't workingterraform-plugin-frameworkResolved in terraform-plugin-frameworkResolved in terraform-plugin-framework


