Skip to content

Commit 928dcc1

Browse files
committed
Update remote send backend worker flows
1 parent 5ebe0d4 commit 928dcc1

File tree

4 files changed

+39
-24
lines changed

4 files changed

+39
-24
lines changed

pkg/code/async/account/gift_card.go

Lines changed: 2 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -209,7 +209,8 @@ func (p *service) initiateProcessToCleanupGiftCardAutoReturn(ctx context.Context
209209
return err
210210
}
211211

212-
return markFulfillmentAsRevoked(ctx, p.data, autoReturnFulfillment[0])
212+
// The sequencer will handle state transition and any cleanup
213+
return markFulfillmentAsActivelyScheduled(ctx, p.data, autoReturnFulfillment[0])
213214
}
214215

215216
func markAutoReturnCheckComplete(ctx context.Context, data code_data.Provider, record *account.Record) error {
@@ -340,24 +341,6 @@ func markFulfillmentAsActivelyScheduled(ctx context.Context, data code_data.Prov
340341
return data.MarkFulfillmentAsActivelyScheduled(ctx, fulfillmentRecord.Id)
341342
}
342343

343-
func markFulfillmentAsRevoked(ctx context.Context, data code_data.Provider, fulfillmentRecord *fulfillment.Record) error {
344-
if fulfillmentRecord.Id == 0 {
345-
return errors.New("fulfillment id is zero")
346-
}
347-
348-
if fulfillmentRecord.State == fulfillment.StateRevoked {
349-
return nil
350-
}
351-
352-
if fulfillmentRecord.State != fulfillment.StateUnknown {
353-
return errors.New("expected fulfillment in unknown state")
354-
}
355-
356-
fulfillmentRecord.State = fulfillment.StateRevoked
357-
358-
return data.UpdateFulfillment(ctx, fulfillmentRecord)
359-
}
360-
361344
// Must be unique, but consistent for idempotency, and ideally fit in a 32
362345
// byte buffer.
363346
func getAutoReturnIntentId(originalIntentId string) string {

pkg/code/async/account/testutil.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -231,11 +231,11 @@ func (e *testEnv) assertGiftCardNotAutoReturned(t *testing.T, giftCard *testGift
231231
assert.EqualValues(t, math.MaxInt64, fulfillmentRecord.IntentOrderingIndex)
232232
assert.EqualValues(t, 0, fulfillmentRecord.ActionOrderingIndex)
233233
assert.EqualValues(t, 0, fulfillmentRecord.FulfillmentOrderingIndex)
234-
assert.True(t, fulfillmentRecord.DisableActiveScheduling)
234+
assert.Equal(t, fulfillment.StateUnknown, fulfillmentRecord.State)
235235
if isRemovedFromWorkerQueue {
236-
assert.Equal(t, fulfillment.StateRevoked, fulfillmentRecord.State)
236+
assert.False(t, fulfillmentRecord.DisableActiveScheduling)
237237
} else {
238-
assert.Equal(t, fulfillment.StateUnknown, fulfillmentRecord.State)
238+
assert.True(t, fulfillmentRecord.DisableActiveScheduling)
239239
}
240240

241241
_, err = e.data.GetIntent(e.ctx, giftCardAutoReturnIntentPrefix+giftCard.issuedIntentRecord.IntentId)

pkg/code/async/sequencer/fulfillment_handler.go

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ import (
1111

1212
"github.com/code-payments/code-server/pkg/code/common"
1313
code_data "github.com/code-payments/code-server/pkg/code/data"
14+
"github.com/code-payments/code-server/pkg/code/data/action"
1415
"github.com/code-payments/code-server/pkg/code/data/cvm/storage"
1516
"github.com/code-payments/code-server/pkg/code/data/fulfillment"
1617
"github.com/code-payments/code-server/pkg/code/data/timelock"
@@ -550,7 +551,12 @@ func (h *NoPrivacyWithdrawFulfillmentHandler) OnSuccess(ctx context.Context, ful
550551
return errors.New("invalid fulfillment type")
551552
}
552553

553-
return onVirtualAccountDeleted(ctx, h.data, fulfillmentRecord.Source)
554+
err := onVirtualAccountDeleted(ctx, h.data, fulfillmentRecord.Source)
555+
if err != nil {
556+
return err
557+
}
558+
559+
return markTimelockClosed(ctx, h.data, fulfillmentRecord.Source, txnRecord.Slot)
554560
}
555561

556562
func (h *NoPrivacyWithdrawFulfillmentHandler) OnFailure(ctx context.Context, fulfillmentRecord *fulfillment.Record, txnRecord *transaction.Record) (recovered bool, err error) {
@@ -567,7 +573,14 @@ func (h *NoPrivacyWithdrawFulfillmentHandler) IsRevoked(ctx context.Context, ful
567573
return false, false, errors.New("invalid fulfillment type")
568574
}
569575

570-
return false, false, nil
576+
// Auto-return actions might be revoked, check the action record that would've
577+
// been updated by the gift card return worker.
578+
actionRecord, err := h.data.GetActionById(ctx, fulfillmentRecord.Intent, fulfillmentRecord.ActionId)
579+
if err != nil {
580+
return false, false, err
581+
}
582+
583+
return actionRecord.State == action.StateRevoked, false, nil
571584
}
572585

573586
type CloseEmptyTimelockAccountFulfillmentHandler struct {

pkg/code/async/sequencer/timelock.go

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,3 +28,22 @@ func markTimelockLocked(ctx context.Context, data code_data.Provider, vault stri
2828
}
2929
return err
3030
}
31+
32+
func markTimelockClosed(ctx context.Context, data code_data.Provider, vault string, slot uint64) error {
33+
record, err := data.GetTimelockByVault(ctx, vault)
34+
if err != nil {
35+
return err
36+
}
37+
38+
record.VaultState = timelock_token_v1.StateClosed
39+
if record.Block > slot {
40+
// Potential conflict with unlock state detection, force a move to close at the next block
41+
//
42+
// todo: Better way of handling this
43+
record.Block += 1
44+
} else {
45+
record.Block = slot
46+
}
47+
48+
return data.SaveTimelock(ctx, record)
49+
}

0 commit comments

Comments
 (0)