mirror of
https://github.com/featurebasedb/featurebase.git
synced 2026-08-28 10:54:59 +00:00
* Remove MDS and replace it with Controller This commit removes the MDS layer (and package) and shifts Controller package into its place. * add pprof/fgprof to serverless http router --------- Co-authored-by: Matthew Jaffee <jaffee@pilosa.com>
76 lines
1.8 KiB
Go
76 lines
1.8 KiB
Go
package http
|
|
|
|
import (
|
|
"bytes"
|
|
"context"
|
|
"encoding/json"
|
|
"fmt"
|
|
"io"
|
|
"log"
|
|
"net/http"
|
|
|
|
"github.com/featurebasedb/featurebase/v3/dax"
|
|
"github.com/featurebasedb/featurebase/v3/errors"
|
|
)
|
|
|
|
var ErrNotImplemented = errors.New(errors.ErrUncoded, "not implemented")
|
|
|
|
// Ensure type implements interface.
|
|
var _ dax.AddressManager = &AddressManager{}
|
|
|
|
// AddressManager is an http implementation of the AddressManager interface.
|
|
type AddressManager struct {
|
|
mdsAddress dax.Address
|
|
}
|
|
|
|
func NewAddressManager(mdsAddress dax.Address) *AddressManager {
|
|
return &AddressManager{
|
|
mdsAddress: mdsAddress,
|
|
}
|
|
}
|
|
|
|
func (m *AddressManager) AddAddresses(ctx context.Context, addr ...dax.Address) error {
|
|
// Not implemented because it's currently not used
|
|
return ErrNotImplemented
|
|
}
|
|
|
|
func (m *AddressManager) RemoveAddresses(ctx context.Context, addrs ...dax.Address) error {
|
|
if len(addrs) == 0 {
|
|
return nil
|
|
}
|
|
|
|
if m.mdsAddress == "" {
|
|
return errors.Errorf("mdsAddress is empty; could not deregister: %s", addrs)
|
|
}
|
|
url := fmt.Sprintf("%s/deregister-nodes", m.mdsAddress.WithScheme("http"))
|
|
log.Printf("SEND deregister-nodes to: %s\n", url)
|
|
|
|
req := DeregisterNodesRequest{
|
|
Addresses: addrs,
|
|
}
|
|
|
|
// Encode the request.
|
|
postBody, err := json.Marshal(req)
|
|
if err != nil {
|
|
return errors.Wrap(err, "marshalling deregister node request to json")
|
|
}
|
|
requestBody := bytes.NewBuffer(postBody)
|
|
|
|
// Post the request.
|
|
request, _ := http.NewRequest(http.MethodPost, url, requestBody)
|
|
request.Header.Add("Content-Type", "application/json")
|
|
request.Header.Add("Accept", "application/json")
|
|
|
|
resp, err := http.DefaultClient.Do(request)
|
|
if err != nil {
|
|
return errors.Wrap(err, "doing deregister node request")
|
|
}
|
|
defer resp.Body.Close()
|
|
|
|
if resp.StatusCode != http.StatusOK {
|
|
b, _ := io.ReadAll(resp.Body)
|
|
return errors.Errorf("status code: %d: %s", resp.StatusCode, b)
|
|
}
|
|
|
|
return nil
|
|
}
|