From fa60dca9ff9f97e04f10b08e9fd9bdbdb87f5a2c Mon Sep 17 00:00:00 2001 From: Antony Denyer Date: Thu, 8 Dec 2022 10:11:11 +0000 Subject: [PATCH] If there is a problem talking to tessera we should exit after a retry (#1575) --- private/engine/tessera/tessera.go | 32 ++++++++++++++++++++++--------- 1 file changed, 23 insertions(+), 9 deletions(-) diff --git a/private/engine/tessera/tessera.go b/private/engine/tessera/tessera.go index 3bb76dba04..c2a3dbb980 100644 --- a/private/engine/tessera/tessera.go +++ b/private/engine/tessera/tessera.go @@ -8,8 +8,10 @@ import ( "io/ioutil" "net/http" "net/url" + "os" "strconv" "strings" + "time" "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/log" @@ -310,18 +312,30 @@ func (t *tesseraPrivateTxManager) receive(data common.EncryptedPayloadHash, isRa return cacheItem.Extra.Sender, cacheItem.Extra.ManagedParties, cacheItem.Payload, &cacheItem.Extra, nil } - response := new(receiveResponse) uri := fmt.Sprintf("/transaction/%s?isRaw=%v", url.PathEscape(data.ToBase64()), isRaw) - if statusCode, err := t.submitJSON("GET", uri, nil, response); err != nil { - - if statusCode == http.StatusNotFound { - log.Debug("data not found in tessera", "uri", uri, "statuscode", statusCode, "err", err) - return "", nil, nil, nil, nil - } else { - log.Error("Failed to fetch data from tessera", "uri", uri, "statuscode", statusCode, "err", err) - return "", nil, nil, nil, err + + var statusCode int + var err error + response := new(receiveResponse) + + for i := 0; i < 5; i++ { + statusCode, err = t.submitJSON("GET", uri, nil, response) + if err != nil && statusCode != http.StatusNotFound { + log.Warn("Failed to fetch data from tessera", "retry", i, "uri", uri, "statuscode", statusCode, "err", err) + time.Sleep(1 * time.Second) + continue } + break } + + if statusCode == http.StatusNotFound { + log.Debug("data not found in tessera", "uri", uri, "statuscode", statusCode, "err", err) + return "", nil, nil, nil, nil + } else if err != nil { + log.Error("Failed to fetch data from tessera", "uri", uri, "statuscode", statusCode, "err", err) + os.Exit(112) + } + var extra engine.ExtraMetadata if !isRaw { acHashes, err := common.Base64sToEncryptedPayloadHashes(response.AffectedContractTransactions)