func (a *combinedAPIServer) GetFile(getFileRequest *pfs.GetFileRequest, apiGetFileServer pfs.Api_GetFileServer) (retErr error) { shard, clientConn, err := a.getShardAndClientConnIfNecessary(getFileRequest.Path, true) if err != nil { return err } if clientConn != nil { apiGetFileClient, err := pfs.NewApiClient(clientConn).GetFile(context.Background(), getFileRequest) if err != nil { return err } return protoutil.RelayFromStreamingBytesClient(apiGetFileClient, apiGetFileServer) } file, err := a.driver.GetFile(getFileRequest.Path, shard) if err != nil { return err } defer func() { if err := file.Close(); err != nil && retErr == nil { retErr = err } }() return protoutil.WriteToStreamingBytesServer( io.NewSectionReader(file, getFileRequest.OffsetBytes, getFileRequest.SizeBytes), apiGetFileServer, ) }
func (a *combinedAPIServer) PullDiff(pullDiffRequest *pfs.PullDiffRequest, apiPullDiffServer pfs.InternalApi_PullDiffServer) error { clientConn, err := a.getClientConnIfNecessary(int(pullDiffRequest.Shard), false) if err != nil { return err } if clientConn != nil { apiPullDiffClient, err := pfs.NewInternalApiClient(clientConn).PullDiff(context.Background(), pullDiffRequest) if err != nil { return err } return protoutil.RelayFromStreamingBytesClient(apiPullDiffClient, apiPullDiffServer) } var buffer bytes.Buffer a.driver.PullDiff(pullDiffRequest.Commit, int(pullDiffRequest.Shard), &buffer) return protoutil.WriteToStreamingBytesServer( &buffer, apiPullDiffServer, ) }