2020-11-10 16:17:51 +00:00
|
|
|
# InfluxDB IOx
|
2019-11-22 22:10:37 +00:00
|
|
|
|
2020-11-10 16:17:51 +00:00
|
|
|
TODO: Blog post summary here
|
2020-04-24 14:36:59 +00:00
|
|
|
|
2020-11-10 16:17:51 +00:00
|
|
|
## Quick Start
|
2020-04-24 14:36:59 +00:00
|
|
|
|
2020-11-10 16:17:51 +00:00
|
|
|
To compile and run InfluxDB IOx from source, you'll need a Rust compiler and a `flatc` FlatBuffers
|
|
|
|
compiler.
|
2020-06-22 20:41:36 +00:00
|
|
|
|
2020-11-10 16:17:51 +00:00
|
|
|
### Cloning the Repository
|
|
|
|
|
|
|
|
Using `git`, check out the code by cloning this repository. If you use the `git` command line, this
|
|
|
|
looks like:
|
|
|
|
|
|
|
|
```
|
|
|
|
$ git clone git@github.com:influxdata/influxdb_iox.git
|
|
|
|
```
|
|
|
|
|
|
|
|
Then change into the directory containing the code:
|
|
|
|
|
|
|
|
```
|
|
|
|
$ cd influxdb_iox
|
|
|
|
```
|
|
|
|
|
|
|
|
The rest of the instructions assume you are in this directory.
|
|
|
|
|
|
|
|
### Installing Rust
|
|
|
|
|
|
|
|
The easiest way to install Rust is by using [`rustup`], a Rust version manager.
|
|
|
|
Follow the instructions on the `rustup` site for your operating system.
|
|
|
|
|
|
|
|
[`rustup`]: https://rustup.rs/
|
|
|
|
|
|
|
|
InfluxDB IOx is currently using a nightly version of Rust to get performance benefits from the
|
|
|
|
unstable `simd` feature. The exact nightly version is specified in the `rust-toolchain` file. By
|
|
|
|
default, `rustup` will look in this file and automatically install the correct version for you.
|
|
|
|
|
|
|
|
### Installing `flatc`
|
|
|
|
|
|
|
|
InfluxDB IOx uses the [FlatBuffer] serialization format for its write-ahead log. The [`flatc`
|
|
|
|
compiler] reads the schema in `generated_types/wal.fbs` and generates the corresponding Rust code.
|
|
|
|
|
|
|
|
Install `flatc` >= 1.12.0 with one of these methods as appropriate to your operating system:
|
|
|
|
|
|
|
|
- Using a [Windows binary release]
|
|
|
|
- Using the [`flatbuffers` package for conda]
|
|
|
|
- Using the [`flatbuffers` package for Arch Linux]
|
|
|
|
- Using the [`flatbuffers` package for Homebrew]
|
|
|
|
|
|
|
|
Once you have installed the packages, you should be able to run:
|
|
|
|
|
|
|
|
```
|
|
|
|
$ flatc --version
|
|
|
|
```
|
|
|
|
|
|
|
|
and see the version displayed.
|
|
|
|
|
|
|
|
You won't have to run `flatc` directly; once it's available, Rust's Cargo build tool manages the
|
|
|
|
compilation process by calling `flatc` for you.
|
|
|
|
|
|
|
|
[FlatBuffer]: https://google.github.io/flatbuffers/
|
|
|
|
[`flatc` compiler]: https://google.github.io/flatbuffers/flatbuffers_guide_using_schema_compiler.html
|
|
|
|
[Windows binary release]: https://github.com/google/flatbuffers/releases
|
|
|
|
[`flatbuffers` package for conda]: https://anaconda.org/conda-forge/flatbuffers
|
|
|
|
[`flatbuffers` package for Arch Linux]: https://www.archlinux.org/packages/community/x86_64/flatbuffers/
|
|
|
|
[`flatbuffers` package for Homebrew]: https://github.com/Homebrew/homebrew-core/blob/HEAD/Formula/flatbuffers.rb
|
|
|
|
|
|
|
|
### Specifying Configuration
|
|
|
|
|
|
|
|
**OPTIONAL:** There are a number of configuration variables you can choose to customize by
|
|
|
|
specifying values for environment variables in a `.env` file. To get an example file to start from,
|
|
|
|
run:
|
|
|
|
|
|
|
|
```
|
|
|
|
cp docs/env.example .env
|
|
|
|
```
|
|
|
|
|
|
|
|
then edit the newly-created `.env` file.
|
|
|
|
|
|
|
|
For development purposes, the most relevant environment variables are the `INFLUXDB_IOX_DB_DIR` and
|
|
|
|
`TEST_INFLUXDB_IOX_DB_DIR` variables that configure where files are stored on disk. The default
|
|
|
|
values are shown in the comments in the example file; to change them, uncomment the relevant lines
|
|
|
|
and change the values to the directories in which you'd like to store the files instead:
|
|
|
|
|
|
|
|
```
|
|
|
|
INFLUXDB_IOX_DB_DIR=/some/place/else
|
|
|
|
TEST_INFLUXDB_IOX_DB_DIR=/another/place
|
|
|
|
```
|
|
|
|
|
|
|
|
### Compiling and Starting the Server
|
|
|
|
|
|
|
|
InfluxDB IOx is built using Cargo, Rust's package manager and build tool.
|
|
|
|
|
|
|
|
To compile for development, run:
|
|
|
|
|
|
|
|
```
|
|
|
|
$ cargo build
|
|
|
|
```
|
|
|
|
|
|
|
|
which will create a binary in `target/debug` that you can run with:
|
|
|
|
|
|
|
|
```
|
|
|
|
$ ./target/debug/influxdb_iox
|
|
|
|
```
|
|
|
|
|
|
|
|
You can compile and run with one command by using:
|
|
|
|
|
|
|
|
```
|
|
|
|
$ cargo run
|
|
|
|
```
|
|
|
|
|
|
|
|
When compiling for performance testing, build in release mode by using:
|
|
|
|
|
|
|
|
```
|
|
|
|
$ cargo build --release
|
|
|
|
```
|
|
|
|
|
|
|
|
which will create the corresponding binary in `target/release`:
|
|
|
|
|
|
|
|
```
|
|
|
|
$ ./target/release/influxdb_iox
|
|
|
|
```
|
|
|
|
|
|
|
|
Similarly, you can do this in one step with:
|
|
|
|
|
|
|
|
```
|
|
|
|
$ cargo run --release
|
|
|
|
```
|
|
|
|
|
|
|
|
The server will, by default, start an HTTP API server on port `8080` and a gRPC server on port
|
|
|
|
`8082`.
|
|
|
|
|
|
|
|
### Writing and Reading Data
|
|
|
|
|
|
|
|
Data can be stored in InfluxDB IOx by sending it in [line protocol] format to the `/api/v2/write`
|
|
|
|
endpoint. Data is stored by organization and bucket names. Here's an example using [`curl`] with
|
|
|
|
the organization name `company` and the bucket name `sensors` that will send the data in the
|
|
|
|
`tests/fixtures/lineproto/metrics.lp` file in this repository, assuming that you're running the
|
|
|
|
server on the default port:
|
|
|
|
|
|
|
|
```
|
|
|
|
curl -v "http://127.0.0.1:8080/api/v2/write?org=company&bucket=sensors" --data-binary @tests/fixtures/lineproto/metrics.lp
|
|
|
|
```
|
|
|
|
|
|
|
|
[line protocol]: https://docs.influxdata.com/influxdb/v2.0/reference/syntax/line-protocol/
|
|
|
|
[`curl`]: https://curl.se/
|
|
|
|
|
|
|
|
To query stored data, use the `/api/v2/read` endpoint with a SQL query. This example will return
|
|
|
|
all data in the `company` organization's `sensors` bucket for the `processes` measurement:
|
|
|
|
|
|
|
|
```
|
|
|
|
$ curl -v -G -d 'org=company' -d 'bucket=sensors' --data-urlencode 'sql_query=select * from processes' "http://127.0.0.1:8080/api/v2/read"
|
|
|
|
```
|
|
|
|
|
|
|
|
## Contributing
|
|
|
|
|
|
|
|
If you want to contribute to InfluxDB IOx you will need to sign InfluxData's CLA, which can be
|
|
|
|
found with more information [on our website].
|
|
|
|
|
|
|
|
[on our website]: https://www.influxdata.com/legal/cla/
|
|
|
|
|
|
|
|
InfluxDB IOx is written mostly in idiomatic Rust -- please see the [Style Guide] for more details.
|
|
|
|
|
|
|
|
[Style Guide]: docs/style_guide.md
|
|
|
|
|
|
|
|
### Running Tests
|
|
|
|
|
|
|
|
The `cargo` build tool runs tests as well. Run:
|
|
|
|
|
|
|
|
```
|
|
|
|
$ cargo test --workspace
|
|
|
|
```
|
|
|
|
|
|
|
|
### Running `rustfmt` and `clippy`
|
|
|
|
|
|
|
|
CI will check the code formatting with [`rustfmt`] and Rust best practices with [`clippy`].
|
|
|
|
|
|
|
|
To automatically format your code according to `rustfmt` style, first make sure `rustfmt` is installed using `rustup`:
|
|
|
|
|
|
|
|
```
|
|
|
|
$ rustup component add rustfmt
|
|
|
|
```
|
|
|
|
|
|
|
|
Then, whenever you make a change and want to reformat, run:
|
|
|
|
|
|
|
|
```
|
|
|
|
$ cargo fmt --all
|
|
|
|
```
|
|
|
|
|
|
|
|
Similarly with `clippy`, install with:
|
|
|
|
|
|
|
|
```
|
|
|
|
$ rustup component add clippy
|
|
|
|
```
|
|
|
|
|
|
|
|
And run with:
|
|
|
|
|
|
|
|
```
|
|
|
|
$ cargo clippy --all-targets --workspace
|
|
|
|
```
|
|
|
|
|
|
|
|
[`rustfmt`]: https://github.com/rust-lang/rustfmt
|
|
|
|
[`clippy`]: https://github.com/rust-lang/rust-clippy
|