You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
This report documents 7 critical issues and 1 low-priority issue discovered during production development of a REST API server. All critical issues cause indefinite hangs or runtime panics, significantly impacting production viability. Each issue has documented workarounds, but they require careful query design and significantly impact development ergonomics.
Low-Priority:
8. UUID Field Type Warning Spam (cosmetic)
Issue 1: CAST Operations + JOINs Cause Indefinite Hang
Severity:⚠️ CRITICAL (Most Severe)
Description:
Using CAST operations in SELECT queries that include JOIN operations causes the driver to hang indefinitely after reading all data but before returning results to the application.
Symptoms:
Query executes successfully in IRIS SQL Prompt
Driver reads all data from database
Hangs indefinitely after reading, before returning results
No error message, timeout, or panic
Application becomes completely unresponsive
Must force-kill application
Minimal Reproduction:
package main
import (
"database/sql""log"
_ "github.com/caretdev/go-irisnative"
)
funcmain() {
db, _:=sql.Open("iris", "iris://_SYSTEM:password@localhost:1972/USER")
deferdb.Close()
// This query hangs indefinitelyquery:=` SELECT CAST(o.Org_ID AS VARCHAR(36)), CAST(o.Org_Active AS INTEGER), ot.Org_Type_Name FROM GPC.Organization o LEFT JOIN GPC.Org_Type ot ON o.Org_Org_Type_ID = ot.Org_Type_ID `rows, err:=db.Query(query) // Hangs here - never returnsiferr!=nil {
log.Fatal(err)
}
deferrows.Close()
// Never reaches this pointforrows.Next() {
varidstringvaractiveintvartypeNamestringrows.Scan(&id, &active, &typeName)
}
}
Workaround:
Remove CAST operations from queries with JOINs and scan native IRIS types:
// Query without CAST (works fine)query:=` SELECT o.Org_ID, -- No CAST o.Org_Active, -- No CAST COALESCE(ot.Org_Type_Name, '') FROM GPC.Organization o LEFT JOIN GPC.Org_Type ot ON o.Org_Org_Type_ID = ot.Org_Type_ID`rows, err:=db.Query(query) // Works fine// Scan native types directlyvarorgIDstringvaractivebool// Scan as bool, NOT intvartypeNamestringrows.Scan(&orgID, &active, &typeName)
Note: CAST works fine in single-table queries without JOINs.
Impact: High - requires rewriting all queries with JOINs to avoid CAST, complicates type handling.
Issue 2: SQL Functions (UPPER/LOWER) + JOINs Cause Hang
Severity:⚠️ CRITICAL
Description:
Using SQL functions like UPPER() or LOWER() in WHERE clauses combined with JOIN operations causes the driver to hang indefinitely.
Symptoms:
Query hangs indefinitely
No error message or timeout
Application becomes unresponsive
Minimal Reproduction:
funcauthenticateUser(db*sql.DB, usernamestring) error {
// This query hangs indefinitelyquery:=` SELECT u.PUser_ID, u.PUser_Name, ut.PUser_Type_Name, o.Org_Name FROM GPC.Platform_User u LEFT JOIN GPC.Platform_User_Type ut ON u.PUser_User_Type_ID = ut.PUser_Type_ID LEFT JOIN GPC.Organization o ON u.PUser_Organisation_ID = o.Org_ID WHERE UPPER(u.PUser_Name) = UPPER(?) `varuserID, userName, typeName, orgNamestringerr:=db.QueryRow(query, username).Scan(&userID, &userName, &typeName, &orgName)
// Hangs here - never returnsreturnerr
}
Workaround:
Split into separate queries - use functions only in queries without JOINs:
funcauthenticateUser(db*sql.DB, usernamestring) error {
// Query 1: Get user (no JOINs, UPPER() is safe)query1:=` SELECT PUser_ID, PUser_Name, PUser_User_Type_ID, PUser_Organisation_ID FROM GPC.Platform_User WHERE UPPER(PUser_Name) = UPPER(?) `varuserID, userName, userTypeID, orgIDstringdb.QueryRow(query1, username).Scan(&userID, &userName, &userTypeID, &orgID)
// Query 2: Get user type name (separate, no JOIN)query2:=`SELECT PUser_Type_Name FROM GPC.Platform_User_Type WHERE PUser_Type_ID = ?`vartypeNamestringdb.QueryRow(query2, userTypeID).Scan(&typeName)
// Query 3: Get org name (separate, no JOIN)query3:=`SELECT Org_Name FROM GPC.Organization WHERE Org_ID = ?`varorgNamestringdb.QueryRow(query3, orgID).Scan(&orgName)
returnnil
}
Impact: High - requires splitting authentication/search queries into multiple round-trips, reduces performance.
Issue 3: Parameterized UUIDs in WHERE Clauses Cause Panic
Severity:⚠️ CRITICAL
Description:
Using parameterized UUID placeholders (?) in WHERE clauses causes runtime panic with "index out of range" error.
Panic Message:
panic: runtime error: index out of range [30] with length 30
github.com/caretdev/go-irisnative/src/list.GetListItem
Symptoms:
Runtime panic when executing query
Stack trace points to go-irisnative internal code
Only affects UUID fields (VARCHAR, INT fields work normally with parameters)
Minimal Reproduction:
funccountBrandsByOrg(db*sql.DB, orgIDstring) (int, error) {
varcountint// This causes panicquery:=`SELECT COUNT(*) FROM GPC.Brand WHERE Brand_Org_ID = ?`err:=db.QueryRow(query, orgID).Scan(&count)
// PANIC: runtime error: index out of range [30] with length 30returncount, err
}
// Test casefuncmain() {
db, _:=sql.Open("iris", "iris://_SYSTEM:password@localhost:1972/USER")
deferdb.Close()
orgID:="12CA3331-ABA3-426B-9A4F-E4E8B5CA24F5"count, _:=countBrandsByOrg(db, orgID) // Panics here
}
Workaround:
Embed UUID directly in SQL string using fmt.Sprintf:
funccountBrandsByOrg(db*sql.DB, orgIDstring) (int, error) {
varcountint// Workaround: Embed UUID directly in SQL stringquery:=fmt.Sprintf(`SELECT COUNT(*) FROM GPC.Brand WHERE Brand_Org_ID = '%s'`, orgID)
err:=db.QueryRow(query).Scan(&count) // Works finereturncount, err
}
Note: UUIDs are still validated by Chi router parsing and database query execution, so SQL injection risk is minimal in this specific case. However, this workaround is not ideal for general-purpose code.
Impact: High - breaks standard Go database/sql parameterized query patterns, increases SQL injection risk.
Issue 4: COUNT Queries with JOINs Cause Panic
Severity:⚠️ CRITICAL
Description:
Using JOIN operations in COUNT(*) queries causes driver panic.
Symptoms:
Runtime panic when executing COUNT with JOINs
Application crashes
Minimal Reproduction:
funccountOrganizations(db*sql.DB) (int, error) {
varcountint// This causes panicquery:=` SELECT COUNT(*) FROM GPC.Organization o LEFT JOIN GPC.Org_Type ot ON o.Org_Org_Type_ID = ot.Org_Type_ID `err:=db.QueryRow(query).Scan(&count) // Panics herereturncount, err
}
Workaround:
Keep COUNT queries simple without JOINs:
funclistOrganizations(db*sql.DB, page, pageSizeint) ([]Organization, error) {
// Count query - no JOINsvartotalCountintcountQuery:=`SELECT COUNT(*) FROM GPC.Organization`db.QueryRow(countQuery).Scan(&totalCount)
// Main query with JOINsoffset:= (page-1) *pageSizequery:=fmt.Sprintf(` SELECT o.Org_ID, o.Org_Name, COALESCE(ot.Org_Type_Name, '') FROM GPC.Organization o LEFT JOIN GPC.Org_Type ot ON o.Org_Org_Type_ID = ot.Org_Type_ID ORDER BY o.Org_Name OFFSET %d ROWS FETCH NEXT %d ROWS ONLY `, offset, pageSize)
rows, _:=db.Query(query)
// ... process resultsreturnorganizations, nil
}
Impact: Medium - requires separating COUNT and main queries, complicates pagination logic.
Issue 5: Out-of-Bounds Pagination with JOINs Leaks Connections
Severity:⚠️ CRITICAL
Description:
When OFFSET exceeds available data in queries with JOINs, the driver doesn't properly clean up connections, leading to connection pool exhaustion over time.
Symptoms:
Connections remain open after query completes
Connection pool gradually exhausts
Eventually causes "too many connections" errors
Problem worsens with smaller connection pool sizes
Minimal Reproduction:
funcgetOrganizationsPage999(db*sql.DB) error {
// Assume table only has 10 rowsquery:=` SELECT o.Org_ID, o.Org_Name, COALESCE(ot.Org_Type_Name, '') FROM GPC.Organization o LEFT JOIN GPC.Org_Type ot ON o.Org_Org_Type_ID = ot.Org_Type_ID ORDER BY o.Org_Name OFFSET 10000 ROWS FETCH NEXT 50 ROWS ONLY `rows, err:=db.Query(query)
iferr!=nil {
returnerr
}
deferrows.Close() // Connection still leaks despite defer// No rows returned, but connection is not properly cleaned upforrows.Next() {
// Never executed - no rows
}
returnnil
}
funcmain() {
db, _:=sql.Open("iris", "iris://_SYSTEM:password@localhost:1972/USER")
db.SetMaxOpenConns(5)
db.SetMaxIdleConns(2)
deferdb.Close()
// Call repeatedly - connections leak each timefori:=0; i<20; i++ {
getOrganizationsPage999(db)
}
// Connection pool now exhausted
}
Workaround:
Validate pagination bounds before executing query:
funclistOrganizations(db*sql.DB, page, pageSizeint) ([]Organization, int, error) {
// Get total count firstvartotalCountintdb.QueryRow(`SELECT COUNT(*) FROM GPC.Organization`).Scan(&totalCount)
// Validate pagination bounds BEFORE executing main querytotalPages:= (totalCount+pageSize-1) /pageSizeiftotalCount==0 {
totalPages=1
}
offset:= (page-1) *pageSizeifpage>totalPages||offset>=totalCount {
// Return empty result without executing query - prevents leakreturn []Organization{}, totalCount, nil
}
// Safe to execute query - offset is validquery:=fmt.Sprintf(` SELECT o.Org_ID, o.Org_Name, COALESCE(ot.Org_Type_Name, '') FROM GPC.Organization o LEFT JOIN GPC.Org_Type ot ON o.Org_Org_Type_ID = ot.Org_Type_ID ORDER BY o.Org_Name OFFSET %d ROWS FETCH NEXT %d ROWS ONLY `, offset, pageSize)
rows, _:=db.Query(query)
deferrows.Close() // Now safe - no leak// ... process resultsreturnorganizations, totalCount, nil
}
Impact: High - requires pagination validation in all list endpoints, can cause production outages if overlooked.
Issue 6: Large Data Volume with JOINs Causes rows.Next() Hang
Severity:⚠️ CRITICAL
Description:
Queries with JOINs that fetch large VARCHAR fields (VARCHAR(1024)) exceed the driver's buffer capacity (~72KB-150KB combined data), causing rows.Next() to hang indefinitely after processing a limited number of rows.
Symptoms:
Works fine with small page sizes (8-15 rows depending on data volume per row)
Hangs with larger page sizes or when fetching many large VARCHAR fields
rows.Next() blocks indefinitely mid-iteration
Driver appears to read data but hangs before returning
Exact row limit depends on: (number of VARCHAR(1024) fields) × (number of JOINs) × (row count)
User table (2× VARCHAR(256) + 2 JOINs): ~18 rows = 86KB → hang
Minimal Reproduction:
funclistProducts(db*sql.DB) error {
// Product table has 8× VARCHAR(1024) heavyweight fields// ~8KB per row × 9 rows = ~72KB with JOINs → HANGSquery:=` SELECT TOP 50 p.Prod_ID, p.Prod_Name, p.Prod_Description, -- VARCHAR(1024) p.Prod_Allergens, -- VARCHAR(1024) p.Prod_Nutritional_Info, -- VARCHAR(1024) p.Prod_Product_Size, -- VARCHAR(1024) p.Prod_Project_Storage, -- VARCHAR(1024) p.Prod_Product_Ingredients, -- VARCHAR(1024) p.Prod_Packaging, -- VARCHAR(1024) p.Prod_Packaging_Percentage, -- VARCHAR(1024) COALESCE(o.Org_Name, ''), COALESCE(b.Brand_Name, '') FROM GPC.Product p LEFT JOIN GPC.Organization o ON p.Prod_Org_ID = o.Org_ID LEFT JOIN GPC.Brand b ON p.Prod_Brand_ID = b.Brand_ID ORDER BY p.Prod_Name `rows, _:=db.Query(query)
deferrows.Close()
count:=0forrows.Next() { // Hangs after ~9 iterationscount++log.Printf("Row %d", count) // Last log: "Row 9"varid, name, desc, allergens, nutrition, size, storage, ingredients, packaging, packPercent, org, brandstringrows.Scan(&id, &name, &desc, &allergens, &nutrition, &size, &storage, &ingredients, &packaging, &packPercent, &org, &brand)
}
// Never completes iterationreturnnil
}
Workaround 1: Lightweight List Query Pattern (Recommended)
Exclude heavyweight VARCHAR fields from list queries, keep them for detail queries:
funclistProducts(db*sql.DB) ([]Product, error) {
// Lightweight list query - removed 8 heavyweight fields// ~2KB per row × 50+ rows = 100KB total → WORKSquery:=` SELECT TOP 50 p.Prod_ID, p.Prod_SKU, p.Prod_Name, p.Prod_Category, -- Removed: 8× VARCHAR(1024) heavyweight fields COALESCE(o.Org_Name, ''), COALESCE(b.Brand_Name, ''), p.Prod_Active, p.Prod_Date_Created FROM GPC.Product p LEFT JOIN GPC.Organization o ON p.Prod_Org_ID = o.Org_ID LEFT JOIN GPC.Brand b ON p.Prod_Brand_ID = b.Brand_ID ORDER BY p.Prod_Name `rows, _:=db.Query(query)
deferrows.Close()
varproducts []Productforrows.Next() { // Works fine for 50+ rowsvarpProductrows.Scan(&p.ID, &p.SKU, &p.Name, &p.Category, &p.OrgName, &p.BrandName, &p.Active, &p.DateCreated)
products=append(products, p)
}
returnproducts, nil
}
funcgetProductDetail(db*sql.DB, idstring) (*Product, error) {
// Detail query - includes ALL fields (only 1 row, no iteration issue)query:=` SELECT p.*, COALESCE(o.Org_Name, ''), COALESCE(b.Brand_Name, '') FROM GPC.Product p LEFT JOIN GPC.Organization o ON p.Prod_Org_ID = o.Org_ID LEFT JOIN GPC.Brand b ON p.Prod_Brand_ID = b.Brand_ID WHERE p.Prod_ID = ? `varpProducterr:=db.QueryRow(query, id).Scan(&p.ID, &p.Name, &p.Description, /* all fields */)
return&p, err
}
Workaround 2: Timeout Pattern
Wrap rows.Next() in goroutine with timeout to return partial data gracefully:
funclistProductsWithTimeout(db*sql.DB) ([]Product, error) {
query:=`SELECT ... FROM GPC.Product p LEFT JOIN ...`rows, _:=db.Query(query)
varproducts []ProducttimedOut:=falsefor {
// Wrap rows.Next() in goroutine with timeouthasNext:=make(chanbool, 1)
gofunc() {
hasNext<-rows.Next()
}()
// Wait for Next() with 2-second timeoutvarhasRowboolselect {
casehasRow=<-hasNext:
if!hasRow {
break
}
case<-time.After(2*time.Second):
// Timeout - driver hung, return partial datatimedOut=truelog.Printf("WARNING: rows.Next() timeout after 2s, returning %d partial results", len(products))
break
}
if!hasRow {
break
}
varpProductrows.Scan(&p.ID, &p.Name/* ... */)
products=append(products, p)
}
// Close rows only if we didn't timeout (timeout leaves goroutine stuck)if!timedOut {
rows.Close()
}
returnproducts, nil
}
Impact: Critical - requires complete redesign of list queries or implementing timeout pattern. Lightweight list pattern is recommended as it also follows REST API best practices.
Issue 7: Invalid Foreign Key References Cause Hang
Severity:⚠️ CRITICAL
Description:
Queries that reference invalid foreign key GUIDs (GUIDs that don't exist in the referenced table) cause the driver to hang indefinitely instead of returning an error or empty result.
Symptoms:
Query hangs indefinitely
No error message or timeout
Graceful shutdown fails (30s timeout)
Connection remains open indefinitely
Typically discovered during authentication or data retrieval
Minimal Reproduction:
-- Step 1: Insert user with invalid org_id (GUID doesn't exist in Organization table)INSERT INTOGPC.Platform_User (
PUser_ID,
PUser_Name,
PUser_Organisation_ID
) VALUES (
NEWID(),
'testuser',
'00000000-0000-0000-0000-000000000000'-- Invalid org_id
)
funcauthenticateUser(db*sql.DB, usernamestring) error {
// Get user with invalid org_idvarorgIDstringquery1:=`SELECT PUser_Organisation_ID FROM GPC.Platform_User WHERE PUser_Name = ?`db.QueryRow(query1, username).Scan(&orgID)
// orgID = "00000000-0000-0000-0000-000000000000" (doesn't exist in Organization table)// This query hangs indefinitelyvarorgNamestringquery2:=`SELECT Org_Name FROM GPC.Organization WHERE Org_ID = ?`err:=db.QueryRow(query2, orgID).Scan(&orgName)
// Expected: sql.ErrNoRows// Actual: Hangs indefinitely ❌returnerr
}
Workaround:
Validate foreign keys exist before insert/update:
funccreateUser(db*sql.DB, userName, orgIDstring) error {
// Validate organization exists firstvarcountintquery:=`SELECT COUNT(*) FROM GPC.Organization WHERE Org_ID = ?`db.QueryRow(query, orgID).Scan(&count)
ifcount==0 {
returnerrors.New("invalid organization ID - organization does not exist")
}
// Safe to insert user - org_id is validinsertQuery:=` INSERT INTO GPC.Platform_User (PUser_ID, PUser_Name, PUser_Organisation_ID) VALUES (NEWID(), ?, ?) `_, err:=db.Exec(insertQuery, userName, orgID)
returnerr
}
Finding Existing Invalid Data:
-- Find users with invalid org_idSELECTu.PUser_ID, u.PUser_Name, u.PUser_Organisation_IDFROMGPC.Platform_User u
LEFT JOINGPC.Organization o ONu.PUser_Organisation_ID=o.Org_IDWHEREu.PUser_Organisation_IDIS NOT NULLANDo.Org_ID IS NULL;
-- Fix: Set to NULL or valid org_idUPDATEGPC.Platform_UserSET PUser_Organisation_ID =NULL-- or a valid org_idWHERE PUser_ID ='<user-guid>';
Impact: High - can cause production authentication failures, requires foreign key validation before all inserts/updates.
Issue 8: UUID Field Type Warning Spam (Low Priority)
Severity: LOW (Cosmetic Only)
Description:
When reading UUID fields without CAST operations (which must be avoided due to Issue #1), the driver logs warnings for every UUID field read.
Query Restructuring: Separate queries for counts, avoid CAST, avoid functions with JOINs
Data Validation: Validate foreign keys before insert/update, validate pagination bounds
Type Handling: Scan native IRIS types, handle multiple type possibilities
Defensive Patterns: Implement timeout wrappers, lightweight list queries
Testing: Extensive testing with edge cases (out-of-bounds pages, large datasets, invalid foreign keys)
All issues have documented workarounds, but they significantly impact development ergonomics and require careful architectural decisions to ensure production stability.
If you need additional details, reproduction cases, or have questions about any of these issues, please feel free to ask. We have extensive production logs and test cases available.
Critical Issues Report: go-irisnative v0.2.1
Environment Information
Executive Summary
This report documents 7 critical issues and 1 low-priority issue discovered during production development of a REST API server. All critical issues cause indefinite hangs or runtime panics, significantly impacting production viability. Each issue has documented workarounds, but they require careful query design and significantly impact development ergonomics.
Critical Issues:
Low-Priority:
8. UUID Field Type Warning Spam (cosmetic)
Issue 1: CAST Operations + JOINs Cause Indefinite Hang
Severity:⚠️ CRITICAL (Most Severe)
Description:
Using CAST operations in SELECT queries that include JOIN operations causes the driver to hang indefinitely after reading all data but before returning results to the application.
Symptoms:
Minimal Reproduction:
Workaround:
Remove CAST operations from queries with JOINs and scan native IRIS types:
Note: CAST works fine in single-table queries without JOINs.
Impact: High - requires rewriting all queries with JOINs to avoid CAST, complicates type handling.
Issue 2: SQL Functions (UPPER/LOWER) + JOINs Cause Hang
Severity:⚠️ CRITICAL
Description:
Using SQL functions like
UPPER()orLOWER()in WHERE clauses combined with JOIN operations causes the driver to hang indefinitely.Symptoms:
Minimal Reproduction:
Workaround:
Split into separate queries - use functions only in queries without JOINs:
Impact: High - requires splitting authentication/search queries into multiple round-trips, reduces performance.
Issue 3: Parameterized UUIDs in WHERE Clauses Cause Panic
Severity:⚠️ CRITICAL
Description:
Using parameterized UUID placeholders (
?) in WHERE clauses causes runtime panic with "index out of range" error.Panic Message:
Symptoms:
Minimal Reproduction:
Workaround:
Embed UUID directly in SQL string using fmt.Sprintf:
Note: UUIDs are still validated by Chi router parsing and database query execution, so SQL injection risk is minimal in this specific case. However, this workaround is not ideal for general-purpose code.
Impact: High - breaks standard Go database/sql parameterized query patterns, increases SQL injection risk.
Issue 4: COUNT Queries with JOINs Cause Panic
Severity:⚠️ CRITICAL
Description:
Using JOIN operations in
COUNT(*)queries causes driver panic.Symptoms:
Minimal Reproduction:
Workaround:
Keep COUNT queries simple without JOINs:
Impact: Medium - requires separating COUNT and main queries, complicates pagination logic.
Issue 5: Out-of-Bounds Pagination with JOINs Leaks Connections
Severity:⚠️ CRITICAL
Description:
When OFFSET exceeds available data in queries with JOINs, the driver doesn't properly clean up connections, leading to connection pool exhaustion over time.
Symptoms:
Minimal Reproduction:
Workaround:
Validate pagination bounds before executing query:
Impact: High - requires pagination validation in all list endpoints, can cause production outages if overlooked.
Issue 6: Large Data Volume with JOINs Causes rows.Next() Hang
Severity:⚠️ CRITICAL
Description:
Queries with JOINs that fetch large VARCHAR fields (VARCHAR(1024)) exceed the driver's buffer capacity (~72KB-150KB combined data), causing
rows.Next()to hang indefinitely after processing a limited number of rows.Symptoms:
rows.Next()blocks indefinitely mid-iterationMeasured Thresholds:
Minimal Reproduction:
Workaround 1: Lightweight List Query Pattern (Recommended)
Exclude heavyweight VARCHAR fields from list queries, keep them for detail queries:
Workaround 2: Timeout Pattern
Wrap
rows.Next()in goroutine with timeout to return partial data gracefully:Impact: Critical - requires complete redesign of list queries or implementing timeout pattern. Lightweight list pattern is recommended as it also follows REST API best practices.
Issue 7: Invalid Foreign Key References Cause Hang
Severity:⚠️ CRITICAL
Description:
Queries that reference invalid foreign key GUIDs (GUIDs that don't exist in the referenced table) cause the driver to hang indefinitely instead of returning an error or empty result.
Symptoms:
Minimal Reproduction:
Workaround:
Validate foreign keys exist before insert/update:
Finding Existing Invalid Data:
Impact: High - can cause production authentication failures, requires foreign key validation before all inserts/updates.
Issue 8: UUID Field Type Warning Spam (Low Priority)
Severity: LOW (Cosmetic Only)
Description:
When reading UUID fields without CAST operations (which must be avoided due to Issue #1), the driver logs warnings for every UUID field read.
Warning Message:
Symptoms:
Example:
Workaround:
Implement filtered log writer to suppress these warnings:
Impact: Low - cosmetic only, but significantly clutters logs in production.
Summary and Patterns
Statistics
Common Patterns Observed
1. JOIN Operations Are Problematic
JOIN operations trigger issues when combined with:
2. UUID Handling Issues
Multiple issues specifically with UUID fields:
3. Resource Management Issues
Driver fails to properly clean up resources:
Impact on Development
These issues require:
All issues have documented workarounds, but they significantly impact development ergonomics and require careful architectural decisions to ensure production stability.
Recommended Actions
Additional Information
If you need additional details, reproduction cases, or have questions about any of these issues, please feel free to ask. We have extensive production logs and test cases available.
Test Environment Available:
Thank you for maintaining this driver. These issues are blockers for production use, and we look forward to seeing them resolved.