Skip to content

Milestones

List view

  • Code Quality, Bug Fixes & Test Coverage Based on comprehensive code audit (2026-05-11). **Critical Bugs:** - Transaction.scan limit=0 sends 0 results to TiKV instead of PHP_INT_MAX - LockResolver.getRegionInfo doesn't cache (unlike RawKvClient/Transaction) - classifyError mismatch between RawKvClient (13 types) and Transaction (7 types) **Code Smells:** - God Object RawKvClient (1421 lines) - 4 methods duplicated across 3 classes (resolveStoreAddress, getRegionInfo, classifyError, executeWithRetry) - Constructor in GrpcClientInterface (anti-pattern) - Fake executeWithRetryAsync (no-op wrapper) - Duplicate extractStatus/deserializeResponse in GrpcClient & GrpcFuture - LockResolver.checkDeadlock always returns false - Default mutable values in constructors **Performance:** - RegionCache::switchLeader O(n) linear scan - BatchAsyncExecutor created per batch call - StoreCache never injected via create() - StoreCache::put double-jitter **Security:** - TLS path traversal in TlsConfigBuilder - Private keys held in memory without clearing - No input size validation - TxnKvClient fallback to localhost **Missing Tests (Unit):** - RawKvClient: reverseScan, deleteRange, batchScan, splitIntoBatches, calculatePrefixEndKey, checksum, batchGet/Put/Delete, create() - Transaction: commit, scan, batchGet, executeWithRetry, classifyError - LockResolver: resolveLock, checkDeadlock - PdClient: scanRegions, callWithClusterIdRetry - GrpcClient/GrpcFuture: extractStatus, deserializeResponse, wait() **Missing Tests (E2E):** - Transaction conflict resolution, TLS, BatchPartialFailureException, reverse scan, client lifecycle

    No due date
    14/16 issues closed