clientv3/snapshot/v3_snapshot.go
func (s *v3Manager) Status(dbPath string) (ds Status, err error) {
	if _, err = os.Stat(dbPath); err != nil {
		return ds, err
	}

	db, err := bolt.Open(dbPath, 0400, &bolt.Options{ReadOnly: true})
	if err != nil {
		return ds, err
	}
	defer db.Close()

	h := crc32.New(crc32.MakeTable(crc32.Castagnoli))

	if err = db.View(func(tx *bolt.Tx) error {
		// check snapshot file integrity first
		var dbErrStrings []string
		for dbErr := range tx.Check() {
			dbErrStrings = append(dbErrStrings, dbErr.Error())
		}
		if len(dbErrStrings) > 0 {
			return fmt.Errorf("snapshot file integrity check failed. %d errors found.\n"+strings.Join(dbErrStrings, "\n"), len(dbErrStrings))
		}
		ds.TotalSize = tx.Size()
		c := tx.Cursor()
		for next, _ := c.First(); next != nil; next, _ = c.Next() {
			b := tx.Bucket(next)
			if b == nil {
				return fmt.Errorf("cannot get hash of bucket %s", string(next))
			}
			h.Write(next)
			iskeyb := (string(next) == "key")
			b.ForEach(func(k, v []byte) error {
				h.Write(k)
				h.Write(v)
				if iskeyb {
					rev := bytesToRev(k)
					ds.Revision = rev.main
				}
				ds.TotalKey++
				return nil
			})
		}
		return nil
	}); err != nil {
		return ds, err
	}

	ds.Hash = h.Sum32()
	return ds, nil
}
func (s *v3Manager) Status(dbPath string) (ds Status, err error) {
	if _, err = os.Stat(dbPath); err != nil {
		return ds, err
	}

	db, err := bolt.Open(dbPath, 0400, &bolt.Options{ReadOnly: true})
	if err != nil {
		return ds, err
	}
	defer db.Close()

	h := crc32.New(crc32.MakeTable(crc32.Castagnoli))

	if err = db.View(func(tx *bolt.Tx) error {
		// check snapshot file integrity first
		var dbErrStrings []string
		for dbErr := range tx.Check() {
			dbErrStrings = append(dbErrStrings, dbErr.Error())
		}
		if len(dbErrStrings) > 0 {
			return fmt.Errorf("snapshot file integrity check failed. %d errors found.\n"+strings.Join(dbErrStrings, "\n"), len(dbErrStrings))
		}
		ds.TotalSize = tx.Size()
		c := tx.Cursor()
		for next, _ := c.First(); next != nil; next, _ = c.Next() {
			b := tx.Bucket(next)
			if b == nil {
				return fmt.Errorf("cannot get hash of bucket %s", string(next))
			}
			h.Write(next)
			iskeyb := (string(next) == "key")
			b.ForEach(func(k, v []byte) error {
				h.Write(k)
				h.Write(v)
				if iskeyb {
					rev := bytesToRev(k)
					ds.Revision = rev.main
				}
				ds.TotalKey++
				return nil
			})
		}
		return nil
	}); err != nil {
		return ds, err
	}

	ds.Hash = h.Sum32()
	return ds, nil
}
func ( s * v3Manager ) Status ( dbPath string ) ( ds Status , err error ) { if _ , err = os . Stat ( dbPath ) ; err != nil { return ds , err } db , err := bolt . Open ( dbPath , 0400 , & bolt . Options { ReadOnly : true } ) if err != nil { return ds , err } defer db . Close ( ) h := crc32 . New ( crc32 . MakeTable ( crc32 . Castagnoli ) ) if err = db . View ( func ( tx * bolt . Tx ) error { // check snapshot file integrity first var dbErrStrings [ ] string for dbErr := range tx . Check ( ) { dbErrStrings = append ( dbErrStrings , dbErr . Error ( ) ) } if len ( dbErrStrings ) > 0 { return fmt . Errorf ( " \n " + strings . Join ( dbErrStrings , " \n " ) , len ( dbErrStrings ) ) } ds . TotalSize = tx . Size ( ) c := tx . Cursor ( ) for next , _ := c . First ( ) ; next != nil ; next , _ = c . Next ( ) { b := tx . Bucket ( next ) if b == nil { return fmt . Errorf ( " " , string ( next ) ) } h . Write ( next ) iskeyb := ( string ( next ) == " " ) b . ForEach ( func ( k , v [ ] byte ) error { h . Write ( k ) h . Write ( v ) if iskeyb { rev := bytesToRev ( k ) ds . Revision = rev . main } ds . TotalKey ++ return nil } ) } return nil } ) ; err != nil { return ds , err } ds . Hash = h . Sum32 ( ) return ds , nil }
// Status returns the snapshot file information.
Status returns the snapshot file information .