Skip to content

Commit 078f8ec

Browse files
authored
fix(client): remove (*Client).ToTyped() to fix binary-size regression (#1477)
BREAKING-CHANGE: (*elasticsearch.Client).ToTyped() is removed. Use elasticsearch.NewTypedFrom(c) instead.
1 parent b467419 commit 078f8ec

2 files changed

Lines changed: 24 additions & 19 deletions

File tree

elasticsearch.go

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -380,16 +380,21 @@ func NewTyped(opts ...Option) (*TypedClient, error) {
380380
return client, nil
381381
}
382382

383-
// ToTyped returns a [TypedClient] that shares the underlying transport,
384-
// connection pool, and configuration of this [Client].
383+
// NewTypedFrom returns a [TypedClient] that shares c's transport,
384+
// connection pool, and configuration.
385385
//
386-
// ToTyped is intended to be called once per [Client] and the result
387-
// reused. Each call allocates a new [typedapi.API] tree, and the
388-
// returned client will re-run the product check on its first request.
386+
// NewTypedFrom is intended to be called once per [Client] and the
387+
// result reused. Each call allocates a new [typedapi.API] tree, and
388+
// the returned client will re-run the product check on its first
389+
// request.
390+
//
391+
// NewTypedFrom is a free function rather than a method on [Client] so
392+
// that the Go linker can dead-code-eliminate the typedapi tree for
393+
// callers that never construct a typed client.
389394
//
390395
// Because the transport is shared, closing either client closes the
391396
// connection pool used by both.
392-
func (c *Client) ToTyped() *TypedClient {
397+
func NewTypedFrom(c *Client) *TypedClient {
393398
metaHeader := c.metaHeader
394399
if !strings.Contains(metaHeader, typedClientMetaFlag) {
395400
metaHeader = strings.Join([]string{metaHeader, typedClientMetaFlag}, ",")

elasticsearch_internal_test.go

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -909,15 +909,15 @@ func toTypedMockTransport(t *testing.T, capture *http.Header) elastictransport.I
909909
return tp
910910
}
911911

912-
func TestToTyped_AddsTypedFlag(t *testing.T) {
912+
func TestNewTypedFrom_AddsTypedFlag(t *testing.T) {
913913
var captured http.Header
914914
c, err := New()
915915
if err != nil {
916916
t.Fatalf("unexpected error: %s", err)
917917
}
918918
c.Transport = toTypedMockTransport(t, &captured)
919919

920-
tc := c.ToTyped()
920+
tc := NewTypedFrom(c)
921921
if _, err := tc.Info().Do(context.Background()); err != nil {
922922
t.Fatalf("unexpected error: %s", err)
923923
}
@@ -931,23 +931,23 @@ func TestToTyped_AddsTypedFlag(t *testing.T) {
931931
}
932932
}
933933

934-
func TestToTyped_SharesTransport(t *testing.T) {
934+
func TestNewTypedFrom_SharesTransport(t *testing.T) {
935935
c, err := New()
936936
if err != nil {
937937
t.Fatalf("unexpected error: %s", err)
938938
}
939-
tc := c.ToTyped()
939+
tc := NewTypedFrom(c)
940940
if tc.Transport != c.Transport {
941941
t.Errorf("expected converted client to share the source transport")
942942
}
943943
}
944944

945-
func TestToTyped_PreservesConfigFlags(t *testing.T) {
945+
func TestNewTypedFrom_PreservesConfigFlags(t *testing.T) {
946946
c, err := New(WithCompatibilityMode(), WithAutoDrainBody())
947947
if err != nil {
948948
t.Fatalf("unexpected error: %s", err)
949949
}
950-
tc := c.ToTyped()
950+
tc := NewTypedFrom(c)
951951
if !tc.compatibilityHeader {
952952
t.Errorf("expected compatibilityHeader to be carried over")
953953
}
@@ -959,15 +959,15 @@ func TestToTyped_PreservesConfigFlags(t *testing.T) {
959959
}
960960
}
961961

962-
func TestToTyped_PreservesDisableMetaHeader(t *testing.T) {
962+
func TestNewTypedFrom_PreservesDisableMetaHeader(t *testing.T) {
963963
var captured http.Header
964964
c, err := New(WithDisableMetaHeader())
965965
if err != nil {
966966
t.Fatalf("unexpected error: %s", err)
967967
}
968968
c.Transport = toTypedMockTransport(t, &captured)
969969

970-
tc := c.ToTyped()
970+
tc := NewTypedFrom(c)
971971
if !tc.disableMetaHeader {
972972
t.Errorf("expected disableMetaHeader to be carried over")
973973
}
@@ -980,32 +980,32 @@ func TestToTyped_PreservesDisableMetaHeader(t *testing.T) {
980980
}
981981
}
982982

983-
func TestToTyped_IdempotentFlag(t *testing.T) {
983+
func TestNewTypedFrom_IdempotentFlag(t *testing.T) {
984984
c, err := New()
985985
if err != nil {
986986
t.Fatalf("unexpected error: %s", err)
987987
}
988-
first := c.ToTyped()
988+
first := NewTypedFrom(c)
989989
if strings.Count(first.metaHeader, "hl=1") != 1 {
990990
t.Errorf("expected exactly one hl=1, got: %s", first.metaHeader)
991991
}
992992

993993
// Simulate a Client whose metaHeader already contains hl=1: the
994994
// conversion must not append a second occurrence.
995995
c.metaHeader = first.metaHeader
996-
second := c.ToTyped()
996+
second := NewTypedFrom(c)
997997
if strings.Count(second.metaHeader, "hl=1") != 1 {
998998
t.Errorf("expected exactly one hl=1, got: %s", second.metaHeader)
999999
}
10001000
}
10011001

1002-
func TestToTyped_SourceNotMutated(t *testing.T) {
1002+
func TestNewTypedFrom_SourceNotMutated(t *testing.T) {
10031003
c, err := New()
10041004
if err != nil {
10051005
t.Fatalf("unexpected error: %s", err)
10061006
}
10071007
before := c.metaHeader
1008-
_ = c.ToTyped()
1008+
_ = NewTypedFrom(c)
10091009
if c.metaHeader != before {
10101010
t.Errorf("source metaHeader mutated: before=%q after=%q", before, c.metaHeader)
10111011
}

0 commit comments

Comments
 (0)