1
1
package main
2
2
3
3
import (
4
- "crypto/rand"
5
4
"database/sql"
6
5
"encoding/json"
7
6
"errors"
@@ -34,7 +33,6 @@ import (
34
33
"github.com/ipfs/go-datastore"
35
34
"github.com/ipfs/go-datastore/namespace"
36
35
cbor "github.com/ipfs/go-ipld-cbor"
37
- "github.com/libp2p/go-libp2p/core/crypto"
38
36
"github.com/mitchellh/go-homedir"
39
37
"github.com/urfave/cli/v2"
40
38
"golang.org/x/net/context"
@@ -163,11 +161,6 @@ func migrate(cctx *cli.Context, repoDir string) error {
163
161
return xerrors .Errorf ("failed to migrate DDO deals: %w" , err )
164
162
}
165
163
166
- // Migrate libp2p key
167
- if err := generateNewKeys (ctx , maddr , hdb ); err != nil {
168
- return xerrors .Errorf ("failed to migrate libp2p key: %w" , err )
169
- }
170
-
171
164
return nil
172
165
}
173
166
@@ -191,7 +184,11 @@ func migrateBoostDeals(ctx context.Context, activeSectors bitfield.BitField, mad
191
184
192
185
deals := append (aDeals , cDeals ... )
193
186
194
- for _ , deal := range deals {
187
+ for i , deal := range deals {
188
+ if i > 0 && i % 100 == 0 {
189
+ fmt .Printf ("Migrating Boost Deals: %d / %d (%0.2f%%)\n " , i , len (deals ), float64 (i )/ float64 (len (deals ))* 100 )
190
+ }
191
+
195
192
llog := log .With ("Boost Deal" , deal .DealUuid .String ())
196
193
// Skip deals which are before add piece
197
194
if deal .Checkpoint < dealcheckpoints .AddedPiece {
@@ -269,62 +266,69 @@ func migrateBoostDeals(ctx context.Context, activeSectors bitfield.BitField, mad
269
266
return fmt .Errorf ("deal: %s: failed to marshal headers: %s" , deal .DealUuid .String (), err )
270
267
}
271
268
272
- // Add deal to HarmonyDB
273
- if ! a {
274
- _ , err = hdb .Exec (ctx , `INSERT INTO market_mk12_deals (uuid, sp_id, signed_proposal_cid,
269
+ _ , err = hdb .BeginTransaction (ctx , func (tx * harmonydb.Tx ) (bool , error ) {
270
+ // Add deal to HarmonyDB
271
+ if ! a {
272
+ _ , err = tx .Exec (`INSERT INTO market_mk12_deals (uuid, sp_id, signed_proposal_cid,
275
273
proposal_signature, proposal, piece_cid,
276
274
piece_size, offline, verified, start_epoch, end_epoch,
277
275
client_peer_id, fast_retrieval, announce_to_ipni, url, url_headers, chain_deal_id, publish_cid, created_at)
278
276
VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11, $12, $13, $14, $15, $16, $17, $18, $19)
279
277
ON CONFLICT (uuid) DO NOTHING` ,
280
- deal .DealUuid .String (), mid , sProp .String (), sigByte , propJson , prop .PieceCID .String (),
281
- prop .PieceSize , deal .IsOffline , prop .VerifiedDeal , prop .StartEpoch , prop .EndEpoch , deal .ClientPeerID .String (),
282
- deal .FastRetrieval , deal .AnnounceToIPNI , tInfo .URL , headers , int64 (deal .ChainDealID ), deal .PublishCID .String (), deal .CreatedAt )
283
-
284
- if err != nil {
285
- return fmt .Errorf ("deal: %s: failed to add the deal to harmonyDB: %w" , deal .DealUuid .String (), err )
286
- }
287
-
288
- // Mark deal added to harmonyDB
289
- _ , err = mdb .Exec (`INSERT INTO Deals (ID, DB, LID) VALUES (?, TRUE, FALSE) ON CONFLICT(ID) DO NOTHING` , deal .DealUuid .String ())
290
- if err != nil {
291
- return fmt .Errorf ("deal: %s: failed to mark deal migrated: %w" , deal .DealUuid .String (), err )
292
- }
293
- }
294
-
295
- if ! b {
296
- // Add LID details to pieceDeal in HarmonyDB
297
- _ , err = hdb .Exec (ctx , `SELECT process_piece_deal($1, $2, $3, $4, $5, $6, $7, $8, $9)` ,
298
- deal .DealUuid .String (), prop .PieceCID .String (), true , mid , deal .SectorID , deal .Offset , prop .PieceSize , deal .NBytesReceived , false )
299
- if err != nil {
300
- return fmt .Errorf ("deal: %s: failed to update piece metadata and piece deal: %w" , deal .DealUuid .String (), err )
278
+ deal .DealUuid .String (), mid , sProp .String (), sigByte , propJson , prop .PieceCID .String (),
279
+ prop .PieceSize , deal .IsOffline , prop .VerifiedDeal , prop .StartEpoch , prop .EndEpoch , deal .ClientPeerID .String (),
280
+ deal .FastRetrieval , deal .AnnounceToIPNI , tInfo .URL , headers , int64 (deal .ChainDealID ), deal .PublishCID .String (), deal .CreatedAt )
281
+
282
+ if err != nil {
283
+ return false , fmt .Errorf ("deal: %s: failed to add the deal to harmonyDB: %w" , deal .DealUuid .String (), err )
284
+ }
285
+
286
+ // Mark deal added to harmonyDB
287
+ _ , err = mdb .Exec (`INSERT INTO Deals (ID, DB, LID) VALUES (?, TRUE, FALSE) ON CONFLICT(ID) DO NOTHING` , deal .DealUuid .String ())
288
+ if err != nil {
289
+ return false , fmt .Errorf ("deal: %s: failed to mark deal migrated: %w" , deal .DealUuid .String (), err )
290
+ }
301
291
}
302
292
303
- // Mark deal added to pieceDeal in HarmonyDB
304
- _ , err = mdb .Exec (`UPDATE Deals SET LID = TRUE WHERE ID = ?` , deal .DealUuid .String ())
305
- if err != nil {
306
- return fmt .Errorf ("deal: %s: failed to mark deal LID migrated: %w" , deal .DealUuid .String (), err )
293
+ if ! b {
294
+ // Add LID details to pieceDeal in HarmonyDB
295
+ _ , err = tx .Exec (`SELECT process_piece_deal($1, $2, $3, $4, $5, $6, $7, $8, $9)` ,
296
+ deal .DealUuid .String (), prop .PieceCID .String (), true , mid , deal .SectorID , deal .Offset , prop .PieceSize , deal .NBytesReceived , false )
297
+ if err != nil {
298
+ return false , fmt .Errorf ("deal: %s: failed to update piece metadata and piece deal: %w" , deal .DealUuid .String (), err )
299
+ }
300
+
301
+ // Mark deal added to pieceDeal in HarmonyDB
302
+ _ , err = mdb .Exec (`UPDATE Deals SET LID = TRUE WHERE ID = ?` , deal .DealUuid .String ())
303
+ if err != nil {
304
+ return false , fmt .Errorf ("deal: %s: failed to mark deal LID migrated: %w" , deal .DealUuid .String (), err )
305
+ }
307
306
}
308
- }
309
307
310
- if ! c {
311
- var proof abi.RegisteredSealProof
312
- err = hdb .QueryRow (ctx , `SELECT reg_seal_proof FROM sectors_meta WHERE sp_id = $1 AND sector_num = $2` , mid , deal .SectorID ).Scan (& proof )
313
- if err != nil {
314
- return fmt .Errorf ("seal: %s: failed to get sector proof: %w" , deal .DealUuid .String (), err )
315
- }
308
+ if ! c {
309
+ var proof abi.RegisteredSealProof
310
+ err = tx .QueryRow (`SELECT reg_seal_proof FROM sectors_meta WHERE sp_id = $1 AND sector_num = $2` , mid , deal .SectorID ).Scan (& proof )
311
+ if err != nil {
312
+ return false , fmt .Errorf ("seal: %s: failed to get sector proof: %w" , deal .DealUuid .String (), err )
313
+ }
316
314
317
- // Add deal to mk12 pipeline in Curio for indexing and announcement
318
- _ , err = hdb .Exec (ctx , `INSERT INTO market_mk12_deal_pipeline (uuid, sp_id, started, piece_cid, piece_size, raw_size, offline,
315
+ // Add deal to mk12 pipeline in Curio for indexing and announcement
316
+ _ , err = tx .Exec (`INSERT INTO market_mk12_deal_pipeline (uuid, sp_id, started, piece_cid, piece_size, raw_size, offline,
319
317
after_commp, after_psd, after_find_deal, sector, reg_seal_proof, sector_offset,
320
318
sealed, should_index, indexing_created_at, announce)
321
319
VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11, $12, $13, $14, $15, $16, $17) ON CONFLICT (uuid) DO NOTHING` ,
322
- deal .DealUuid .String (), mid , true , prop .PieceCID .String (), prop .PieceSize , deal .NBytesReceived , deal .IsOffline ,
323
- true , true , true , deal .SectorID , proof , deal .Offset , true , true , time .Now (), true )
324
- if err != nil {
325
- return fmt .Errorf ("deal: %s: failed to add deal to pipeline for indexing and announcing: %w" , deal .DealUuid .String (), err )
320
+ deal .DealUuid .String (), mid , true , prop .PieceCID .String (), prop .PieceSize , deal .NBytesReceived , deal .IsOffline ,
321
+ true , true , true , deal .SectorID , proof , deal .Offset , true , true , time .Now (), true )
322
+ if err != nil {
323
+ return false , fmt .Errorf ("deal: %s: failed to add deal to pipeline for indexing and announcing: %w" , deal .DealUuid .String (), err )
324
+ }
326
325
}
326
+ return true , nil
327
+ }, harmonydb .OptionRetry ())
328
+ if err != nil {
329
+ return err
327
330
}
331
+
328
332
}
329
333
330
334
return nil
@@ -366,7 +370,10 @@ func migrateLegacyDeals(ctx context.Context, full v1api.FullNode, activeSectors
366
370
return err
367
371
}
368
372
369
- for _ , deal := range legacyDeals {
373
+ for i , deal := range legacyDeals {
374
+ if i > 0 && i % 100 == 0 {
375
+ fmt .Printf ("Migrating Legacy Deals: %d / %d (%0.2f%%)\n " , i , len (legacyDeals ), float64 (i )/ float64 (len (legacyDeals ))* 100 )
376
+ }
370
377
llog := log .With ("Boost Deal" , deal .ProposalCid .String ())
371
378
// Skip deals which do not have chain deal ID
372
379
if deal .DealID == 0 {
@@ -422,7 +429,7 @@ func migrateLegacyDeals(ctx context.Context, full v1api.FullNode, activeSectors
422
429
423
430
prop := deal .ClientDealProposal .Proposal
424
431
425
- _ , err = hdb .Exec (ctx , `INSERT INTO market_mk12_deals (signed_proposal_cid, sp_id, client_peer_id,
432
+ _ , err = hdb .Exec (ctx , `INSERT INTO signed_proposal_cid (signed_proposal_cid, sp_id, client_peer_id,
426
433
proposal_signature, proposal, piece_cid,
427
434
piece_size, verified, start_epoch, end_epoch,
428
435
publish_cid, chain_deal_id, fast_retrieval, created_at, sector_num)
@@ -459,7 +466,10 @@ func migrateDDODeals(ctx context.Context, full v1api.FullNode, activeSectors bit
459
466
return fmt .Errorf ("failed to get all DDO deals: %w" , err )
460
467
}
461
468
462
- for _ , deal := range deals {
469
+ for i , deal := range deals {
470
+ if i > 0 && i % 100 == 0 {
471
+ fmt .Printf ("Migrating DDO Deals: %d / %d (%0.2f%%)\n " , i , len (deals ), float64 (i )/ float64 (len (deals ))* 100 )
472
+ }
463
473
llog := log .With ("Boost Deal" , deal .ID .String ())
464
474
if deal .Err != "" && deal .Retry == types .DealRetryFatal {
465
475
llog .Infow ("Skipping as deal retry is fatal" )
@@ -505,86 +515,67 @@ func migrateDDODeals(ctx context.Context, full v1api.FullNode, activeSectors bit
505
515
continue
506
516
}
507
517
508
- if ! a {
509
- // Add DDO deal to harmonyDB
510
- _ , err = hdb .Exec (ctx , `INSERT INTO market_direct_deals (uuid, sp_id, created_at, client, offline, verified,
518
+ _ , err = hdb .BeginTransaction (ctx , func (tx * harmonydb.Tx ) (bool , error ) {
519
+ if ! a {
520
+ // Add DDO deal to harmonyDB
521
+ _ , err = tx .Exec (`INSERT INTO market_direct_deals (uuid, sp_id, created_at, client, offline, verified,
511
522
start_epoch, end_epoch, allocation_id, piece_cid, piece_size, fast_retrieval, announce_to_ipni)
512
523
VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11, $12, $13)
513
524
ON CONFLICT (uuid) DO NOTHING` ,
514
- deal .ID .String (), mid , deal .CreatedAt , deal .Client .String (), true , true , deal .StartEpoch , deal .EndEpoch , deal .AllocationID ,
515
- deal .PieceCID .String (), deal .PieceSize , true , true )
516
-
517
- if err != nil {
518
- return fmt .Errorf ("deal: %s: failed to add the DDO deal to harmonyDB: %w" , deal .ID .String (), err )
525
+ deal .ID .String (), mid , deal .CreatedAt , deal .Client .String (), true , true , deal .StartEpoch , deal .EndEpoch , deal .AllocationID ,
526
+ deal .PieceCID .String (), deal .PieceSize , true , true )
527
+
528
+ if err != nil {
529
+ return false , fmt .Errorf ("deal: %s: failed to add the DDO deal to harmonyDB: %w" , deal .ID .String (), err )
530
+ }
531
+
532
+ // Mark deal added to harmonyDB
533
+ _ , err = mdb .Exec (`INSERT INTO Deals (ID, DB, LID) VALUES (?, TRUE, FALSE) ON CONFLICT(ID) DO NOTHING` , deal .ID .String ())
534
+ if err != nil {
535
+ return false , fmt .Errorf ("deal: %s: failed to mark DDO deal migrated: %w" , deal .ID .String (), err )
536
+ }
519
537
}
520
538
521
- // Mark deal added to harmonyDB
522
- _ , err = mdb . Exec ( `INSERT INTO Deals (ID, DB, LID) VALUES (?, TRUE, FALSE) ON CONFLICT(ID) DO NOTHING` , deal . ID . String ())
523
- if err != nil {
524
- return fmt . Errorf ( " deal: %s: failed to mark DDO deal migrated: %w" , deal .ID . String (), err )
525
- }
526
- }
527
-
528
- if ! b {
529
- // Add LID details to pieceDeal in HarmonyDB
530
- _ , err = hdb .Exec (ctx , `SELECT process_piece_deal($1, $2, $3, $4, $5, $6, $7, $8, $9)` ,
531
- deal . ID . String (), deal . PieceCID . String (), false , mid , deal . SectorID , deal . Offset , deal . PieceSize , deal . InboundFileSize , false )
532
- if err != nil {
533
- return fmt . Errorf ( "deal: %s: failed to update piece metadata and piece deal for DDO deal %s: %w" , deal . ID . String (), deal . ID . String (), err )
539
+ if ! b {
540
+ // Add LID details to pieceDeal in HarmonyDB
541
+ _ , err = tx . Exec ( `SELECT process_piece_deal($1, $2, $3, $4, $5, $6, $7, $8, $9)` ,
542
+ deal . ID . String (), deal . PieceCID . String (), false , mid , deal . SectorID , deal . Offset , deal . PieceSize , deal .InboundFileSize , false )
543
+ if err != nil {
544
+ return false , fmt . Errorf ( "deal: %s: failed to update piece metadata and piece deal for DDO deal %s: %w" , deal . ID . String (), deal . ID . String (), err )
545
+ }
546
+
547
+ // Mark deal added to pieceDeal in HarmonyDB
548
+ _ , err = mdb .Exec (`UPDATE Deals SET LID = TRUE WHERE ID = ?` , deal . ID . String ())
549
+ if err != nil {
550
+ return false , fmt . Errorf ( "deal: %s: failed to mark deal LID migrated: %w" , deal . ID . String (), err )
551
+ }
534
552
}
535
553
536
- // Mark deal added to pieceDeal in HarmonyDB
537
- _ , err = mdb .Exec (`UPDATE Deals SET LID = TRUE WHERE ID = ?` , deal .ID .String ())
538
- if err != nil {
539
- return fmt .Errorf ("deal: %s: failed to mark deal LID migrated: %w" , deal .ID .String (), err )
540
- }
541
- }
554
+ // TODO: Confirm if using the mk12 pipeline will have any impact for DDO deals
555
+ if ! c {
556
+ var proof abi.RegisteredSealProof
557
+ err = tx .QueryRow (`SELECT reg_seal_proof FROM sectors_meta WHERE sp_id = $1 AND sector_num = $2` , mid , deal .SectorID ).Scan (& proof )
558
+ if err != nil {
559
+ return false , fmt .Errorf ("deal: %s: failed to get sector proof: %w" , deal .ID .String (), err )
560
+ }
542
561
543
- // TODO: Confirm if using the mk12 pipeline will have any impact for DDO deals
544
- if ! c {
545
- var proof abi.RegisteredSealProof
546
- err = hdb .QueryRow (ctx , `SELECT reg_seal_proof FROM sectors_meta WHERE sp_id = $1 AND sector_num = $2` , mid , deal .SectorID ).Scan (& proof )
547
- if err != nil {
548
- return fmt .Errorf ("deal: %s: failed to get sector proof: %w" , deal .ID .String (), err )
549
- }
550
-
551
- // Add deal to mk12 pipeline in Curio for indexing and announcement
552
- _ , err = hdb .Exec (ctx , `INSERT INTO market_mk12_deal_pipeline (uuid, sp_id, started, piece_cid, piece_size, raw_size, offline,
562
+ // Add deal to mk12 pipeline in Curio for indexing and announcement
563
+ _ , err = tx .Exec (`INSERT INTO market_mk12_deal_pipeline (uuid, sp_id, started, piece_cid, piece_size, raw_size, offline,
553
564
after_commp, after_psd, after_find_deal, sector, reg_seal_proof, sector_offset,
554
565
sealed, should_index, indexing_created_at, announce)
555
566
VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11, $12, $13, $14, $15, $16, $17) ON CONFLICT (uuid) DO NOTHING` ,
556
- deal .ID .String (), mid , true , deal .PieceCID .String (), deal .PieceSize , deal .InboundFileSize , true ,
557
- true , true , true , deal .SectorID , proof , deal .Offset , true , true , time .Now (), true )
558
- if err != nil {
559
- return fmt .Errorf ("deal: %s: failed to add DDO deal to pipeline for indexing and announcing: %w" , deal .ID .String (), err )
567
+ deal .ID .String (), mid , true , deal .PieceCID .String (), deal .PieceSize , deal .InboundFileSize , true ,
568
+ true , true , true , deal .SectorID , proof , deal .Offset , true , true , time .Now (), true )
569
+ if err != nil {
570
+ return false , fmt .Errorf ("deal: %s: failed to add DDO deal to pipeline for indexing and announcing: %w" , deal .ID .String (), err )
571
+ }
560
572
}
573
+ return true , nil
574
+ }, harmonydb .OptionRetry ())
575
+ if err != nil {
576
+ return err
561
577
}
562
578
}
563
579
564
580
return nil
565
581
}
566
-
567
- func generateNewKeys (ctx context.Context , maddr address.Address , hdb * harmonydb.DB ) error {
568
-
569
- mid , err := address .IDFromAddress (maddr )
570
- if err != nil {
571
- return err
572
- }
573
-
574
- pk , _ , err := crypto .GenerateEd25519Key (rand .Reader )
575
- if err != nil {
576
- return fmt .Errorf ("generating private key: %w" , err )
577
- }
578
-
579
- kbytes , err := crypto .MarshalPrivateKey (pk )
580
- if err != nil {
581
- return fmt .Errorf ("marshaling private key: %w" , err )
582
- }
583
-
584
- _ , err = hdb .Exec (ctx , `INSERT INTO libp2p (sp_id, priv_key) VALUES ($1, $2) ON CONFLICT(sp_id) DO NOTHING` , mid , kbytes )
585
- if err != nil {
586
- return fmt .Errorf ("inserting private key into libp2p table: %w" , err )
587
- }
588
-
589
- return nil
590
- }
0 commit comments