Print

Print


@alrossi, @paulmillar & @snafus : we have seen similar problem with TPC transfers from Castor to EOS a while ago (~2 years or so), this is a bug in the rados striper (that is used by the xrootd Ceph plug-in). For some chunk sizes it will happily serve garbage data for offsets past the end of file.

I was able to reproduce this with following code snipped executed against castor+ceph:

```
  File file;
  XRootDStatus st = file.Open( "root://host//path/to/file", OpenFlags::Read );
  if( !st.IsOK() )
  {
    std::cout << st.ToString() << std::endl;
    return 1;
  }

  char   buffer[1048576];
  uint64_t offset = 0;
  uint32_t size   = 1048576;
  uint32_t bytesRead = 0;

  do
  {
    st = file.Read( offset, size, buffer, bytesRead );
    if( !st.IsOK() )
    {
      std::cout << st.ToString() << std::endl;
      return 1;
    }
    std::cout << "Read " << bytesRead << " bytes!" << std::endl;
    std::cout << std::string( buffer, bytesRead ) << std::endl;
    offset += bytesRead;
  }
  while( bytesRead > 0 );
``` 

Note: if one uses a small buffer size like 1024 bytes it works correctly, however if you go for something bigger (like 1048576) it goes  bananas ;-)

`xrdcp` works correctly because it stats the source file ahead of doing the copy and then only reads number of bytes equal to the file size.

I never had time to file a bug report with Ceph and actually I'm not sure if anyone is maintaining the rados striper anymore. 

-- 
You are receiving this because you commented.
Reply to this email directly or view it on GitHub:
https://github.com/xrootd/xrootd/issues/1454#issuecomment-895314428

########################################################################
Use REPLY-ALL to reply to list

To unsubscribe from the XROOTD-DEV list, click the following link:
https://listserv.slac.stanford.edu/cgi-bin/wa?SUBED1=XROOTD-DEV&A=1