Upgrade go-marathon to 15ea23e.
Our vendored copy contains a bug that causes unavailable Marathon nodes to never be marked as available again due to a misconstruction in the URL to the Marathon health check / ping endpoint used by go-marathon internally. A fix[1] has been published. [1]https://github.com/gambol99/go-marathon/pull/283
This commit is contained in:
parent
2e762e76f3
commit
219a6372b0
10 changed files with 126 additions and 72 deletions
35
vendor/github.com/gambol99/go-marathon/client.go
generated
vendored
35
vendor/github.com/gambol99/go-marathon/client.go
generated
vendored
|
@ -27,6 +27,7 @@ import (
|
|||
"net/http"
|
||||
"net/url"
|
||||
"regexp"
|
||||
"strings"
|
||||
"sync"
|
||||
"time"
|
||||
)
|
||||
|
@ -238,23 +239,23 @@ func (r *marathonClient) Ping() (bool, error) {
|
|||
return true, nil
|
||||
}
|
||||
|
||||
func (r *marathonClient) apiGet(uri string, post, result interface{}) error {
|
||||
return r.apiCall("GET", uri, post, result)
|
||||
func (r *marathonClient) apiGet(path string, post, result interface{}) error {
|
||||
return r.apiCall("GET", path, post, result)
|
||||
}
|
||||
|
||||
func (r *marathonClient) apiPut(uri string, post, result interface{}) error {
|
||||
return r.apiCall("PUT", uri, post, result)
|
||||
func (r *marathonClient) apiPut(path string, post, result interface{}) error {
|
||||
return r.apiCall("PUT", path, post, result)
|
||||
}
|
||||
|
||||
func (r *marathonClient) apiPost(uri string, post, result interface{}) error {
|
||||
return r.apiCall("POST", uri, post, result)
|
||||
func (r *marathonClient) apiPost(path string, post, result interface{}) error {
|
||||
return r.apiCall("POST", path, post, result)
|
||||
}
|
||||
|
||||
func (r *marathonClient) apiDelete(uri string, post, result interface{}) error {
|
||||
return r.apiCall("DELETE", uri, post, result)
|
||||
func (r *marathonClient) apiDelete(path string, post, result interface{}) error {
|
||||
return r.apiCall("DELETE", path, post, result)
|
||||
}
|
||||
|
||||
func (r *marathonClient) apiCall(method, url string, body, result interface{}) error {
|
||||
func (r *marathonClient) apiCall(method, path string, body, result interface{}) error {
|
||||
for {
|
||||
// step: marshall the request to json
|
||||
var requestBody []byte
|
||||
|
@ -266,7 +267,7 @@ func (r *marathonClient) apiCall(method, url string, body, result interface{}) e
|
|||
}
|
||||
|
||||
// step: create the API request
|
||||
request, member, err := r.buildAPIRequest(method, url, bytes.NewReader(requestBody))
|
||||
request, member, err := r.buildAPIRequest(method, path, bytes.NewReader(requestBody))
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
@ -317,7 +318,7 @@ func (r *marathonClient) apiCall(method, url string, body, result interface{}) e
|
|||
}
|
||||
|
||||
// buildAPIRequest creates a default API request
|
||||
func (r *marathonClient) buildAPIRequest(method, uri string, reader io.Reader) (request *http.Request, member string, err error) {
|
||||
func (r *marathonClient) buildAPIRequest(method, path string, reader io.Reader) (request *http.Request, member string, err error) {
|
||||
// Grab a member from the cluster
|
||||
member, err = r.hosts.getMember()
|
||||
if err != nil {
|
||||
|
@ -325,16 +326,22 @@ func (r *marathonClient) buildAPIRequest(method, uri string, reader io.Reader) (
|
|||
}
|
||||
|
||||
// Build the HTTP request to Marathon
|
||||
request, err = r.client.buildMarathonRequest(method, member, uri, reader)
|
||||
request, err = r.client.buildMarathonRequest(method, member, path, reader)
|
||||
if err != nil {
|
||||
return nil, member, err
|
||||
}
|
||||
return request, member, nil
|
||||
}
|
||||
|
||||
func (rc *httpClient) buildMarathonRequest(method string, member string, uri string, reader io.Reader) (request *http.Request, err error) {
|
||||
// buildMarathonRequest creates a new HTTP request and configures it according to the *httpClient configuration.
|
||||
// The path must not contain a leading "/", otherwise buildMarathonRequest will panic.
|
||||
func (rc *httpClient) buildMarathonRequest(method string, member string, path string, reader io.Reader) (request *http.Request, err error) {
|
||||
if strings.HasPrefix(path, "/") {
|
||||
panic(fmt.Sprintf("Path '%s' must not start with a leading slash", path))
|
||||
}
|
||||
|
||||
// Create the endpoint URL
|
||||
url := fmt.Sprintf("%s/%s", member, uri)
|
||||
url := fmt.Sprintf("%s/%s", member, path)
|
||||
|
||||
// Instantiate an HTTP request
|
||||
request, err = http.NewRequest(method, url, reader)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue