Skip to content

Commit 9d47f2e

Browse files
committed
complete the getmetadata method
1 parent f88f0b9 commit 9d47f2e

File tree

5 files changed

+80
-10
lines changed

5 files changed

+80
-10
lines changed

coordinator/internal/logic/provertask/batch_prover_task.go

Lines changed: 27 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -194,12 +194,37 @@ func (bp *BatchProverTask) Assign(ctx *gin.Context, getTaskParameter *coordinato
194194
return taskMsg, nil
195195
}
196196

197-
func (bp *BatchProverTask) GetTaskMetaData(taskID string) (string, error) {
197+
func (bp *BatchProverTask) GetTaskMetaData(ctx *gin.Context, proverTask *orm.ProverTask, hardForkName string) (string, error) {
198+
taskID := proverTask.TaskID
198199
if cached := bp.taskCache.Query(taskID); cached != nil {
199200
return cached.MetaData, nil
200201
}
201202

202-
return "", fmt.Errorf("can not re-acquire the metadata for specified task, see coordinator log for the reason")
203+
// for most case we simply query metadata from cache, but if the task is not in cache, we need quite a few
204+
// effort to resume the cached universal task
205+
batchTask, err := bp.batchOrm.GetBatchByHash(ctx.Copy(), taskID)
206+
if err != nil {
207+
log.Error("failed to get chunk by hash", "task_id", taskID, "err", err)
208+
return "", ErrCoordinatorInternalFailure
209+
}
210+
taskMsg, err := bp.formatProverTask(ctx.Copy(), proverTask, batchTask, hardForkName)
211+
if err != nil {
212+
log.Error("re-format prover task failure", "task_id", taskID, "err", err)
213+
return "", ErrCoordinatorInternalFailure
214+
}
215+
216+
taskMsg, err = bp.applyUniversal(taskMsg)
217+
if err != nil {
218+
log.Error("Generate universal prover task failure", "task_id", taskID, "type", "chunk")
219+
return "", ErrCoordinatorInternalFailure
220+
}
221+
222+
if cached := bp.taskCache.Query(taskID); cached == nil {
223+
log.Error("Still can not obtain metadata, something wrong?", "task_id", taskID, "type", "chunk")
224+
return "", ErrCoordinatorInternalFailure
225+
} else {
226+
return cached.MetaData, nil
227+
}
203228
}
204229

205230
func (bp *BatchProverTask) formatProverTask(ctx context.Context, task *orm.ProverTask, batch *orm.Batch, hardForkName string) (*coordinatorType.GetTaskSchema, error) {

coordinator/internal/logic/provertask/bundle_prover_task.go

Lines changed: 22 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -192,12 +192,32 @@ func (bp *BundleProverTask) Assign(ctx *gin.Context, getTaskParameter *coordinat
192192
return taskMsg, nil
193193
}
194194

195-
func (bp *BundleProverTask) GetTaskMetaData(taskID string) (string, error) {
195+
func (bp *BundleProverTask) GetTaskMetaData(ctx *gin.Context, proverTask *orm.ProverTask, hardForkName string) (string, error) {
196+
taskID := proverTask.TaskID
196197
if cached := bp.taskCache.Query(taskID); cached != nil {
197198
return cached.MetaData, nil
198199
}
199200

200-
return "", fmt.Errorf("can not re-acquire the metadata for specified task, see coordinator log for the reason")
201+
// for most case we simply query metadata from cache, but if the task is not in cache, we need quite a few
202+
// effort to resume the cached universal task
203+
taskMsg, err := bp.formatProverTask(ctx.Copy(), proverTask, hardForkName)
204+
if err != nil {
205+
log.Error("re-format prover task failure", "task_id", taskID, "err", err)
206+
return "", ErrCoordinatorInternalFailure
207+
}
208+
209+
taskMsg, err = bp.applyUniversal(taskMsg)
210+
if err != nil {
211+
log.Error("Generate universal prover task failure", "task_id", taskID, "type", "chunk")
212+
return "", ErrCoordinatorInternalFailure
213+
}
214+
215+
if cached := bp.taskCache.Query(taskID); cached == nil {
216+
log.Error("Still can not obtain metadata, something wrong?", "task_id", taskID, "type", "chunk")
217+
return "", ErrCoordinatorInternalFailure
218+
} else {
219+
return cached.MetaData, nil
220+
}
201221
}
202222

203223
func (bp *BundleProverTask) formatProverTask(ctx context.Context, task *orm.ProverTask, hardForkName string) (*coordinatorType.GetTaskSchema, error) {

coordinator/internal/logic/provertask/chunk_prover_task.go

Lines changed: 27 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -189,12 +189,37 @@ func (cp *ChunkProverTask) Assign(ctx *gin.Context, getTaskParameter *coordinato
189189
return taskMsg, nil
190190
}
191191

192-
func (cp *ChunkProverTask) GetTaskMetaData(taskID string) (string, error) {
192+
func (cp *ChunkProverTask) GetTaskMetaData(ctx *gin.Context, proverTask *orm.ProverTask, hardForkName string) (string, error) {
193+
taskID := proverTask.TaskID
193194
if cached := cp.taskCache.Query(taskID); cached != nil {
194195
return cached.MetaData, nil
195196
}
196197

197-
return "", fmt.Errorf("can not re-acquire the metadata for specified task, see coordinator log for the reason")
198+
// for most case we simply query metadata from cache, but if the task is not in cache, we need quite a few
199+
// effort to resume the cached universal task
200+
chunkTask, err := cp.chunkOrm.GetChunkByHash(ctx.Copy(), taskID)
201+
if err != nil {
202+
log.Error("failed to get chunk by hash", "task_id", taskID, "err", err)
203+
return "", ErrCoordinatorInternalFailure
204+
}
205+
taskMsg, err := cp.formatProverTask(ctx.Copy(), proverTask, chunkTask, hardForkName)
206+
if err != nil {
207+
log.Error("re-format prover task failure", "task_id", taskID, "err", err)
208+
return "", ErrCoordinatorInternalFailure
209+
}
210+
211+
taskMsg, err = cp.applyUniversal(taskMsg)
212+
if err != nil {
213+
log.Error("Generate universal prover task failure", "task_id", taskID, "type", "chunk")
214+
return "", ErrCoordinatorInternalFailure
215+
}
216+
217+
if cached := cp.taskCache.Query(taskID); cached == nil {
218+
log.Error("Still can not obtain metadata, something wrong?", "task_id", taskID, "type", "chunk")
219+
return "", ErrCoordinatorInternalFailure
220+
} else {
221+
return cached.MetaData, nil
222+
}
198223
}
199224

200225
func (cp *ChunkProverTask) formatProverTask(ctx context.Context, task *orm.ProverTask, chunk *orm.Chunk, hardForkName string) (*coordinatorType.GetTaskSchema, error) {

coordinator/internal/logic/provertask/prover_task.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ var (
3434
// ProverTask the interface of a collector who send data to prover
3535
type ProverTask interface {
3636
Assign(ctx *gin.Context, getTaskParameter *coordinatorType.GetTaskParameter) (*coordinatorType.GetTaskSchema, error)
37-
GetTaskMetaData(taskID string) (string, error)
37+
GetTaskMetaData(ctx *gin.Context, task *orm.ProverTask, HardForkName string) (string, error)
3838
}
3939

4040
// BaseProverTask a base prover task which contain series functions

coordinator/internal/logic/submitproof/proof_receiver.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -179,11 +179,11 @@ func (m *ProofReceiverLogic) HandleZkProof(ctx *gin.Context, proofParameter coor
179179
var err error
180180
switch message.ProofType(proofParameter.TaskType) {
181181
case message.ProofTypeChunk:
182-
metadata, err = m.ChunkTask.GetTaskMetaData(proofParameter.TaskID)
182+
metadata, err = m.ChunkTask.GetTaskMetaData(ctx.Copy(), proverTask, hardForkName)
183183
case message.ProofTypeBatch:
184-
metadata, err = m.BatchTask.GetTaskMetaData(proofParameter.TaskID)
184+
metadata, err = m.BatchTask.GetTaskMetaData(ctx.Copy(), proverTask, hardForkName)
185185
case message.ProofTypeBundle:
186-
metadata, err = m.BundleTask.GetTaskMetaData(proofParameter.TaskID)
186+
metadata, err = m.BundleTask.GetTaskMetaData(ctx.Copy(), proverTask, hardForkName)
187187
}
188188

189189
if err != nil {

0 commit comments

Comments
 (0)