diff --git a/tests/linearizability/history.go b/tests/linearizability/history.go index 42fc99ae3881..978974bfb97e 100644 --- a/tests/linearizability/history.go +++ b/tests/linearizability/history.go @@ -56,16 +56,7 @@ func (h *appendableHistory) AppendGet(key string, start, end time.Time, resp *cl func (h *appendableHistory) AppendPut(key, value string, start, end time.Time, resp *clientv3.PutResponse, err error) { if err != nil { - h.failed = append(h.failed, porcupine.Operation{ - ClientId: h.id, - Input: EtcdRequest{Op: Put, Key: key, PutData: value}, - Call: start.UnixNano(), - Output: EtcdResponse{Err: err}, - Return: 0, // For failed writes we don't know when request has really finished. - }) - // Operations of single client needs to be sequential. - // As we don't know return time of failed operations, all new writes need to be done with new client id. - h.id = h.idProvider.ClientId() + h.appendFailed(Put, key, start, err) return } var revision int64 @@ -83,16 +74,7 @@ func (h *appendableHistory) AppendPut(key, value string, start, end time.Time, r func (h *appendableHistory) AppendDelete(key string, start, end time.Time, resp *clientv3.DeleteResponse, err error) { if err != nil { - h.failed = append(h.failed, porcupine.Operation{ - ClientId: h.id, - Input: EtcdRequest{Op: Delete, Key: key}, - Call: start.UnixNano(), - Output: EtcdResponse{Err: err}, - Return: 0, // For failed writes we don't know when request has really finished. - }) - // Operations of single client needs to be sequential. - // As we don't know return time of failed operations, all new writes need to be done with new client id. - h.id = h.idProvider.ClientId() + h.appendFailed(Delete, key, start, err) return } var revision int64 @@ -110,6 +92,19 @@ func (h *appendableHistory) AppendDelete(key string, start, end time.Time, resp }) } +func (h *appendableHistory) appendFailed(op Operation, key string, start time.Time, err error) { + h.failed = append(h.failed, porcupine.Operation{ + ClientId: h.id, + Input: EtcdRequest{Op: op, Key: key}, + Call: start.UnixNano(), + Output: EtcdResponse{Err: err}, + Return: 0, // For failed writes we don't know when request has really finished. + }) + // Operations of single client needs to be sequential. + // As we don't know return time of failed operations, all new writes need to be done with new client id. + h.id = h.idProvider.ClientId() +} + type history struct { successful []porcupine.Operation // failed requests are kept separate as we don't know return time of failed operations.