Merge branch 'composite-request'
* composite-request: also run peer server on reflector handle new composite requests
This commit is contained in:
commit
d77f5d17f3
2 changed files with 94 additions and 16 deletions
|
@ -9,6 +9,7 @@ import (
|
||||||
|
|
||||||
"github.com/lbryio/reflector.go/db"
|
"github.com/lbryio/reflector.go/db"
|
||||||
"github.com/lbryio/reflector.go/meta"
|
"github.com/lbryio/reflector.go/meta"
|
||||||
|
"github.com/lbryio/reflector.go/peer"
|
||||||
"github.com/lbryio/reflector.go/reflector"
|
"github.com/lbryio/reflector.go/reflector"
|
||||||
"github.com/lbryio/reflector.go/store"
|
"github.com/lbryio/reflector.go/store"
|
||||||
|
|
||||||
|
@ -49,8 +50,15 @@ func reflectorCmd(cmd *cobra.Command, args []string) {
|
||||||
log.Fatal(err)
|
log.Fatal(err)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
peerServer := peer.NewServer(combo)
|
||||||
|
err = peerServer.Start(":5567")
|
||||||
|
if err != nil {
|
||||||
|
log.Fatal(err)
|
||||||
|
}
|
||||||
|
|
||||||
interruptChan := make(chan os.Signal, 1)
|
interruptChan := make(chan os.Signal, 1)
|
||||||
signal.Notify(interruptChan, os.Interrupt, syscall.SIGTERM)
|
signal.Notify(interruptChan, os.Interrupt, syscall.SIGTERM)
|
||||||
<-interruptChan
|
<-interruptChan
|
||||||
|
peerServer.Shutdown()
|
||||||
reflectorServer.Shutdown()
|
reflectorServer.Shutdown()
|
||||||
}
|
}
|
||||||
|
|
102
peer/server.go
102
peer/server.go
|
@ -7,14 +7,12 @@ import (
|
||||||
"encoding/json"
|
"encoding/json"
|
||||||
"io"
|
"io"
|
||||||
"net"
|
"net"
|
||||||
"strings"
|
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"github.com/lbryio/lbry.go/extras/errors"
|
"github.com/lbryio/lbry.go/extras/errors"
|
||||||
"github.com/lbryio/lbry.go/extras/stop"
|
"github.com/lbryio/lbry.go/extras/stop"
|
||||||
"github.com/lbryio/reflector.go/store"
|
"github.com/lbryio/reflector.go/store"
|
||||||
|
|
||||||
"github.com/davecgh/go-spew/spew"
|
|
||||||
log "github.com/sirupsen/logrus"
|
log "github.com/sirupsen/logrus"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -124,20 +122,21 @@ func (s *Server) handleConnection(conn net.Conn) {
|
||||||
log.Error(errors.FullTrace(err))
|
log.Error(errors.FullTrace(err))
|
||||||
}
|
}
|
||||||
|
|
||||||
if strings.Contains(string(request), `"requested_blobs"`) {
|
//if strings.Contains(string(request), `"requested_blobs"`) {
|
||||||
log.Debugln("received availability request")
|
// log.Debugln("received availability request")
|
||||||
response, err = s.handleAvailabilityRequest(request)
|
// response, err = s.handleAvailabilityRequest(request)
|
||||||
} else if strings.Contains(string(request), `"blob_data_payment_rate"`) {
|
//} else if strings.Contains(string(request), `"blob_data_payment_rate"`) {
|
||||||
log.Debugln("received rate negotiation request")
|
// log.Debugln("received rate negotiation request")
|
||||||
response, err = s.handlePaymentRateNegotiation(request)
|
// response, err = s.handlePaymentRateNegotiation(request)
|
||||||
} else if strings.Contains(string(request), `"requested_blob"`) {
|
//} else if strings.Contains(string(request), `"requested_blob"`) {
|
||||||
log.Debugln("received blob request")
|
// log.Debugln("received blob request")
|
||||||
response, err = s.handleBlobRequest(request)
|
// response, err = s.handleBlobRequest(request)
|
||||||
} else {
|
//} else {
|
||||||
log.Errorln("invalid request")
|
// log.Errorln("invalid request")
|
||||||
spew.Dump(request)
|
// spew.Dump(request)
|
||||||
return
|
// return
|
||||||
}
|
//}
|
||||||
|
response, err = s.handleCompositeRequest(request)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Error(err)
|
log.Error(err)
|
||||||
return
|
return
|
||||||
|
@ -215,6 +214,63 @@ func (s *Server) handleBlobRequest(data []byte) ([]byte, error) {
|
||||||
return append(response, blob...), nil
|
return append(response, blob...), nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (s *Server) handleCompositeRequest(data []byte) ([]byte, error) {
|
||||||
|
var request compositeRequest
|
||||||
|
err := json.Unmarshal(data, &request)
|
||||||
|
if err != nil {
|
||||||
|
return []byte{}, err
|
||||||
|
}
|
||||||
|
|
||||||
|
response := compositeResponse{
|
||||||
|
LbrycrdAddress: LbrycrdAddress,
|
||||||
|
}
|
||||||
|
|
||||||
|
if len(request.RequestedBlobs) > 0 {
|
||||||
|
var availableBlobs []string
|
||||||
|
for _, blobHash := range request.RequestedBlobs {
|
||||||
|
exists, err := s.store.Has(blobHash)
|
||||||
|
if err != nil {
|
||||||
|
return []byte{}, err
|
||||||
|
}
|
||||||
|
if exists {
|
||||||
|
availableBlobs = append(availableBlobs, blobHash)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
response.AvailableBlobs = availableBlobs
|
||||||
|
}
|
||||||
|
|
||||||
|
response.BlobDataPaymentRate = paymentRateAccepted
|
||||||
|
if request.BlobDataPaymentRate < 0 {
|
||||||
|
response.BlobDataPaymentRate = paymentRateTooLow
|
||||||
|
}
|
||||||
|
|
||||||
|
var blob []byte
|
||||||
|
if request.RequestedBlob != "" {
|
||||||
|
log.Println("Sending blob " + request.RequestedBlob[:8])
|
||||||
|
|
||||||
|
blob, err = s.store.Get(request.RequestedBlob)
|
||||||
|
if errors.Is(err, store.ErrBlobNotFound) {
|
||||||
|
response.IncomingBlob = incomingBlob{
|
||||||
|
Error: err.Error(),
|
||||||
|
}
|
||||||
|
} else if err != nil {
|
||||||
|
return []byte{}, err
|
||||||
|
} else {
|
||||||
|
response.IncomingBlob = incomingBlob{
|
||||||
|
BlobHash: GetBlobHash(blob),
|
||||||
|
Length: len(blob),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
respData, err := json.Marshal(response)
|
||||||
|
if err != nil {
|
||||||
|
return []byte{}, err
|
||||||
|
}
|
||||||
|
|
||||||
|
return append(respData, blob...), nil
|
||||||
|
}
|
||||||
|
|
||||||
func readNextRequest(conn net.Conn) ([]byte, error) {
|
func readNextRequest(conn net.Conn) ([]byte, error) {
|
||||||
request := make([]byte, 0)
|
request := make([]byte, 0)
|
||||||
eof := false
|
eof := false
|
||||||
|
@ -314,3 +370,17 @@ type incomingBlob struct {
|
||||||
type blobResponse struct {
|
type blobResponse struct {
|
||||||
IncomingBlob incomingBlob `json:"incoming_blob"`
|
IncomingBlob incomingBlob `json:"incoming_blob"`
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type compositeRequest struct {
|
||||||
|
LbrycrdAddress bool `json:"lbrycrd_address"`
|
||||||
|
RequestedBlobs []string `json:"requested_blobs"`
|
||||||
|
BlobDataPaymentRate float64 `json:"blob_data_payment_rate"`
|
||||||
|
RequestedBlob string `json:"requested_blob"`
|
||||||
|
}
|
||||||
|
|
||||||
|
type compositeResponse struct {
|
||||||
|
LbrycrdAddress string `json:"lbrycrd_address,omitempty"`
|
||||||
|
AvailableBlobs []string `json:"available_blobs,omitempty"`
|
||||||
|
BlobDataPaymentRate string `json:"blob_data_payment_rate,omitempty"`
|
||||||
|
IncomingBlob incomingBlob `json:"incoming_blob,omitempty"`
|
||||||
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue