Skip to content

Unknown error when high concurrency #229

@mintzhao

Description

@mintzhao

using xorm,when high concurrency,unknown error was occurs.
Check the source code.Consider that driver.go can be wrong sometimes.

code:

    // New mysqlConn
    mc := &mysqlConn{
        maxPacketAllowed: maxPacketSize,
        maxWriteSize:     maxPacketSize - 1,
    }
    mc.cfg, err = parseDSN(dsn)
    if err != nil {
        return nil, err
    }

    // Connect to Server
    nd := net.Dialer{Timeout: mc.cfg.timeout}
    mc.netConn, err = nd.Dial(mc.cfg.net, mc.cfg.addr)
    if err != nil {
        return nil, err
    }
    mc.buf = newBuffer(mc.netConn)

    // Reading Handshake Initialization Packet
    cipher, err := mc.readInitPacket()
    if err != nil {
        mc.Close()
        return nil, err
    }

    // Send Client Authentication Packet
    if err = mc.writeAuthPacket(cipher); err != nil {
        mc.Close()
        return nil, err
    }

    // Read Result Packet
    err = mc.readResultOK()
    if err != nil {
        // Retry with old authentication method, if allowed
        if mc.cfg.allowOldPasswords && err == errOldPassword {
            if err = mc.writeOldAuthPacket(cipher); err != nil {
                mc.Close()
                return nil, err
            }
            if err = mc.readResultOK(); err != nil {
                mc.Close()
                return nil, err
            }
        } else {
            mc.Close()
            return nil, err
        }

    }

mc.cfg can be nil sometimes.But it's depends on net.So its hard to reproduced.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions