mirror of
https://github.com/matrix-org/dendrite.git
synced 2026-01-09 15:13:12 -06:00
Update error behaviour
This commit is contained in:
parent
3716f207bb
commit
fb0c38fbd2
|
|
@ -33,15 +33,15 @@ import (
|
||||||
func PostJSON[reqtype, restype any, errtype error](
|
func PostJSON[reqtype, restype any, errtype error](
|
||||||
ctx context.Context, span opentracing.Span, httpClient *http.Client,
|
ctx context.Context, span opentracing.Span, httpClient *http.Client,
|
||||||
apiURL string, request *reqtype, response *restype,
|
apiURL string, request *reqtype, response *restype,
|
||||||
) (*errtype, error) {
|
) error {
|
||||||
jsonBytes, err := json.Marshal(request)
|
jsonBytes, err := json.Marshal(request)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
parsedAPIURL, err := url.Parse(apiURL)
|
parsedAPIURL, err := url.Parse(apiURL)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
parsedAPIURL.Path = InternalPathPrefix + strings.TrimLeft(parsedAPIURL.Path, "/")
|
parsedAPIURL.Path = InternalPathPrefix + strings.TrimLeft(parsedAPIURL.Path, "/")
|
||||||
|
|
@ -49,7 +49,7 @@ func PostJSON[reqtype, restype any, errtype error](
|
||||||
|
|
||||||
req, err := http.NewRequest(http.MethodPost, apiURL, bytes.NewReader(jsonBytes))
|
req, err := http.NewRequest(http.MethodPost, apiURL, bytes.NewReader(jsonBytes))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
// Mark the span as being an RPC client.
|
// Mark the span as being an RPC client.
|
||||||
|
|
@ -58,7 +58,7 @@ func PostJSON[reqtype, restype any, errtype error](
|
||||||
tracer := opentracing.GlobalTracer()
|
tracer := opentracing.GlobalTracer()
|
||||||
|
|
||||||
if err = tracer.Inject(span.Context(), opentracing.HTTPHeaders, carrier); err != nil {
|
if err = tracer.Inject(span.Context(), opentracing.HTTPHeaders, carrier); err != nil {
|
||||||
return nil, err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
req.Header.Set("Content-Type", "application/json")
|
req.Header.Set("Content-Type", "application/json")
|
||||||
|
|
@ -68,17 +68,17 @@ func PostJSON[reqtype, restype any, errtype error](
|
||||||
defer (func() { err = res.Body.Close() })()
|
defer (func() { err = res.Body.Close() })()
|
||||||
}
|
}
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return err
|
||||||
}
|
}
|
||||||
if res.StatusCode != http.StatusOK {
|
if res.StatusCode != http.StatusOK {
|
||||||
var errorBody errtype
|
var errorBody errtype
|
||||||
if msgerr := json.NewDecoder(res.Body).Decode(&errorBody); msgerr != nil {
|
if msgerr := json.NewDecoder(res.Body).Decode(&errorBody); msgerr != nil {
|
||||||
return nil, fmt.Errorf("internal API: %d from %s", res.StatusCode, apiURL)
|
return fmt.Errorf("internal API: %d from %s", res.StatusCode, apiURL)
|
||||||
}
|
}
|
||||||
return &errorBody, nil
|
return errorBody
|
||||||
}
|
}
|
||||||
if err := json.NewDecoder(res.Body).Decode(response); err != nil {
|
if err := json.NewDecoder(res.Body).Decode(response); err != nil {
|
||||||
return nil, fmt.Errorf("json.NewDecoder.Decode: %w", err)
|
return fmt.Errorf("json.NewDecoder.Decode: %w", err)
|
||||||
}
|
}
|
||||||
return nil, nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -55,15 +55,7 @@ func CallInternalRPCAPI[req, res any](name, url string, client *http.Client, ctx
|
||||||
span, ctx := opentracing.StartSpanFromContext(ctx, name)
|
span, ctx := opentracing.StartSpanFromContext(ctx, name)
|
||||||
defer span.Finish()
|
defer span.Finish()
|
||||||
|
|
||||||
remoteErr, localErr := PostJSON[req, res, error](ctx, span, client, url, request, response)
|
return PostJSON[req, res, error](ctx, span, client, url, request, response)
|
||||||
switch {
|
|
||||||
case localErr != nil:
|
|
||||||
return localErr
|
|
||||||
case remoteErr != nil:
|
|
||||||
return *remoteErr
|
|
||||||
default:
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func CallInternalProxyAPI[req, res any, errtype error](name, url string, client *http.Client, ctx context.Context, request *req) (res, error) {
|
func CallInternalProxyAPI[req, res any, errtype error](name, url string, client *http.Client, ctx context.Context, request *req) (res, error) {
|
||||||
|
|
@ -71,13 +63,5 @@ func CallInternalProxyAPI[req, res any, errtype error](name, url string, client
|
||||||
defer span.Finish()
|
defer span.Finish()
|
||||||
|
|
||||||
var response res
|
var response res
|
||||||
remoteErr, localErr := PostJSON[req, res, errtype](ctx, span, client, url, request, &response)
|
return response, PostJSON[req, res, errtype](ctx, span, client, url, request, &response)
|
||||||
switch {
|
|
||||||
case localErr != nil:
|
|
||||||
return response, localErr
|
|
||||||
case remoteErr != nil:
|
|
||||||
return response, *remoteErr
|
|
||||||
default:
|
|
||||||
return response, nil
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue