github.com/klaytn/klaytn@v1.10.2/datasync/chaindatafetcher/kas/repository_checkpoint.go (about) 1 // Copyright 2020 The klaytn Authors 2 // This file is part of the klaytn library. 3 // 4 // The klaytn library is free software: you can redistribute it and/or modify 5 // it under the terms of the GNU Lesser General Public License as published by 6 // the Free Software Foundation, either version 3 of the License, or 7 // (at your option) any later version. 8 // 9 // The klaytn library is distributed in the hope that it will be useful, 10 // but WITHOUT ANY WARRANTY; without even the implied warranty of 11 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 // GNU Lesser General Public License for more details. 13 // 14 // You should have received a copy of the GNU Lesser General Public License 15 // along with the klaytn library. If not, see <http://www.gnu.org/licenses/>. 16 17 package kas 18 19 import ( 20 "errors" 21 22 "github.com/jinzhu/gorm" 23 ) 24 25 const checkpointKey = "checkpoint" 26 27 func (r *repository) WriteCheckpoint(checkpoint int64) error { 28 data := &FetcherMetadata{ 29 Key: checkpointKey, 30 Value: checkpoint, 31 } 32 33 return r.db.Save(data).Error 34 } 35 36 func (r *repository) ReadCheckpoint() (int64, error) { 37 checkpoint, err := r.readCheckpoint() 38 if r.isRecordNotFoundError(err) { 39 return 0, nil 40 } 41 return checkpoint, err 42 } 43 44 func (r *repository) readCheckpoint() (int64, error) { 45 data := &FetcherMetadata{} 46 if err := r.db.Where("`key` = ?", checkpointKey).First(data).Error; err != nil { 47 return 0, err 48 } 49 return data.Value, nil 50 } 51 52 func (r *repository) isRecordNotFoundError(err error) bool { 53 return errors.Is(err, gorm.ErrRecordNotFound) || gorm.IsRecordNotFoundError(err) 54 }