Go to file
Jeff Wendling 9da6fb3410 fix(write): fix close logic to avoid race from read error
In the case that there is a read error, we would close the lines
channel before sending the error into the read error channel. closing
lines then allows the write goroutine to possibly send in a nil error
before read is able to, causing the main function driving both to
return a nil error. Additionally, it is possible for both reads and
writes to race sending errors into their channels, and the main
goroutine will only read from one, causing the other goroutine to leak.

To fix this, we close lines only after we have sent an error into
the channel, we ensure we read from both errors to make sure that
both have exited, and we unify the channels and add a buffer of size
two to the channel. It is possible for write to exit leaving read blocked
forever, but write only exits with a nil error when read has exited, so
this only happens during an actual write error, just like before.

Channels are hard.
2018-12-29 15:30:38 -07:00
.circleci chore(ci): Update schedule back to single nightly build 2018-12-21 17:01:09 -05:00
.github fix(.github): cleanup the pull request template 2018-12-21 13:37:05 -05:00
bolt feat(auth): rewrite authorization service (#2157) 2018-12-28 15:02:19 -08:00
chronograf chore: remove .eslintrc 2018-12-27 13:00:00 -05:00
cmd feat(auth): rewrite authorization service (#2157) 2018-12-28 15:02:19 -08:00
context feat(auth): rewrite authorization service (#2157) 2018-12-28 15:02:19 -08:00
docker ci(influxd): add influxd to goreleaser 2018-08-31 12:58:21 -05:00
etc chore(Makefile): add target to check generated files are accurate 2018-12-18 12:54:17 -07:00
flux Flux/connections page (#4026) 2018-07-27 10:05:02 -07:00
gather chore(context,gather,inmem,kit): fix megacheck errors 2018-11-01 12:54:46 -07:00
http feat(auth): rewrite authorization service (#2157) 2018-12-28 15:02:19 -08:00
inmem feat(auth): rewrite authorization service (#2157) 2018-12-28 15:02:19 -08:00
internal chore(Makefile): remove yq dependency to generate ts client 2018-12-18 11:19:56 -07:00
kit rename msg to message for platform.Error json 2018-12-27 10:34:00 +08:00
kv fix(inmem): user service now filters by id 2018-12-26 21:38:18 -06:00
logger refactor: move the logger package from influxdb to platform 2018-10-10 15:49:07 -05:00
mock feat(auth): rewrite authorization service (#2157) 2018-12-28 15:02:19 -08:00
models feat(models): only use common SI time units for timestamp precision 2018-12-20 22:39:24 -06:00
nats Ensure error don't end in punctuation: ST1005 2018-11-30 10:54:24 +00:00
pkg chore(gen): Add ingen generator data structures to platform for reuse 2018-12-11 17:45:57 -07:00
prometheus feat(platform/id): using uint64 for platform.IDs 2018-10-11 09:54:18 -05:00
query feat(auth): rewrite authorization service (#2157) 2018-12-28 15:02:19 -08:00
rand fix(rand): rename *_genator.go to *.go 2018-05-16 11:45:13 -04:00
scripts refactor: modify tooling to take advantage of go run 2018-10-15 11:01:27 -05:00
snowflake refactor(id): update name to IDLength 2018-10-11 09:54:19 -05:00
source Update Flux query URL for v1 sources 2018-11-09 09:48:04 -08:00
storage build(Makefile): fix various bug with makefiles 2018-12-19 17:02:19 -07:00
task feat(auth): rewrite authorization service (#2157) 2018-12-28 15:02:19 -08:00
telegraf/plugins fix(platform): fix the pointer alloc for telegraf config 2018-12-20 12:45:45 -05:00
testing feat(auth): rewrite authorization service (#2157) 2018-12-28 15:02:19 -08:00
toml refactor(toml): copy the toml utility package from influxdb to platform 2018-10-11 12:08:43 -05:00
tools/tmpl refactor: modify tooling to take advantage of go run 2018-10-15 11:01:27 -05:00
tsdb tsm1: speed up deleterange for large keys 2018-12-14 10:06:24 -07:00
ui feat(auth): rewrite authorization service (#2157) 2018-12-28 15:02:19 -08:00
uuid Remove influxdb dependency. 2018-11-29 11:44:22 -07:00
vault chore(platform): cleanup, document, and use secret service 2018-12-28 11:11:21 -05:00
write fix(write): fix close logic to avoid race from read error 2018-12-29 15:30:38 -07:00
zap Ensure error strings not capitalised ST1005 2018-11-30 10:54:24 +00:00
.gitignore Remove yarn in favor of just npm 2018-11-30 17:02:31 -08:00
.goreleaser.yml chore(ci): Run make generate 2018-12-20 17:17:32 -05:00
Jenkinsfile update Jenkinsfile 2018-09-06 10:41:23 -05:00
LICENSE Initial commit 2018-05-09 09:17:31 -07:00
Makefile Merge pull request #2091 from influxdata/chore/generation-add-typescript-task 2018-12-20 15:09:35 -08:00
README.md Merge pull request #1393 from influxdata/chore/add-bazaar-to-readme 2018-12-15 10:50:08 -06:00
auth.go feat(auth): rewrite authorization service (#2157) 2018-12-28 15:02:19 -08:00
authz.go feat(auth): rewrite authorization service (#2157) 2018-12-28 15:02:19 -08:00
authz_test.go feat(auth): rewrite authorization service (#2157) 2018-12-28 15:02:19 -08:00
bucket.go add /buckets endpoint paging links 2018-12-09 23:27:18 +08:00
dashboard.go fix(http): convert dashboard errors 2018-12-13 14:36:46 -05:00
dbrp_mapping.go Ensure error strings not capitalised ST1005 2018-11-30 10:54:24 +00:00
dbrp_mapping_internal_test.go feat(platform/id): using uint64 for platform.IDs 2018-10-11 09:54:18 -05:00
dbrp_mapping_test.go refactor(testing): rename MustIDFromString to MustIDBase16 2018-10-11 09:54:19 -05:00
error.go feat(errors): add errors lib 2018-09-07 21:45:47 -05:00
errors.go rename msg to message for platform.Error json 2018-12-27 10:34:00 +08:00
errors.md feat(errors): add errors lib 2018-09-07 21:45:47 -05:00
errors_test.go rename msg to message for platform.Error json 2018-12-27 10:34:00 +08:00
example_test.go feat(platform): add keyvalue log interface with boltdb implementation 2018-10-31 09:41:55 -04:00
go.mod feat(auth): rewrite authorization service (#2157) 2018-12-28 15:02:19 -08:00
go.sum feat(auth): rewrite authorization service (#2157) 2018-12-28 15:02:19 -08:00
id.go feat(auth): rewrite authorization service (#2157) 2018-12-28 15:02:19 -08:00
id_test.go chore: add GoString method to platform.ID 2018-10-31 14:41:47 -07:00
keyvalue_log.go feat(platform): add keyvalue log interface with boltdb implementation 2018-10-31 09:41:55 -04:00
label.go fix go vet 2018-12-20 13:52:35 -08:00
label_test.go remove colors from labels 2018-12-20 12:18:03 -08:00
lookup.go feat(auth): rewrite authorization service (#2157) 2018-12-28 15:02:19 -08:00
macro.go fix(http): convert macro errors 2018-12-13 23:11:52 +08:00
macro_test.go refactor(testing): rename MustIDFromString to MustIDBase16 2018-10-11 09:54:19 -05:00
measurement.go Initial Retention Service 2018-10-10 15:39:27 +01:00
onboarding.go (feat/testing) add onboarding and basic auth service 2018-11-02 12:20:45 -04:00
operation_log.go feat(platform): add operation log for resources 2018-11-02 14:21:14 -04:00
organization.go fix(http): convert org errors endpoint 2018-12-06 11:05:13 -05:00
paging.go fix(http): Fix developer mode default 2018-12-21 16:33:04 -05:00
query.go feat(platform): add uniform query endpoint for sources 2018-08-28 15:53:20 -04:00
scraper.go fix(http): convert scraper target error 2018-12-17 09:08:19 -05:00
secret.go feat(vault): add vault implementation of secret service 2018-11-30 13:07:32 -08:00
session.go feat(session): error constants and variables 2018-12-21 09:56:23 +01:00
source.go Update Flux query URL for v1 sources 2018-11-09 09:48:04 -08:00
status.go feat(auth): rewrite authorization service (#2157) 2018-12-28 15:02:19 -08:00
task.go feat(auth): rewrite authorization service (#2157) 2018-12-28 15:02:19 -08:00
telegraf.go fix(platform): remove creator and time 2018-12-21 11:05:55 -05:00
telegraf_test.go fix(platform): remove creator and time 2018-12-21 11:05:55 -05:00
token.go fix(platform): rename *_generator.go to *.go 2018-05-16 11:45:13 -04:00
tools.go build(Makefile): fix various bug with makefiles 2018-12-19 17:02:19 -07:00
usage.go feat(usage): add values and series metrics to usage service 2018-10-22 17:47:04 -05:00
user.go feat(platform): add generic kv store 2018-12-18 16:08:48 -05:00
user_resource_mapping.go feat(auth): rewrite authorization service (#2157) 2018-12-28 15:02:19 -08:00
user_resource_mapping_test.go feat(auth): rewrite authorization service (#2157) 2018-12-28 15:02:19 -08:00
view.go fix(http): view errors endpoint conversion 2018-12-19 16:54:48 -05:00
view_test.go Add ability to create notes on a dashboard 2018-11-29 16:41:40 -08:00
write.go feat(http): add http write client 2018-10-25 19:11:12 -05:00

README.md

InfluxData Platform CircleCI

This is the monorepo for InfluxData Platform, a.k.a. Influx 2.0 OSS.

Installation

This project requires Go 1.11 and Go module support.

Set GO111MODULE=on or build the project outside of your GOPATH for it to succeed.

If you are getting an error loading module requirements error with bzr executable file not found in $PATH” on make, brew install bazaar (on macOSX) before continuing.

For information about modules, please refer to the wiki.

Introducing Flux

We recently announced Flux, the MIT-licensed data scripting language (and rename for IFQL). The source for Flux is in this repository under query. Learn more about Flux from CTO Paul Dix's presentation.

CI and Static Analysis

CI

All pull requests will run through CI, which is currently hosted by Circle. Community contributors should be able to see the outcome of this process by looking at the checks on their PR. Please fix any issues to ensure a prompt review from members of the team.

The Platform project is used internally in a number of proprietary InfluxData products, and as such, PRs and changes need to be tested internally. This can take some time, and is not really visible to community contributors.

Static Analysis

This project uses the following static analysis tools. Failure during the running of any of these tools results in a failed build. Generally, code must be adjusted to satisfy these tools, though there are exceptions.

  • go vet checks for Go code that should be considered incorrect.
  • go fmt checks that Go code is correctly formatted.
  • go mod tidy ensures that the source code and go.mod agree.
  • staticcheck checks for things like: unused code, code that can be simplified, code that is incorrect and code that will have performance issues.

staticcheck

If your PR fails staticcheck it is easy to dig into why it failed, and also to fix the problem. First, take a look at the error message in Circle under the staticcheck build section, e.g.,

tsdb/tsm1/encoding.gen.go:1445:24: func BooleanValues.assertOrdered is unused (U1000)
tsdb/tsm1/encoding.go:172:7: receiver name should not be an underscore, omit the name if it is unused (ST1006)

Next, go and take a look here for some clarification on the error code that you have received, e.g., U1000. The docs will tell you what's wrong, and often what you need to do to fix the issue.

Generated Code

Sometimes generated code will contain unused code or occasionally that will fail a different check. staticcheck allows for entire files to be ignored, though it's not ideal. A linter directive, in the form of a comment, must be placed within the generated file. This is problematic because it will be erased if the file is re-generated. Until a better solution comes about, below is the list of generated files that need an ignores comment. If you re-generate a file and find that staticcheck has failed, please see this list below for what you need to put back:

File Comment
query/promql/promql.go //lint:file-ignore SA6001 Ignore all unused code, it's generated