Don't assume that size file is valid #99

Merged
jflysohigh merged 0 commits from dont-assume-cache-size-is-valid into main 2022-09-24 13:59:38 +02:00
jflysohigh commented 2022-09-14 09:39:03 +02:00 (Migrated from gitlab.com)

I don't know how my cache got into this state, but I had an empty size
file:

$ cat ~/.cache/mcg/127.0.0.1/size

$ stat ~/.cache/mcg/127.0.0.1/size
  File: /home/jeremy/.cache/mcg/127.0.0.1/size
  Size: 0         	Blocks: 0          IO Block: 4096   regular empty file
Device: 254,0	Inode: 18493061    Links: 1
Access: (0644/-rw-r--r--)  Uid: ( 1000/  jeremy)   Gid: (  100/   users)
Access: 2022-09-14 00:18:32.942885525 -0700
Modify: 2022-09-07 12:32:44.151734944 -0700
Change: 2022-09-07 12:32:44.151734944 -0700
 Birth: 2022-08-25 10:01:01.729717504 -0700

This was causing mcg's Library view to crash like this:

(.mcg-wrapped:879276): Gtk-CRITICAL **: 00:19:15.727: gtk_window_add_accel_group: assertion 'GTK_IS_WINDOW (window)' failed
Exception in thread Thread-1 (_set_playlist):
Traceback (most recent call last):
  File "/nix/store/c1vb2z3c64i0sd92iz7fv0lb720qcvhb-python3-3.10.6/lib/python3.10/threading.py", line 1016, in _bootstrap_inner
    self.run()
  File "/nix/store/c1vb2z3c64i0sd92iz7fv0lb720qcvhb-python3-3.10.6/lib/python3.10/threading.py", line 953, in run
    self._target(*self._args, **self._kwargs)
  File "/nix/store/l935dwmk93sq2chr4xxiipv9amyfcg43-CoverGrid-3.1/share/mcg/mcg/playlistpanel.py", line 256, in _set_playlist
    cache = client.MCGCache(host, size)
  File "/nix/store/l935dwmk93sq2chr4xxiipv9amyfcg43-CoverGrid-3.1/share/mcg/mcg/client.py", line 1279, in __init__
    self._read_size()
  File "/nix/store/l935dwmk93sq2chr4xxiipv9amyfcg43-CoverGrid-3.1/share/mcg/mcg/client.py", line 1293, in _read_size
    size = int(f.readline())
ValueError: invalid literal for int() with base 10: ''

Maybe mcg crashed while writing the size file at some point? I see
that it writes directly to the size file, which seems potentially risky:
it would probably be safer to write to a temp file and then (atomically)
move it. Still, it seems like a good practice to be resilient here.

After this change, here's what I see get printed by mcg:

(.mcg-wrapped:889856): Gtk-CRITICAL **: 00:37:00.045: gtk_window_add_accel_group: assertion 'GTK_IS_WINDOW (window)' failed
2022-09-14 00:37:00,076 WARNING: invalid cache file: /home/jeremy/.cache/mcg/127.0.0.1/size, deleting file
Traceback (most recent call last):
  File "/nix/store/vzgcfs00nq543hjk8hrk81k1rs8aqpqw-CoverGrid-3.1/share/mcg/mcg/client.py", line 1295, in _read_size
    size = int(f.readline())
ValueError: invalid literal for int() with base 10: ''

And then the problem goes away =)

I don't know how my cache got into this state, but I had an empty size file: $ cat ~/.cache/mcg/127.0.0.1/size $ stat ~/.cache/mcg/127.0.0.1/size File: /home/jeremy/.cache/mcg/127.0.0.1/size Size: 0 Blocks: 0 IO Block: 4096 regular empty file Device: 254,0 Inode: 18493061 Links: 1 Access: (0644/-rw-r--r--) Uid: ( 1000/ jeremy) Gid: ( 100/ users) Access: 2022-09-14 00:18:32.942885525 -0700 Modify: 2022-09-07 12:32:44.151734944 -0700 Change: 2022-09-07 12:32:44.151734944 -0700 Birth: 2022-08-25 10:01:01.729717504 -0700 This was causing mcg's Library view to crash like this: (.mcg-wrapped:879276): Gtk-CRITICAL **: 00:19:15.727: gtk_window_add_accel_group: assertion 'GTK_IS_WINDOW (window)' failed Exception in thread Thread-1 (_set_playlist): Traceback (most recent call last): File "/nix/store/c1vb2z3c64i0sd92iz7fv0lb720qcvhb-python3-3.10.6/lib/python3.10/threading.py", line 1016, in _bootstrap_inner self.run() File "/nix/store/c1vb2z3c64i0sd92iz7fv0lb720qcvhb-python3-3.10.6/lib/python3.10/threading.py", line 953, in run self._target(*self._args, **self._kwargs) File "/nix/store/l935dwmk93sq2chr4xxiipv9amyfcg43-CoverGrid-3.1/share/mcg/mcg/playlistpanel.py", line 256, in _set_playlist cache = client.MCGCache(host, size) File "/nix/store/l935dwmk93sq2chr4xxiipv9amyfcg43-CoverGrid-3.1/share/mcg/mcg/client.py", line 1279, in __init__ self._read_size() File "/nix/store/l935dwmk93sq2chr4xxiipv9amyfcg43-CoverGrid-3.1/share/mcg/mcg/client.py", line 1293, in _read_size size = int(f.readline()) ValueError: invalid literal for int() with base 10: '' Maybe mcg crashed while writing the `size` file at some point? I see that it writes directly to the size file, which seems potentially risky: it would probably be safer to write to a temp file and then (atomically) move it. Still, it seems like a good practice to be resilient here. After this change, here's what I see get printed by mcg: (.mcg-wrapped:889856): Gtk-CRITICAL **: 00:37:00.045: gtk_window_add_accel_group: assertion 'GTK_IS_WINDOW (window)' failed 2022-09-14 00:37:00,076 WARNING: invalid cache file: /home/jeremy/.cache/mcg/127.0.0.1/size, deleting file Traceback (most recent call last): File "/nix/store/vzgcfs00nq543hjk8hrk81k1rs8aqpqw-CoverGrid-3.1/share/mcg/mcg/client.py", line 1295, in _read_size size = int(f.readline()) ValueError: invalid literal for int() with base 10: '' And then the problem goes away =)
Sign in to join this conversation.
No description provided.