From c8bd32f2c2279d8f832cd9256007ceab0c97c9b7 Mon Sep 17 00:00:00 2001 From: "Kate E. Reinecke" <50168367+kreinecke@users.noreply.github.com> Date: Fri, 22 Nov 2019 10:02:35 +0000 Subject: [PATCH] Add FoundationDB Document Layer as an alternative to MongoDB Signed-off-by: Kate E. Reinecke <50168367+kreinecke@users.noreply.github.com> --- chart-repo | Bin 0 -> 14588264 bytes .../local-helm/fdbdoclayer/.helmignore | 22 + .../local-helm/fdbdoclayer/Chart.yaml | 5 + .../fdbdoclayer/templates/_helpers.tpl | 33 + .../templates/fdb-doc-layer-deployment.yaml | 45 + .../fdb-doc-layer-networkpolicy.yaml | 20 + .../templates/fdb-doc-layer-service.yaml | 19 + .../templates/fdbserver-deployment.yaml | 45 + .../templates/fdbserver-networkpolicy.yaml | 20 + .../templates/fdbserver-service.yaml | 19 + .../local-helm/fdbdoclayer/values.yaml | 26 + chart/monocular/requirements.lock | 7 +- chart/monocular/requirements.yaml | 4 + chart/monocular/templates/_helpers.tpl | 20 +- .../templates/chartsvc-deployment.yaml | 16 +- chart/monocular/values.yaml | 21 +- cmd/chart-repo/Dockerfile | 2 - cmd/chart-repo/Makefile | 2 +- cmd/chart-repo/chart_repo.go | 19 +- cmd/chart-repo/common/chart_utils.go | 204 +++++ cmd/chart-repo/{ => common}/types.go | 45 +- cmd/chart-repo/delete.go | 48 +- cmd/chart-repo/foundationdb/datastore.go | 121 +++ cmd/chart-repo/foundationdb/delete.go | 64 ++ cmd/chart-repo/foundationdb/mockstore.go | 82 ++ cmd/chart-repo/foundationdb/sync.go | 68 ++ cmd/chart-repo/foundationdb/utils.go | 463 ++++++++++ cmd/chart-repo/foundationdb/utils_test.go | 690 ++++++++++++++ cmd/chart-repo/mongodb/delete.go | 59 ++ cmd/chart-repo/mongodb/sync.go | 64 ++ cmd/chart-repo/{ => mongodb}/utils.go | 227 +---- cmd/chart-repo/{ => mongodb}/utils_test.go | 117 +-- cmd/chart-repo/sync.go | 49 +- cmd/chart-repo/{ => utils}/version.go | 21 +- cmd/chartsvc/Dockerfile | 1 - cmd/chartsvc/Makefile | 2 +- .../foundationdb/datastore/datastore.go | 145 +++ .../foundationdb/datastore/mockstore.go | 87 ++ cmd/chartsvc/foundationdb/handler.go | 506 ++++++++++ cmd/chartsvc/foundationdb/handler_test.go | 867 ++++++++++++++++++ cmd/chartsvc/main.go | 139 ++- cmd/chartsvc/main_test.go | 53 +- cmd/chartsvc/{ => mongodb}/handler.go | 131 ++- cmd/chartsvc/{ => mongodb}/handler_test.go | 99 +- cmd/chartsvc/utils/responses.go | 59 ++ cmd/chartsvc/utils/testutils.go | 40 + fdb-service.yaml | 21 + go.mod | 8 + go.sum | 13 + 49 files changed, 4304 insertions(+), 534 deletions(-) create mode 100755 chart-repo create mode 100644 chart/monocular/local-helm/fdbdoclayer/.helmignore create mode 100644 chart/monocular/local-helm/fdbdoclayer/Chart.yaml create mode 100644 chart/monocular/local-helm/fdbdoclayer/templates/_helpers.tpl create mode 100644 chart/monocular/local-helm/fdbdoclayer/templates/fdb-doc-layer-deployment.yaml create mode 100644 chart/monocular/local-helm/fdbdoclayer/templates/fdb-doc-layer-networkpolicy.yaml create mode 100644 chart/monocular/local-helm/fdbdoclayer/templates/fdb-doc-layer-service.yaml create mode 100644 chart/monocular/local-helm/fdbdoclayer/templates/fdbserver-deployment.yaml create mode 100644 chart/monocular/local-helm/fdbdoclayer/templates/fdbserver-networkpolicy.yaml create mode 100644 chart/monocular/local-helm/fdbdoclayer/templates/fdbserver-service.yaml create mode 100644 chart/monocular/local-helm/fdbdoclayer/values.yaml create mode 100644 cmd/chart-repo/common/chart_utils.go rename cmd/chart-repo/{ => common}/types.go (51%) create mode 100644 cmd/chart-repo/foundationdb/datastore.go create mode 100644 cmd/chart-repo/foundationdb/delete.go create mode 100644 cmd/chart-repo/foundationdb/mockstore.go create mode 100644 cmd/chart-repo/foundationdb/sync.go create mode 100644 cmd/chart-repo/foundationdb/utils.go create mode 100644 cmd/chart-repo/foundationdb/utils_test.go create mode 100644 cmd/chart-repo/mongodb/delete.go create mode 100644 cmd/chart-repo/mongodb/sync.go rename cmd/chart-repo/{ => mongodb}/utils.go (61%) rename cmd/chart-repo/{ => mongodb}/utils_test.go (81%) rename cmd/chart-repo/{ => utils}/version.go (70%) create mode 100644 cmd/chartsvc/foundationdb/datastore/datastore.go create mode 100644 cmd/chartsvc/foundationdb/datastore/mockstore.go create mode 100644 cmd/chartsvc/foundationdb/handler.go create mode 100644 cmd/chartsvc/foundationdb/handler_test.go rename cmd/chartsvc/{ => mongodb}/handler.go (79%) rename cmd/chartsvc/{ => mongodb}/handler_test.go (91%) create mode 100644 cmd/chartsvc/utils/responses.go create mode 100644 cmd/chartsvc/utils/testutils.go create mode 100644 fdb-service.yaml diff --git a/chart-repo b/chart-repo new file mode 100755 index 0000000000000000000000000000000000000000..ceb3058e6de94e92fbe19d57b2c983d9e2303f97 GIT binary patch literal 14588264 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