Skip to content

Fix db recover when repo.RefList is nil#1488

Open
agustinhenze wants to merge 1 commit into
aptly-dev:masterfrom
agustinhenze:fix-find-dangling-db-recover
Open

Fix db recover when repo.RefList is nil#1488
agustinhenze wants to merge 1 commit into
aptly-dev:masterfrom
agustinhenze:fix-find-dangling-db-recover

Conversation

@agustinhenze

@agustinhenze agustinhenze commented Sep 8, 2025

Copy link
Copy Markdown
Contributor

It tries to find dangling references but repo has no reference list and it ended up with a nice trace

root@hostname:~/aptly-stress-tester# aptly db recover
Recovering database...
Checking database integrity...
panic: runtime error: invalid memory address or nil pointer dereference [recovered]
        panic: runtime error: invalid memory address or nil pointer dereference
[signal SIGSEGV: segmentation violation code=0x1 addr=0x0 pc=0x13b9c24]

goroutine 1 [running]:
github.com/aptly-dev/aptly/cmd.Run.func1()
        /home/tin/projects/aptly/cmd/run.go:17 +0xc5
panic({0x15abf60?, 0x2da1650?})
        /usr/local/go/src/runtime/panic.go:792 +0x132
github.com/aptly-dev/aptly/deb.(*PackageRefList).ForEach(...)
        /home/tin/projects/aptly/deb/reflist.go:83
github.com/aptly-dev/aptly/deb.FindDanglingReferences(...)
        /home/tin/projects/aptly/deb/find_dangling.go:15
github.com/aptly-dev/aptly/cmd.checkRepo(0xc0015827e0)
        /home/tin/projects/aptly/cmd/db_recover.go:63 +0xa4
github.com/aptly-dev/aptly/cmd.checkIntegrity.(*LocalRepoCollection).ForEach.func1({0xc0002fc2d0?, 0xc0010c2018?, 0x1?}, {0xc11004c000, 0xb9, 0xe0})
        /home/tin/projects/aptly/deb/local.go:229 +0xa7
github.com/aptly-dev/aptly/database/goleveldb.(*storage).ProcessByPrefix(0xc0005ae140?, {0xc0010c2018, 0x1, 0x1}, 0xc00107be40)
        /home/tin/projects/aptly/database/goleveldb/storage.go:114 +0x184
github.com/aptly-dev/aptly/deb.(*LocalRepoCollection).ForEach(...)
        /home/tin/projects/aptly/deb/local.go:222
github.com/aptly-dev/aptly/cmd.checkIntegrity()
        /home/tin/projects/aptly/cmd/db_recover.go:51 +0x7f
github.com/aptly-dev/aptly/cmd.aptlyDBRecover(0x40ed4e?, {0xc0003b5c30?, 0x2?, 0xc00057bdb0?})
        /home/tin/projects/aptly/cmd/db_recover.go:27 +0x93
github.com/smira/commander.(*Command).Dispatch(0xc00052c900, {0xc0003b5c30, 0x0, 0x0})
        /go/pkg/mod/github.com/smira/commander@v0.0.0-20140515201010-f408b00e68d5/commands.go:305 +0xd1
github.com/smira/commander.(*Command).Dispatch(0xc00052ca20, {0xc0003b5c30, 0x1, 0x1})
        /go/pkg/mod/github.com/smira/commander@v0.0.0-20140515201010-f408b00e68d5/commands.go:283 +0x165
github.com/smira/commander.(*Command).Dispatch(0xc000516000, {0xc0003b5c20, 0x2, 0x2})
        /go/pkg/mod/github.com/smira/commander@v0.0.0-20140515201010-f408b00e68d5/commands.go:283 +0x165
github.com/aptly-dev/aptly/cmd.Run(0xc000516000, {0xc000194280?, 0x0?, 0x24a5bc8?}, 0x1)
        /home/tin/projects/aptly/cmd/run.go:41 +0x1b9
main.main()
        /home/tin/projects/aptly/main.go:27 +0x10d

After applying the fix you get

root@hostname:~/aptly-stress-tester# aptly db recover
Recovering database...
Checking database integrity...
Warning: Repo "stress_test_repo_3532" has no reference list (severely corrupted), initializing empty list
Warning: Repo "stress_test_repo_9244" has no reference list (severely corrupted), initializing empty list

Also it tries better to avoid nil references in repos, and snapshots

@agustinhenze agustinhenze force-pushed the fix-find-dangling-db-recover branch 3 times, most recently from 66ad5ef to bf79262 Compare September 8, 2025 14:17
@agustinhenze

Copy link
Copy Markdown
Contributor Author

Mmm is this CI failure something related to my change? 🤔

@neolynx neolynx requested a review from a team November 8, 2025 12:11
@neolynx neolynx self-assigned this Nov 8, 2025
@neolynx

neolynx commented Nov 8, 2025

Copy link
Copy Markdown
Member

Mmm is this CI failure something related to my change? 🤔

I'll have a look...
But I do not seem to be able to re-run the pipeline... maybe you need to give me access to your branch ?

@agustinhenze agustinhenze force-pushed the fix-find-dangling-db-recover branch from bf79262 to 468915f Compare December 4, 2025 14:43
@neolynx neolynx added the fix tests Tests are failing label Jan 4, 2026
@neolynx

neolynx commented Jan 4, 2026

Copy link
Copy Markdown
Member

failing test seems to be related I think...

@neolynx neolynx force-pushed the fix-find-dangling-db-recover branch 2 times, most recently from 052bb5d to e06912a Compare January 24, 2026 12:30
It tries to find dangling references but repo has no reference list and
it ended up with a nice trace
```
root@hostname:/usr/scratch/agustin/aptly-stress-tester# aptly db recover
Recovering database...
Checking database integrity...
panic: runtime error: invalid memory address or nil pointer dereference [recovered]
        panic: runtime error: invalid memory address or nil pointer dereference
[signal SIGSEGV: segmentation violation code=0x1 addr=0x0 pc=0x13b9c24]

goroutine 1 [running]:
github.com/aptly-dev/aptly/cmd.Run.func1()
        /home/tin/projects/aptly/cmd/run.go:17 +0xc5
panic({0x15abf60?, 0x2da1650?})
        /usr/local/go/src/runtime/panic.go:792 +0x132
github.com/aptly-dev/aptly/deb.(*PackageRefList).ForEach(...)
        /home/tin/projects/aptly/deb/reflist.go:83
github.com/aptly-dev/aptly/deb.FindDanglingReferences(...)
        /home/tin/projects/aptly/deb/find_dangling.go:15
github.com/aptly-dev/aptly/cmd.checkRepo(0xc0015827e0)
        /home/tin/projects/aptly/cmd/db_recover.go:63 +0xa4
github.com/aptly-dev/aptly/cmd.checkIntegrity.(*LocalRepoCollection).ForEach.func1({0xc0002fc2d0?, 0xc0010c2018?, 0x1?}, {0xc11004c000, 0xb9, 0xe0})
        /home/tin/projects/aptly/deb/local.go:229 +0xa7
github.com/aptly-dev/aptly/database/goleveldb.(*storage).ProcessByPrefix(0xc0005ae140?, {0xc0010c2018, 0x1, 0x1}, 0xc00107be40)
        /home/tin/projects/aptly/database/goleveldb/storage.go:114 +0x184
github.com/aptly-dev/aptly/deb.(*LocalRepoCollection).ForEach(...)
        /home/tin/projects/aptly/deb/local.go:222
github.com/aptly-dev/aptly/cmd.checkIntegrity()
        /home/tin/projects/aptly/cmd/db_recover.go:51 +0x7f
github.com/aptly-dev/aptly/cmd.aptlyDBRecover(0x40ed4e?, {0xc0003b5c30?, 0x2?, 0xc00057bdb0?})
        /home/tin/projects/aptly/cmd/db_recover.go:27 +0x93
github.com/smira/commander.(*Command).Dispatch(0xc00052c900, {0xc0003b5c30, 0x0, 0x0})
        /go/pkg/mod/github.com/smira/commander@v0.0.0-20140515201010-f408b00e68d5/commands.go:305 +0xd1
github.com/smira/commander.(*Command).Dispatch(0xc00052ca20, {0xc0003b5c30, 0x1, 0x1})
        /go/pkg/mod/github.com/smira/commander@v0.0.0-20140515201010-f408b00e68d5/commands.go:283 +0x165
github.com/smira/commander.(*Command).Dispatch(0xc000516000, {0xc0003b5c20, 0x2, 0x2})
        /go/pkg/mod/github.com/smira/commander@v0.0.0-20140515201010-f408b00e68d5/commands.go:283 +0x165
github.com/aptly-dev/aptly/cmd.Run(0xc000516000, {0xc000194280?, 0x0?, 0x24a5bc8?}, 0x1)
        /home/tin/projects/aptly/cmd/run.go:41 +0x1b9
main.main()
        /home/tin/projects/aptly/main.go:27 +0x10d
```

After applying the fix you get
```
root@hostname:~/aptly-stress-tester# aptly db recover
Recovering database...
Checking database integrity...
Warning: Repo "stress_test_repo_3532" has no reference list (severely corrupted), initializing empty list
Warning: Repo "stress_test_repo_9244" has no reference list (severely corrupted), initializing empty list
```

Also it tries better to avoid nil references in repos, and snapshots
@neolynx neolynx force-pushed the fix-find-dangling-db-recover branch from e06912a to bff264f Compare April 26, 2026 16:44
@neolynx

neolynx commented Apr 26, 2026

Copy link
Copy Markdown
Member

rebased on master

@neolynx neolynx added this to the 1.6.3 milestone May 2, 2026
@neolynx neolynx mentioned this pull request May 2, 2026
7 tasks
@neolynx

neolynx commented Jun 7, 2026

Copy link
Copy Markdown
Member

Hi @agustinhenze

I merged #1565 to fixing db recover... do you think this one is still needed ?

@neolynx neolynx added please confirm resolved We believe the issue is resolved ! if so, please close the issue, thanks ;-) and removed fix tests Tests are failing labels Jun 7, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

please confirm resolved We believe the issue is resolved ! if so, please close the issue, thanks ;-)

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants