The internet. The gift that keeps on giving. > On Nov 3, 2023, at 7:54 AM, Al Corona <alvarocorona1...@gmail.com> wrote: > > Off topic question. But does anyone know how I can gain admin access on my > work computer? > >> On Thursday, June 29, 2017 at 12:01:16 AM UTC-7 Kai Zhang wrote: >> Go version 1.8.3 >> >> In DB.QueryContext(), Go will close long live connection which exceeded the >> duration setted by DB.SetConnMaxLifetime(), the code is below >> database/sql/sql.go >> 895 func (db *DB) conn(ctx context.Context, strategy connReuseStrategy) >> (*driverConn, error) { >> 896 db.mu.Lock() >> 897 if db.closed { >> 898 db.mu.Unlock() >> 899 return nil, errDBClosed >> 900 } >> 901 // Check if the context is expired. >> 902 select { >> 903 default: >> 904 case <-ctx.Done(): >> 905 db.mu.Unlock() >> 906 return nil, ctx.Err() >> 907 } >> 908 lifetime := db.maxLifetime >> 909 >> 910 // Prefer a free connection, if possible. >> 911 numFree := len(db.freeConn) >> 912 if strategy == cachedOrNewConn && numFree > 0 { >> 913 conn := db.freeConn[0] >> 914 copy(db.freeConn, db.freeConn[1:]) >> 915 db.freeConn = db.freeConn[:numFree-1] >> 916 conn.inUse = true >> 917 db.mu.Unlock() >> 918 if conn.expired(lifetime) { >> 919 conn.Close() >> 920 return nil, driver.ErrBadConn >> 921 } >> >> >> 922 return conn, nil >> 923 } >> >> >> The problem is if driver.Close() has some handshake to tear down the >> connection, this may introduce unexpected latency. But the driver.Conn >> interface not mention this. >> database/sql/driver/driver.go >> 143 type Conn interface { >> 144 // Prepare returns a prepared statement, bound to this connection. >> 145 Prepare(query string) (Stmt, error) >> 146 >> 147 // Close invalidates and potentially stops any current >> 148 // prepared statements and transactions, marking this >> 149 // connection as no longer in use. >> 150 // >> 151 // Because the sql package maintains a free pool of >> 152 // connections and only calls Close when there's a surplus of >> 153 // idle connections, it shouldn't be necessary for drivers to >> 154 // do their own connection caching. >> >> >> 155 Close() error >> 156 >> 157 // Begin starts and returns a new transaction. >> 158 // >> 159 // Deprecated: Drivers should implement ConnBeginTx instead (or >> additionally). >> 160 Begin() (Tx, error) >> 161 } >> >> There is already a goroutine to clean the connections, why still need a >> synchronous check? >> database/sql/sql.go >> 750 func (db *DB) connectionCleaner(d time.Duration) { >> >> >> 751 const minInterval = time.Second >> 752 >> 753 if d < minInterval { >> 754 d = minInterval >> 755 } >> 756 t := time.NewTimer(d) >> 757 >> 758 for { >> 759 select { >> 760 case <-t.C: >> 761 case <-db.cleanerCh: // maxLifetime was changed or db was >> closed. >> 762 } >> 763 >> 764 db.mu.Lock() >> 765 d = db.maxLifetime >> 766 if db.closed || db.numOpen == 0 || d <= 0 { >> 767 db.cleanerCh = nil >> 768 db.mu.Unlock() >> 769 return >> 770 } >> 771 >> 772 expiredSince := nowFunc().Add(-d) >> 773 var closing []*driverConn >> 774 for i := 0; i < len(db.freeConn); i++ { >> 775 c := db.freeConn[i] >> 776 if c.createdAt.Before(expiredSince) { >> 777 closing = append(closing, c) >> 778 last := len(db.freeConn) - 1 >> 779 db.freeConn[i] = db.freeConn[last] >> 780 db.freeConn[last] = nil >> 781 db.freeConn = db.freeConn[:last] >> 782 i-- >> 783 } >> 784 } >> >> >> >> Is this by design or need to be fixed? > > -- > You received this message because you are subscribed to the Google Groups > "golang-nuts" group. > To unsubscribe from this group and stop receiving emails from it, send an > email to golang-nuts+unsubscr...@googlegroups.com. > To view this discussion on the web visit > https://groups.google.com/d/msgid/golang-nuts/c5f07284-32a9-4bc9-954c-edc7a8913843n%40googlegroups.com.
-- You received this message because you are subscribed to the Google Groups "golang-nuts" group. To unsubscribe from this group and stop receiving emails from it, send an email to golang-nuts+unsubscr...@googlegroups.com. To view this discussion on the web visit https://groups.google.com/d/msgid/golang-nuts/19E42518-C2A6-4AED-BDB4-B5848B29FE30%40ix.netcom.com.