code: func (fs *FileStore) recoverServerInfo() (*spb.ServerInfo, error) {
  	info := &spb.ServerInfo{}
  	buf, size, _, err := readRecord(fs.serverFile.handle, nil, false, fs.crcTable, fs.opts.DoCRC)
  	if err != nil {
  		if err == io.EOF {
  			// We are done, no state recovered
  			return nil, nil
  		}
  		fs.log.Errorf("Server file %q corrupted: %v", fs.serverFile.name, err)
  		fs.log.Errorf("Follow instructions in documentation in order to recover from this")
  		return nil, err
  	}
  	// Check that the size of the file is consistent with the size
  	// of the record we are supposed to recover. Account for the
  	// 12 bytes (4 + recordHeaderSize) corresponding to the fileVersion and
  	// record header.
  	fstat, err := fs.serverFile.handle.Stat()
  	if err != nil {
  		return nil, err
  	}
  	expectedSize := int64(size + 4 + recordHeaderSize)
  	if fstat.Size() != expectedSize {
  		return nil, fmt.Errorf("incorrect file size, expected %v bytes, got %v bytes",
  			expectedSize, fstat.Size())
  	}
  	// Reconstruct now
  	if err := info.Unmarshal(buf[:size]); err != nil {
  		return nil, err
  	}
  	return info, nil
  }
docs: // recoverServerInfo reads the server file and returns a ServerInfo structure