Commit Briefs

7267992feb Sergey Bronnikov

build: bump zstd submodule (ligurio/gh-8537-bump-zstd-1.5.5)

Updated third_party/zstd submodule from pre-v1.5.5 to v1.5.5 version. The new version fixes a rare corruption bug in high compression mode. While the probability might be very small, corruption issues are nonetheless very serious, so an update to this version is highly recommended, especially if you employ high compression modes (levels 16+). See full changelog in [1]. 1. https://github.com/facebook/zstd/releases/tag/v1.5.5 Fixes #8537 Follows up #8391 NO_DOC=build NO_TEST=build


da2745971f Igor Munkin

test/fuzz: get rid of custom cflags

We manage using sanitizers with CMake flags: ENABLE_ASAN and ENABLE_UB_SANITIZER. sql_fuzzer enables Address Sanitizer by passing -fsanitize=address directly to CFLAGS. It works fine on OSS Fuzz, but breaks building fuzzers for Sydr [1], because Sydr requires building with disabled sanitizers, see documentation [2]. 1. https://github.com/ispras/oss-sydr-fuzz/pull/164 2. https://sydr-fuzz.github.io/docs/#%D0%BE%D0%B1%D0%B5%D1%80%D1%82%D0%BA%D0%B0-sydr Fixes #8529 NO_CHANGELOG=<fuzzing testing> NO_DOC=<fuzzing testing> NO_TEST=<fuzzing testing>


b6e31f96e6 Yaroslav Lobankov

ci: fix sending failure message for fuzzing

NO_DOC=ci NO_TEST=ci NO_CHANGELOG=ci


001ef4a635 Yaroslav Lobankov

ci: save test artifacts to S3

This patch adds the step to all workflows with test-run tests to save test artifacts to S3 for providing artifact link from Multivac Grafana dashboard. Resolves tarantool/multivac#116 NO_DOC=CI NO_TEST=CI NO_CHANGELOG=CI Co-authored-by: Yaroslav Lobankov <y.lobankov@tarantool.org>


1e3529dc08 Yaroslav Lobankov

ci: add `s3-upload-artifact` action

This patch adds a local GitHub action to save test artifacts to S3. Print a warning if the provided artifact path doesn't exist. Part of tarantool/multivac#116 NO_DOC=CI NO_TEST=CI NO_CHANGELOG=CI Co-authored-by: Yaroslav Lobankov <y.lobankov@tarantool.org>


abb172a245 Igor Munkin

test/fuzz: add a grammar-based SQL fuzzer

Patch adds a grammar-based SQL fuzzer that based on libprotobuf-mutator [1] and libFuzzer [2]. Tarantool's SQL grammar [3][4] is described in Protobuf format in a file sql_query.proto, fuzzing engine generates SQL query in Protobuf format and then serializes it to a string (std::string) in sql_query_proto_to_string.* files. Resulted string is passed to SQL engine in Tarantool. NOTE: Current version of SQL grammar and serializers implements only `CREATE TABLE` and `SELECT` queries with all supported options. 1. https://github.com/google/libprotobuf-mutator 2. https://llvm.org/docs/LibFuzzer.html 3. https://www.tarantool.io/en/doc/latest/reference/reference_sql/sql_statements_and_clauses/ 4. https://www.tarantool.io/en/doc/latest/reference/reference_sql/sql_user_guide/ Part of #4826 NO_DOC=<fuzzing testing of SQL>


6d3ac7bb91 Igor Munkin

test/static: add a minimal seed corpus for SQL fuzzer

Seed corpus was generated by fuzzing test itself. Needed for #4826 NO_CHANGELOG=<fuzzing testing of SQL> NO_DOC=<fuzzing testing of SQL> NO_TEST=<fuzzing testing of SQL>


67c737964c Igor Munkin

sql: make sql code fuzzing-friendly

SQL queries generated by fuzzing test could trigger a code that want access to a space cache. Usually this cause an abort, because fuzzing test doesn't perform a complete initialization of tarantool instance. To avoid this we isolated problem parts of code with macro FUZZING_BUILD_MODE_UNSAFE_FOR_PRODUCTION. More appropriate solution will be implemented later. With introduced macro FUZZING_BUILD_MODE_UNSAFE_FOR_PRODUCTION we change behaviour of SQL engine and this breaks SQL regression tests. Therefore FUZZING_BUILD_MODE_UNSAFE_FOR_PRODUCTION is disabled in test-release-asan. Needed for #4826 NO_CHANGELOG=internal NO_DOC=internal NO_TEST=internal


eb43952ad3 Igor Munkin

sql: introduce a function sql_fuzz

SQL fuzzing test requires an entrypoint for SQL engine and the most suitable function for such purpose is sql_stmt_compile(). However, this function is not in a public API, and we don't want to expose it as public function. As a solution function sql_fuzz() is introduced, it is defined under a macro FUZZING_BUILD_MODE_UNSAFE_FOR_PRODUCTION. Needed for #4826 NO_CHANGELOG=internal NO_DOC=internal NO_TEST=internal


f5f04d17f8 Igor Munkin

build: introduce an option for fuzzing-friendly mode

Patch introduce a macro FUZZING_BUILD_MODE_UNSAFE_FOR_PRODUCTION. It is a common build macro recommended in libFuzzer's documentation [1]. 1. https://llvm.org/docs/LibFuzzer.html#fuzzer-friendly-build-mode Needed for #4826 NO_CHANGELOG=build NO_DOC=build NO_TEST=build


Branches



























































































Tags

Tree

.editorconfigcommits | blame
.gdbinitcommits | blame
.gitattributescommits | blame
.github/
.gitignorecommits | blame
.gitmodulescommits | blame
.luacheckrccommits | blame
.pack.mkcommits | blame
.test.mkcommits | blame
AUTHORScommits | blame
CMakeLists.txtcommits | blame
CONTRIBUTING.mdcommits | blame
Doxyfilecommits | blame
Doxyfile.API.incommits | blame
FreeBSD/
LICENSEcommits | blame
README.FreeBSDcommits | blame
README.MacOSXcommits | blame
README.OpenBSDcommits | blame
README.mdcommits | blame
TODOcommits | blame
apk/
asan/
changelogs/
cmake/
debian/
doc/
extra/
perf/
rpm/
rump/
src/
static-build/
test/
test-run$commits | blame
third_party/
tools/

README.md

# Tarantool

[![Actions Status][actions-badge]][actions-url]
[![Code Coverage][coverage-badge]][coverage-url]
[![OSS Fuzz][oss-fuzz-badge]][oss-fuzz-url]
[![Telegram][telegram-badge]][telegram-url]
[![GitHub Discussions][discussions-badge]][discussions-url]
[![Stack Overflow][stackoverflow-badge]][stackoverflow-url]

[Tarantool][tarantool-url] is an in-memory computing platform consisting of a
database and an application server.

It is distributed under [BSD 2-Clause][license] terms.

Key features of the application server:

* Heavily optimized Lua interpreter with incredibly fast tracing JIT compiler,
  based on LuaJIT 2.1.
* Cooperative multitasking, non-blocking IO.
* [Persistent queues][queue].
* [Sharding][vshard].
* [Cluster and application management framework][cartridge].
* Access to external databases such as [MySQL][mysql] and [PostgreSQL][pg].
* A rich set of built-in and standalone [modules][modules].

Key features of the database:

* MessagePack data format and MessagePack based client-server protocol.
* Two data engines: 100% in-memory with complete WAL-based persistence and an
  own implementation of LSM-tree, to use with large data sets.
* Multiple index types: HASH, TREE, RTREE, BITSET.
* Document oriented JSON path indexes.
* Asynchronous master-master replication.
* Synchronous quorum-based replication.
* RAFT-based automatic leader election for the single-leader configuration.
* Authentication and access control.
* ANSI SQL, including views, joins, referential and check constraints.
* [Connectors][connectors] for many programming languages.
* The database is a C extension of the application server and can be turned
  off.

Supported platforms are Linux (x86_64, aarch64), Mac OS X (x86_64, M1), FreeBSD
(x86_64).

Tarantool is ideal for data-enriched components of scalable Web architecture:
queue servers, caches, stateful Web applications.

To download and install Tarantool as a binary package for your OS or using
Docker, please see the [download instructions][download].

To build Tarantool from source, see detailed [instructions][building] in the
Tarantool documentation.

To find modules, connectors and tools for Tarantool, check out our [Awesome
Tarantool][awesome-list] list.

Please report bugs to our [issue tracker][issue-tracker]. We also warmly
welcome your feedback on the [discussions][discussions-url] page and questions
on [Stack Overflow][stackoverflow-url].

We accept contributions via pull requests. Check out our [contributing
guide][contributing].

Thank you for your interest in Tarantool!

[actions-badge]: https://github.com/tarantool/tarantool/workflows/release/badge.svg
[actions-url]: https://github.com/tarantool/tarantool/actions
[coverage-badge]: https://coveralls.io/repos/github/tarantool/tarantool/badge.svg?branch=master
[coverage-url]: https://coveralls.io/github/tarantool/tarantool?branch=master
[telegram-badge]: https://img.shields.io/badge/Telegram-join%20chat-blue.svg
[telegram-url]: http://telegram.me/tarantool
[discussions-badge]: https://img.shields.io/github/discussions/tarantool/tarantool
[discussions-url]: https://github.com/tarantool/tarantool/discussions
[stackoverflow-badge]: https://img.shields.io/badge/stackoverflow-tarantool-orange.svg
[stackoverflow-url]: https://stackoverflow.com/questions/tagged/tarantool
[oss-fuzz-badge]: https://oss-fuzz-build-logs.storage.googleapis.com/badges/tarantool.svg
[oss-fuzz-url]: https://oss-fuzz.com/coverage-report/job/libfuzzer_asan_tarantool/latest
[tarantool-url]: https://www.tarantool.io/en/
[license]: LICENSE
[modules]: https://www.tarantool.io/en/download/rocks
[queue]: https://github.com/tarantool/queue
[vshard]: https://github.com/tarantool/vshard
[cartridge]: https://github.com/tarantool/cartridge
[mysql]: https://github.com/tarantool/mysql
[pg]: https://github.com/tarantool/pg
[connectors]: https://www.tarantool.io/en/download/connectors
[download]: https://www.tarantool.io/en/download/
[building]: https://www.tarantool.io/en/doc/latest/dev_guide/building_from_source/
[issue-tracker]: https://github.com/tarantool/tarantool/issues
[contributing]: CONTRIBUTING.md
[awesome-list]: https://github.com/tarantool/awesome-tarantool/