2025-12-16  Tobias Brox  <tobias@redpill-linpro.com>
	* thrash-protect.py: Removed Python 2 compatibility code (Python 3.9+ required now)
	* thrash-protect.py: Applied ruff linting and formatting, removed unused imports
	* thrash_protect.py: Renamed from thrash-protect.py (symlink reversed for setuptools)
	* thrash_protect.py: Automatic versioning via importlib.metadata
	* tests/test_thrash_protect.py: Migrated from nose to pytest
	* pyproject.toml: New modern build configuration (replaces setup.py)
	* pyproject.toml: setuptools-scm for version from git tags
	* setup.py: Removed (replaced by pyproject.toml)
	* Makefile: Interactive release workflow, version passed on command line
	* Makefile: Auto-push before tagging, strip 'v' prefix from version input
	* Makefile: Auto-suggest next patch version based on latest tag
	* .gitignore: Updated for Make-generated files
	* .github/workflows/ci.yml: Added GitHub Actions for linting and testing
	* .github/workflows/release.yml: Added automatic PyPI release on tags
	* .github/workflows/release.yml: Fixed version detection using SETUPTOOLS_SCM_PRETEND_VERSION
	* .github/workflows/release.yml: Use --no-isolation to ensure env var is inherited
	* .pre-commit-config.yaml: Added pre-commit hooks for ruff
	* docs/CODE_REVIEW.md: Code review with improvement recommendations
	* docs/TODO.md: TODO list including SSD default tuning issue
	* README.md: added some few lines on the "latest news" and 0.15-release

2022-01-31  Tobias <tobias@redpill-linpro.com>
	* thrash-protect.py: terrible, embarrassing bugfix (revealing a lack of code coverage in tests).  Bumped version to 0.14.3.
	* Makefile: worked a bit more on rpm releases

2021-09-01  Tobias <tobias@redpill-linpro.com>
	* trash-protect.py: bugfixing and adding debug code (see changelog-0.14.2.md)
	* INSTALL.md: information about configuration options
	* README.md: more information about the job control issue

2020-04-08  Niektory <niektory@gmail.com>
	* trash-protect.py: OOMScoreProcessSelector should be used before PageFaultingProcessSelector, ref https://github.com/tobixen/thrash-protect/issues/31

2019-08-29  Misc authors  <tobias@redpill-linpro.com>
        * thrash-protect.py: Seems like I've forgotten to maintain the ChangeLog for more than a year.  Misc tweaks have been done, catching up on feedback and pull requests coming through github.  Bumping to 0.13.
	* README.md: various documentation tweaks

2018-08-23  Tobias Brox  <tobias@redpill-linpro.com>
        * README.md: we don't need this file anymore, since we have README.rst
        * README.rst: merged latest changes from README.md
        * thrash-protect.py: more information in an error message.  Bumping 0.12.1.

2018-03-21  Tobias Brox  <tobias@redpill-linpro.com>
        * thrash-protect.py: bugfix in logging, when parent pids are suspended they should also be logged
        * thrash-protect.py: Trying yet another time to fix the thrash-detecting algorithm; apparently the December bugfix was not well enough tested or thought through.
        * ChangeLog: updated, preparing for new release 0.12.

2018-02-08  Tobias Brox  <tobias@redpill-linpro.com>
        * thrash-protect.py: Silly-stupid bugfix for the THRASH_PROTECT_WHITELIST configuration environmental variable
        * README: doc tweaks

2017-12-08  Tobias Brox  <tobias@redpill-linpro.com>
	* thrash-protect.py: a bug in the thrash-detecting algorithm; the threshold for detecting thrashing has efficiently been 1 all the time, even though it's defaulted to 512 in the config section.  Fixed the bug and lowered the default to 4, not to change the behaviour too drastically.  This will cause thrash-protect to be less aggressive.
	* ChangeLog: updated, preparing for new release 0.11.6 ... 0.11.7 even
	* Makefile: latest changes did not work well for the archlinux install

2017-10-30  Tobias Brox  <tobias@redpill-linpro.com>
	* README: documentation tweaks and new thoughts
	* thrash-protect.py: sudo is added to the list of processes where it may be important to suspend the parent process

2017-10-11  Tobias Brox  <tobias@redpill-linpro.com>
	* Makefile: attempting to get directories right for other distros - credits to @anophelesgreyhoe@github

2017-02-23  Chris Coetzee  <chriscz93@gmail.com>
	* setup.py: pypi-compatible setup script
	* thrash-protect.py: moving logics to a main sub - minor refactoring to follow best pypi-practice

2017-02-20  Tobias Brox  <tobias@redpill-linpro.com>
	* rpm/thrash-protect.spec: bugfixing the rpm build

2017-02-17  Tobias Brox  <tobias@redpill-linpro.com>
	* rpm/thrash-protect.spec: bugfix, trying to generate an rpm for centos7

2017-02-11  Riccardo Balbo  <riccardo@forkforge.net>
	* thrash-protect: bugfix: processes with spaces or paranthesis in the name was not properly handled

2016-11-21  Tobias Brox  <tobias@redpill-linpro.com>
	* puppet/templates/nrpe.cfg.erb: puppet/nrpe tuning; stuck frozen pid list is not allowed to be more than 3s old (was 5s).
	* archlinux/Makefile: bugfix: "make archlinux" should be indempotent
	* AUTHOR: added other contributors
	* README: added info on a theoretical problem that thrash-protect will be suspending processes "unfairly", removed donation section

2016-11-15  Tobias Brox  <tobias@redpill-linpro.com>
	* thrash-protect.py: the script broke on python 2.6.  Done a quick and dirty workaround, the extended logging information just won't work under older python.  Released 0.11.4 (0.11.2 and 0.11.3 was redundant releases - I've completely forgotten the prerequisites for a "make release")

2016-02-22  Tobias Brox  <tobias@redpill-linpro.com>
        * archlinux/ The AUR setup has been changed quite a bit, the PKGBUILD was buggy.  Version 0.11.1 only contains changes to the arch linux package management

2016-02-19  Tobias Brox  <tobias@redpill-linpro.com>
	* thrash-protect.py: misc minor stuff since last release, including some code cleanup, some error handling, better logging; much of it pulled in from other forks (sorry, I'm too lazy to do a proper job creating the missing ChangeLog entries).

2014-12-18  Tobias Brox  <tobias@redpill-linpro.com>
        * thrash-protect.py: some refactoring, plus now it will STOP a parent bash process before stopping the child, not to disrupt the job control
        * tests/test_thrash_protect.py: more unit tests and a small functional test
        * tests/thrash_bot2.py: now with argparse (though, that requires 2.7) and made compatible with python3.

2014-12-09  Tobias Brox  <tobias@redpill-linpro.com>
        * thrash-protect.py: started work on solving the annoying bash job control interpherence ... if suspending a bash child, make sure the parent process is already suspended.
	* test/test_thrash_protect: first unit tests are coming up

2014-11-20  Tobias Brox  <tobias@redpill-linpro.com>
        * thrash-protect.py: major refactoring, cleaning up quite some mess and getting rid of quite some globals
        * thrash-protect.py: fixed a bug - when thrash_protect kicks in, it will at first almost always freeze a pid and then unfreeze it immediately afterwards without any sleep

2014-03-10  Tobias Brox  <tobias@redpill-linpro.com>
        * thrash-protect.py: found a silly print statement left behind from earlier debug rounds.
	* thrash-protect.py: bumped the version (patchlevel)

2014-02-26  Tobias Brox  <tobias@redpill-linpro.com>
	* README.md - elaborated a bit on the drawbacks/problems observed
	* thrash-protect.py (thrash_protect): doing a best-effort on running mlockall()

2014-01-14  Tobias Brox  <tobias@redpill-linpro.com>
	* general: version number bump - there shouldn't have been any 0.6.4, it should have been released as 0.7.
	* README.md: some minor docfixes
	* tests/thrash-bot.py: a bit of confusion on what version of this script I actually used when I managed to thrash the system.  At least now it seems to be eating up memory very fast instead of just spinning CPU.

2014-01-13  Tobias Brox  <tobias@redpill-linpro.com>
	* general: bump of version number to 0.6.4 (post-script: this was a mistake - correct version number should have been 0.7).
	* tests/: new directory, unfortunately rather empty
	* tests/thrash-bot.py: improved the thrash-bot, it consumes far less CPU and gobbles far more memory now
	* thrash-protect.py (general): tweaks and bugfixes to handle the new thrash_bot.py.  unfortunately I added lot more complexity. :-(
	* thrash-protect.py (general): debug hooks for randomly stopping processes even if there is no thrashing going on
	* thrash-protect.py (scan_processes): modified from logic to find the process with most pagefaults to "meta-logic" selecting an algorithm for finding which process to stop.
	* thrash-protect.py (scan_processes_pagefaults): old logics from scan_processes
	* thrash-protect.py (scan_processes_pagefaults): various bugfixes
	* thrash-protect.py (scan_processes_pagefaults): added a threshold to make it less likely whitelisted processes will be stopped
	* thrash-protect.py (scan_processes_oom_score): new function to select the process with highest oom_score
	* thrash-protect.py (find_last_unfrozen_process): returns the pid of the last unfrozen process, if it's still running

2013-12-26  Tobias Brox  <tobias@redpill-linpro.com>
	* general: bump of version number to 0.6.3; only "meta"-changes (Makefile, etc)
	* general: successfully created a .deb-package that has been deployed on ubuntu precise
	* INSTALL.md: new file - extracted the practical information out from all the blah-blah in README.md
	* README.md: even more blah-blah - now information on the alternatives to thrash-protect
	* Makefile: quite some bugfixes and work
	* debian/*: debianization.
	* systemv/thrash-protect: bugfix to get correct return code from "status"
	* puppet/: puppet setup

2013-12-20  Tobias Brox  <tobias@redpill-linpro.com>
	* general: bumping version number to 0.6
	* thrash-protect.py: Major fix - changed from using the "major page fault"-counter to using the "page swap in" and "page swap out" counters.  Bidirectional swap or more than 100 pages in/out during a one second interval will trigger process suspension.
	* thrash-protect.py: Made symmetry between the blacklisting and whitelisting; it's done by weighting instead of "stop this process first" or "don't stop this process".
	* thrash-protect.py: Minor bugfix - unfrozen processes didn't get logged properly due to a ProcessLookupFailure when running CONT on the session or group id.
	* puppet/: includes an erb-template for a nrpe config file, though might not work outside our puppet environment (depends on $nagios::nrpe::nagios_plugin_dir to be set)

2013-12-19  Tobias Brox  <tobias@redpill-linpro.com>
	* thrash-protect.py: made support for --version at python2.7 and up, and split out the main logic into a subroutine.
	* rpm: work in progress to build rpm files
	* systemv: work in progress to build a working init-script
	* archlinux/Makefile: allow for automatic build of PKGBUILD and upload to AUR
	* Makefile: Working on release-management through Makefile; ideally all the work involved with making a release should be handled by a simple make command.  Pardon for all the stupid mini-releases, need to do quite some testing here.
	* ChangeLog: Now with a ChangeLog file.  The entries will be used for the commit message when doing releases.

2013-09-06  Tobias Brox  <tobias@redpill-linpro.com>
	* thrash-protect.py: Got a mostly working prototype here - it has been tested in production, and it seems to do what it promises, and I'm happy with it, maybe the initial plan rewriting it in C is not really needed.

2013-07-29  Tobias Brox <tobias@redpill-linpro.com>
	* General: initial commit
