szabodanika / microbin

A secure, configurable file-sharing and URL shortening web app written in Rust.
https://microbin.eu
BSD 3-Clause "New" or "Revised" License
2.66k stars 167 forks source link

Crash on create, no HTTP response #241

Open ForestJohnson opened 10 months ago

ForestJohnson commented 10 months ago

Describe the bug When we try to POST a paste, we get no HTTP response from server :(

To Reproduce Steps to reproduce the behavior:

try to post paste at https://paste.cyberia.club/

Expected behavior HTTP error response and meaningful error log message printed

Screenshots

thread 'actix-rt|system:0|arbiter:0' panicked at 'called `Result::unwrap()` on an `Err` value: PoisonError { .. }', src/endpoints/create.rs:77:41

image

Add any other context about the problem here.

its panicking on this line: https://github.com/szabodanika/microbin/blob/master/src/endpoints/create.rs#L77

reeseovine commented 10 months ago

\^ The microbin server is version 2.0.4 and managed with docker-compose.

ForestJohnson commented 10 months ago

please wait.......

image

ForestJohnson commented 10 months ago

Here is my chat log from how i figured out how to workaround this bug:

https://picopublish.sequentialread.com/files/matrix_export_microbin_debug/

The jist is, deleting the previous database json file seemed to fix it:

mv /var/lib/docker/volumes/microbin_microbin-data/_data/database.json /var/lib/docker/volumes/microbin_microbin-data/_data/database_backup.json

and then restarting microbin.

I don't want to post the database_backup.json publicly but I will say I did do some basic analysis on it using jq and it looks legit afaik:

database_backup.json is the original one that caused it to crash, presumably from a different microbin version.

database.json is the new one it created just now, where I was able to paste a single new pasta :spaghetti:

$ cat /var/lib/docker/volumes/microbin_microbin-data/_data/database.json | jq keys
[
  0
]
$ cat /var/lib/docker/volumes/microbin_microbin-data/_data/database_backup.json | jq keys
[
  0,
  1,
  2,
  3,
  4
]
$ cat /var/lib/docker/volumes/microbin_microbin-data/_data/database.json | jq '.[0] | keys'
[
  "burn_after_reads",
  "content",
  "created",
  "editable",
  "encrypt_client",
  "encrypt_server",
  "encrypted_key",
  "expiration",
  "extension",
  "file",
  "id",
  "last_read",
  "pasta_type",
  "private",
  "read_count",
  "readonly"
]
$ cat /var/lib/docker/volumes/microbin_microbin-data/_data/database_backup.json | jq '.[0] | keys'
[
  "burn_after_reads",
  "content",
  "created",
  "editable",
  "encrypt_client",
  "encrypt_server",
  "encrypted_key",
  "expiration",
  "extension",
  "file",
  "id",
  "last_read",
  "pasta_type",
  "private",
  "read_count",
  "readonly"
]
$ ls -lah /var/lib/docker/volumes/microbin_microbin-data/_data/
total 56K
drwxr-xr-x 3 root root 4.0K Nov 22 21:17 .
drwx-----x 3 root root 4.0K Jan  5  2023 ..
-rw-r--r-- 1 root root  307 Nov 22 21:18 database.json
-rw-r--r-- 1 root root  37K Nov 20 18:17 database_backup.json
ForestJohnson commented 10 months ago

@szabodanika if you would like I would be willing to share database_backup.json with you privately so you can reproduce the issue, just let me know :+1: thanks for making this nice software :)

ForestJohnson commented 10 months ago

Just a thought, maybe the app should try to load the DB when it starts up, and if it can't, then it should fail to start and print a helpful error message.

verymilan commented 8 months ago

+1 for that issue, happened here after a few months as well. a restart appears to be a temp workaround.