func (ts *Ts) RollBack(savepoint int) error { var tsr *TsRecord var ok bool var rollbacklist ds.List if ts.tsrList.Len() == 0 { return err_not_found_ts } if savepoint >= ts.curSavePoint { return err_not_found_savepoint } printTsrArray(ts.tsrList) if savepoint >= 0 { rollbacklist = ts.subTsrListBySavePoint(savepoint) } else { rollbacklist = ts.tsrList } printTsrArray(rollbacklist) printTsrArray(ts.tsrList) if rollbacklist.Len() == 0 { return nil } for e := rollbacklist.GetTailNode(); e != nil; e = e.Prev { if tsr, ok = e.Value.(*TsRecord); !ok { continue } ts.rollBackATsr(tsr) if tsr.Dbptr != nil { tsr.Dbptr.Lock.Cancel() } } return nil }