Skip to content

Commit 2fa4574

Browse files
committed
Almost working FPA file add
Signed-off-by: Aaron Sutula <hi@asutula.com>
1 parent 54d105a commit 2fa4574

3 files changed

Lines changed: 25 additions & 29 deletions

File tree

api/client/fpa.go

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,10 @@ func (f *fpa) StoreData(ctx context.Context, data io.Reader) (*cid.Cid, error) {
4646
}
4747
sendErr := stream.Send(&pb.StoreDataRequest{Chunk: buffer[:bytesRead]})
4848
if sendErr != nil {
49+
if sendErr == io.EOF {
50+
var noOp interface{}
51+
return nil, stream.RecvMsg(noOp)
52+
}
4953
return nil, sendErr
5054
}
5155
if err == io.EOF {

fpa/fastapi/fastapi_store.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ import (
1010
"github.com/filecoin-project/go-fil-markets/storagemarket"
1111
"github.com/ipfs/go-car"
1212
"github.com/ipfs/go-cid"
13+
files "github.com/ipfs/go-ipfs-files"
1314
iface "github.com/ipfs/interface-go-ipfs-core"
1415
"github.com/ipfs/interface-go-ipfs-core/options"
1516
"github.com/ipfs/interface-go-ipfs-core/path"
@@ -51,8 +52,7 @@ func (i *Instance) putData(ctx context.Context, oa ftypes.OpAuditor, reader io.R
5152
if err != nil {
5253
return nil, fmt.Errorf("adding data to hot layer: %s", err)
5354
}
54-
err = i.put(ctx, oa, *cid)
55-
return cid, err
55+
return cid, i.put(ctx, oa, *cid)
5656
}
5757

5858
func (i *Instance) put(ctx context.Context, oa ftypes.OpAuditor, c cid.Cid) error {
@@ -132,7 +132,7 @@ func (i *Instance) storeInFIL(ctx context.Context, c cid.Cid) (ColdInfo, error)
132132
}
133133

134134
func (i *Instance) addToHotLayer(ctx context.Context, reader io.Reader) (*cid.Cid, error) {
135-
path, err := i.ipfs.Object().Put(ctx, reader)
135+
path, err := i.ipfs.Unixfs().Add(ctx, files.NewReaderFile(reader), options.Unixfs.Pin(false))
136136
if err != nil {
137137
return nil, err
138138
}

fpa/service.go

Lines changed: 18 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -115,27 +115,7 @@ type storeDataResult struct {
115115
err error
116116
}
117117

118-
func storeData(ctx context.Context, f func(ctx context.Context, reader io.Reader) (*cid.Cid, error), reader io.Reader, ch chan storeDataResult) {
119-
defer close(ch)
120-
cid, err := f(ctx, reader)
121-
if err != nil {
122-
ch <- storeDataResult{err: err}
123-
return
124-
}
125-
ch <- storeDataResult{cid: cid}
126-
}
127-
128-
func (s *Service) StoreData(srv pb.API_StoreDataServer) error {
129-
i, err := s.getInstanceByToken(srv.Context())
130-
if err != nil {
131-
return err
132-
}
133-
134-
reader, writer := io.Pipe()
135-
136-
storeDataChannel := make(chan storeDataResult)
137-
go storeData(srv.Context(), i.PutData, reader, storeDataChannel)
138-
118+
func receiveData(srv pb.API_StoreDataServer, writer *io.PipeWriter) {
139119
for {
140120
req, err := srv.Recv()
141121
if err == io.EOF {
@@ -147,16 +127,28 @@ func (s *Service) StoreData(srv pb.API_StoreDataServer) error {
147127
}
148128
_, writeErr := writer.Write(req.GetChunk())
149129
if writeErr != nil {
150-
return writeErr
130+
writer.CloseWithError(writeErr)
151131
}
152132
}
133+
}
134+
135+
func (s *Service) StoreData(srv pb.API_StoreDataServer) error {
136+
i, err := s.getInstanceByToken(srv.Context())
137+
if err != nil {
138+
return err
139+
}
140+
141+
reader, writer := io.Pipe()
142+
defer reader.Close()
153143

154-
storeDataResult := <-storeDataChannel
155-
if storeDataResult.err != nil {
156-
return storeDataResult.err
144+
go receiveData(srv, writer)
145+
146+
cid, err := i.PutData(srv.Context(), reader)
147+
if err != nil {
148+
return err
157149
}
158150

159-
return srv.SendAndClose(&pb.StoreDataReply{Cid: storeDataResult.cid.String()})
151+
return srv.SendAndClose(&pb.StoreDataReply{Cid: cid.String()})
160152
}
161153

162154
func (s *Service) Get(req *pb.GetRequest, srv pb.API_GetServer) error {

0 commit comments

Comments
 (0)