featurebase/dax
Matthew Jaffee be4f365eaf
Cloud 1358 bolt postgres (#2286)
Switch Serverless from using BoltDB to Postgres as metadata store.

Previously, the controller stored all metadata to BoltDB. This implements SQLDB (currently Postgres flavored) as the backing store for metadata. This will allow us to have multiple instances of the controller running for HA, and to easily inspect and repair the contents of the metadata store.

Unfortunately, it was not straightforward to keep the BoltDB implementation working alongside the SQL one, so it will be removed in a later patch. Once that's done, the SQL implementation should allow for a number of simplifications of the schemar and balancer interfaces.

Database migration is built directly into the application by embedding the migration files and logic from the `soda` command line tool. When connecting to the RDBMS, the app will always attempt to create the necessary database and apply any outstanding migrations.

Integration tests truncate all tables upon start, but *not* at the end, so the state of the database can be inspected after integration tests.

Had to refactor some of the controller's background tasks to make sure they get properly shut down on controller exit.
2023-03-20 09:02:22 -05:00
..
boltdb Cloud 1358 bolt postgres (#2286) 2023-03-20 09:02:22 -05:00
computer tweak a bunch of logging and config (#2234) 2023-02-03 14:59:07 -06:00
controller Cloud 1358 bolt postgres (#2286) 2023-03-20 09:02:22 -05:00
http Remove MDS and replace it with Controller (#2219) 2023-01-30 16:54:12 -06:00
migrations Cloud 1358 bolt postgres (#2286) 2023-03-20 09:02:22 -05:00
models Cloud 1358 bolt postgres (#2286) 2023-03-20 09:02:22 -05:00
queryer Cloud 1358 bolt postgres (#2286) 2023-03-20 09:02:22 -05:00
server Cloud 1358 bolt postgres (#2286) 2023-03-20 09:02:22 -05:00
snapshotter Add Drop Database and Drop Table support (#2208) 2023-01-23 19:59:47 -06:00
storage Cloud 1358 bolt postgres (#2286) 2023-03-20 09:02:22 -05:00
test Cloud 1358 bolt postgres (#2286) 2023-03-20 09:02:22 -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 Cloud 1358 bolt postgres (#2286) 2023-03-20 09:02:22 -05:00
docker-compose.yml Remove MDS and replace it with Controller (#2219) 2023-01-30 16:54:12 -06:00
errors.go Cloud 1358 bolt postgres (#2286) 2023-03-20 09:02:22 -05: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 Drop Database and Drop Table support (#2208) 2023-01-23 19:59:47 -06: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 linter: prealloc (#2315) 2023-03-11 21:19:05 -06: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.