Git Product home page Git Product logo

Comments (2)

benoist avatar benoist commented on July 24, 2024

I've been able to debug this further.

MySql::ResultSet#do_close

def do_close
    super

    while move_next
    end

    if row_packet = @row_packet
      row_packet.discard
    end
end

With the above code when the @row_packet is still filled, the exception is thrown, because the call to super closes the connection via statement.release_connection

This causes the connection to be closed when the max_idl_pool_size is reached. The default is 1 so in the above script the connection will be closed.

When this occurs the connection is closed before the row_packet is discarded, which means the remaining bytes cannot be skipped in the closed socket, hence the Closed stream (IO::Error)

I was able to get rid of the exception by calling super in an ensure block, this causes the connection to be closed after discarding the remaining row_packet.

def do_close
    while move_next
    end

    if row_packet = @row_packet
      row_packet.discard
    end
ensure
    super
end

from crystal-mysql.

bcardiff avatar bcardiff commented on July 24, 2024

Nice catch! I agree that the super should be called after the rows are discarded.
I think it would be great to add this case to the shared specs in crystal-db, maybe adding a slow_scalar_query that will perform the sleep to.

from crystal-mysql.

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.