Earlier this year, we announced that Crate.io is renewing it's commitment to open source. Now, we are happy to say that we've followed up on that promise and that CrateDB 4.5.0 is generally available.
From now on, there will only be one edition of CrateDB (licensed under Apache 2.0). We've put together a FAQ to explain what the licensing change means for our users. If you haven't read the FAQ, go check it out, as it will answer all your questions.
Besides the licensing change, you can find the full list of feature changes within CrateDB 4.5.0 in our release notes. Apart from the (previously called) Enterprise features, this release includes new features like a CREATE TABLE AS statement. In this blogpost, however, we'd like to highlight the effort we've put into what we can call "polishing and stabilizing". Little things like this are also very important, and they often don't get the importance they deserve.
As I said above, we all tend to focus on big features. However, in the every-day of a developer, friction and frustration are often caused by the little things: a vague error message that causes you to scratch your head, a poorly phrased section in the documentation without an example... These things can easily waste hours of precious developer time.
In the framework of the 4.5 release, we've put a lot of effort into our documentation, creating a whole new Glossary section and rewriting a lot of existing content to further clarify aspects that were a bit too hard to understand.
Here is a subset of sections that we improved and which you may want to revisit:
At Crate.io, we believe that good error messages are essential for a good user experience. We try to give users enough context to help them identify the error's origin, giving them pointers on how to fix them. For example: suppose you have a typo in the table name,
select * from uers;
We used to return a succinct
Relation 'uers' unknown error. But we realized that we could do better, so several releases ago, we changed the error to the following:
Relation 'uers' unknown. Maybe you meant 'users'. Much more helpful!
We're always on the lookout for other opportunities to improve error messages: in 4.5, we improved another case. Suppose you have a table containing a payload object column with many nested columns. Previously, if you inserted a record and the payload didn't match the schema of the table, you might have received an error that boiled down to
Cannot cast object to object.
Although this was technically correct, it was not helpful for a developer. With 4.5, the user will receive a message like the following instead:
Cannot cast object element 'measure' with value 'not-a-number' to type 'real'.
Stability is an essential feature in a database, and improving the stability status quo is a permanent item on our agenda.
CrateDB is a well-tested system. We run thousands of so-called "logic tests", which we initially took over from the sqlite project, and we run several hours’ worth of benchmarks each night. Each pull request runs through a mix of unit and integration tests, and we have an hourly testing system that, over the course of a day, runs a mix of about 170,000 unit and integration tests.
We inherited a powerful randomized testing system (with origin in the Apache Lucene project) that makes it feasible to test many different scenarios. But due to this and to the distributed nature of CrateDB, tests don't always fail deterministically, but instead only occasionally.
For the 4.5 release, we made it a priority to follow up on any non-deterministic test failure. Fortunately, most of the issues we discovered were problems with the test setup and didn't affect our users.