@@ -2,35 +2,29 @@ package ipfs
2
2
3
3
import (
4
4
"context"
5
- "io"
6
5
7
6
fserrors "github.com/djdv/go-filesystem-utils/internal/filesystem/errors"
8
7
"github.com/ipfs/boxo/blockservice"
9
- coreiface "github.com/ipfs/boxo/coreiface"
10
- ipath "github.com/ipfs/boxo/coreiface/path"
11
8
"github.com/ipfs/boxo/exchange"
12
9
bsfetcher "github.com/ipfs/boxo/fetcher/impl/blockservice"
13
10
"github.com/ipfs/boxo/path/resolver"
14
11
blocks "github.com/ipfs/go-block-format"
15
12
"github.com/ipfs/go-cid"
13
+ ipld "github.com/ipfs/go-ipld-format"
16
14
"github.com/ipfs/go-unixfsnode"
17
15
dagpb "github.com/ipld/go-codec-dagpb"
18
16
)
19
17
20
18
type (
21
- coreBlockStore struct {
22
- blocks coreiface.BlockAPI
23
- validate bool
24
- }
25
- blockFetcher struct {
26
- coreiface.APIDagService
27
- }
19
+ fnBlockStore getNodeFunc
20
+ fnBlockFetcher getNodeFunc
21
+ getNodeFunc func (cid cid.Cid ) (ipld.Node , error )
28
22
)
29
23
30
- func newPathResolver (api coreiface. CoreAPI ) resolver.Resolver {
24
+ func newPathResolver (getNodeFn getNodeFunc ) resolver.Resolver {
31
25
var (
32
- blockstore = newCoreBlockStore (api . Block () )
33
- fetcher = makeBlockFetcher (api . Dag () )
26
+ blockstore = newCoreBlockStore (getNodeFn )
27
+ fetcher = makeBlockFetcher (getNodeFn )
34
28
service = blockservice .New (blockstore , fetcher )
35
29
config = bsfetcher .NewFetcherConfig (service )
36
30
)
@@ -39,89 +33,62 @@ func newPathResolver(api coreiface.CoreAPI) resolver.Resolver {
39
33
return resolver .NewBasicResolver (fetcherFactory )
40
34
}
41
35
42
- func newCoreBlockStore (blocks coreiface.BlockAPI ) * coreBlockStore {
43
- return & coreBlockStore {blocks : blocks }
44
- }
45
-
46
- func makeBlockFetcher (dag coreiface.APIDagService ) exchange.Interface {
47
- return blockFetcher {APIDagService : dag }
36
+ func newCoreBlockStore (getNodeFn getNodeFunc ) fnBlockStore {
37
+ return fnBlockStore (getNodeFn )
48
38
}
49
39
50
- func (bs * coreBlockStore ) fetch (ctx context.Context , c cid.Cid ) (blocks.Block , error ) {
51
- blockReader , err := bs .blocks .Get (ctx , ipath .IpfsPath (c ))
52
- if err != nil {
53
- return nil , err
54
- }
55
- blockData , err := io .ReadAll (blockReader )
56
- if err != nil {
57
- return nil , err
58
- }
59
- if bs .validate {
60
- nc , err := c .Prefix ().Sum (blockData )
61
- if err != nil {
62
- return nil , blocks .ErrWrongHash
63
- }
64
- if ! nc .Equals (c ) {
65
- return nil , blocks .ErrWrongHash
66
- }
67
- }
68
- return blocks .NewBlockWithCid (blockData , c )
40
+ func makeBlockFetcher (getNodeFn getNodeFunc ) exchange.Interface {
41
+ return fnBlockFetcher (getNodeFn )
69
42
}
70
43
71
- func (bs * coreBlockStore ) Has (ctx context.Context , c cid.Cid ) (bool , error ) {
72
- blk , err := bs . fetch ( ctx , c )
44
+ func (getNodeFn fnBlockStore ) Has (_ context.Context , c cid.Cid ) (bool , error ) {
45
+ blk , err := getNodeFn ( c )
73
46
if err != nil {
74
47
return false , err
75
48
}
76
49
return blk != nil , nil
77
50
}
78
51
79
- func (bs * coreBlockStore ) Get (ctx context.Context , c cid.Cid ) (blocks.Block , error ) {
80
- blk , err := bs .fetch (ctx , c )
81
- if err != nil {
82
- return nil , err
83
- }
84
- return blk , nil
52
+ func (getNodeFn fnBlockStore ) Get (_ context.Context , c cid.Cid ) (blocks.Block , error ) {
53
+ return getNodeFn (c )
85
54
}
86
55
87
- func (bs * coreBlockStore ) GetSize (ctx context.Context , c cid.Cid ) (int , error ) {
88
- blk , err := bs . fetch ( ctx , c )
56
+ func (getNodeFn fnBlockStore ) GetSize (ctx context.Context , c cid.Cid ) (int , error ) {
57
+ blk , err := getNodeFn ( c )
89
58
if err != nil {
90
59
return 0 , err
91
60
}
92
61
return len (blk .RawData ()), nil
93
62
}
94
63
95
- func (bs * coreBlockStore ) HashOnRead (enabled bool ) {
96
- bs .validate = enabled
97
- }
64
+ func (fnBlockStore ) HashOnRead (bool ) {}
98
65
99
- func (* coreBlockStore ) Put (context.Context , blocks.Block ) error {
66
+ func (fnBlockStore ) Put (context.Context , blocks.Block ) error {
100
67
return fserrors .ErrUnsupported
101
68
}
102
69
103
- func (* coreBlockStore ) PutMany (context.Context , []blocks.Block ) error {
70
+ func (fnBlockStore ) PutMany (context.Context , []blocks.Block ) error {
104
71
return fserrors .ErrUnsupported
105
72
}
106
73
107
- func (* coreBlockStore ) AllKeysChan (ctx context.Context ) (<- chan cid.Cid , error ) {
74
+ func (fnBlockStore ) AllKeysChan (ctx context.Context ) (<- chan cid.Cid , error ) {
108
75
return nil , fserrors .ErrUnsupported
109
76
}
110
77
111
- func (* coreBlockStore ) DeleteBlock (context.Context , cid.Cid ) error {
78
+ func (fnBlockStore ) DeleteBlock (context.Context , cid.Cid ) error {
112
79
return fserrors .ErrUnsupported
113
80
}
114
81
115
- func (bf blockFetcher ) GetBlock (ctx context.Context , c cid.Cid ) (blocks.Block , error ) {
116
- return bf . APIDagService . Get ( ctx , c )
82
+ func (getNodeFn fnBlockFetcher ) GetBlock (_ context.Context , c cid.Cid ) (blocks.Block , error ) {
83
+ return getNodeFn ( c )
117
84
}
118
85
119
- func (bf blockFetcher ) GetBlocks (ctx context.Context , cids []cid.Cid ) (<- chan blocks.Block , error ) {
86
+ func (blockGetter fnBlockFetcher ) GetBlocks (ctx context.Context , cids []cid.Cid ) (<- chan blocks.Block , error ) {
120
87
out := make (chan blocks.Block )
121
88
go func () {
122
89
defer close (out )
123
90
for _ , c := range cids {
124
- block , err := bf .GetBlock (ctx , c )
91
+ block , err := blockGetter .GetBlock (ctx , c )
125
92
if err != nil {
126
93
return
127
94
}
@@ -135,10 +102,10 @@ func (bf blockFetcher) GetBlocks(ctx context.Context, cids []cid.Cid) (<-chan bl
135
102
return out , nil
136
103
}
137
104
138
- func (blockFetcher ) NotifyNewBlocks (ctx context.Context , blocks ... blocks.Block ) error {
105
+ func (fnBlockFetcher ) NotifyNewBlocks (ctx context.Context , blocks ... blocks.Block ) error {
139
106
return nil
140
107
}
141
108
142
- func (blockFetcher ) Close () error {
109
+ func (fnBlockFetcher ) Close () error {
143
110
return nil
144
111
}
0 commit comments