Git Product home page Git Product logo

Comments (2)

duckontheweb avatar duckontheweb commented on May 28, 2024

@karimmamer @michaeltrs I believe you both were experiencing this issue. I'll add a comment with the proposed solution below. Let me know if you have any additional detail on the problem or feedback on the solution.

from radiant-mlhub.

duckontheweb avatar duckontheweb commented on May 28, 2024

Proposed solution is 2-fold:

  1. Allow users to resume downloads instead of always starting from scratch

    We could change the signature of the client.download_archive function to the following:

    def download_archive(
        archive_id: str,
        output_dir: Path = None,
        *,
        if_exists: Literal['skip', 'overwrite', 'resume'] = 'resume',
        **session_kwargs
    ) -> Path:

    The default behavior would be to resume the download, but users would have the option to overwrite the existing file or skip it if it exists. If resuming a download, the client would check the size of the existing file against the Content-Length heading for the download. If they are the same, then it would skip the download. If the file size is less than the Content-Length of the download then the client would make a Range request for just the remaining bytes and append them to the existing file. If the existing file size is greater than the Content-Length it would raise an exception (this shouldn't happen unless the remote archive changed).

  2. Automatically retry failed requests from broken connections

    The client would automatically retry any requests that fail due to connection errors up to a specified maximum number of retries. If a retry is successful, then the attempts would reset to 0. This would ensure that larger files wouldn't ultimately fail just because they have a better chance of having more failures over the life of the entire download.

    I'm thinking we will implement this at the requests.Session level so we can take advantage of it for all requests.

from radiant-mlhub.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.