Merge branch 'master' into feat/sturdypost
This commit is contained in:
@@ -1,8 +1,10 @@
|
||||
package modules
|
||||
|
||||
import (
|
||||
"net"
|
||||
"os"
|
||||
"strconv"
|
||||
"syscall"
|
||||
|
||||
"github.com/filecoin-project/lotus/journal/alerting"
|
||||
"github.com/filecoin-project/lotus/lib/ulimit"
|
||||
@@ -35,6 +37,69 @@ func CheckFdLimit(min uint64) func(al *alerting.Alerting) {
|
||||
}
|
||||
}
|
||||
|
||||
func CheckUDPBufferSize(wanted int) func(al *alerting.Alerting) {
|
||||
return func(al *alerting.Alerting) {
|
||||
conn, err := net.Dial("udp", "localhost:0")
|
||||
if err != nil {
|
||||
alert := al.AddAlertType("process", "udp-buffer-size")
|
||||
al.Raise(alert, map[string]string{
|
||||
"message": "Failed to create UDP connection",
|
||||
"error": err.Error(),
|
||||
})
|
||||
return
|
||||
}
|
||||
defer func() {
|
||||
if err := conn.Close(); err != nil {
|
||||
log.Warnf("Failed to close connection: %s", err)
|
||||
}
|
||||
}()
|
||||
|
||||
udpConn, ok := conn.(*net.UDPConn)
|
||||
if !ok {
|
||||
alert := al.AddAlertType("process", "udp-buffer-size")
|
||||
al.Raise(alert, map[string]string{
|
||||
"message": "Failed to cast connection to UDPConn",
|
||||
})
|
||||
return
|
||||
}
|
||||
|
||||
file, err := udpConn.File()
|
||||
if err != nil {
|
||||
alert := al.AddAlertType("process", "udp-buffer-size")
|
||||
al.Raise(alert, map[string]string{
|
||||
"message": "Failed to get file descriptor from UDPConn",
|
||||
"error": err.Error(),
|
||||
})
|
||||
return
|
||||
}
|
||||
defer func() {
|
||||
if err := file.Close(); err != nil {
|
||||
log.Warnf("Failed to close file: %s", err)
|
||||
}
|
||||
}()
|
||||
|
||||
size, err := syscall.GetsockoptInt(int(file.Fd()), syscall.SOL_SOCKET, syscall.SO_RCVBUF)
|
||||
if err != nil {
|
||||
alert := al.AddAlertType("process", "udp-buffer-size")
|
||||
al.Raise(alert, map[string]string{
|
||||
"message": "Failed to get UDP buffer size",
|
||||
"error": err.Error(),
|
||||
})
|
||||
return
|
||||
}
|
||||
|
||||
if size < wanted {
|
||||
alert := al.AddAlertType("process", "udp-buffer-size")
|
||||
al.Raise(alert, map[string]interface{}{
|
||||
"message": "UDP buffer size is low",
|
||||
"current_size": size,
|
||||
"wanted_size": wanted,
|
||||
"help": "See https://github.com/quic-go/quic-go/wiki/UDP-Buffer-Sizes for details.",
|
||||
})
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func LegacyMarketsEOL(al *alerting.Alerting) {
|
||||
// Add alert if lotus-miner legacy markets subsystem is still in use
|
||||
alert := al.AddAlertType("system", "EOL")
|
||||
|
||||
@@ -41,7 +41,7 @@ func Peerstore() (peerstore.Peerstore, error) {
|
||||
func Host(mctx helpers.MetricsCtx, lc fx.Lifecycle, params P2PHostIn) (RawHost, error) {
|
||||
pkey := params.Peerstore.PrivKey(params.ID)
|
||||
if pkey == nil {
|
||||
return nil, fmt.Errorf("missing private key for node ID: %s", params.ID.Pretty())
|
||||
return nil, fmt.Errorf("missing private key for node ID: %s", params.ID)
|
||||
}
|
||||
|
||||
opts := []libp2p.Option{
|
||||
|
||||
+11
-16
@@ -11,8 +11,8 @@ import (
|
||||
pubsub "github.com/libp2p/go-libp2p-pubsub"
|
||||
"github.com/libp2p/go-libp2p/core/event"
|
||||
"github.com/libp2p/go-libp2p/core/host"
|
||||
"github.com/libp2p/go-libp2p/core/network"
|
||||
"github.com/libp2p/go-libp2p/core/peer"
|
||||
"github.com/libp2p/go-libp2p/core/protocol"
|
||||
"github.com/libp2p/go-libp2p/p2p/host/eventbus"
|
||||
"go.uber.org/fx"
|
||||
"golang.org/x/xerrors"
|
||||
@@ -66,18 +66,22 @@ func RunHello(mctx helpers.MetricsCtx, lc fx.Lifecycle, h host.Host, svc *hello.
|
||||
ctx := helpers.LifecycleCtx(mctx, lc)
|
||||
|
||||
go func() {
|
||||
// We want to get information on connected peers, we don't want to trigger new connections.
|
||||
ctx := network.WithNoDial(ctx, "filecoin hello")
|
||||
for evt := range sub.Out() {
|
||||
pic := evt.(event.EvtPeerIdentificationCompleted)
|
||||
// We just finished identifying the peer, that means we should know what
|
||||
// protocols it speaks. Check if it speeks the Filecoin hello protocol
|
||||
// before continuing.
|
||||
if p, _ := h.Peerstore().FirstSupportedProtocol(pic.Peer, hello.ProtocolID); p != hello.ProtocolID {
|
||||
continue
|
||||
}
|
||||
|
||||
go func() {
|
||||
if err := svc.SayHello(ctx, pic.Peer); err != nil {
|
||||
protos, _ := h.Peerstore().GetProtocols(pic.Peer)
|
||||
agent, _ := h.Peerstore().Get(pic.Peer, "AgentVersion")
|
||||
if protosContains(protos, hello.ProtocolID) {
|
||||
log.Warnw("failed to say hello", "error", err, "peer", pic.Peer, "supported", protos, "agent", agent)
|
||||
} else {
|
||||
log.Debugw("failed to say hello", "error", err, "peer", pic.Peer, "supported", protos, "agent", agent)
|
||||
}
|
||||
return
|
||||
log.Warnw("failed to say hello", "error", err, "peer", pic.Peer, "supported", protos, "agent", agent)
|
||||
}
|
||||
}()
|
||||
}
|
||||
@@ -85,15 +89,6 @@ func RunHello(mctx helpers.MetricsCtx, lc fx.Lifecycle, h host.Host, svc *hello.
|
||||
return nil
|
||||
}
|
||||
|
||||
func protosContains(protos []protocol.ID, search protocol.ID) bool {
|
||||
for _, p := range protos {
|
||||
if p == search {
|
||||
return true
|
||||
}
|
||||
}
|
||||
return false
|
||||
}
|
||||
|
||||
func RunPeerMgr(mctx helpers.MetricsCtx, lc fx.Lifecycle, pmgr *peermgr.PeerMgr) {
|
||||
go pmgr.Run(helpers.LifecycleCtx(mctx, lc))
|
||||
}
|
||||
|
||||
@@ -157,7 +157,8 @@ func SealProofType(maddr dtypes.MinerAddress, fnapi v1api.FullNode) (abi.Registe
|
||||
return 0, err
|
||||
}
|
||||
|
||||
return miner.PreferredSealProofTypeFromWindowPoStType(networkVersion, mi.WindowPoStProofType)
|
||||
// node seal proof type does not decide whether or not we use synthetic porep
|
||||
return miner.PreferredSealProofTypeFromWindowPoStType(networkVersion, mi.WindowPoStProofType, false)
|
||||
}
|
||||
|
||||
func AddressSelector(addrConf *config.MinerAddressConfig) func() (*ctladdr.AddressSelector, error) {
|
||||
@@ -1015,6 +1016,7 @@ func NewSetSealConfigFunc(r repo.LockedRepo) (dtypes.SetSealingConfigFunc, error
|
||||
TerminateBatchMin: cfg.TerminateBatchMin,
|
||||
TerminateBatchWait: config.Duration(cfg.TerminateBatchWait),
|
||||
MaxSectorProveCommitsSubmittedPerEpoch: cfg.MaxSectorProveCommitsSubmittedPerEpoch,
|
||||
UseSyntheticPoRep: cfg.UseSyntheticPoRep,
|
||||
}
|
||||
c.SetSealingConfig(newCfg)
|
||||
})
|
||||
@@ -1059,6 +1061,7 @@ func ToSealingConfig(dealmakingCfg config.DealmakingConfig, sealingCfg config.Se
|
||||
TerminateBatchMax: sealingCfg.TerminateBatchMax,
|
||||
TerminateBatchMin: sealingCfg.TerminateBatchMin,
|
||||
TerminateBatchWait: time.Duration(sealingCfg.TerminateBatchWait),
|
||||
UseSyntheticPoRep: sealingCfg.UseSyntheticPoRep,
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user