mirror of
https://github.com/ethereum/go-ethereum.git
synced 2026-08-19 18:32:23 +00:00
swarm, p2p/protocols: added stream pricing
This commit is contained in:
parent
5c116e3beb
commit
bc9c966052
3 changed files with 23 additions and 27 deletions
|
|
@ -42,6 +42,8 @@ var (
|
|||
mPeerDrops metrics.Counter
|
||||
//how many times local node overdrafted and dropped
|
||||
mSelfDrops metrics.Counter
|
||||
|
||||
MetricsRegistry metrics.Registry
|
||||
)
|
||||
|
||||
//Prices defines how prices are being passed on to the accounting instance
|
||||
|
|
@ -114,18 +116,18 @@ func NewAccounting(balance Balance, po Prices) *Accounting {
|
|||
//at the passed interval writes the metrics to a LevelDB
|
||||
func SetupAccountingMetrics(reportInterval time.Duration, path string) *AccountingMetrics {
|
||||
//create an empty registry
|
||||
registry := metrics.NewRegistry()
|
||||
MetricsRegistry = metrics.NewRegistry()
|
||||
//instantiate the metrics
|
||||
mBalanceCredit = metrics.NewRegisteredCounterForced("account.balance.credit", registry)
|
||||
mBalanceDebit = metrics.NewRegisteredCounterForced("account.balance.debit", registry)
|
||||
mBytesCredit = metrics.NewRegisteredCounterForced("account.bytes.credit", registry)
|
||||
mBytesDebit = metrics.NewRegisteredCounterForced("account.bytes.debit", registry)
|
||||
mMsgCredit = metrics.NewRegisteredCounterForced("account.msg.credit", registry)
|
||||
mMsgDebit = metrics.NewRegisteredCounterForced("account.msg.debit", registry)
|
||||
mPeerDrops = metrics.NewRegisteredCounterForced("account.peerdrops", registry)
|
||||
mSelfDrops = metrics.NewRegisteredCounterForced("account.selfdrops", registry)
|
||||
mBalanceCredit = metrics.NewRegisteredCounterForced("account.balance.credit", MetricsRegistry)
|
||||
mBalanceDebit = metrics.NewRegisteredCounterForced("account.balance.debit", MetricsRegistry)
|
||||
mBytesCredit = metrics.NewRegisteredCounterForced("account.bytes.credit", MetricsRegistry)
|
||||
mBytesDebit = metrics.NewRegisteredCounterForced("account.bytes.debit", MetricsRegistry)
|
||||
mMsgCredit = metrics.NewRegisteredCounterForced("account.msg.credit", MetricsRegistry)
|
||||
mMsgDebit = metrics.NewRegisteredCounterForced("account.msg.debit", MetricsRegistry)
|
||||
mPeerDrops = metrics.NewRegisteredCounterForced("account.peerdrops", MetricsRegistry)
|
||||
mSelfDrops = metrics.NewRegisteredCounterForced("account.selfdrops", MetricsRegistry)
|
||||
//create the DB and start persisting
|
||||
return NewAccountingMetrics(registry, reportInterval, path)
|
||||
return NewAccountingMetrics(MetricsRegistry, reportInterval, path)
|
||||
}
|
||||
|
||||
//Implement Hook.Send
|
||||
|
|
|
|||
|
|
@ -775,24 +775,24 @@ type StreamerPrices struct {
|
|||
registry *Registry
|
||||
}
|
||||
|
||||
//Price implements the accounting interface and returns the price for a specific message
|
||||
func (spo *StreamerPrices) Price(msg interface{}) *protocols.Price {
|
||||
typ := reflect.TypeOf(msg).Elem()
|
||||
return spo.priceMatrix[typ]
|
||||
}
|
||||
|
||||
//createPriceOracle sets up a matrix which can be queried to get
|
||||
//the price for a message via the Price method
|
||||
func (r *Registry) createPriceOracle() {
|
||||
|
||||
po := &StreamerPrices{
|
||||
registry: r,
|
||||
}
|
||||
po.priceMatrix = map[reflect.Type]*protocols.Price{
|
||||
|
||||
reflect.TypeOf(ChunkDeliveryMsgRetrieval{}): &protocols.Price{
|
||||
Value: uint64(100),
|
||||
PerByte: true,
|
||||
Payer: protocols.Receiver,
|
||||
},
|
||||
|
||||
reflect.TypeOf(RetrieveRequestMsg{}): &protocols.Price{
|
||||
Value: uint64(10),
|
||||
PerByte: false,
|
||||
|
|
|
|||
|
|
@ -19,6 +19,7 @@ package swarm
|
|||
import (
|
||||
"context"
|
||||
"errors"
|
||||
"flag"
|
||||
"fmt"
|
||||
"io/ioutil"
|
||||
"math/rand"
|
||||
|
|
@ -29,7 +30,6 @@ import (
|
|||
"time"
|
||||
|
||||
"github.com/ethereum/go-ethereum/crypto"
|
||||
"github.com/ethereum/go-ethereum/metrics"
|
||||
"github.com/ethereum/go-ethereum/node"
|
||||
"github.com/ethereum/go-ethereum/p2p/enode"
|
||||
"github.com/ethereum/go-ethereum/p2p/simulations/adapters"
|
||||
|
|
@ -39,6 +39,11 @@ import (
|
|||
"github.com/ethereum/go-ethereum/swarm/storage"
|
||||
)
|
||||
|
||||
var (
|
||||
printStats = flag.Bool("printstats", false, "print swap stats")
|
||||
bucketKeySwarm = simulation.BucketKey("swarm")
|
||||
)
|
||||
|
||||
//In TestSwapNetworkSymmetricFileUpload we set up a network with arbitrary number of nodes
|
||||
//(16), and each of the nodes uploads a file of same size
|
||||
//Afterwards we check that every node's balance WITH ANOTHER PEER
|
||||
|
|
@ -110,7 +115,7 @@ func TestSwapNetworkSymmetricFileUpload(t *testing.T) {
|
|||
}
|
||||
|
||||
nodeIDs := sim.UpNodeIDs()
|
||||
shuffle(len(nodeIDs), func(i, j int) {
|
||||
rand.Shuffle(len(nodeIDs), func(i, j int) {
|
||||
nodeIDs[i], nodeIDs[j] = nodeIDs[j], nodeIDs[i]
|
||||
})
|
||||
//upload a file for every node
|
||||
|
|
@ -186,17 +191,6 @@ func TestSwapNetworkSymmetricFileUpload(t *testing.T) {
|
|||
fmt.Println(fmt.Sprintf(".........with node %s: balance %d", kk.TerminalString(), vv))
|
||||
}
|
||||
}
|
||||
//NOTE: this are currently metrics over ALL nodes, not per node
|
||||
fmt.Println(fmt.Sprintf("Total units credited: %d", metrics.Get("account.balance.credit").(metrics.Counter).Count()))
|
||||
fmt.Println(fmt.Sprintf("Total units debited: %d", metrics.Get("account.balance.debit").(metrics.Counter).Count()))
|
||||
fmt.Println(fmt.Sprintf("Total bytes credited: %d", metrics.Get("account.bytes.credit").(metrics.Counter).Count()))
|
||||
fmt.Println(fmt.Sprintf("Total bytes debited: %d", metrics.Get("account.bytes.debit").(metrics.Counter).Count()))
|
||||
//fmt.Println(fmt.Sprintf("Cheques issued: %d", metrics.Get("account.cheques.issued").(metrics.Counter).Count()))
|
||||
//fmt.Println(fmt.Sprintf("Cheques received: %d", metrics.Get("account.cheques.received").(metrics.Counter).Count()))
|
||||
fmt.Println(fmt.Sprintf("Number of messages credited: %d", metrics.Get("account.msg.credit").(metrics.Counter).Count()))
|
||||
fmt.Println(fmt.Sprintf("Number of messages debited: %d", metrics.Get("account.msg.debit").(metrics.Counter).Count()))
|
||||
fmt.Println(fmt.Sprintf("Peers dropped: %d", metrics.Get("account.peerdrops").(metrics.Counter).Count()))
|
||||
fmt.Println(fmt.Sprintf("Number of times node dropped itself: %d", metrics.Get("account.selfdrops").(metrics.Counter).Count()))
|
||||
}
|
||||
|
||||
//now iterate the whole map
|
||||
|
|
@ -308,7 +302,7 @@ func TestSwapNetworkAsymmetricFileUpload(t *testing.T) {
|
|||
}
|
||||
|
||||
nodeIDs := sim.UpNodeIDs()
|
||||
shuffle(len(nodeIDs), func(i, j int) {
|
||||
rand.Shuffle(len(nodeIDs), func(i, j int) {
|
||||
nodeIDs[i], nodeIDs[j] = nodeIDs[j], nodeIDs[i]
|
||||
})
|
||||
for i, id := range nodeIDs {
|
||||
|
|
|
|||
Loading…
Reference in a new issue