From a703e2d1f2474ba5f82311ddb2a68d2668affed6 Mon Sep 17 00:00:00 2001 From: Jeromy Date: Sat, 3 Feb 2018 14:45:11 -0800 Subject: [PATCH] comments License: MIT Signed-off-by: Jeromy --- merkledag/merkledag.go | 1 + merkledag/readonly.go | 4 ++++ merkledag/session.go | 3 +++ 3 files changed, 8 insertions(+) diff --git a/merkledag/merkledag.go b/merkledag/merkledag.go index 080abcb898a..1ee6ccfb671 100644 --- a/merkledag/merkledag.go +++ b/merkledag/merkledag.go @@ -146,6 +146,7 @@ func (sg *sesGetter) GetMany(ctx context.Context, keys []*cid.Cid) <-chan *ipld. return getNodesFromBG(ctx, sg.bs, keys) } +// Session returns a NodeGetter using a new session for block fetches. func (ds *dagService) Session(ctx context.Context) ipld.NodeGetter { return &sesGetter{bserv.NewSession(ctx, ds.Blocks)} } diff --git a/merkledag/readonly.go b/merkledag/readonly.go index e2344061700..1fd48eff95c 100644 --- a/merkledag/readonly.go +++ b/merkledag/readonly.go @@ -6,8 +6,12 @@ import ( ipld "gx/ipfs/Qme5bWv7wtjUNGsK2BNGVUFPKiuxWrsqrtvYwCLRw8YFES/go-ipld-format" ) +// ErrReadOnly is used when a read-only datastructure is written to. var ErrReadOnly = fmt.Errorf("cannot write to readonly DAGService") +// NewReadOnlyDagService takes a NodeGetter, and returns a full DAGService +// implementation that returns ErrReadOnly when its 'write' methods are +// invoked. func NewReadOnlyDagService(ng ipld.NodeGetter) ipld.DAGService { return &ComboService{ Read: ng, diff --git a/merkledag/session.go b/merkledag/session.go index 50015dc3a54..fe0df24d0ec 100644 --- a/merkledag/session.go +++ b/merkledag/session.go @@ -6,10 +6,13 @@ import ( ipld "gx/ipfs/Qme5bWv7wtjUNGsK2BNGVUFPKiuxWrsqrtvYwCLRw8YFES/go-ipld-format" ) +// SessionMaker is an object that can generate a new fetching session. type SessionMaker interface { Session(context.Context) ipld.NodeGetter } +// NewSession returns a session backed NodeGetter if the given NodeGetter +// implements SessionMaker. func NewSession(ctx context.Context, g ipld.NodeGetter) ipld.NodeGetter { if sm, ok := g.(SessionMaker); ok { return sm.Session(ctx)