github.com/RobustRoundRobin/quorum@v20.10.0+incompatible/private/engine/tessera/tessera_version_reader.go (about)

     1  package tessera
     2  
     3  import (
     4  	"encoding/json"
     5  	"net/http"
     6  
     7  	"github.com/ethereum/go-ethereum/log"
     8  	"github.com/ethereum/go-ethereum/private/engine"
     9  )
    10  
    11  const apiVersion1 = "1.0"
    12  
    13  // this method will be removed once quorum will implement a versioned tessera client (in line with tessera API versioning)
    14  func RetrieveTesseraAPIVersion(client *engine.Client) string {
    15  	res, err := client.Get("/version/api")
    16  	if err != nil {
    17  		log.Error("Error invoking the tessera /version/api API: %v.", err)
    18  		return apiVersion1
    19  	}
    20  	defer res.Body.Close()
    21  	if res.StatusCode != http.StatusOK {
    22  		log.Error("Invalid status code returned by the tessera /version/api API: %d.", res.StatusCode)
    23  		return apiVersion1
    24  	}
    25  	var versions []string
    26  	if err := json.NewDecoder(res.Body).Decode(&versions); err != nil {
    27  		log.Error("Unable to deserialize the tessera response for /version/api API: %v.", err)
    28  		return apiVersion1
    29  	}
    30  	if len(versions) == 0 {
    31  		log.Error("Expecting at least one API version to be returned by the tessera /version/api API.")
    32  		return apiVersion1
    33  	}
    34  	// pick the latest version from the versions array
    35  	latestVersion := apiVersion1
    36  	latestParsedVersion, _ := parseVersion([]byte(latestVersion))
    37  	for _, ver := range versions {
    38  		if len(ver) == 0 {
    39  			log.Error("Invalid (empty) version returned by the tessera /version/api API. Skipping value.")
    40  			continue
    41  		}
    42  		parsedVer, err := parseVersion([]byte(ver))
    43  		if err != nil {
    44  			log.Error("Unable to parse version returned by the tessera /version/api API: %s. Skipping value.", ver)
    45  			continue
    46  		}
    47  		if compareVersions(parsedVer, latestParsedVersion) > 0 {
    48  			latestVersion = ver
    49  			latestParsedVersion = parsedVer
    50  		}
    51  	}
    52  	log.Info("Tessera API version: %s", latestVersion)
    53  	return latestVersion
    54  }