Julien Danjou: Gnocchi 2.0 release
groupby parameter to aggregation queries.
Ceph backend optimization
groupby parameter to aggregation queries.
Ceph backend optimization
debmake -cc > debian/copyrightNote there are some problems with python and non-ASCII names, so this might not be the best option. The cme option is based on a config parsing library, and I found this approach in a blog post from 2015. To generate using cme, use the 'update dpkg-copyright' option:
cme update dpkg-copyrightThis will create or update debian/copyright. The cme tool seem to handle UTF-8 names better than debmake. When the copyright file is created, I would also like some help to check if the file is correct. For this I found two good options, debmake -k and license-reconcile. The former seem to focus on license types and file matching, and is able to detect ineffective blocks in the copyright file. The latter reports missing copyright holders and years, but was confused by inconsistent license names (like CDDL vs. CDDL-1.0). I suspect it is good to use both and fix all issues reported by them before uploading. But I do not know if the tools and the ftpmasters agree on what is important to fix in a copyright file, so the package might still be rejected. The devscripts tool licensecheck deserve mentioning. It will read through the source and try to find all copyright statements. It is not comparing the result to the content of debian/copyright, but can be useful when verifying the content of the copyright file. Are you aware of better tools in Debian to create and update debian/copyright file. Please let me know, or blog about it on planet.debian.org. As usual, if you use Bitcoin and want to show your support of my activities, please send Bitcoin donations to my address 15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b. Update 2016-02-20: I got a tip from Mike Gabriel on how to use licensecheck and cdbs to create a draft copyright file
licensecheck --copyright -r find * -type f \ /usr/lib/cdbs/licensecheck2dep5 > debian/copyright.autoHe mentioned that he normally check the generated file into the version control system to make it easier to discover license and copyright changes in the upstream source. I will try to do the same with my packages in the future. Update 2016-02-21: The cme author recommended against using -quiet for new users, so I removed it from the proposed command line.
I had no access to the internet for most of my childhood. Nobody in my area knew anything about programming. I learned a great deal from a number of CDs that included free software source code and archives of project mailing lists. When I got to university, I learned even more by being able to develop a Debian-based OS for use in our computer facilities. That gave me the experience and knowledge that I needed to become involved in Debian development, which in turn gave me the background required to be able to help Ubuntu become the first free software operating system to work out of the box on modern laptops. From there, I've been able to build my career around developing free software.~ gem update ctioga2An updated Debian package should find its way to the archive later on today. Have fun !
apt upgrade was running on
another, and suddenly kbuildsycoca4 started vomiting on my command line
because I had run okular once on that terminal last tuesday.
Among the possible workarounds, one can run kdebugdialog from package
kde-runtime and check the "Disable all debug output" button.
This is the output of kdebugdialog when run on a terminal after enabling
"Disable all debug output":
$ kdebugdialog
QDBusConnection: session D-Bus connection created before QCoreApplication. Application may misbehave.
QDBusConnection: session D-Bus connection created before QCoreApplication. Application may misbehave.
I see it as debugging output turned into an art performance, and I have an
appreciation for this kind of things. kdebugdialog, my hat's off to you.
apt upgrade was running on
another, and suddenly kbuildsycoca4 started vomiting on my command line
because I had run okular once on that terminal last tuesday.
Among the possible workarounds, one can run kdebugdialog from package
kde-runtime and check the "Disable all debug output" button.
This is the output of kdebugdialog when run on a terminal after enabling
"Disable all debug output":
$ kdebugdialog
QDBusConnection: session D-Bus connection created before QCoreApplication. Application may misbehave.
QDBusConnection: session D-Bus connection created before QCoreApplication. Application may misbehave.
I see it as debugging output turned into an art performance, and I have an
appreciation for this kind of things. kdebugdialog, my hat's off to you.
apt upgrade was running on
another, and suddenly kbuildsycoca4 started vomiting on my command line
because I had run okular once on that terminal last tuesday.
Among the possible workarounds, one can run kdebugdialog from package
kde-runtime and check the "Disable all debug output" button.
This is the output of kdebugdialog when run on a terminal after enabling
"Disable all debug output":
$ kdebugdialog QDBusConnection: session D-Bus connection created before QCoreApplication. Application may misbehave. QDBusConnection: session D-Bus connection created before QCoreApplication. Application may misbehave.
kdebugdialog, my hat's off to you.
SP_ERROR_OTHER_TRANSIENT with error code 16. This error usually
means that there is some unspecified issue with the Spotify service. We ve
actually seen it before and like its name suggests, it is indeed transient and
soon goes away.
According to a series of
tweets between
my fellow Mopidy developer Nick Steel and @SpotifyCares it appears that the
libspotify search functionality was backed by the Metadata API s search
functionality. Who knew? I m not aware of any relation between these APIs ever
being mentioned publicly. No libspotify user could possibly have known that
the Metadata API shutdown would affect them.
Let s summarize: libspotify hasn t had any releases for three years and it was
officially deprecated in May last year. But, there have been no warnings about
any shutdown. The libspotify project is likely no longer staffed at all. Did
someone just forget that libspotify depended on the Metadata API they were
shutting down?
Many newer networked AV receivers use the Spotify Connect libraries that are
exclusive to Spotify s commercial partners. But some receivers probably still
use libspotify. If so, did Spotify just break hardware sold with Spotify
support as a major feature? Something that people are paying a monthly fee to
use?
It seems they did!
In the Spotify Community forums there are numerous reports of broken devices
and software that all have two things in common: the date the problem started
occurring, and that search is the only feature that is broken.
Since I've now been using Linux for 20 years, I've dug up some artifacts from the early journey. libraw. Now I really feel even more
strongly for the Debian policy section 4.13 which states that
Debian packages should not ship with copies of other packages code. It
made it really hard to figure out which packages were vulnerable,
especially because it was hard to figure out which versions of
libraw/dcraw were actually vulnerable to the bug, but also just plain
figure out which packages were copying code from libraw. I wish I had
found out about secure-testing/data/embedded-code-copies
earlier... Still, it was interesting to get familiar with
codesearch.debian.net to try to find copies of the vulnerable
code, which was not working so well. Kudos to darktable 2.0 for
getting rid of their embedded copy of libraw, by the way - it made it
completely not vulnerable to the issue, the versions in stretch and
sid not having the code at all and older versions having
non-vulnerable copies of the code.
virt-manager
would just fail on startup with an error saying interface mtu value
is improper, which is a very unhelpful error message (what is a
proper value??) - and, for the record, the MTU on eth0 and wlan0
is the fairly standard 1500, while lo is at 65536 bytes, nothing
unusual there as far as I know.
Then the next problem was actually running a VM - I still somewhat
expected to be able to boot off a chroot, something I should
definitely forget about it seems like (boot loader missing? not
sure). I ended up calling virt-install with the live ISO image I was
previously using:
virt-install --virt-type kvm --name squeeze-amd64 --memory 512 --cdrom ~/iso/Debian/cdimage.debian.org_mirror_cdimage_archive_6.0.10_live_amd64_iso_hybrid_debian_live_6.0.10_amd64_gnome_desktop.iso --disk size=4 --os-variant debiansqueeze
At least now I have an installed squeeze VM, something I didn't get to
do in Virtualbox (mostly because I didn't want to wait through the
install, because it was so slow).
Finally, I still have trouble getting a commandline console on the VM:
somehow, running virtsh console squeeze-amd64 doesn't give me a
login terminal, and worse, it actually freezes the terminal that I
can actually get on virt-viewer squeeze-amd64, which definitely
sounds like a bug.
I documented a bit more of that setup in the Debian wiki KVM page
so hopefully this will be useful for others.
41M 2004
363M 2005
937M 2006
2,2G 2007
894M 2008
800M 2009
1,8G 2010
1,4G 2011
9,8G 2012
31G 2013
26G 2014
9,8G 2015
The drop in 2015 is mostly due to me taking less pictures in the last
year, for some reason...
[text](link) which seems more natural at
first, but then the formatting looks messier, as paragraph wrapping is
all off because of the long URLs. So I always ended up converting
those links, which was a painful series of keystrokes.
So I made a macro, and while I'm a it, why not rewrite it as a lisp
function. Twice.
Then I was told by the markdown-mode.el developers that they had
already fixed that (in the 2.1 version, not in Debian jessie) and
that the C-c C-a r key binding actually recognized existing links and
conveniently converted them.
I documented my adventures in bug #94, but it seems I wrote this
code for nothing else than re-learning Emacs lisp, which was actually
quite fun.
.txt file that i rename to .mdwn.
I would then have to do:
M-x rename-file <ret> newfile
M-x rename-buffer <ret> newfile
C-x C-s <ret> newfile
Really annoying.
Turns out that set-visited-file-name actually does most of the job,
but doesn't actually rename the file, which is really silly. So I
wrote this small function instead:
(defun rename-file-and-buffer (newfname)
"combine rename-file and rename-buffer
set-visited-file-name does most of the job, but unfortunately
doesn't actually rename the file. rename-file does that, but
doesn't rename the buffer. rename-buffer only renames the buffer,
which is pretty pointless.
only operates on current buffer because set-visited-file-name
also does so and we don't bother doing excursions around.
"
(interactive "GRename file and bufer: ")
(let ((oldfname (buffer-file-name)))
(set-visited-file-name newfname nil t)
(rename-file oldfname newfname)
)
)
Not bound to any key, really trivial, but doing this without that
function is really non-trivial, especially since
set-visited-file-name needs special arguments to not mark the file
as modified.
+S ("secure
channel" flag) where all channels are secure by default, and you
need to deliberately mark a channel as insecure with the +U flag
if you actually want to allow users on an clear-text connection to
join the channel. A transition mechanism is also
proposed.
As we're getting closer to release of new major release (4.6.0), the focus moves to the bug fixing.
Most of the fixed issues came from our error reporting server, which collects error reports from the installations. Vast majority if bugs were affecting older releases as well, so these were fixed for upcoming 4.5.5 as well.
Besides bugfixing there was also some cleanups in the master branch - shared code for processing sprites and covering it by tests and removed caching of MySQL server information as that didn't bring any speed improvements and lead to cache consistency issues.
All handled issues:
PHPSECLIB_INC_DIR with autoloaderFiled under: English phpMyAdmin 0 comments
About one month has passed and here is the usual updated of TeX Live packages for Debian. While I am not really calling for testers at the moment, building of preliminary packages for TeX Live 2016 has begone. The binaries are already uploaded to experimental, and arch=all packages for experimental will follow soon.
As with the last time, here is the list of new and updated pacakges with (auto-generated) links to the package pages on CTAN.
New packages
adtrees, babel-occitan, crimson, emisa, glossaries-extra, gloss-occitan, libertinus, luatex-def, mynsfc, nihbiosketch, signchart, smartunits, tikz-feynman, uhrzeit, xduthesis.
Updated packages
achemso, acro, animate, apnum, archaeologie, babel, babel-french, babel-greek, babel-macedonian, bangorcsthesis, biblatex-bookinarticle, biblatex-gost, biblatex-manuscripts-philology, br-lex, caption, chemgreek, chemmacros, chemnum, cmtiup, csplain, csquotes, ctanify, ctex, cweb, datatool, datetime2, datetime2-english, delimseasy, droit-fr, dvips, erewhon, exsheets, fibeamer, fira, fontspec, forest, geschichtsfrkl, glossaries, graphics, greek-fontenc, greektonoi, hyph-utf8, inconsolata, isodoc, l2tabu, l3build, l3experimental, l3kernel, l3packages, latex, latex-bin, latex-make, leadsheets, leaflet, luaotfload, luatexja, mathastext, mcf2graph, mcmthesis, media9, metrix, mhchem, ndsu-thesis, newpx, newtx, ocgx2, pas-tableur, pdftex, pdfx, pict2e, pst-perspective, pstricks, pstricks-add, ptex, quran, ran_toks, realscripts, schemata, showhyphens, siunitx, sr-vorl, sttools, tempora, tetex, tex4ht, texfot, texlive-scripts, thinsp, thuthesis, tkz-orm, tools, uantwerpendocs, ulthese, unicode-data, uptex, xassoccnt, xcjk2uni, xebaposter, xecjk, xetex, xetexko, xltxtra, xpinyin, zhnumber, zhspacing.
Enjoy.
if [ "$PEERDNS" != "no" ] [ -n "$RESOLV_MODS" -a "$RESOLV_MODS" != "no" ]; then
[ -n "$MS_DNS1" ] && DNS1=$MS_DNS1
[ -n "$MS_DNS2" ] && DNS2=$MS_DNS2
if [ -n "$DNS1" ] && ! grep -q "^nameserver $DNS1" /etc/resolv.conf &&
tr=$(mktemp /tmp/XXXXXX) ; then
...
So if you adjust only the second nameserver IP you stored in "DNS2" in your configuration
you end up without an update to your 'resolv.conf'. Now knowing that, I'd say this is
relevant distribution specific knowledge, and I'm wondering how many of such subtle
behaviours we've hidden in Debian specific solutions? Maybe knowledge about distribution
specific implementation details even matters after all.
Regardig the 'resolv.conf' issue itself the fault is on us. We as the responsible team
did not read the documentation properly and thus deployed a configuration that later on
let to some unexpected consequences. I try to remember those issues as an example for the
next NetworkManager/systemd-networkd vs old-school-network-scripts argument.
During the last days I've completed quite long time challenge - make Weblate compatible with Python 3. It's probably still not in shape you would use it on production server, but it runs fine and the testsuite completes without errors.
As usual, the major obstacle are dependencies. The translate-toolkit doesn't support Python 3 in any released version, so you need latest Git snapshot. Another problematic bit is Mercurial, which will not support Python 3 in near future. But in case you need it, you can still install Python 2 version and use it from Weblate (it uses command line interface).
The porting was mostly dealing with encoding mess - in Python 2 you really didn't have to distinguish between binary and text data, while Python 3 quite enforces that. This turned out to be especially tricky with CSV files where csv module expects text streams in Python 3, while translate-toolkit CSV parser expects binary ones.
All this has one downside as well - the test matrix got bigger again, what makes the testsuite run longer with 5 workers available.
While doing these changes, I've also decided to drop support for Django 1.7, this will allow us to get rid of lot of deprecation warnings in Django 1.9 and prepare codebase for Django 1.10.
Filed under: English Weblate 0 comments
The first major version of the scalable timeserie database I work on,
Gnocchi was a released a few months ago. In this first
iteration, it took a rather naive approach to data storage. We had little ideas
about if and how our distributed back-ends were going to be heavily used, so we
stuck to the code of the first proof-of-concept written a couple of years ago.
Recently we got more feedbacks from our users, ran a few
benchmarks. That gave us enough feedback to start
investigating in improving our storage strategy.
Data split
Up to Gnocchi 1.3, all data for a single metric are stored in a single gigantic
file per aggregation method (min, max, average ). This means that the
file can grow to several megabytes in size, which make it slow to manipulate.
For the next version of Gnocchi, our first work has been to rework that storage
and split the data into smaller parts.
The diagram above shows how data are organized inside Gnocchi. Until version
1.3, there would have been only one file for each aggregation methods.
In the upcoming 2.0 version, Gnocchi will split all these data into smaller
parts, where each data split is stored in a file/object. This allows to
manipulate smaller pieces of data and to increase the parallelism of the CRUD
operations on the back-end leading to large speed improvement.
In order to split timeseries into several chunks, Gnocchi defines a maximum
number of N points to keep per chunk, to limit their maximum size. It then
defines a hash function that produces a non-unique key for any timestamp. It
makes it easy to find in which chunk any timestamp should be stored or
retrieved.
Data compression
Up to Gnocchi 1.3, the data stored for each metric is simply serialized using
msgpack, a fast and small serialization format. Though,
this format does not provide any compression. That means that storing data
points needs 8 bytes for a timestamp (64 bits timestamp with nanosecond
precision) and 8 bytes for a value (64 bits double-precision floating-point),
plus some overhead (extra information and msgpack itself).
After looking around on how to compress all these measures, I stumbled upon a
paper from some Facebook engineers called about Gorilla,
their in-memory timeserie database, entitled
"Gorilla: A Fast, Scalable, In-Memory Time Series Database".
For reference, part of this encoding is also used by
InfluxDB
in its new storage engine.
The first technique I implemented is easy enough, and it's inspired from
delta-of-delta encoding. Instead of storing each timestamp for each data point,
and since all the data points are aggregated on a regular interval, we
transpose points to be the time difference divided by the interval. For
example, the suite of timestamps timestamps =
[41230, 41235, 41240, 41250, 41255] is encoded into timestamps =
[41230, 1, 1, 2, 1], interval = 5. This allows regular compression algorithms
to reduce the size of the integer list using
run-length encoding.
To actually compress the values, I tried two different algorithms:
The XOR algorithm implemented in Python is pretty slow, compared to LZ4. Truth
is that python-lz4 is fully implemented
in C, which makes it fast. I've profiled my XOR implementation in Python, to
discover that one operation took 20 % of the time:
count_lead_and_trail_zeroes, which is in charge of counting the number of
leading and trailing zeroes in a binary number.
I tried 2 Python implementations of the same algorithm (and submitted them to
my friend and Python developer
Victor Stinner by the way).
The first version using string search with .index() is 10 faster than the
second one that only do integer computation. Ah, Python As Victor explained,
each Python operation is slow and there's a lot in the second version, whereas
.index() is implemented in C and really well optimized and only needs 2
Python operations.
Finally, I ended up optimizing that code by leveraging
cffi to use directly ffsll() and
flsll(). That decreased the run-time of count_lead_and_trail_zeroes by
45 %, making the entire XOR compression code speed increased by a small 7 %.
This is not enough to catch up with LZ4 speed. At this stage, the only solution
to achieve a high-speed would probably to go with a full C implementation.
Considering the compression ratio of the different algorithms, they are pretty
much identical. The worst case scenario (random values) for LZ4 compress down
to 9 bytes per data point, whereas XOR can go down to 7.38 bytes per data
point. In general XOR encoding beats LZ4 by 15 %, except for cases where all
values are 0 or 1. However, LZ4 is faster than XOR by a factor of 4 -70
depending on cases.
That means that we'll use LZ4 for data compression in Gnocchi 2.0. It's
possible that we could achieve as fast compression/decompression algorithm, but
I don't think it's worth the effort right now it'd represent a lot of code to
write and to maintain.
What happened in the reproducible
builds effort between February 7th
and February 13th 2016:
dcmd supports .buildinfo files. Original patch by josch.qch reproducible by using a fixed date instead of the current time. Original patch by Dhole.CreationDate not appear in comments of DVI / PS files produced by TeX. He also mentioned that some timestamps can be replaced by using the -output-comment option and that the next version of pdftex will have patches inspired by reproducible build to mitigate the effects (see SOURCE_DATE_EPOCH patches) .
SOURCE_DATE_EPOCH.armhf build node has been added (thanks to Vagrant Cascadian) and integrated into the Jenkins setup for 4 new armhf builder jobs. (h01ger)
All packages for Debian testing (Stretch) have been tested on armhf in just 42 days. It took 114 days to get the same point for unstable back when the armhf test infrastructure was much smaller.
Package sets have been enabled for testing on armhf. (h01ger)
Packages producing architecture-independent ( Arch:all ) binary packages together with architecture dependent packages targeted for specific architectures will now only be tested on matching architectures. (Steven Chamberlain, h01ger)
As the Jenkins setup is now made of 252 different jobs, the overview has been split into 11 different smalller views. (h01ger)
There are three of us living here, and the plan is to switch all three
of us from wireless to wired ethernet Internet connections by
transporting cabling through the ventilation system using this
remote-controlled car.
Here s an action shot we took. My housemate put on his Gaming
playlist and it reached a very suitable crescendo as we guided the car
through its final journey, pulling the last piece of cotton which we
would then use to pull the final cabal through. The timing of the
music couldn t have been better. It reflected the risk of losing
control of the car as we moved the controller around to enable the car
to pick up the radio signals. A further risk was caused by the car
only being able to turn right, not left, and there not being enough
room in the air duct for it to make a full-circle rotation. Our
backup plan was to try tossing a ball tied to a piece of string down
the duct.
Unfortunately I m still on a wireless connection because to reach my
room we d have had to send the cable via the furnace/air conditioning
unit which we decided against.
Does a SATA-to-USB converter, for moving data off my old laptop hard
drive which I had to replace this week, need to be this complicated?
Like each month, here comes a report about the work of paid contributors to Debian LTS.
Individual reports
In December, 113.50 work hours have been dispatched among 9 paid contributors. Their reports are available:
No comment Liked this article? Click here. My blog is Flattr-enabled.
Next.