featurebase/dax
Seebs 283b00c741 hacky workaround: use locking to quiet race detector problems
So we have a problem which is triggered in part by the race detector,
but which is actually deeper, but also possibly rare enough to be
politely ignored.

The real underlying issue is that sometimes when we have multiple
tests running in CI, multiple instances of the CLI test end up using
the same postgres database backing for some of their DAX stuff. We
have workarounds for this in some places, but not others.

But the *observed symptom* of this is that it can cause a trivial
race detector issue where we have one call to `(*Resource).Lock()`
and another call to `(*Resource).IsLocked()` which aren't synchronized
in any way, so if the race detector spots this, it complains.

We can suppress that very easily by synchronizing these. That does
not solve the other possibly-weird problems, so this may not actually
address the issue, but I think it might reduce the rate of sporadic
failures significantly, which would give us some time to think about
solving the deeper problem.

The underlying design issue is that we're reusing the database name
in postgres for testing. This lets us have bounded growth (one database)
while leaving the database contents up after a failed test (so we can
examine them), then truncating the database during startup if it already
exists. Which works fine if *only one thing runs at once*, which would
be true on a laptop, but in CI, it's sometimes not true. A real fix
for that is complex and requires some rethinking of how we approach
the test stuff, as we don't want unbounded growth, but we also don't
want two copies of the test running at once to see each other, and
ensuring cleanup after a test failure is surprisingly hard.
2023-03-28 11:56:23 -05:00
..
computer Add HasDirective to dax.Node struct to force Directive on restart (#2335) 2023-03-21 13:22:16 -05:00
controller Cloud 1457 (#2347) 2023-03-23 16:20:45 -04:00
http Remove MDS and replace it with Controller (#2219) 2023-01-30 16:54:12 -06:00
migrations Sqldb rip boltdb (#2341) 2023-03-22 08:54:13 -05:00
models Sqldb rip boltdb (#2341) 2023-03-22 08:54:13 -05:00
queryer support null/non-null tests for non-BSI fields 2023-03-24 16:01:09 -05:00
server Sqldb rip boltdb (#2341) 2023-03-22 08:54:13 -05:00
snapshotter Sqldb rip boltdb (#2341) 2023-03-22 08:54:13 -05:00
storage hacky workaround: use locking to quiet race detector problems 2023-03-28 11:56:23 -05:00
test Add tests cases for coverage in expressiontypes.go (#2345) 2023-03-23 14:17:06 -05:00
writelogger Support for setting individual DatabaseOptions (#2231) 2023-02-06 08:50:28 -06:00
address.go Database isolation: Balancer (#2407) 2023-01-19 22:10:08 +00:00
address_test.go Sync from private repo to commit 12d608c80d 2022-12-12 09:01:20 -08:00
controller.go Add Drop Database and Drop Table support (#2208) 2023-01-23 19:59:47 -06:00
dax.go Remove MDS and replace it with Controller (#2219) 2023-01-30 16:54:12 -06:00
directive.go Remove MDS and replace it with Controller (#2219) 2023-01-30 16:54:12 -06:00
directive_version_test.go Sqldb rip boltdb (#2341) 2023-03-22 08:54:13 -05:00
errors.go Cloud 1457 (#2347) 2023-03-23 16:20:45 -04:00
Makefile Cloud 1358 bolt postgres (#2286) 2023-03-20 09:02:22 -05:00
migrations.go Cloud 1358 bolt postgres (#2286) 2023-03-20 09:02:22 -05:00
node.go Add HasDirective to dax.Node struct to force Directive on restart (#2335) 2023-03-21 13:22:16 -05:00
README.md introduce performance counters and system table fanout, plus refactor metrics (#2363) 2023-01-19 21:35:02 +00:00
role.go Database isolation: Balancer (#2407) 2023-01-19 22:10:08 +00:00
schema.go Support for setting individual DatabaseOptions (#2231) 2023-02-06 08:50:28 -06:00
service_manager.go tweak a bunch of logging and config (#2234) 2023-02-03 14:59:07 -06:00
snapshot.go remove version/directive stuff from other snapshot endpoints 2023-01-10 23:22:58 +00:00
table.go support null/non-null tests for non-BSI fields 2023-03-24 16:01:09 -05:00
table_test.go FB-1968 timestamp data type related fixes and enhancements (#2256) 2023-02-24 14:57:17 -05:00
time.go Add DAX - full list of squashed commits below 2022-12-12 09:01:20 -08:00
transaction.go Database isolation: Balancer (#2407) 2023-01-19 22:10:08 +00:00
versioned_partition.go first cut at removing all the shard/field/partition versioning 2023-01-10 23:27:40 +00:00
versioned_shard.go first cut at removing all the shard/field/partition versioning 2023-01-10 23:27:40 +00:00
workerjob.go Database isolation: Balancer (#2407) 2023-01-19 22:10:08 +00:00
workerjob_test.go Add DAX - full list of squashed commits below 2022-12-12 09:01:20 -08:00

DAX

DAX encapsulates anything which covers all of the services which make up the "disaggregation of storage and compute" project. Initially, this will include integration tests which pull in things like Metadata Services (MDS), including the Controller, as well as FeatureBase and IDK-based ingesters.

Setting up the tests

The DAX test currently requires docker images for: featurebase and datagen.

If at any point you run into problems with go mod failing to reference a private repo, make sure that you have gitlab.com/featurebasedb in your GOPRIVATE environment variable.

Note that during the docker image build step, go mod vendor is run, which creates a vendor directory in the root directory, and copies that to docker during the build stage. Just be aware of this; you may want to remove that vendor directory after you're done building docker images.

Possible Configuruation

The following were relevent when the dax code was in a separate repository. These may no longer be relevant.

I needed to but this in my ~/.profile file:

export GOPRIVATE=github.com/featurebasedb,gitlab.com/featurebasedb

And this in my ~/.gitconfig

[url "ssh://git@github.com/"]
	insteadOf = https://github.com/
[url "ssh://git@gitlab.com/"]
	insteadOf = https://gitlab.com/

Then make docker ran successfully.

Build the FeatureBase docker image

  • Check out the dax branch of the featurebase repository.
  • Run make docker-image-featurebase to build the docker image
  • You should now have an image in docker named dax/featurebase with the tag latest.

Build the Datagen docker image

  • cd <featurebase_repo_root>/idk
  • Run make docker-image-datagen to build the docker image
  • You should now have an image in docker named dax/datagen with the tag latest.

Running the tests

  • Check out the dax branch of the featurebase repository.
  • Change into the dax directory: cd dax
  • Run make test-integration.