This is an automated email from the ASF dual-hosted git repository.
alexstocks pushed a commit to branch develop
in repository https://gitbox.apache.org/repos/asf/dubbo-go.git
The following commit(s) were added to refs/heads/develop by this push:
new 7574480e7 refactor: rename ExpectedCodecName to FallbackCodecName
internally (#3169)
7574480e7 is described below
commit 7574480e7b87dababc0473ae3676a7606e87c068
Author: zbchi <[email protected]>
AuthorDate: Tue Jan 20 13:42:50 2026 +0800
refactor: rename ExpectedCodecName to FallbackCodecName internally (#3169)
* refactor: rename ExpectedCodecName to FallbackCodecName internally
* remove ExpectedCodecName
---
protocol/triple/triple_protocol/envelope.go | 6 +++---
protocol/triple/triple_protocol/handler.go | 4 ++--
protocol/triple/triple_protocol/option.go | 18 +++++++++++-------
protocol/triple/triple_protocol/protocol.go | 2 +-
protocol/triple/triple_protocol/protocol_grpc.go | 2 +-
protocol/triple/triple_protocol/protocol_triple.go | 10 +++++-----
6 files changed, 23 insertions(+), 19 deletions(-)
diff --git a/protocol/triple/triple_protocol/envelope.go
b/protocol/triple/triple_protocol/envelope.go
index 8e73ce828..01e2691e4 100644
--- a/protocol/triple/triple_protocol/envelope.go
+++ b/protocol/triple/triple_protocol/envelope.go
@@ -76,7 +76,7 @@ func (w *envelopeWriter) Marshal(message any) *Error {
raw, err := w.codec.Marshal(message)
if err != nil {
if w.backupCodec != nil && w.codec.Name() !=
w.backupCodec.Name() {
- logger.Debugf("failed to marshal message with codec %s,
trying alternative codec %s", w.codec.Name(), w.backupCodec.Name())
+ logger.Debugf("failed to marshal message with primary
codec %s, trying fallback codec %s", w.codec.Name(), w.backupCodec.Name())
raw, err = w.backupCodec.Marshal(message)
}
if err != nil {
@@ -138,7 +138,7 @@ func (w *envelopeWriter) write(env *envelope) *Error {
type envelopeReader struct {
reader io.Reader
codec Codec
- backupCodec Codec //backupCodec is for mismatch between expected
codec and content-type
+ backupCodec Codec // backupCodec is the fallback codec when primary
codec fails
last envelope
compressionPool *compressionPool
bufferPool *bufferPool
@@ -202,7 +202,7 @@ func (r *envelopeReader) Unmarshal(message any) *Error {
if err := r.codec.Unmarshal(data.Bytes(), message); err != nil {
if r.backupCodec != nil && r.backupCodec.Name() !=
r.codec.Name() {
- logger.Debugf("failed to unmarshal message with codec
%s, trying alternative codec %s", r.codec.Name(), r.backupCodec.Name())
+ logger.Debugf("failed to unmarshal message with primary
codec %s, trying fallback codec %s", r.codec.Name(), r.backupCodec.Name())
err = r.backupCodec.Unmarshal(data.Bytes(), message)
}
if err != nil {
diff --git a/protocol/triple/triple_protocol/handler.go
b/protocol/triple/triple_protocol/handler.go
index 1529485cd..256a7dcbb 100644
--- a/protocol/triple/triple_protocol/handler.go
+++ b/protocol/triple/triple_protocol/handler.go
@@ -381,7 +381,7 @@ type handlerConfig struct {
CompressionPools map[string]*compressionPool
CompressionNames []string
Codecs map[string]Codec
- ExpectedCodecName string
+ FallbackCodecName string
CompressMinBytes int
Interceptor Interceptor
Procedure string
@@ -446,7 +446,7 @@ func (c *handlerConfig) newProtocolHandlers(streamType
StreamType) []protocolHan
Spec: c.newSpec(streamType),
Codecs: codecs,
CompressionPools: compressors,
- ExpectedCodecName: c.ExpectedCodecName,
+ FallbackCodecName: c.FallbackCodecName,
// config content
CompressMinBytes: c.CompressMinBytes,
BufferPool: c.BufferPool,
diff --git a/protocol/triple/triple_protocol/option.go
b/protocol/triple/triple_protocol/option.go
index 92d4786bd..13830e0e5 100644
--- a/protocol/triple/triple_protocol/option.go
+++ b/protocol/triple/triple_protocol/option.go
@@ -186,8 +186,12 @@ func WithVersion(version string) Option {
return &versionOption{version}
}
+// WithExpectedCodecName sets a fallback codec for the server handler.
+// When the primary codec (from client's Content-Type) fails to unmarshal
+// the request, the server will attempt to use this fallback codec.
+// This enhances interoperability, especially with Java clients.
func WithExpectedCodecName(ExpectedCodecName string) Option {
- return &ExpectedCodecNameOption{ExpectedCodecName: ExpectedCodecName}
+ return &FallbackCodecNameOption{FallbackCodecName: ExpectedCodecName}
}
// Option implements both [ClientOption] and [HandlerOption], so it can be
@@ -475,16 +479,16 @@ func (o *idempotencyOption) applyToHandler(config
*handlerConfig) {
config.IdempotencyLevel = o.idempotencyLevel
}
-type ExpectedCodecNameOption struct {
- ExpectedCodecName string
+type FallbackCodecNameOption struct {
+ FallbackCodecName string
}
-func (o *ExpectedCodecNameOption) applyToClient(config *clientConfig) {
- //Do nothing as client doesn't have codec issues
+func (o *FallbackCodecNameOption) applyToClient(config *clientConfig) {
+ // Do nothing as client doesn't have codec fallback issues
}
-func (o *ExpectedCodecNameOption) applyToHandler(config *handlerConfig) {
- config.ExpectedCodecName = o.ExpectedCodecName
+func (o *FallbackCodecNameOption) applyToHandler(config *handlerConfig) {
+ config.FallbackCodecName = o.FallbackCodecName
}
type tripleOption struct{}
diff --git a/protocol/triple/triple_protocol/protocol.go
b/protocol/triple/triple_protocol/protocol.go
index 8f3a92a9c..a6f7aea0d 100644
--- a/protocol/triple/triple_protocol/protocol.go
+++ b/protocol/triple/triple_protocol/protocol.go
@@ -72,7 +72,7 @@ type protocol interface {
type protocolHandlerParams struct {
Spec Spec
Codecs readOnlyCodecs
- ExpectedCodecName string
+ FallbackCodecName string
CompressionPools readOnlyCompressionPools
CompressMinBytes int
BufferPool *bufferPool
diff --git a/protocol/triple/triple_protocol/protocol_grpc.go
b/protocol/triple/triple_protocol/protocol_grpc.go
index 153761b8e..a663d3221 100644
--- a/protocol/triple/triple_protocol/protocol_grpc.go
+++ b/protocol/triple/triple_protocol/protocol_grpc.go
@@ -189,7 +189,7 @@ func (g *grpcHandler) NewConn(
// content-type -> codecName -> codec
codecName :=
grpcCodecFromContentType(getHeaderCanonical(request.Header, headerContentType))
codec := g.Codecs.Get(codecName) // handler.go guarantees this is not
nil
- backupCodec := g.Codecs.Get(g.ExpectedCodecName)
+ backupCodec := g.Codecs.Get(g.FallbackCodecName)
protocolName := ProtocolGRPC
conn := wrapHandlerConnWithCodedErrors(&grpcHandlerConn{
spec: g.Spec,
diff --git a/protocol/triple/triple_protocol/protocol_triple.go
b/protocol/triple/triple_protocol/protocol_triple.go
index a3742b4e2..81ad4d548 100644
--- a/protocol/triple/triple_protocol/protocol_triple.go
+++ b/protocol/triple/triple_protocol/protocol_triple.go
@@ -159,7 +159,7 @@ func (h *tripleHandler) NewConn(
contentType,
)
codec := h.Codecs.Get(codecName)
- backupCodec := h.Codecs.Get(h.ExpectedCodecName)
+ backupCodec := h.Codecs.Get(h.FallbackCodecName)
// todo:// need to figure it out
// The codec can be nil in the GET request case; that's okay: when
failed
// is non-nil, codec is never used.
@@ -481,7 +481,7 @@ func (hc *tripleUnaryHandlerConn) writeResponseHeader(err
error) {
type tripleUnaryMarshaler struct {
writer io.Writer
codec Codec
- backupCodec Codec
+ backupCodec Codec // backupCodec is the fallback codec when
primary codec fails
compressMinBytes int
compressionName string
compressionPool *compressionPool
@@ -497,7 +497,7 @@ func (m *tripleUnaryMarshaler) Marshal(message any) *Error {
data, err := m.codec.Marshal(message)
if err != nil {
if m.backupCodec != nil && m.codec.Name() !=
m.backupCodec.Name() {
- logger.Warnf("failed to marshal message with codec %s,
trying alternative codec %s", m.codec.Name(), m.backupCodec.Name())
+ logger.Warnf("failed to marshal message with primary
codec %s, trying fallback codec %s", m.codec.Name(), m.backupCodec.Name())
data, err = m.backupCodec.Marshal(message)
}
if err != nil {
@@ -546,7 +546,7 @@ func (m *tripleUnaryRequestMarshaler) Marshal(message any)
*Error {
type tripleUnaryUnmarshaler struct {
reader io.Reader
codec Codec
- backupCodec Codec //backupCodec is for the situation when
content-type mismatches with the expected codec
+ backupCodec Codec // backupCodec is the fallback codec when primary
codec fails
compressionPool *compressionPool
bufferPool *bufferPool
alreadyRead bool
@@ -557,7 +557,7 @@ func (u *tripleUnaryUnmarshaler) Unmarshal(message any)
*Error {
err := u.UnmarshalFunc(message, u.codec.Unmarshal)
if err != nil {
if u.backupCodec != nil && u.codec.Name() !=
u.backupCodec.Name() {
- logger.Warnf("failed to unmarshal message with codec
%s, trying alternative codec %s", u.codec.Name(), u.backupCodec.Name())
+ logger.Warnf("failed to unmarshal message with primary
codec %s, trying fallback codec %s", u.codec.Name(), u.backupCodec.Name())
err = u.UnmarshalFunc(message, u.backupCodec.Unmarshal)
}
}