- Changed
run-crate <version>
to download the x64 version of a tarball under aarm64
Mac because there are no mac arm64 distributions for CrateDB. The x64 version works via emulation layer.
- Fixed a regression in 0.27.0 that could cause HTTP sessions to remain open, resulting in stuck operations.
- Added support for setting up session settings per connection for spec files.
- Fixed an issue that caused CrateDB process leaks if
cr8 run-crate
was killed via SIGTERM.
- Fixed a regression that could lead to errors using
cr8 run-crate
when it tries to extract the CrateDB tarball.
- Added support for python 3.12
- Fixed a permission denied error that could occur using
cr8 run-crate
with a branch version specification.
- Added compatibility for
argh>=0.30.1
. Due to this several of the main entry point functions have now mandatory keyword arguments and no longer support positional arguments. For CLI use nothing changes, but for API consumers this is a breaking change.
- Fixed an issue that prevented
cr8 run-crate path/to/source
from working if used as part ofgit bisect run
. - Added handling for maven as build system when using
cr8 run-crate
with a source path orbranch:<name>
. - Changed
cr8 insert-from-sql
to quote the column names used in the insert statements to make them case sensitive.
- Use
tomllib
if available (Python 3.11+) in favour oftoml
. Thetomllib
parser seems more resilient when parsing multi-line strings. - Fixed a column lookup error in
insert-fake-data
that happened when using a mapping file. - Increased the timeout for
CrateNode.stop()
to give the CrateDB shutdown procedure more time to shutdown gracefully.
- Added support for HTTP(s) URLs as source to
load_data
of spec files. - Added a
--re-name
option to therun-spec
command which allows to only run queries where thename
property matches the given regex. - Added a
warmup
option to queries in spec files - Dropped Python 3.6 Support
- Changed
cr8 run-crate
to implicitly create the cache folder if it is missing instead of raising an error. - Improved the performance of the
insert-fake-data ``auto_inc
provider forid
columns of typeinteger
.
- Added a
setup.data_cmds
directive to allow data generation via external commands within spec files. The command must output one JSON object per line. - Added a data provider for the
bit
data type.
- Added
asyncpg
as non-optional dependency, as it is required byinsert-from-sql
.
- Added a new
insert-from-sql
command that can be used to insert data from another CrateDB or PostgreSQL server. - Extended
insert-json
to also support a list of JSON objects within a single line as input format. (Something like[{"name": "n1"}, {"name": "n2"}]
)
run-crate
now uses a system specific CrateDB tarball if available. This is required for the platform dependent builds starting with CrateDB 4.2.
- Extended the
faker
version constraint to>= 4, < 5
, this should make it easier to usecr8
as a dependency in projects where another dependency usesfaker
as well.
- Extended
run_crate
to be forward compatible with an upcoming change in the log format in CrateDB. - Fixed the handling of the
?verify_ssl=false
parameter in--hosts
- Spec files now support a
name
property in thequeries
section to make it easier to analyse the results. run-spec
can now also be used with PostgreSQL if usingasyncpg
.reindex
now skips blob tables and quotes schema and table names, so it should work in more cases.
timeit
can now be used with PostgreSQL and Cockroach if usingasyncpg
.insert-fake-data
now usesuuid4
automatically for columns of typetext
. This was already the case pre CrateDB 4.0 for columns of typestring
.run-spec
now implicitly triggers anANALYZE
after the setup.
- Added a new
reindex
command which will go through all tables on a cluster which need to be re-indexed to be compatible with CrateDB major_version+1. It will one by one create a copy of a table and then remove the old table, replacing it with the copy. - Added a new
infile
argument to theinsert-json
command. This should make certain scripting scenarios easier.
- Added type mapping for the
timestamp with time zone
andtimestamp without time zone
data types so thatinsert-fake-data
can generate data for those columns by default. run-crate
now supports arbitrary branch builds. E.g.run-crate branch:master
- Removed the
LineBuffer
fromrun_crate
and added support for callables instead.
- Fixed a compatibility issue with Python 3.6
- Adapted some queries and type mappings to be compatible with CrateDB 4.0
- Corrected the minimum CrateDB version that can be run with Java 11.
- Added a
version
arg toCrateNode
which can be used to overrule the auto-detection.
run-crate
will now try to choose a differentJAVA_HOME
if the given version ofCrateDB
can't be run with the defaultJAVA_HOME
. This behavior can be disabled with--disable-java-magic
. The behavior of theCrateNode
API is unchanged and by default won't try to change theJAVA_HOME
.run-crate
will now avoid re-building branches from source if there aren't any new commits.
run-crate <release_branch>
will now make sure that the sources are updated to avoid stale builds.
- Made
run-crate
where the argument is a path to a repository forward compatible with upcoming build changes.
- SSL validation can no be disabled by including
verify_ssl=False
in the hosts URI. insert-fake-data
now generates timestamps differently so it works withasyncpg
- JSON output is no longer pretty printed by default. Use
jq
orpython -mjson.tool
to do so. - Release branches can now be used as argument to
run-crate
. (Something likerun-crate 3.1
. This will result in a source checkout and the tarball will be built locally.) - Improved the error message when connecting via
HTTP
and running into a401
.
- Added experimental postgres protocol support. It's available if the optional
asyncpg
dependency is installed. - Bumped the
aiohttp
dependency forPython 3.7
support. - The
load_data
directive in spec files now can readgzipped
files. - Cached local tarballs are now checksummed to avoid re-using a stale tarball from cache.
- Samples and stdev are now included in the
runtime_stats
output if only 1 sample is available.
run-track
now exists with an error code if any statement failed.- The statements printed during
run-spec
are no longer trimmed. - Version wildcards like
2.3.x
now work correctly for digits greater than 9.
- Fixed an issue that caused
insert-fake-data
to fail with aTypeError
. - spec files written in python can now use generators for statements or arguments.
- Improved the fake data generation for
insert-fake-data
. It now works for arrays and objects (although they'll simply be empty) - Added a
duration
option to spec files andtimeit
- Added a
sample-mode
option to control how many samples will be kept for the results. - Improved some error handling and error reporting
- The
disk.watermark
settings are no longer set by default byrun-crate
in order to be compatible with CrateDB 3.0 run-crate
will now exit with a failure if process chaining is used and one of the chained processes failed.stop()
onCrateNode
now resets certain attributes correctly, so thatstart()
doesn't fail with connection errors.
- Added a new default provider for columns of type
BYTE
. - Added a new default provider for columns of type
GEO_SHAPE
, which provides a POLYGON WKT string. - Dropped support for Python 3.5
run-crate
now correctly supports settings using unicode characters.run-crate
will now remove old tarballs from the cache folder after a while.run-crate
should now fail faster if an invalid setting is used.run-crate
now supports arbitrary command chaining using-- @cmdname
If command chaining is used,run-crate
will terminate after all commands have been run.run-crate
should now work correctly if CrateDB is bound to a IPv6 address.
insert-fake-data
should no longer generate the same values using theuuid4
provider. The amount of duplicate values generated using other providers should be reduced as well.
run-crate
now works again withlatest-nightly
. It ran into a timeout as it couldn't parse the HTTP address from the log due to a format change.
Added a new
--fail-if
argument totimeit
andrun-spec
.Added support for sub-command chaining using
--
. This is especially useful if the first command isrun-crate
. Together with--fail-if
this can be used withgit bisect
to determine the first commit that introduced a performance regression. An example:- cr8 run-crate /path/to/crate/src
-- timeit -s "select... " --hosts '{node.http_url}' --fail-if "{runtime_stats.mean} > 1.34"
- Added a default provider for columns of type
short
.
- Pass
LANG
environment variable tocrate
subprocess. This fixes encoding issues when passing unicode characters as CrateDB setting values. - It's now possible to launch SSL enabled nodes. Before
run-crate
would run into a timeout. - The version identifier can now include
x
as wildcard. For example, use:run-crate 2.0.x
to run the latest hotfix version in the2.0
series. - Added support for building and running crate from a source tree.
- Environment variables set using
--env
can now contain=
signs.
insert-fake-data
: Increased the default value range for columns of typeinteger
orlong
.- Updated
aiohttp
to version 2 insert-fake-data
: The schema and table name is now quoted to allow using reserved keywords as schema or table name.
- Values of type
Decimal
ordatetime
can now be serialized. This fixes an issue that could causeinsert-fake-data
to not work with schemas that contained columns of typedouble
. It also allows track files written in python to useDecimal
ordatetime
objects as arguments. - If python-argcomplete is installed and registered that should now be picked up to enable tab-completion in bash.
- Fixed an issue that caused warnings with newer
aiohttp
versions. - Adapted
run-crate
to handle upcoming breaking changes. It's now able to launch tarballs of CrateDB1.1
and1.2.
snapshots.
- Fixed an issue that caused failures on Windows
timeit
can now receive multi-line statements via stdin
- Changed the default output format to
text
. In addition, the values of--output-format
were renamed fromfull
andshort
tojson
andtext
.
- Added a
--keep-data
option torun-crate
. If this is set the data folder isn't removed if the process is stopped. - The
version
argument ofrun-crate
can now also be a fs path to a CrateDB tarball. - Various error handling and
Ctrl+c
improvements. - Added
--logfile-info
and--logfile-result
options torun-spec
andrun-track
.
- Fixed a regression that caused
run-spec
to save results intohosts
instead ofresult-hosts
.
- Multiple cores are now utilized better for fake data generation.
- Adopted internal queries to be compatible with Crate versions >
0.57
. insert-fake-data
will now insert the accurate number of rows specified instead of rounding to the nearest bulk size.
run-crate latest-stable
now correctly launches the latest released stable version of Crate. It incorrectly retrieved the version of the latest Java client release.run-crate
now outputs the postgres port if found in the logs.- Added a
--action
argument torun-spec
which can be used to only run a subset of a spec file. - Extended the track-file format to allow re-using a setup across multiple spec files.
- Added a
--version
option. Best feature ever. - Changed the
--help
output formatting so it's easier to read.
- The
run-track
subcommand now does not fail any more if a single spec file of the track fails. To achieve the same behaviour as before, you can use the--failfast
command line option.
- Added a
--output-fmt
option to most commands. This option can be used to get a succinct output. - Added a new
auto_inc
fake data provider forinsert-fake-data
. This provider may be a bit slow. This is due to the fact that the fake data generation utilizes multiple processes and this provider requires synchronization. But it's still awesome. - Spec files now support a
min_version
setting. This can be used to skip certain queries if the server doesn't meet themin_version
requirement. - Improved the error handling a bit.
- Statements and arguments in spec files can now be defines as callables.
- Added
meta
object column to results table. It's now possible to add a name to the spec so the benchmark results can easily be identified by this spec label. - Added Crate build date column to version_info in benchmark result table.
timeit
now shows a progress bar.- The
--setting
and-env
options ofrun-crate
are now repeatable.
- Fixed an issue with the
num-records
option ofinsert-fake-data
. It didn't work correctly if the number of records specified was smaller than the bulk size. - Fixed some issues with the way Crate is launched using
run-track
. If Crate produced a lot of logging output it could get stuck.
hosts
andtable
is now always a named argument. This affectstimeit
,insert-json
,insert-blob
andinsert-fake-data
Added a new run-track
command.
This command can be used to execute track
files. A track
file is a file
in TOML
format containing a matrix definition of Crate versions, Crate
configurations and spec files.
The command will run each listed Crate version with each configuration and run all listed spec files against it.
- Added a new
run-crate
command. - Added a fake-data provider for
geo_point
columns. - Improved the
--help
output of most commands. - Run-spec output is now proper JSON
- Spec files can be written in python
args
andbulk_args
can now be specified intoml
spec files.
runtime_stats['n']
is no longer capped to 1000insert-json
now ignores empty lines instead of causing an error.
Pretty much everything:
- Renamed
blob upload
toinsert-blob
- Renamed
json2insert
toinsert-json
- Renamed
fill-table
toinsert-fake-data
- Removed
find-perf-regressions
Added a new command which can be used to "run" spec files. Spec files are
either .json
or .toml
files which contain setup, queries and tear-down
directives. A minimal example:
[setup] statement_files = ["sql/create_countries.sql"] [[setup.data_files]] target = "countries" source = "data/countries.json" # paths are relative to the spec file [[queries]] statement = "select count(*) from countries" iterations = 1000 [teardown] statements = ["drop table countries"]
run-spec
will execute the given specification and output runtime statistics.
The result can also directly be inserted into a Crate cluster.
- Column names are now quoted in the insert statement
- No longer tries to generate data for generated columns
- Speed improvements
- Added default provider mappings for columns of type
float
,double
andip
- Prints runtime stats after the inserts are finished
- Added a histogram and percentiles to the runtime statistics that are printed
- Added a concurrency option
- Python 3.4 support has been dropped.
- Subcommands that take numbers as arguments now support python literal
notation. So something like
1e3
can be used.
- Consumes less memory and is faster since it no longer generates all data upfront but starts inserting as soon as possible.
- Added a concurrency option to control how many requests to make in parallel (at most).
- Columns of type long are automatically mapped to the
random_int
provider.
json2insert
can now be used to bulk insert JSON files. The following input formats are supported:1 JSON object per line {"name": "n1"} {"name": "n2"} Or 1 JSON object: { "name": "n1" } Or a list of JSON objects: [ {"name": "n1"}, {"name": "n2"}, ]
The input must be fed into
stdin
.The
--bulk-size
and--concurrency
options have been added.