code: func (f *followDatastoreFile) Read(p []byte) (int, error) {
  	offset := f.r.offset.seek
  	stop := false
  
  	for {
  		n, err := f.r.Read(p)
  		if err != nil && err == io.EOF {
  			_ = f.r.Close() // GET request body has been drained.
  			if stop {
  				return n, err
  			}
  			err = nil
  		}
  
  		if n > 0 {
  			return n, err
  		}
  
  		select {
  		case <-f.c:
  			// Wake up and stop polling once the body has been drained
  			stop = true
  		case <-time.After(f.i):
  		}
  
  		info, serr := f.r.Stat()
  		if serr != nil {
  			// Return EOF rather than 404 if the file goes away
  			if serr == os.ErrNotExist {
  				_ = f.r.Close()
  				return 0, io.EOF
  			}
  			return 0, serr
  		}
  
  		if info.Size() < offset {
  			// assume file has be truncated
  			offset, err = f.r.Seek(0, io.SeekStart)
  			if err != nil {
  				return 0, err
  			}
  		}
  	}
  }
docs: // Read reads up to len(b) bytes from the DatastoreFile being followed.
  // This method will block until data is read, an error other than io.EOF is returned or Close() is called.