switch to another branch and work on another patch while the bot is running
if the bot reports failure, switch back to the original branch and repush a fix: the bot will notice the repush and run again
It also helps reviewers who can wait until the bot succeeds before looking at the patch closely.
To debug an error, run-make-check.sh can be executed locally on the branch of the pull request, after merging or rebasing against the destination branch.
It can also be run in a container for CentOS 7 or Ubuntu 14.04. Each container needs about 10GB of disk. They are run using a dedicated Ceph clone to not be disturbed while development continues.
The preparation of the container uses install-deps.sh and takes a long time (from five to thirty minutes or more depending on the bandwidth). It is however done once and reused as long as its depedencies (ceph.spec.in, debian/control, etc.) are not modified. The second step, including make -jX check, takes six minutes on a 64GB RAM, 250GB SSD, 24 core server and fifteen minutes on a 16GB RAM, 250GB spinner, 4 core laptop. The -jX is set to half of the number of processors reported by /proc/cpuinfo (i.e. make -j4 if there are 8 processors and make -j12 if there are 24 processors).
The bot runs in a container so that cleaning up a failed test or aborting if it takes too long (30 minutes) can be done by removing the container (for instance with docker stop ceph-ubuntu-14.04).
This is the last development release before Christmas. There are some API cleanups for librados and librbd, and lots of bug fixes across the board for the OSD, MDS, RGW, and CRUSH. The OSD also gets support for discard (potentially helpful on SSDs, although it is off by default), and there are several improvements to ceph-disk.
The next two development releases will be getting a slew of new functionality for hammer. Stay tuned!
Previously, the formatted output of ‘ceph pg stat -f …’ was a full pg dump that included all metadata about all PGs in the system. It is now a concise summary of high-level PG stats, just like the unformatted ‘ceph pg stat’ command.
All JSON dumps of floating point values were incorrecting surrounding the value with quotes. These quotes have been removed. Any consumer of structured JSON output that was consuming the floating point values was previously having to interpret the quoted string and will most likely need to be fixed to take the unquoted number.
The stdin is set when the command is created, as an os.pipe, so that it can be written to immediately, even before the command is actually run (which may happen at a later time if the thread is already busy finished a previous command). The stdout and stderr are consumed immediately after the command is run and copied over to the arguments provided by the caller:
while ( self.file_copy(self.p.stdout, self.stdout) or
self.file_copy(self.p.stderr, self.stderr) ):
All other file descriptors are closed (with close_fds=True), otherwise the child process will hang until they are all closed.
The ceph-disk script manages Ceph devices and rely on the content of the /dev/disk/by-partuuid directory which is updated by udev rules. For instance:
a new partition is created with /sbin/sgdisk –largest-new=1 –change-name=1:ceph data –partition-guid=1:83c14a9b-0493-4ccf-83ff-e3e07adae202 –typecode=1:89c57f98-2fe5-4dc0-89c1-f3ad0ceff2be — /dev/loop4
the kernel is notified of the change with partprobe or partx and fires a udev event
the udev daemon receives UDEV [249708.246769] add /devices/virtual/block/loop4/loop4p1 (block) and the /lib/udev/rules.d/60-persistent-storage.rules script creates the corresponding symlink.
Let say the partition table is removed later (with sudo sgdisk –zap-all –clear –mbrtogpt — /dev/loop4 for instance) and the kernel is not notified with partprobe or partx. If the first partition is created again and the kernel is notified as above, it will fail to notice any difference and will not send a udev event. As a result /dev/disk/by-partuuid will contain a symlink that is outdated.
The problem can be fixed by manually removing the stale symlink from /dev/disk/by-partuuid, clearing the partition table and notifying the kernel again. The events sent to udev can be displayed with:
Where xmlstarlet loops over each PG acting set ( -m “//pg_stats/pg_stat/acting” ) and displays the OSDs it contains (-v osd), one by line (-n). The first column is the number of PGs in which the OSD in the second column shows.
To restrict the display to the PGs belonging to a given pool: