156 lines
4.2 KiB
Go
156 lines
4.2 KiB
Go
|
package wdpost
|
||
|
|
||
|
import (
|
||
|
"context"
|
||
|
"github.com/filecoin-project/go-state-types/dline"
|
||
|
"github.com/filecoin-project/lotus/chain/types"
|
||
|
"github.com/filecoin-project/lotus/lib/harmony/harmonydb"
|
||
|
"github.com/filecoin-project/lotus/lib/harmony/harmonytask"
|
||
|
)
|
||
|
|
||
|
type WdPostTaskDetails struct {
|
||
|
Ts *types.TipSet
|
||
|
Deadline *dline.Info
|
||
|
}
|
||
|
|
||
|
type WdPostTask struct {
|
||
|
tasks chan *WdPostTaskDetails
|
||
|
db *harmonydb.DB
|
||
|
}
|
||
|
|
||
|
func (t *WdPostTask) Do(taskID harmonytask.TaskID, stillOwned func() bool) (done bool, err error) {
|
||
|
|
||
|
log.Errorf("WdPostTask.Do() called with taskID: %v", taskID)
|
||
|
return true, nil
|
||
|
}
|
||
|
|
||
|
func (t *WdPostTask) CanAccept(ids []harmonytask.TaskID) (*harmonytask.TaskID, error) {
|
||
|
return &ids[0], nil
|
||
|
}
|
||
|
|
||
|
func (t *WdPostTask) TypeDetails() harmonytask.TaskTypeDetails {
|
||
|
return harmonytask.TaskTypeDetails{
|
||
|
Name: "WdPostGeneration",
|
||
|
}
|
||
|
}
|
||
|
|
||
|
func (t *WdPostTask) Adder(taskFunc harmonytask.AddTaskFunc) {
|
||
|
|
||
|
// wait for any channels on t.tasks and call taskFunc on them
|
||
|
for taskDetails := range t.tasks {
|
||
|
//taskDetails := <-ch
|
||
|
|
||
|
log.Errorf("WdPostTask.Adder() received taskDetails: %v", taskDetails)
|
||
|
|
||
|
taskFunc(func(tID harmonytask.TaskID, tx *harmonydb.Tx) (bool, error) {
|
||
|
return t.addTaskToDB(taskDetails.Ts, taskDetails.Deadline, tID, tx)
|
||
|
})
|
||
|
}
|
||
|
}
|
||
|
|
||
|
func NewWdPostTask(db *harmonydb.DB) *WdPostTask {
|
||
|
return &WdPostTask{
|
||
|
tasks: make(chan *WdPostTaskDetails, 2),
|
||
|
db: db,
|
||
|
}
|
||
|
}
|
||
|
|
||
|
func (t *WdPostTask) AddTask(ctx context.Context, ts *types.TipSet, deadline *dline.Info) error {
|
||
|
|
||
|
//ch := make(chan *WdPostTaskDetails)
|
||
|
//t.tasks = append(t.tasks, ch)
|
||
|
t.tasks <- &WdPostTaskDetails{
|
||
|
Ts: ts,
|
||
|
Deadline: deadline,
|
||
|
}
|
||
|
|
||
|
log.Errorf("WdPostTask.AddTask() called with ts: %v, deadline: %v, taskList: %v", ts, deadline, t.tasks)
|
||
|
|
||
|
return nil
|
||
|
}
|
||
|
|
||
|
func (t *WdPostTask) addTaskToDB(ts *types.TipSet, deadline *dline.Info, taskId harmonytask.TaskID, tx *harmonydb.Tx) (bool, error) {
|
||
|
tsKey := ts.Key()
|
||
|
_, err := tx.Exec(
|
||
|
`INSERT INTO wdpost_tasks (
|
||
|
task_id,
|
||
|
tskey,
|
||
|
current_epoch,
|
||
|
period_start,
|
||
|
index,
|
||
|
open,
|
||
|
close,
|
||
|
challenge,
|
||
|
fault_cutoff,
|
||
|
wpost_period_deadlines,
|
||
|
wpost_proving_period,
|
||
|
wpost_challenge_window,
|
||
|
wpost_challenge_lookback,
|
||
|
fault_declaration_cutoff
|
||
|
) VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10 , $11, $12, $13, $14)`,
|
||
|
taskId,
|
||
|
tsKey.String(),
|
||
|
deadline.CurrentEpoch,
|
||
|
deadline.PeriodStart,
|
||
|
deadline.Index,
|
||
|
deadline.Open,
|
||
|
deadline.Close,
|
||
|
deadline.Challenge,
|
||
|
deadline.FaultCutoff,
|
||
|
deadline.WPoStPeriodDeadlines,
|
||
|
deadline.WPoStProvingPeriod,
|
||
|
deadline.WPoStChallengeWindow,
|
||
|
deadline.WPoStChallengeLookback,
|
||
|
deadline.FaultDeclarationCutoff,
|
||
|
)
|
||
|
if err != nil {
|
||
|
return false, err
|
||
|
}
|
||
|
|
||
|
return true, nil
|
||
|
}
|
||
|
|
||
|
func (t *WdPostTask) AddTaskOld(ctx context.Context, ts *types.TipSet, deadline *dline.Info, taskId harmonytask.TaskID) error {
|
||
|
|
||
|
tsKey := ts.Key()
|
||
|
_, err := t.db.Exec(ctx,
|
||
|
`INSERT INTO wdpost_tasks (
|
||
|
task_id,
|
||
|
tskey,
|
||
|
current_epoch,
|
||
|
period_start,
|
||
|
index,
|
||
|
open,
|
||
|
close,
|
||
|
challenge,
|
||
|
fault_cutoff,
|
||
|
wpost_period_deadlines,
|
||
|
wpost_proving_period,
|
||
|
wpost_challenge_window,
|
||
|
wpost_challenge_lookback,
|
||
|
fault_declaration_cutoff
|
||
|
) VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10 , $11, $12, $13, $14)`,
|
||
|
taskId,
|
||
|
tsKey.String(),
|
||
|
deadline.CurrentEpoch,
|
||
|
deadline.PeriodStart,
|
||
|
deadline.Index,
|
||
|
deadline.Open,
|
||
|
deadline.Close,
|
||
|
deadline.Challenge,
|
||
|
deadline.FaultCutoff,
|
||
|
deadline.WPoStPeriodDeadlines,
|
||
|
deadline.WPoStProvingPeriod,
|
||
|
deadline.WPoStChallengeWindow,
|
||
|
deadline.WPoStChallengeLookback,
|
||
|
deadline.FaultDeclarationCutoff,
|
||
|
)
|
||
|
if err != nil {
|
||
|
return err
|
||
|
}
|
||
|
|
||
|
return nil
|
||
|
}
|
||
|
|
||
|
var _ harmonytask.TaskInterface = &WdPostTask{}
|