Skip to content
dev
Go to file
Code

Latest commit

By default, curl sets the signal handler for SIGPIPE to SIG_IGN while
executing. When curl is done executing, it restores the previous signal
handler. This is not thread safe, so the AWS SDK disables this behavior
in curl using the `CURLOPT_NOSIGNAL` option.
Here, we set the `installSigPipeHandler` AWS SDK option to `true` to allow
the AWS SDK to set its own signal handler to ignore SIGPIPE signals. A
SIGPIPE may be raised from the socket library when the peer disconnects
unexpectedly.

Here's an example of an unhandled SIGPIPE that crashed TileDB when making a
GetObject request:
```
Thread 27 "tiledbvcf" received signal SIGPIPE, Broken pipe.
[Switching to Thread 0x7ffff1541700 (LWP 32635)]
0x00007ffff6a2c459 in write () from /lib64/libpthread.so.0
Missing separate debuginfos, use: debuginfo-install bzip2-libs-1.0.6-13.amzn2.0.2.x86_64 libgcc-7.3.1-9.amzn2.x86_64 libstdc++-7.3.1-9.amzn2.x86_64 xz-libs-5.2.2-1.amzn2.0.2.x86_64 zlib-1.2.7-18.amzn2.x86_64
(gdb) bt
write () from /lib64/libpthread.so.0
sock_write () from /home/ec2-user/TileDB/dist/lib64/libtiledb.so.2.1
BIO_write () from /home/ec2-user/TileDB/dist/lib64/libtiledb.so.2.1
ssl3_write_pending () from /home/ec2-user/TileDB/dist/lib64/libtiledb.so.2.1
do_ssl3_write () from /home/ec2-user/TileDB/dist/lib64/libtiledb.so.2.1
ssl3_dispatch_alert () from /home/ec2-user/TileDB/dist/lib64/libtiledb.so.2.1
ssl3_shutdown () from /home/ec2-user/TileDB/dist/lib64/libtiledb.so.2.1
SSL_shutdown () from /home/ec2-user/TileDB/dist/lib64/libtiledb.so.2.1
ossl_close.isra () from /home/ec2-user/TileDB/dist/lib64/libtiledb.so.2.1
Curl_ossl_close () from /home/ec2-user/TileDB/dist/lib64/libtiledb.so.2.1
Curl_disconnect () from /home/ec2-user/TileDB/dist/lib64/libtiledb.so.2.1
Curl_connect () from /home/ec2-user/TileDB/dist/lib64/libtiledb.so.2.1
multi_runsingle () from /home/ec2-user/TileDB/dist/lib64/libtiledb.so.2.1
curl_multi_perform () from /home/ec2-user/TileDB/dist/lib64/libtiledb.so.2.1
curl_easy_perform () from /home/ec2-user/TileDB/dist/lib64/libtiledb.so.2.1
Aws::Http::CurlHttpClient::MakeRequest(std::shared_ptr<Aws::Http::HttpRequest> const&, Aws::Utils::RateLimits::RateLimiterInterface*, Aws::Utils::RateLimits::RateLimiterInterface*) const ()
   from /home/ec2-user/TileDB/dist/lib64/libtiledb.so.2.1
Aws::Client::AWSClient::AttemptOneRequest(std::shared_ptr<Aws::Http::HttpRequest> const&, Aws::AmazonWebServiceRequest const&, char const*, char const*) const () from /home/ec2-user/TileDB/dist/lib64/libtiledb.so.2.1
Aws::Client::AWSClient::AttemptExhaustively(Aws::Http::URI const&, Aws::AmazonWebServiceRequest const&, Aws::Http::HttpMethod, char const*, char const*) const () from /home/ec2-user/TileDB/dist/lib64/libtiledb.so.2.1
Aws::Client::AWSClient::MakeRequestWithUnparsedResponse(Aws::Http::URI const&, Aws::AmazonWebServiceRequest const&, Aws::Http::HttpMethod, char const*, char const*) const ()
   from /home/ec2-user/TileDB/dist/lib64/libtiledb.so.2.1
Aws::S3::S3Client::GetObject(Aws::S3::Model::GetObjectRequest const&) const () from /home/ec2-user/TileDB/dist/lib64/libtiledb.so.2.1
...
```

Co-authored-by: Seth Shelnutt <seth@tiledb.io>
1b18ddd

Git stats

Files

Permalink
Failed to load latest commit information.
Type
Name
Latest commit message
Commit time

README.md

TileDB logo

Azure Pipelines Anaconda download count badge

The Universal Storage Engine

TileDB is a powerful engine for storing and accessing dense and sparse multi-dimensional arrays, which can help you model any complex data efficiently. It is an embeddable C++ library that works on Linux, macOS, and Windows. It is open-sourced under the permissive MIT License, developed and maintained by TileDB, Inc. To distinguish this project from other TileDB offerings, we often refer to it as TileDB Embedded.

TileDB includes the following features:

  • Support for both dense and sparse arrays
  • Support for dataframes and key-value stores (via sparse arrays)
  • Cloud storage (AWS S3, Google Cloud Storage, Azure Blob Storage)
  • Chunked (tiled) arrays
  • Multiple compression, encryption and checksum filters
  • Fully multi-threaded implementation
  • Parallel IO
  • Data versioning (rapid updates, time traveling)
  • Array metadata
  • Array groups
  • Numerous APIs on top of the C++ library
  • Numerous integrations (Spark, Dask, MariaDB, GDAL, etc.)

You can use TileDB to store data in a variety of applications, such as Genomics, Geospatial, Finance and more. The power of TileDB stems from the fact that any data can be modeled efficiently as either a dense or a sparse multi-dimensional array, which is the format used internally by most data science tooling. By storing your data and metadata in TileDB arrays, you abstract all the data storage and management pains, while efficiently accessing the data with your favorite data science tool.

Quickstart

You can install the TileDB library as follows:

# Homebrew (macOS):
$ brew update
$ brew install tiledb-inc/stable/tiledb

# Or Conda (macOS, Linux, Windows):
$ conda install -c conda-forge tiledb

Alterantively, you can use the Docker image we provide:

$ docker pull tiledb/tiledb
$ docker run -it tiledb/tiledb

We include several examples. You can start with the following:

Documentation

You can find the detailed TileDB documentation at https://docs.tiledb.com.

Format Specification

The TileDB data format is open-source and can be found here.

APIs

The TileDB team maintains a variety of APIs built on top of the C++ library:

Integrations

TileDB is also integrated with several popular databases and data science tools:

Get involved

TileDB Embedded is an open-source project and welcomes all forms of contributions. Contributors to the project should read over the contribution docs for more information.

We'd love to hear from you. Drop us a line at hello@tiledb.com, visit our forum or contact form, or follow us on Twitter to stay informed of updates and news.

You can’t perform that action at this time.