7
7
8
8
"github.com/ipfs/go-cid"
9
9
"github.com/ipfs/go-datastore"
10
- "github.com/ipfs/go-datastore/namespace"
11
10
"github.com/ipld/go-ipld-prime"
12
11
peer "github.com/libp2p/go-libp2p-core/peer"
13
12
cbg "github.com/whyrusleeping/cbor-gen"
@@ -21,18 +20,11 @@ import (
21
20
datatransfer "github.com/filecoin-project/go-data-transfer"
22
21
"github.com/filecoin-project/go-data-transfer/channels/internal"
23
22
"github.com/filecoin-project/go-data-transfer/channels/internal/migrations"
24
- "github.com/filecoin-project/go-data-transfer/cidlists"
25
- "github.com/filecoin-project/go-data-transfer/cidsets"
26
23
"github.com/filecoin-project/go-data-transfer/encoding"
27
24
)
28
25
29
26
type DecoderByTypeFunc func (identifier datatransfer.TypeIdentifier ) (encoding.Decoder , bool )
30
27
31
- type ReceivedCidsReader interface {
32
- ToArray (chid datatransfer.ChannelID ) ([]cid.Cid , error )
33
- Len (chid datatransfer.ChannelID ) (int , error )
34
- }
35
-
36
28
type Notifier func (datatransfer.Event , datatransfer.ChannelState )
37
29
38
30
// ErrNotFound is returned when a channel cannot be found with a given channel ID
@@ -59,7 +51,6 @@ type Channels struct {
59
51
blockIndexCache * blockIndexCache
60
52
stateMachines fsm.Group
61
53
migrateStateMachines func (context.Context ) error
62
- seenCIDs * cidsets.CIDSetManager
63
54
}
64
55
65
56
// ChannelEnvironment -- just a proxy for DTNetwork for now
@@ -72,22 +63,19 @@ type ChannelEnvironment interface {
72
63
73
64
// New returns a new thread safe list of channels
74
65
func New (ds datastore.Batching ,
75
- cidLists cidlists.CIDLists ,
76
66
notifier Notifier ,
77
67
voucherDecoder DecoderByTypeFunc ,
78
68
voucherResultDecoder DecoderByTypeFunc ,
79
69
env ChannelEnvironment ,
80
70
selfPeer peer.ID ) (* Channels , error ) {
81
71
82
- seenCIDsDS := namespace .Wrap (ds , datastore .NewKey ("seencids" ))
83
72
c := & Channels {
84
- seenCIDs : cidsets .NewCIDSetManager (seenCIDsDS ),
85
73
notifier : notifier ,
86
74
voucherDecoder : voucherDecoder ,
87
75
voucherResultDecoder : voucherResultDecoder ,
88
76
}
89
77
c .blockIndexCache = newBlockIndexCache ()
90
- channelMigrations , err := migrations .GetChannelStateMigrations (selfPeer , cidLists )
78
+ channelMigrations , err := migrations .GetChannelStateMigrations (selfPeer )
91
79
if err != nil {
92
80
return nil , err
93
81
}
@@ -127,19 +115,6 @@ func (c *Channels) dispatch(eventName fsm.EventName, channel fsm.StateType) {
127
115
}
128
116
log .Debugw ("process data transfer listeners" , "name" , datatransfer .Events [evtCode ], "transfer ID" , realChannel .TransferID )
129
117
c .notifier (evt , c .fromInternalChannelState (realChannel ))
130
-
131
- // When the channel has been cleaned up, remove the caches of seen cids
132
- if evt .Code == datatransfer .CleanupComplete {
133
- chid := datatransfer.ChannelID {
134
- Initiator : realChannel .Initiator ,
135
- Responder : realChannel .Responder ,
136
- ID : realChannel .TransferID ,
137
- }
138
- err := c .removeSeenCIDCaches (chid )
139
- if err != nil {
140
- log .Errorf ("failed to clean up channel %s: %s" , err )
141
- }
142
- }
143
118
}
144
119
145
120
// CreateNew creates a new channel id and channel state and saves to channels.
@@ -271,12 +246,6 @@ func (c *Channels) DataQueued(chid datatransfer.ChannelID, k cid.Cid, delta uint
271
246
// Returns true if this is the first time the block has been received
272
247
func (c * Channels ) DataReceived (chid datatransfer.ChannelID , k cid.Cid , delta uint64 , index int64 , unique bool ) (bool , error ) {
273
248
new , err := c .fireProgressEvent (chid , datatransfer .DataReceived , datatransfer .DataReceivedProgress , k , delta , index , unique , c .getReceivedIndex )
274
- // TODO: remove when ReceivedCids and legacy protocol is removed
275
- // write the seen received cids, but write async in order to avoid blocking processing
276
- if err == nil {
277
- sid := seenCidsSetID (chid , datatransfer .DataReceived )
278
- _ , _ = c .seenCIDs .InsertSetCID (sid , k )
279
- }
280
249
return new , err
281
250
}
282
251
@@ -395,25 +364,6 @@ func (c *Channels) HasChannel(chid datatransfer.ChannelID) (bool, error) {
395
364
return c .stateMachines .Has (chid )
396
365
}
397
366
398
- // removeSeenCIDCaches cleans up the caches of "seen" blocks, ie
399
- // blocks that have already been queued / sent / received
400
- func (c * Channels ) removeSeenCIDCaches (chid datatransfer.ChannelID ) error {
401
- // Clean up seen block caches
402
- progressStates := []datatransfer.EventCode {
403
- datatransfer .DataQueued ,
404
- datatransfer .DataSent ,
405
- datatransfer .DataReceived ,
406
- }
407
- for _ , evt := range progressStates {
408
- sid := seenCidsSetID (chid , evt )
409
- err := c .seenCIDs .DeleteSet (sid )
410
- if err != nil {
411
- return err
412
- }
413
- }
414
- return nil
415
- }
416
-
417
367
// fireProgressEvent fires
418
368
// - an event for queuing / sending / receiving blocks
419
369
// - a corresponding "progress" event if the block has not been seen before
@@ -463,37 +413,7 @@ func (c *Channels) checkChannelExists(chid datatransfer.ChannelID, code datatran
463
413
return nil
464
414
}
465
415
466
- // Get the ID of the CID set for the given channel ID and event code.
467
- // The CID set stores a unique list of queued / sent / received CIDs.
468
- func seenCidsSetID (chid datatransfer.ChannelID , evt datatransfer.EventCode ) cidsets.SetID {
469
- return cidsets .SetID (chid .String () + "/" + datatransfer .Events [evt ])
470
- }
471
-
472
416
// Convert from the internally used channel state format to the externally exposed ChannelState
473
417
func (c * Channels ) fromInternalChannelState (ch internal.ChannelState ) datatransfer.ChannelState {
474
- rcr := & receivedCidsReader {seenCIDs : c .seenCIDs }
475
- return fromInternalChannelState (ch , c .voucherDecoder , c .voucherResultDecoder , rcr )
476
- }
477
-
478
- // Implements the ReceivedCidsReader interface so that the internal channel
479
- // state has access to the received CIDs.
480
- // The interface is used (instead of passing these values directly)
481
- // so the values can be loaded lazily. Reading all CIDs from the datastore
482
- // is an expensive operation so we want to avoid doing it unless necessary.
483
- // Note that the received CIDs get cleaned up when the channel completes, so
484
- // these methods will return an empty array after that point.
485
- type receivedCidsReader struct {
486
- seenCIDs * cidsets.CIDSetManager
418
+ return fromInternalChannelState (ch , c .voucherDecoder , c .voucherResultDecoder )
487
419
}
488
-
489
- func (r * receivedCidsReader ) ToArray (chid datatransfer.ChannelID ) ([]cid.Cid , error ) {
490
- sid := seenCidsSetID (chid , datatransfer .DataReceived )
491
- return r .seenCIDs .SetToArray (sid )
492
- }
493
-
494
- func (r * receivedCidsReader ) Len (chid datatransfer.ChannelID ) (int , error ) {
495
- sid := seenCidsSetID (chid , datatransfer .DataReceived )
496
- return r .seenCIDs .SetLen (sid )
497
- }
498
-
499
- var _ ReceivedCidsReader = (* receivedCidsReader )(nil )
0 commit comments