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

Commit 9a1a0e3

Browse files
author
Inal Djafar
authored
allow doing tuple update after compute plan cancel (#63)
1 parent 3363d9a commit 9a1a0e3

File tree

7 files changed

+32
-167
lines changed

7 files changed

+32
-167
lines changed

chaincode/compute_plan.go

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -370,6 +370,10 @@ func cancelComputePlan(db *LedgerDB, args []string) (resp outputComputePlan, err
370370
return outputComputePlan{}, err
371371
}
372372

373+
if stringInSlice(computeplan.Status, []string{StatusCanceled, StatusDone}) {
374+
return computeplan, nil
375+
}
376+
373377
var tupleKeys []string
374378
tupleKeys = append(tupleKeys, computeplan.TraintupleKeys...)
375379
tupleKeys = append(tupleKeys, computeplan.CompositeTraintupleKeys...)

chaincode/compute_plan_test.go

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -522,10 +522,20 @@ func TestCancelComputePlan(t *testing.T) {
522522

523523
tuples, err := queryCompositeTraintuples(db, []string{})
524524
assert.NoError(t, err)
525+
526+
nbCanceled, nbTodo := 0, 0
525527
for _, tuple := range tuples {
526-
assert.Equal(t, StatusCanceled, tuple.Status)
528+
if tuple.Status == StatusCanceled {
529+
nbCanceled = nbCanceled + 1
530+
}
531+
if tuple.Status == StatusTodo {
532+
nbTodo = nbTodo + 1
533+
}
527534
}
528535

536+
assert.Equal(t, nbCanceled, 2)
537+
assert.Equal(t, nbTodo, 2)
538+
529539
tests, err := queryTesttuples(db, []string{})
530540
assert.NoError(t, err)
531541
for _, test := range tests {

chaincode/testtuple.go

Lines changed: 3 additions & 53 deletions
Original file line numberDiff line numberDiff line change
@@ -272,22 +272,6 @@ func logStartTest(db *LedgerDB, args []string) (o outputTesttuple, err error) {
272272
return
273273
}
274274

275-
tuple, err := db.GetGenericTuple(testtuple.TraintupleKey)
276-
if err != nil {
277-
return outputTesttuple{}, err
278-
}
279-
280-
// cancel testtuple if compute plan is canceled
281-
if tuple.ComputePlanID != "" {
282-
canceled, err := cancelIfComputePlanIsCanceled(db, inp.Key, tuple.ComputePlanID, &testtuple)
283-
if err != nil {
284-
return outputTesttuple{}, err
285-
}
286-
if canceled {
287-
status = StatusCanceled
288-
}
289-
}
290-
291275
if err = validateTupleOwner(db, testtuple.Dataset.Worker); err != nil {
292276
return
293277
}
@@ -315,22 +299,6 @@ func logSuccessTest(db *LedgerDB, args []string) (o outputTesttuple, err error)
315299
return
316300
}
317301

318-
tuple, err := db.GetGenericTuple(testtuple.TraintupleKey)
319-
if err != nil {
320-
return outputTesttuple{}, err
321-
}
322-
323-
// cancel testtuple if compute plan is canceled
324-
if tuple.ComputePlanID != "" {
325-
canceled, err := cancelIfComputePlanIsCanceled(db, inp.Key, tuple.ComputePlanID, &testtuple)
326-
if err != nil {
327-
return outputTesttuple{}, err
328-
}
329-
if canceled {
330-
status = StatusCanceled
331-
}
332-
}
333-
334302
testtuple.Dataset.Perf = inp.Perf
335303
testtuple.Log += inp.Log
336304

@@ -359,22 +327,6 @@ func logFailTest(db *LedgerDB, args []string) (o outputTesttuple, err error) {
359327
return
360328
}
361329

362-
tuple, err := db.GetGenericTuple(testtuple.TraintupleKey)
363-
if err != nil {
364-
return outputTesttuple{}, err
365-
}
366-
367-
// cancel testtuple if compute plan is canceled
368-
if tuple.ComputePlanID != "" {
369-
canceled, err := cancelIfComputePlanIsCanceled(db, inp.Key, tuple.ComputePlanID, &testtuple)
370-
if err != nil {
371-
return outputTesttuple{}, err
372-
}
373-
if canceled {
374-
status = StatusCanceled
375-
}
376-
}
377-
378330
testtuple.Log += inp.Log
379331

380332
if err = validateTupleOwner(db, testtuple.Dataset.Worker); err != nil {
@@ -468,11 +420,9 @@ func (testtuple *Testtuple) commitStatusUpdate(db *LedgerDB, testtupleKey string
468420
return fmt.Errorf("update testtuple %s failed: %s", testtupleKey, err.Error())
469421
}
470422

471-
// do not update if previous status is already Done, Failed or Doing
472-
if StatusCanceled == newStatus {
473-
if stringInSlice(testtuple.Status, []string{StatusDone, StatusFailed, StatusDoing}) {
474-
return nil
475-
}
423+
// do not update if previous status is already Done, Failed, Todo, Doing
424+
if StatusCanceled == newStatus && testtuple.Status != StatusWaiting {
425+
return nil
476426
}
477427

478428
oldStatus := testtuple.Status

chaincode/traintuple.go

Lines changed: 3 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -273,17 +273,6 @@ func logStartTrain(db *LedgerDB, args []string) (o outputTraintuple, err error)
273273
return
274274
}
275275

276-
// cancel traintuple if compute plan is canceled
277-
if traintuple.ComputePlanID != "" {
278-
canceled, err := cancelIfComputePlanIsCanceled(db, inp.Key, traintuple.ComputePlanID, &traintuple)
279-
if err != nil {
280-
return outputTraintuple{}, err
281-
}
282-
if canceled {
283-
status = StatusCanceled
284-
}
285-
}
286-
287276
if err = validateTupleOwner(db, traintuple.Dataset.Worker); err != nil {
288277
return
289278
}
@@ -310,16 +299,6 @@ func logSuccessTrain(db *LedgerDB, args []string) (o outputTraintuple, err error
310299
if err != nil {
311300
return
312301
}
313-
// cancel traintuple if compute plan is canceled
314-
if traintuple.ComputePlanID != "" {
315-
canceled, err := cancelIfComputePlanIsCanceled(db, inp.Key, traintuple.ComputePlanID, &traintuple)
316-
if err != nil {
317-
return outputTraintuple{}, err
318-
}
319-
if canceled {
320-
status = StatusCanceled
321-
}
322-
}
323302

324303
traintuple.OutModel = &HashDress{
325304
Hash: inp.OutModel.Hash,
@@ -366,16 +345,6 @@ func logFailTrain(db *LedgerDB, args []string) (o outputTraintuple, err error) {
366345
if err != nil {
367346
return
368347
}
369-
// cancel traintuple if compute plan is canceled
370-
if traintuple.ComputePlanID != "" {
371-
canceled, err := cancelIfComputePlanIsCanceled(db, inp.Key, traintuple.ComputePlanID, &traintuple)
372-
if err != nil {
373-
return outputTraintuple{}, err
374-
}
375-
if canceled {
376-
status = StatusCanceled
377-
}
378-
}
379348

380349
traintuple.Log += inp.Log
381350

@@ -613,11 +582,9 @@ func (traintuple *Traintuple) commitStatusUpdate(db *LedgerDB, traintupleKey str
613582
return nil
614583
}
615584

616-
// do not update if previous status is already Done, Failed or Doing
617-
if StatusCanceled == newStatus {
618-
if stringInSlice(traintuple.Status, []string{StatusDone, StatusFailed, StatusDoing}) {
619-
return nil
620-
}
585+
// do not update if previous status is already Done, Failed, Todo, Doing
586+
if StatusCanceled == newStatus && traintuple.Status != StatusWaiting {
587+
return nil
621588
}
622589

623590
if err := traintuple.validateNewStatus(db, newStatus); err != nil {

chaincode/traintuple_composite.go

Lines changed: 3 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -310,17 +310,6 @@ func logStartCompositeTrain(db *LedgerDB, args []string) (o outputCompositeTrain
310310
return
311311
}
312312

313-
// cancel compositeTraintuple if compute plan is canceled
314-
if compositeTraintuple.ComputePlanID != "" {
315-
canceled, err := cancelIfComputePlanIsCanceled(db, inp.Key, compositeTraintuple.ComputePlanID, &compositeTraintuple)
316-
if err != nil {
317-
return outputCompositeTraintuple{}, err
318-
}
319-
if canceled {
320-
status = StatusCanceled
321-
}
322-
}
323-
324313
if err = validateTupleOwner(db, compositeTraintuple.Dataset.Worker); err != nil {
325314
return
326315
}
@@ -348,17 +337,6 @@ func logSuccessCompositeTrain(db *LedgerDB, args []string) (o outputCompositeTra
348337
return
349338
}
350339

351-
// cancel compositeTraintuple if compute plan is canceled
352-
if compositeTraintuple.ComputePlanID != "" {
353-
canceled, err := cancelIfComputePlanIsCanceled(db, inp.Key, compositeTraintuple.ComputePlanID, &compositeTraintuple)
354-
if err != nil {
355-
return outputCompositeTraintuple{}, err
356-
}
357-
if canceled {
358-
status = StatusCanceled
359-
}
360-
}
361-
362340
compositeTraintuple.OutHeadModel.OutModel = &HashDress{
363341
Hash: inp.OutHeadModel.Hash,
364342
StorageAddress: inp.OutHeadModel.StorageAddress}
@@ -404,17 +382,6 @@ func logFailCompositeTrain(db *LedgerDB, args []string) (o outputCompositeTraint
404382
return
405383
}
406384

407-
// cancel compositeTraintuple if compute plan is canceled
408-
if compositeTraintuple.ComputePlanID != "" {
409-
canceled, err := cancelIfComputePlanIsCanceled(db, inp.Key, compositeTraintuple.ComputePlanID, &compositeTraintuple)
410-
if err != nil {
411-
return outputCompositeTraintuple{}, err
412-
}
413-
if canceled {
414-
status = StatusCanceled
415-
}
416-
}
417-
418385
compositeTraintuple.Log += inp.Log
419386

420387
if err = validateTupleOwner(db, compositeTraintuple.Dataset.Worker); err != nil {
@@ -567,11 +534,9 @@ func (traintuple *CompositeTraintuple) commitStatusUpdate(db *LedgerDB, traintup
567534
return nil
568535
}
569536

570-
// do not update if previous status is already Done, Failed or Doing
571-
if StatusCanceled == newStatus {
572-
if stringInSlice(traintuple.Status, []string{StatusDone, StatusFailed, StatusDoing}) {
573-
return nil
574-
}
537+
// do not update if previous status is already Done, Failed, Todo, Doing
538+
if StatusCanceled == newStatus && traintuple.Status != StatusWaiting {
539+
return nil
575540
}
576541

577542
if err := traintuple.validateNewStatus(db, newStatus); err != nil {

chaincode/tuple.go

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -225,10 +225,14 @@ func getCertifiedOutputTesttuple(db *LedgerDB, traintupleKey string) (outputTest
225225
}
226226

227227
func determineStatusFromInModels(statuses []string) string {
228-
// TODO: Add the canceled case when it's ready
229228
if stringInSlice(StatusFailed, statuses) {
230229
return StatusFailed
231230
}
231+
232+
if stringInSlice(StatusCanceled, statuses) {
233+
return StatusCanceled
234+
}
235+
232236
for _, s := range statuses {
233237
if s != StatusDone {
234238
return StatusWaiting

chaincode/tuple_aggregate.go

Lines changed: 3 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -278,17 +278,6 @@ func logStartAggregate(db *LedgerDB, args []string) (o outputAggregatetuple, err
278278
return
279279
}
280280

281-
// cancel aggregatetuple if compute plan is canceled
282-
if aggregatetuple.ComputePlanID != "" {
283-
canceled, err := cancelIfComputePlanIsCanceled(db, inp.Key, aggregatetuple.ComputePlanID, &aggregatetuple)
284-
if err != nil {
285-
return outputAggregatetuple{}, err
286-
}
287-
if canceled {
288-
status = StatusCanceled
289-
}
290-
}
291-
292281
if err = validateTupleOwner(db, aggregatetuple.Worker); err != nil {
293282
return
294283
}
@@ -314,17 +303,6 @@ func logFailAggregate(db *LedgerDB, args []string) (o outputAggregatetuple, err
314303
return
315304
}
316305

317-
// cancel aggregatetuple if compute plan is canceled
318-
if aggregatetuple.ComputePlanID != "" {
319-
canceled, err := cancelIfComputePlanIsCanceled(db, inp.Key, aggregatetuple.ComputePlanID, &aggregatetuple)
320-
if err != nil {
321-
return outputAggregatetuple{}, err
322-
}
323-
if canceled {
324-
status = StatusCanceled
325-
}
326-
}
327-
328306
aggregatetuple.Log += inp.Log
329307

330308
if err = validateTupleOwner(db, aggregatetuple.Worker); err != nil {
@@ -367,17 +345,6 @@ func logSuccessAggregate(db *LedgerDB, args []string) (o outputAggregatetuple, e
367345
return
368346
}
369347

370-
// cancel aggregatetuple if compute plan is canceled
371-
if aggregatetuple.ComputePlanID != "" {
372-
canceled, err := cancelIfComputePlanIsCanceled(db, inp.Key, aggregatetuple.ComputePlanID, &aggregatetuple)
373-
if err != nil {
374-
return outputAggregatetuple{}, err
375-
}
376-
if canceled {
377-
status = StatusCanceled
378-
}
379-
}
380-
381348
aggregatetuple.OutModel = &HashDress{
382349
Hash: inp.OutModel.Hash,
383350
StorageAddress: inp.OutModel.StorageAddress}
@@ -522,11 +489,9 @@ func (tuple *Aggregatetuple) commitStatusUpdate(db *LedgerDB, aggregatetupleKey
522489
return nil
523490
}
524491

525-
// do not update if previous status is already Done, Failed or Doing
526-
if StatusCanceled == newStatus {
527-
if stringInSlice(tuple.Status, []string{StatusDone, StatusFailed, StatusDoing}) {
528-
return nil
529-
}
492+
// do not update if previous status is already Done, Failed, Todo, Doing
493+
if StatusCanceled == newStatus && tuple.Status != StatusWaiting {
494+
return nil
530495
}
531496

532497
if err := tuple.validateNewStatus(db, newStatus); err != nil {

0 commit comments

Comments
 (0)