Skip to content
This repository was archived by the owner on Sep 6, 2022. It is now read-only.

Commit b45f449

Browse files
Make sure to set CP ID before hashing (#118)
1 parent bd634f3 commit b45f449

File tree

5 files changed

+87
-26
lines changed

5 files changed

+87
-26
lines changed

EXAMPLES.md

Lines changed: 26 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -1432,8 +1432,8 @@ peer chaincode invoke -n mycc -c '{"Args":["createComputePlan","{\"cleanModels\"
14321432
```json
14331433
{
14341434
"IDToKey": {
1435-
"firstTraintupleID": "a3cbf90bf2945cc7728f27894acf8e609fd65ef93340157f90706bd441d5f1b8",
1436-
"secondTraintupleID": "61f210813e18f3a7af124ff32d6f5a46a276d5ae9fdd5d5c6f49a8e49c88366d"
1435+
"firstTraintupleID": "01feb56691d26983a641d29f4c2a5b7098f99eb471b7e5f03aaa78c8ae142ca9",
1436+
"secondTraintupleID": "78914b1f480f5e81a26e4d04d88bdb27937e858c49c6bb9d1ae83ff6627ca0ab"
14371437
},
14381438
"__metrics__": {
14391439
"duration": 0
@@ -1446,11 +1446,11 @@ peer chaincode invoke -n mycc -c '{"Args":["createComputePlan","{\"cleanModels\"
14461446
"status": "todo",
14471447
"tag": "a tag is simply a string",
14481448
"testtupleKeys": [
1449-
"57c5c39799167b74ebe67974776b4149f5cc4ddde0e5811e75a19348191e2194"
1449+
"1ca3227c1a1232a55e31d11d93b1fe224f454c5a4508093a15a6cae2a220f957"
14501450
],
14511451
"traintupleKeys": [
1452-
"a3cbf90bf2945cc7728f27894acf8e609fd65ef93340157f90706bd441d5f1b8",
1453-
"61f210813e18f3a7af124ff32d6f5a46a276d5ae9fdd5d5c6f49a8e49c88366d"
1452+
"01feb56691d26983a641d29f4c2a5b7098f99eb471b7e5f03aaa78c8ae142ca9",
1453+
"78914b1f480f5e81a26e4d04d88bdb27937e858c49c6bb9d1ae83ff6627ca0ab"
14541454
],
14551455
"tupleCount": 3
14561456
}
@@ -1509,7 +1509,7 @@ peer chaincode invoke -n mycc -c '{"Args":["updateComputePlan","{\"computePlanID
15091509
```json
15101510
{
15111511
"IDToKey": {
1512-
"thirdTraintupleID": "57a09687b8d26cc553eeac739fa6cc1c5e7f1a52a2ce2df277576eee7356282b"
1512+
"thirdTraintupleID": "17c7623e87be77d8f93f21401e2eae98384de4a1d7ee841c0b9e0a07897cfbbf"
15131513
},
15141514
"__metrics__": {
15151515
"duration": 0
@@ -1522,13 +1522,13 @@ peer chaincode invoke -n mycc -c '{"Args":["updateComputePlan","{\"computePlanID
15221522
"status": "todo",
15231523
"tag": "a tag is simply a string",
15241524
"testtupleKeys": [
1525-
"57c5c39799167b74ebe67974776b4149f5cc4ddde0e5811e75a19348191e2194",
1526-
"2c78d12bd921a74f057ba5e535c9fda224e551e9562de863fd729cf347ded369"
1525+
"1ca3227c1a1232a55e31d11d93b1fe224f454c5a4508093a15a6cae2a220f957",
1526+
"4395e03f727aa5ce5c3d8eb034e23871e57d9a6546a57b9a6f786bf1019e0b52"
15271527
],
15281528
"traintupleKeys": [
1529-
"a3cbf90bf2945cc7728f27894acf8e609fd65ef93340157f90706bd441d5f1b8",
1530-
"61f210813e18f3a7af124ff32d6f5a46a276d5ae9fdd5d5c6f49a8e49c88366d",
1531-
"57a09687b8d26cc553eeac739fa6cc1c5e7f1a52a2ce2df277576eee7356282b"
1529+
"01feb56691d26983a641d29f4c2a5b7098f99eb471b7e5f03aaa78c8ae142ca9",
1530+
"78914b1f480f5e81a26e4d04d88bdb27937e858c49c6bb9d1ae83ff6627ca0ab",
1531+
"17c7623e87be77d8f93f21401e2eae98384de4a1d7ee841c0b9e0a07897cfbbf"
15321532
],
15331533
"tupleCount": 5
15341534
}
@@ -1625,13 +1625,13 @@ peer chaincode invoke -n mycc -c '{"Args":["queryComputePlan","{\"key\":\"7dd808
16251625
"status": "todo",
16261626
"tag": "a tag is simply a string",
16271627
"testtupleKeys": [
1628-
"57c5c39799167b74ebe67974776b4149f5cc4ddde0e5811e75a19348191e2194",
1629-
"2c78d12bd921a74f057ba5e535c9fda224e551e9562de863fd729cf347ded369"
1628+
"1ca3227c1a1232a55e31d11d93b1fe224f454c5a4508093a15a6cae2a220f957",
1629+
"4395e03f727aa5ce5c3d8eb034e23871e57d9a6546a57b9a6f786bf1019e0b52"
16301630
],
16311631
"traintupleKeys": [
1632-
"a3cbf90bf2945cc7728f27894acf8e609fd65ef93340157f90706bd441d5f1b8",
1633-
"61f210813e18f3a7af124ff32d6f5a46a276d5ae9fdd5d5c6f49a8e49c88366d",
1634-
"57a09687b8d26cc553eeac739fa6cc1c5e7f1a52a2ce2df277576eee7356282b"
1632+
"01feb56691d26983a641d29f4c2a5b7098f99eb471b7e5f03aaa78c8ae142ca9",
1633+
"78914b1f480f5e81a26e4d04d88bdb27937e858c49c6bb9d1ae83ff6627ca0ab",
1634+
"17c7623e87be77d8f93f21401e2eae98384de4a1d7ee841c0b9e0a07897cfbbf"
16351635
],
16361636
"tupleCount": 5
16371637
}
@@ -1653,13 +1653,13 @@ peer chaincode invoke -n mycc -c '{"Args":["queryComputePlans"]}' -C myc
16531653
"status": "todo",
16541654
"tag": "a tag is simply a string",
16551655
"testtupleKeys": [
1656-
"57c5c39799167b74ebe67974776b4149f5cc4ddde0e5811e75a19348191e2194",
1657-
"2c78d12bd921a74f057ba5e535c9fda224e551e9562de863fd729cf347ded369"
1656+
"1ca3227c1a1232a55e31d11d93b1fe224f454c5a4508093a15a6cae2a220f957",
1657+
"4395e03f727aa5ce5c3d8eb034e23871e57d9a6546a57b9a6f786bf1019e0b52"
16581658
],
16591659
"traintupleKeys": [
1660-
"a3cbf90bf2945cc7728f27894acf8e609fd65ef93340157f90706bd441d5f1b8",
1661-
"61f210813e18f3a7af124ff32d6f5a46a276d5ae9fdd5d5c6f49a8e49c88366d",
1662-
"57a09687b8d26cc553eeac739fa6cc1c5e7f1a52a2ce2df277576eee7356282b"
1660+
"01feb56691d26983a641d29f4c2a5b7098f99eb471b7e5f03aaa78c8ae142ca9",
1661+
"78914b1f480f5e81a26e4d04d88bdb27937e858c49c6bb9d1ae83ff6627ca0ab",
1662+
"17c7623e87be77d8f93f21401e2eae98384de4a1d7ee841c0b9e0a07897cfbbf"
16631663
],
16641664
"tupleCount": 5
16651665
}
@@ -1693,13 +1693,13 @@ peer chaincode invoke -n mycc -c '{"Args":["cancelComputePlan","{\"key\":\"7dd80
16931693
"status": "canceled",
16941694
"tag": "a tag is simply a string",
16951695
"testtupleKeys": [
1696-
"57c5c39799167b74ebe67974776b4149f5cc4ddde0e5811e75a19348191e2194",
1697-
"2c78d12bd921a74f057ba5e535c9fda224e551e9562de863fd729cf347ded369"
1696+
"1ca3227c1a1232a55e31d11d93b1fe224f454c5a4508093a15a6cae2a220f957",
1697+
"4395e03f727aa5ce5c3d8eb034e23871e57d9a6546a57b9a6f786bf1019e0b52"
16981698
],
16991699
"traintupleKeys": [
1700-
"a3cbf90bf2945cc7728f27894acf8e609fd65ef93340157f90706bd441d5f1b8",
1701-
"61f210813e18f3a7af124ff32d6f5a46a276d5ae9fdd5d5c6f49a8e49c88366d",
1702-
"57a09687b8d26cc553eeac739fa6cc1c5e7f1a52a2ce2df277576eee7356282b"
1700+
"01feb56691d26983a641d29f4c2a5b7098f99eb471b7e5f03aaa78c8ae142ca9",
1701+
"78914b1f480f5e81a26e4d04d88bdb27937e858c49c6bb9d1ae83ff6627ca0ab",
1702+
"17c7623e87be77d8f93f21401e2eae98384de4a1d7ee841c0b9e0a07897cfbbf"
17031703
],
17041704
"tupleCount": 5
17051705
}

chaincode/compute_plan_test.go

Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -733,3 +733,59 @@ func TestCleanModels(t *testing.T) {
733733
assert.Len(t, db.event.ComputePlans[0].ModelsToDelete, 0)
734734

735735
}
736+
737+
func TestCreateSameComputePlanTwice(t *testing.T) {
738+
scc := new(SubstraChaincode)
739+
mockStub := NewMockStubWithRegisterNode("substra", scc)
740+
mockStub.MockTransactionStart("42")
741+
registerItem(t, *mockStub, "aggregateAlgo")
742+
db := NewLedgerDB(mockStub)
743+
744+
out, err := createComputePlanInternal(db, inputComputePlan{}, tag, false)
745+
assert.NoError(t, err)
746+
assert.Equal(t, tag, out.Tag)
747+
748+
up := inputComputePlan{
749+
Traintuples: []inputComputePlanTraintuple{
750+
{
751+
DataManagerKey: dataManagerOpenerHash,
752+
DataSampleKeys: []string{trainDataSampleHash1},
753+
AlgoKey: algoHash,
754+
ID: "traintuple",
755+
},
756+
},
757+
CompositeTraintuples: []inputComputePlanCompositeTraintuple{
758+
{
759+
DataManagerKey: dataManagerOpenerHash,
760+
DataSampleKeys: []string{trainDataSampleHash1},
761+
AlgoKey: compositeAlgoHash,
762+
ID: "CompositeTraintuple",
763+
},
764+
},
765+
Aggregatetuples: []inputComputePlanAggregatetuple{
766+
{
767+
AlgoKey: aggregateAlgoHash,
768+
ID: "Aggregatetuple",
769+
Worker: worker,
770+
},
771+
},
772+
Testtuples: []inputComputePlanTesttuple{
773+
{
774+
DataManagerKey: dataManagerOpenerHash,
775+
DataSampleKeys: []string{testDataSampleHash1},
776+
ObjectiveKey: objectiveDescriptionHash,
777+
TraintupleID: "traintuple",
778+
},
779+
},
780+
}
781+
out, err = updateComputePlanInternal(db, out.ComputePlanID, up)
782+
assert.NoError(t, err)
783+
784+
// Upload the same tuples inside another compute plan
785+
out, err = createComputePlanInternal(db, inputComputePlan{}, tag, false)
786+
assert.NoError(t, err)
787+
assert.Equal(t, tag, out.Tag)
788+
789+
out, err = updateComputePlanInternal(db, out.ComputePlanID, defaultComputePlan)
790+
assert.NoError(t, err)
791+
}

chaincode/traintuple.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,8 @@ func (traintuple *Traintuple) SetFromInput(db *LedgerDB, inp inputTraintuple) er
4242
traintuple.AssetType = TraintupleType
4343
traintuple.Creator = creator
4444
traintuple.Tag = inp.Tag
45+
traintuple.ComputePlanID = inp.ComputePlanID
46+
4547
algo, err := db.GetAlgo(inp.AlgoKey)
4648
if err != nil {
4749
return errors.BadRequest(err, "could not retrieve algo with key %s", inp.AlgoKey)

chaincode/traintuple_composite.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@ func (traintuple *CompositeTraintuple) SetFromInput(db *LedgerDB, inp inputCompo
4040
traintuple.AssetType = CompositeTraintupleType
4141
traintuple.Creator = creator
4242
traintuple.Tag = inp.Tag
43+
traintuple.ComputePlanID = inp.ComputePlanID
4344
algo, err := db.GetCompositeAlgo(inp.AlgoKey)
4445
if err != nil {
4546
return errors.BadRequest(err, "could not retrieve Composite algo with key %s", inp.AlgoKey)

chaincode/tuple_aggregate.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,8 @@ func (tuple *Aggregatetuple) SetFromInput(db *LedgerDB, inp inputAggregatetuple)
3838
tuple.AssetType = AggregatetupleType
3939
tuple.Creator = creator
4040
tuple.Tag = inp.Tag
41+
tuple.ComputePlanID = inp.ComputePlanID
42+
4143
algo, err := db.GetAggregateAlgo(inp.AlgoKey)
4244
if err != nil {
4345
return errors.BadRequest(err, "could not retrieve algo with key %s", inp.AlgoKey)

0 commit comments

Comments
 (0)