samtools / htslib

C library for high-throughput sequencing data formats
Other
784 stars 447 forks source link

htslib in pysam.fetch on S3 Bucket #1670

Open StephanHolgerD opened 10 months ago

StephanHolgerD commented 10 months ago

Hi, I want to report a potentially problematic behaviour using pysam.fetch on AWS S3 bucket infrastructure. Using the following pseudo code on a Bam file in a S3 Bucket will create requests without a defined end range.

Code

with pysam.AlignmentFile(bamfile_S3,filepath_index=baifile_S3) as f:       for r in f.fetch(chrom,start,end):

Request

image

This kind of 'open' request results in high egress costs because aws logs the whole file after the start byte as delivered, even if you stop reading the data at the end of your fetch coordinates.

Compared to the requests from IGV on S3 data (low egress costs, only the exact byte range is logged)

Request

image

Initially I reported this here:

https://github.com/pysam-developers/pysam/issues/1215

daviesrob commented 9 months ago

That looks unfortunate. We'll investigate and see if we can make these requests less open-ended. It may need a bit of rework to how our http requests work though so I can't be sure how long it will take.

StephanHolgerD commented 9 months ago

Thx, initially I used pysam.fetch which created the problematic open end requests. After some debugging I switched to pysam.view (more or less a wrapper around the samtools view cmd), this created clean range requests.

StephanHolgerD commented 4 months ago

I checked the requests from Samtools view, they are also open and will create inflated egress costs.

apena23 commented 1 month ago

Hi @StephanHolgerD , did pysam.view end up producing clean range requests? I wonder if you would be able to share some code for how you implemented it as I am looking for a similar functionality and haven't found an easy solution!