import ( "container/list" "errors" "time" blocks "github.com/heems/bssim/Godeps/_workspace/src/github.com/ipfs/go-ipfs/blocks" key "github.com/heems/bssim/Godeps/_workspace/src/github.com/ipfs/go-ipfs/blocks/key" exchange "github.com/heems/bssim/Godeps/_workspace/src/github.com/ipfs/go-ipfs/exchange" waitable "github.com/heems/bssim/Godeps/_workspace/src/github.com/ipfs/go-ipfs/thirdparty/waitable" util "github.com/heems/bssim/Godeps/_workspace/src/github.com/ipfs/go-ipfs/util" process "github.com/heems/bssim/Godeps/_workspace/src/github.com/jbenet/goprocess" ratelimit "github.com/heems/bssim/Godeps/_workspace/src/github.com/jbenet/goprocess/ratelimit" ) var log = util.Logger("blockservice") var DefaultConfig = Config{ NumWorkers: 1, ClientBufferSize: 0, WorkerBufferSize: 0, } type Config struct { // NumWorkers sets the number of background workers that provide blocks to // the exchange. NumWorkers int // ClientBufferSize allows clients of HasBlock to send up to // |ClientBufferSize| blocks without blocking. ClientBufferSize int
// throughput. (-80% when < 25) // Running a lot more workers appears to have very little effect on both // single and multicore configurations. NumWorkers: 25, // These have no effect on when running on multiple cores, but harsh // negative effect on throughput when running on a single core // On multicore configurations these buffers have little effect on // throughput. // On single core configurations, larger buffers have severe adverse // effects on throughput. ClientBufferSize: 0, WorkerBufferSize: 0, } var log = u.Logger("blockservice") var ErrNotFound = errors.New("blockservice: key not found") // BlockService is a hybrid block datastore. It stores data in a local // datastore and may retrieve data from a remote Exchange. // It uses an internal `datastore.Datastore` instance to store values. type BlockService struct { // TODO don't expose underlying impl details Blockstore blockstore.Blockstore Exchange exchange.Interface worker *worker.Worker } // NewBlockService creates a BlockService with given datastore instance. func New(bs blockstore.Blockstore, rem exchange.Interface) (*BlockService, error) {
// Logger retrieves an event logger by name func Logger(system string) EventLogger { // TODO if we would like to adjust log levels at run-time. Store this event // logger in a map (just like the util.Logger impl) return &eventLogger{system: system, StandardLogger: util.Logger(system)} }
import ( "errors" "time" key "github.com/heems/bssim/Godeps/_workspace/src/github.com/ipfs/go-ipfs/blocks/key" peer "github.com/heems/bssim/Godeps/_workspace/src/github.com/ipfs/go-ipfs/p2p/peer" routing "github.com/heems/bssim/Godeps/_workspace/src/github.com/ipfs/go-ipfs/routing" u "github.com/heems/bssim/Godeps/_workspace/src/github.com/ipfs/go-ipfs/util" "github.com/heems/bssim/Godeps/_workspace/src/github.com/ipfs/go-ipfs/util/testutil" ds "github.com/heems/bssim/Godeps/_workspace/src/github.com/jbenet/go-datastore" ma "github.com/heems/bssim/Godeps/_workspace/src/github.com/jbenet/go-multiaddr" context "github.com/heems/bssim/Godeps/_workspace/src/golang.org/x/net/context" ) var log = u.Logger("mockrouter") type client struct { datastore ds.Datastore server server peer testutil.Identity } // FIXME(brian): is this method meant to simulate putting a value into the network? func (c *client) PutValue(ctx context.Context, key key.Key, val []byte) error { log.Debugf("PutValue: %s", key) return c.datastore.Put(key.DsKey(), val) } // FIXME(brian): is this method meant to simulate getting a value from the network? func (c *client) GetValue(ctx context.Context, key key.Key) ([]byte, error) {
import ( "encoding/hex" "encoding/json" "fmt" "strings" b58 "github.com/heems/bssim/Godeps/_workspace/src/github.com/jbenet/go-base58" ma "github.com/heems/bssim/Godeps/_workspace/src/github.com/jbenet/go-multiaddr" mh "github.com/heems/bssim/Godeps/_workspace/src/github.com/jbenet/go-multihash" ic "github.com/heems/bssim/Godeps/_workspace/src/github.com/ipfs/go-ipfs/p2p/crypto" u "github.com/heems/bssim/Godeps/_workspace/src/github.com/ipfs/go-ipfs/util" ) var log = u.Logger("peer") // ID represents the identity of a peer. type ID string // Pretty returns a b58-encoded string of the ID func (id ID) Pretty() string { return IDB58Encode(id) } func (id ID) Loggable() map[string]interface{} { return map[string]interface{}{ "peerID": id.Pretty(), } }
// package set contains various different types of 'BlockSet's package set import ( "github.com/heems/bssim/Godeps/_workspace/src/github.com/ipfs/go-ipfs/blocks/bloom" key "github.com/heems/bssim/Godeps/_workspace/src/github.com/ipfs/go-ipfs/blocks/key" "github.com/heems/bssim/Godeps/_workspace/src/github.com/ipfs/go-ipfs/util" ) var log = util.Logger("blockset") // BlockSet represents a mutable set of keyed blocks type BlockSet interface { AddBlock(key.Key) RemoveBlock(key.Key) HasKey(key.Key) bool GetBloomFilter() bloom.Filter GetKeys() []key.Key } func SimpleSetFromKeys(keys []key.Key) BlockSet { sbs := &simpleBlockSet{blocks: make(map[key.Key]struct{})} for _, k := range keys { sbs.blocks[k] = struct{}{} } return sbs } func NewSimpleBlockSet() BlockSet { return &simpleBlockSet{blocks: make(map[key.Key]struct{})}
"crypto/elliptic" "crypto/hmac" "crypto/rand" "crypto/rsa" "crypto/sha1" "crypto/sha256" "crypto/sha512" "hash" proto "github.com/heems/bssim/Godeps/_workspace/src/github.com/gogo/protobuf/proto" pb "github.com/heems/bssim/Godeps/_workspace/src/github.com/ipfs/go-ipfs/p2p/crypto/pb" u "github.com/heems/bssim/Godeps/_workspace/src/github.com/ipfs/go-ipfs/util" ) var log = u.Logger("crypto") var ErrBadKeyType = errors.New("invalid or unsupported key type") const ( RSA = iota ) // Key represents a crypto key that can be compared to another key type Key interface { // Bytes returns a serialized, storeable representation of this key Bytes() ([]byte, error) // Hash returns the hash of this key Hash() ([]byte, error)
// package config implements the ipfs config file datastructures and utilities. package config import ( "bytes" "encoding/json" "fmt" "os" "path/filepath" "strings" u "github.com/heems/bssim/Godeps/_workspace/src/github.com/ipfs/go-ipfs/util" ) var log = u.Logger("config") // Config is used to load IPFS config files. type Config struct { Identity Identity // local node's peer identity Datastore Datastore // local node's storage Addresses Addresses // local node's addresses Mounts Mounts // local node's mount points Version Version // local node's version management Discovery Discovery // local node's discovery mechanisms Bootstrap []string // local nodes's bootstrap peer addresses Tour Tour // local node's tour position Gateway Gateway // local node's gateway server options SupernodeRouting SupernodeClientConfig // local node's routing servers (if SupernodeRouting enabled) Swarm SwarmConfig Log Log }