From 2929af2300d15ff188cbf409c2ceb4d2f9f60dae Mon Sep 17 00:00:00 2001 From: DoMyJob <46307927+DoMyJob@users.noreply.github.com> Date: Tue, 9 Apr 2019 17:58:42 +0800 Subject: [PATCH] Add more test cases for error handling. Signed-off-by: DoMyJob <46307927+DoMyJob@users.noreply.github.com> --- opt/property.go | 2 +- recovery/recovery.go | 19 +++++-- recovery/recovery_option.go | 4 +- recovery/recovery_p2p.go | 2 + recovery/recovery_test.go | 104 +++++++++++++++++++++++++++++++++++- 5 files changed, 122 insertions(+), 9 deletions(-) diff --git a/opt/property.go b/opt/property.go index 09f7ea7..ef60f72 100644 --- a/opt/property.go +++ b/opt/property.go @@ -2,7 +2,7 @@ package opt // properties for internal use. var ( - DebugPrint = false // Debug print + DebugPrint = true // Debug print IgnoreStorageHeaderErr = true // Ignore storage header mismatch with config. expendRatioM = 1.2 // Expending ratio of M (col of index table) ) diff --git a/recovery/recovery.go b/recovery/recovery.go index d2b1a64..1409320 100644 --- a/recovery/recovery.go +++ b/recovery/recovery.go @@ -50,6 +50,16 @@ const ( ErrorTask ) +func (response ResponseCode) String() string{ + switch response{ + case SuccessTask : return "SuccessTask" + case ProcessingTask : return "ProcessingTask" + case PendingTask : return "PendingTask" + case ErrorTask : return "ErrorTask" + default: return "UnkownStatus" + } +} + // TaskResponse descirbes the status of the task type TaskResponse struct { Status ResponseCode @@ -99,7 +109,6 @@ func (codec *DataRecoverEngine) startRecieveTask() { running++ task := codec.taskList[0] codec.taskList = codec.taskList[1:] - codec.recordTaskResponse(task, TaskResponse{PendingTask, ""}) go codec.doRecoverData(task, done) } } @@ -109,12 +118,13 @@ func (codec *DataRecoverEngine) startRecieveTask() { func (codec *DataRecoverEngine) RecoverData(td *TaskDescription) TaskResponse { err := codec.validateTask(td) if err != nil { - return TaskResponse{ErrorTask, err.Error()} + codec.recordError(td, err) + return codec.RecoverStatus(td) } // sequenced op on chan codec.taskCh <- td - + codec.recordTaskResponse(td, TaskResponse{PendingTask, "Task is pending"}) return codec.RecoverStatus(td) } @@ -257,7 +267,7 @@ func (codec *DataRecoverEngine) getShardFromNetwork(hash common.Hash, loc P2PLoc case err := <- errCh: return nil, err case <- time.After(timeoutMS*time.Millisecond): - return nil, fmt.Errorf("Error: p2p get %v from %v timeout", hash, loc) + return nil, fmt.Errorf("Error: p2p get %x from %x timeout", hash, loc) case <- stopSigCh: return nil, nil } @@ -265,7 +275,6 @@ func (codec *DataRecoverEngine) getShardFromNetwork(hash common.Hash, loc P2PLoc func (codec *DataRecoverEngine) retrieveData(loc P2PLocation, hash common.Hash, data []byte) error { // Read p2p network - // time.Sleep(30*time.Millisecond) codec.p2p.RetrieveData(loc, data) return nil } \ No newline at end of file diff --git a/recovery/recovery_option.go b/recovery/recovery_option.go index 4993aee..3f13450 100644 --- a/recovery/recovery_option.go +++ b/recovery/recovery_option.go @@ -15,9 +15,9 @@ type DataCodecOptions struct{ // DefaultRecoveryOption gives the default data recovery codec config func DefaultRecoveryOption() *DataCodecOptions { return &DataCodecOptions{ - 5, 3, - 2, + 4, + 12, 5000, } } \ No newline at end of file diff --git a/recovery/recovery_p2p.go b/recovery/recovery_p2p.go index 5989adb..93a6885 100644 --- a/recovery/recovery_p2p.go +++ b/recovery/recovery_p2p.go @@ -3,6 +3,7 @@ package recovery import( // "fmt" // "bytes" + "time" "github.com/ethereum/go-ethereum/common" ) @@ -22,6 +23,7 @@ type P2PMock struct{ // RetrieveData get data from p2p network address func (mock P2PMock) RetrieveData(peer P2PLocation, msgByte []byte) error { + time.Sleep(50*time.Millisecond) copy(msgByte, mock.network[peer]) return nil } diff --git a/recovery/recovery_test.go b/recovery/recovery_test.go index ae57a74..ddef6f3 100644 --- a/recovery/recovery_test.go +++ b/recovery/recovery_test.go @@ -88,7 +88,6 @@ func TestDataRecovery(t *testing.T) { } tdList := []*TaskDescription{} - // for i:=0;i<1;i++{ for i:=0;i