Hello, This is a heads-up for a merge of gvinum project code into HEAD. This means that gvinum implementation will be changed some. The code is based on the work done by Lukas Ertl as well as the work I did before/during Google SoC 2007 and afterwards. It has been staying in p4 for some time, and then moved to the subversion project repository not long ago. The main reason for the delay of getting this into HEAD have been the lack of reviewers of the code, but after some discussion and help from testers, I've decided this is a good time to get it in (should perhaps have been merged a bit earlier) Testers have spotted several differences from the original gvinum, and I've tried to make it behave as the old implementation wherever that seemed the best way to go. Luckily, the work has gotten a bit of attention lately, thanks to Rick C. Petty for helping out with testing and bugfixing, as well as all others who have dared to run the new gvinum. So, what does this update offer? From the user aspect: - Implementation of many of the missing commands from the old vinum: attach/detach, start (was partially implemented), stop (was partially implemented), concat, mirror, stripe, raid5 (shortcuts for creating volumes with one plex of these organizations). - Support for fixing degraded plexes while mounted. - Support for growing for striped and raid5-plexes, meaning that one can extend the volumes for these plex types in addition to the concat type. Also works while the volume is mounted. - The parity check and rebuild no longer goes between userland/kernel, meaning that your gvinum command will not stay and wait forever for the rebuild to finish. You can instead watch the status with the list command. - Many problems with gvinum have been reported since 5.x, and some has been hard to fix due to the complicated architecture. Hopefully, it should be more stable and better handle edge cases that previously made gvinum crash. - Failed drives no longer disappears entirely, but now leave behind a dummy drive that makes sure the original state is not forgotten in case the system is rebooted between drive failures/swaps. From the technical aspect: - Gvinum now uses one single workerthread instead of one thread for each volume and each plex. The reason for this is that the previous scheme was very complex, and was the cause of many of the bugs discovered in gvinum. Instead, gvinum now uses one worker thread with an event queue, quite similar to what used in gmirror. - The rebuild/grow/initialize/parity check routines no longer runs in separate threads, but are run as regular I/O requests with special flags. This made it easier to support on-mount growing and parity rebuild. Probably, there are many other issues that have been fixed, perhaps new issues introduced. This is why this is dropped in HEAD now, to give it more attention from the uses before the 8.0 branch. All in all, this will make gvinum an easier beast to handle for users. If you have any issues related to this, send in problem reports or drop me an e-mail, and I'll take a look. For interested reviewers, the code resides in svn://svn.freebsd.org/base/projects/gvinum -- Ulf Lilleengen
This archive was generated by hypermail 2.4.0 : Wed May 19 2021 - 11:39:44 UTC