Exemplo n.º 1
0
Arquivo: ts.go Projeto: yuya008/godis
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
}