scylladb / scylla-ccm

Cassandra Cluster Manager, modified for Scylla
Apache License 2.0
20 stars 62 forks source link

ccmlib/node: cleanup unsealed sstables without Data.db component #505

Closed tchaikov closed 10 months ago

tchaikov commented 10 months ago

in 5cb0985a, we tried harder to remove more unsealed sstables. but that's not enough. there is chances that scylla leaves us with a single '-TOC.txt.tmp' component, without corresponding '-Data.db'. in that case, sstablelevelreset still fails when trying to open all tables in the sstable data directory.

so, in this change, instead of enumerating the sstables by globbing 'Data.db', we just glob 'TOC.txt.tmp'. and remove all components sharing the same prefix. this will clean all unsealed sstables files.

Fixes https://github.com/scylladb/scylladb/issues/15210 Signed-off-by: Kefu Chai kefu.chai@scylladb.com

tchaikov commented 10 months ago

tested using:

$ JAVA_HOME=/usr/lib/jvm/jre-11 pytest -c $PWD/pytest.ini --cassandra-dir $HOME/dev/scylladb/build/cmake offline_tools_test.py::TestOfflineTools::test_sstablelevelreset --count 20  --keep-test-dir 
============================================================================================================ test session starts =============================================================================================================
platform linux -- Python 3.11.4, pytest-7.3.1, pluggy-1.0.0
Using --randomly-seed=2281201837
rootdir: /home/kefu/dev/scylla-dtest
configfile: pytest.ini
plugins: timeout-1.4.2, subtests-0.5.0, repeat-0.9.1, randomly-3.5.0, metadata-2.0.4, forked-1.6.0, elk-reporter-0.2.1, xdist-2.2.0, flake8-1.1.1, html-3.2.0, typeguard-3.0.2, anyio-3.7.1, asyncio-0.20.3
timeout: 2700.0s
timeout method: signal
timeout func_only: False
asyncio: mode=Mode.STRICT
collected 20 items                                                                                                                                                                                                                           

offline_tools_test.py::TestOfflineTools::test_sstablelevelreset[8-20] PASSED                                                                                                                                                           [  5%]
offline_tools_test.py::TestOfflineTools::test_sstablelevelreset[3-20] PASSED                                                                                                                                                           [ 10%]
offline_tools_test.py::TestOfflineTools::test_sstablelevelreset[6-20] PASSED                                                                                                                                                           [ 15%]
offline_tools_test.py::TestOfflineTools::test_sstablelevelreset[12-20] PASSED                                                                                                                                                          [ 20%]
offline_tools_test.py::TestOfflineTools::test_sstablelevelreset[10-20] PASSED                                                                                                                                                          [ 25%]
offline_tools_test.py::TestOfflineTools::test_sstablelevelreset[18-20] PASSED                                                                                                                                                          [ 30%]
offline_tools_test.py::TestOfflineTools::test_sstablelevelreset[16-20] PASSED                                                                                                                                                          [ 35%]
offline_tools_test.py::TestOfflineTools::test_sstablelevelreset[17-20] PASSED                                                                                                                                                          [ 40%]
offline_tools_test.py::TestOfflineTools::test_sstablelevelreset[2-20] PASSED                                                                                                                                                           [ 45%]
offline_tools_test.py::TestOfflineTools::test_sstablelevelreset[15-20] PASSED                                                                                                                                                          [ 50%]
offline_tools_test.py::TestOfflineTools::test_sstablelevelreset[13-20] PASSED                                                                                                                                                          [ 55%]
offline_tools_test.py::TestOfflineTools::test_sstablelevelreset[11-20] PASSED                                                                                                                                                          [ 60%]
offline_tools_test.py::TestOfflineTools::test_sstablelevelreset[14-20] PASSED                                                                                                                                                          [ 65%]
offline_tools_test.py::TestOfflineTools::test_sstablelevelreset[1-20] PASSED                                                                                                                                                           [ 70%]
offline_tools_test.py::TestOfflineTools::test_sstablelevelreset[5-20] qPASSED                                                                                                                                                           [ 75%]
offline_tools_test.py::TestOfflineTools::test_sstablelevelreset[9-20] PASSED                                                                                                                                                           [ 80%]
offline_tools_test.py::TestOfflineTools::test_sstablelevelreset[19-20] PASSED                                                                                                                                                          [ 85%]
offline_tools_test.py::TestOfflineTools::test_sstablelevelreset[4-20] PASSED                                                                                                                                                           [ 90%]
offline_tools_test.py::TestOfflineTools::test_sstablelevelreset[20-20] PASSED                                                                                                                                                          [ 95%]
offline_tools_test.py::TestOfflineTools::test_sstablelevelreset[7-20] PASSED                                                                                                                                                           [100%]

============================================================================================================== warnings summary ==============================================================================================================
../../.local/lib/python3.11/site-packages/botocore/utils.py:25
  /home/kefu/.local/lib/python3.11/site-packages/botocore/utils.py:25: DeprecationWarning: 'cgi' is deprecated and slated for removal in Python 3.13
    import cgi

../../.local/lib/python3.11/site-packages/botocore/httpsession.py:28
  /home/kefu/.local/lib/python3.11/site-packages/botocore/httpsession.py:28: DeprecationWarning: 'urllib3.contrib.pyopenssl' module is deprecated and will be removed in a future release of urllib3 2.x. Read more in this issue: https://github.com/urllib3/urllib3/issues/2680
    from urllib3.contrib.pyopenssl import orig_util_SSLContext as SSLContext

../../.local/lib/python3.11/site-packages/cassandra/io/asyncorereactor.py:34
  /home/kefu/.local/lib/python3.11/site-packages/cassandra/io/asyncorereactor.py:34: DeprecationWarning: The asyncore module is deprecated and will be removed in Python 3.12. The recommended replacement is asyncio
    import asyncore

-- Docs: https://docs.pytest.org/en/stable/how-to/capture-warnings.html
================================================================================================= 20 passed, 3 warnings in 970.85s (0:16:10) =================================================================================================