package executor import ( dbm "gitlab.33.cn/chain33/chain33/common/db" rt "gitlab.33.cn/chain33/plugin/dapp/retrieve/types" "gitlab.33.cn/chain33/chain33/types" ) func DelRetrieveInfo(info *rt.RetrieveQuery, Status int64, db dbm.KVDB) (*types.KeyValue, error) { switch Status { case retrieveBackup: kv := &types.KeyValue{calcRetrieveKey(info.BackupAddress, info.DefaultAddress), nil} db.Set(kv.Key, kv.Value) return kv, nil case retrievePrepare: oldInfo, err := getRetrieveInfo(db, info.BackupAddress, info.DefaultAddress) if oldInfo == nil { return nil, err } info.DelayPeriod = oldInfo.DelayPeriod info.Status = retrieveBackup info.PrepareTime = 0 value := types.Encode(info) kv := &types.KeyValue{calcRetrieveKey(info.BackupAddress, info.DefaultAddress), value} db.Set(kv.Key, kv.Value) return kv, nil case retrievePerform: fallthrough case retrieveCancel: oldInfo, err := getRetrieveInfo(db, info.BackupAddress, info.DefaultAddress) if oldInfo == nil { return nil, err } info.DelayPeriod = oldInfo.DelayPeriod info.Status = retrievePrepare info.PrepareTime = oldInfo.PrepareTime value := types.Encode(info) kv := &types.KeyValue{calcRetrieveKey(info.BackupAddress, info.DefaultAddress), value} db.Set(kv.Key, kv.Value) return kv, nil default: return nil, nil } } func (c *Retrieve) execDelLocal(tx *types.Transaction, receipt *types.ReceiptData, index int) (*types.LocalDBSet, error) { set, err := c.DriverBase.ExecDelLocal(tx, receipt, index) if err != nil { return nil, err } if receipt.GetTy() != types.ExecOk { return set, nil } return set, nil } func (c *Retrieve) ExecDelLocal_Backup(backup *rt.BackupRetrieve, tx *types.Transaction, receiptData *types.ReceiptData, index int) (*types.LocalDBSet, error) { set, err := c.execDelLocal(tx, receiptData, index) info := rt.RetrieveQuery{backup.BackupAddress, backup.DefaultAddress, backup.DelayPeriod, zeroPrepareTime, zeroRemainTime, retrieveBackup} kv, err := DelRetrieveInfo(&info, retrieveBackup, c.GetLocalDB()) if err != nil { return set, nil } if kv != nil { set.KV = append(set.KV, kv) } return set, nil } func (c *Retrieve) ExecDelLocal_Prepare(pre *rt.PrepareRetrieve, tx *types.Transaction, receiptData *types.ReceiptData, index int) (*types.LocalDBSet, error) { set, err := c.execDelLocal(tx, receiptData, index) info := rt.RetrieveQuery{pre.BackupAddress, pre.DefaultAddress, zeroDelay, c.GetBlockTime(), zeroRemainTime, retrievePrepare} kv, err := DelRetrieveInfo(&info, retrievePrepare, c.GetLocalDB()) if err != nil { return set, nil } if kv != nil { set.KV = append(set.KV, kv) } return set, nil } func (c *Retrieve) ExecDelLocal_Perform(perf *rt.PerformRetrieve, tx *types.Transaction, receiptData *types.ReceiptData, index int) (*types.LocalDBSet, error) { set, err := c.execDelLocal(tx, receiptData, index) info := rt.RetrieveQuery{perf.BackupAddress, perf.DefaultAddress, zeroDelay, zeroPrepareTime, zeroRemainTime, retrievePerform} kv, err := DelRetrieveInfo(&info, retrievePerform, c.GetLocalDB()) if err != nil { return set, nil } if kv != nil { set.KV = append(set.KV, kv) } return set, nil } func (c *Retrieve) ExecDelLocal_Cancel(cancel *rt.CancelRetrieve, tx *types.Transaction, receiptData *types.ReceiptData, index int) (*types.LocalDBSet, error) { set, err := c.execDelLocal(tx, receiptData, index) info := rt.RetrieveQuery{cancel.BackupAddress, cancel.DefaultAddress, zeroDelay, zeroPrepareTime, zeroRemainTime, retrieveCancel} kv, err := DelRetrieveInfo(&info, retrieveCancel, c.GetLocalDB()) if err != nil { return set, nil } if kv != nil { set.KV = append(set.KV, kv) } return set, nil }