pc2-segments: int64 segment keys (a double never matched the int64 hashtable keys, so job b claimed nothing in 88 passes); the work-list line; the log search widened

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
This commit is contained in:
igneum-labs 2026-10-06 07:50:46 +00:00
parent 9ea77aa2ae
commit 7bdc8a9060

View file

@ -163,7 +163,9 @@ if (-not (Test-Path (Join-Path $job 'prep.sh'))) { "RESULT refused $(Stamp) prep
$logDir = Join-Path $app 'logs'
function RateLines($since, $until) {
$out = @()
foreach ($f in (Get-ChildItem -Path $logDir -Filter 'app-*.log' -ErrorAction SilentlyContinue | Sort-Object LastWriteTime -Descending | Select-Object -First 2)) {
$files = @(Get-ChildItem -Path $logDir, (Join-Path (Split-Path $app -Parent) 'logs'), $app -Filter '*.log' -ErrorAction SilentlyContinue | Where-Object { $_.LastWriteTime -gt (Get-Date).AddHours(-3) } | Sort-Object LastWriteTime -Descending | Select-Object -First 4)
if ($files.Count -eq 0) { "RESULT rate_files none under $logDir, $(Join-Path (Split-Path $app -Parent) 'logs'), $app" }
foreach ($f in $files) {
foreach ($l in (Get-Content $f.FullName -ErrorAction SilentlyContinue | Where-Object { $_ -match '^(\d{10}) status: .* ([\d.]+) MH/s' })) {
$t = [int64]$Matches[1]; if ($t -ge $since -and $t -le $until) { $out += [double]$Matches[2] }
}
@ -189,16 +191,19 @@ function Candidates {
$work = Rpc 'igneum_getAssignedShards' @(@($keyHash), 600)
if (-not $work) { return @() }
$by = @{}
foreach ($w in $work) { $num = Hex $w.number; if ($num -lt $script:start) { continue }; if (-not $by.ContainsKey($num)) { $by[$num] = @() }; $by[$num] += $w }
foreach ($w in $work) { [int64]$num = Hex $w.number; if ($num -lt $script:start) { continue }; if (-not $by.ContainsKey($num)) { $by[$num] = @() }; $by[$num] += $w }
"RESULT worklist $(Stamp) entries=$(@($work).Count) blocks=$($by.Count) start=$($script:start) n=$($script:n) tipDaa=$tipDaa"
$need = [math]::Max(240, [math]::Ceiling($lastSegSecs * 1.5))
$segs = @()
$seen = @{}
foreach ($num in ($by.Keys | Sort-Object)) {
$k = [math]::Floor(($num - $script:start) / $script:n); $first = $script:start + $k * $script:n; $last = $first + $script:n - 1
# [int64] throughout: [math]::Floor gives a double, and a double never matches an int64 hashtable key (job b,
# 07:20Z to 07:50Z: every segment "not whole", 88 passes, nothing claimed)
[int64]$k = [math]::Floor(($num - $script:start) / $script:n); [int64]$first = $script:start + $k * $script:n; [int64]$last = $first + $script:n - 1
if ($seen.ContainsKey($first)) { continue }; $seen[$first] = $true
if ($attempted.ContainsKey($first)) { continue }
$whole = $true; $shards = @(); $lastDaa = 0; $wei = 0
for ($b = $first; $b -le $last; $b++) {
for ([int64]$b = $first; $b -le $last; $b++) {
if (-not $by.ContainsKey($b)) { $whole = $false; break }
$es = $by[$b] | Sort-Object { $_.shard } -Unique
foreach ($e in $es) {
@ -211,7 +216,7 @@ function Candidates {
}
if ($whole -and $shards.Count -gt 0) {
$deadline = $lastDaa + $script:unproven
if ($deadline -ge ($tipDaa + 1 + $need)) { $segs += @{ first = $first; last = $last; lastDaa = $lastDaa; deadline = $deadline; shards = $shards; margin = ($deadline - $tipDaa - 1) } }
if ($deadline -ge ($tipDaa + 1 + $need)) { $segs += @{ first = $first; last = $last; lastDaa = $lastDaa; deadline = $deadline; shards = $shards; margin = [int64]($deadline - $tipDaa - 1) } }
}
}
# newest first (the most time before the deadline); the app ranks by FNV(first, key) for the spread