Skip to content

Commit 6b9c1d0

Browse files
authored
Merge pull request #403 from arangodb-helper/GT-592-deprecate-arangosync
GT-592 Deprecate ArangoSync
2 parents 74e0feb + 3a02f16 commit 6b9c1d0

14 files changed

+110
-81
lines changed

.circleci/config.yml

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -3,21 +3,21 @@ version: 2.1
33
parameters:
44
goImage:
55
type: string
6-
default: "gcr.io/gcr-for-testing/golang:1.21.5"
6+
default: "gcr.io/gcr-for-testing/golang:1.21.6"
77
arangodbImage:
88
type: string
9-
default: "gcr.io/gcr-for-testing/arangodb/enterprise:3.9.2"
9+
default: "gcr.io/gcr-for-testing/arangodb/enterprise-preview:devel-nightly"
1010
alpineImage:
1111
type: string
12-
default: "gcr.io/gcr-for-testing/alpine:3.17"
12+
default: "gcr.io/gcr-for-testing/alpine:3.18"
1313
starterModes:
1414
type: string
15-
default: "single,cluster,activefailover"
15+
default: "single,cluster"
1616

1717
executors:
1818
golang-executor:
1919
docker:
20-
- image: gcr.io/gcr-for-testing/golang:1.21.5
20+
- image: gcr.io/gcr-for-testing/golang:1.21.6
2121
machine-executor:
2222
machine:
2323
image: ubuntu-2204:current
@@ -52,7 +52,6 @@ jobs:
5252
GOIMAGE: << pipeline.parameters.goImage >>
5353
ALPINE_IMAGE: << pipeline.parameters.alpineImage >>
5454
STARTER_MODES: << pipeline.parameters.starterModes >>
55-
MULTIARCH: 0
5655
VERBOSE: 1
5756

5857
workflows:

.gitignore

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,4 +10,4 @@ vendor/
1010
.idea
1111

1212
resource.syso
13-
13+
CONTAINER

CHANGELOG.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,10 @@
11
# ArangoDB Starter Changelog
22

33
## [master](https://github.com/arangodb-helper/arangodb/tree/master) (N/A)
4+
- Mark ArangoSync component as deprecated
5+
- Do not allow starting ArangoDB v3.12+ with ArangoSync component
6+
- Do not allow upgrade if the cluster is using ArangoSync component (if the new version is v3.12 or newer)
7+
- Bump Go version (v1.21.6) and dependencies for CVE fixes
48

59
## [v0.18.2](https://github.com/arangodb-helper/arangodb/tree/0.18.2) (2024-02-13)
610
- Fix waiting for local slaves to terminate

Dockerfile

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,18 @@
1-
ARG IMAGE=alpine:3.16
1+
ARG IMAGE
22
FROM ${IMAGE}
33
MAINTAINER Max Neunhoeffer <[email protected]>
44

5-
COPY bin/linux/amd64/arangodb /app/
5+
ARG TARGETARCH
6+
COPY bin/linux/${TARGETARCH}/arangodb /app/
67

7-
EXPOSE 8528
8+
EXPOSE 8528
89

910
VOLUME /data
1011

11-
# Data directory
12-
ENV DATA_DIR=/data
12+
# Data directory
13+
ENV DATA_DIR=/data
1314

14-
# Signal running in docker
15+
# Signal running in docker
1516
ENV RUNNING_IN_DOCKER=true
1617

1718
# Docker image containing arangod.

Dockerfile.ma

Lines changed: 0 additions & 23 deletions
This file was deleted.

Makefile

Lines changed: 30 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -21,14 +21,8 @@ ifeq (, $(findstring -preview,$(VERSION)))
2121
-t $(IMAGE_NAME):latest
2222
endif
2323

24-
ALPINE_IMAGE ?= alpine:3.16
25-
26-
DOCKERCLI ?= $(shell which docker)
2724
GOBUILDLINKTARGET := ../../../..
2825

29-
DOCKERMACLI := $(DOCKERCLI) buildx build -f "$(ROOTDIR)/Dockerfile.ma" --build-arg "IMAGE=$(ALPINE_IMAGE)" \
30-
--platform linux/amd64,linux/arm64
31-
3226
BUILDDIR ?= $(ROOTDIR)
3327

3428
GOBUILDDIR := $(BUILDDIR)/.gobuild
@@ -43,9 +37,11 @@ REPONAME := $(PROJECT)
4337
REPODIR := $(ORGDIR)/$(REPONAME)
4438
REPOPATH := $(ORGPATH)/$(REPONAME)
4539

40+
ALPINE_IMAGE ?= alpine:3.18
41+
4642
GOPATH := $(GOBUILDDIR)
47-
GOVERSION := 1.21.5
48-
GOIMAGE ?= golang:$(GOVERSION)-alpine3.17
43+
GOVERSION := 1.21.6
44+
GOIMAGE ?= golang:$(GOVERSION)-alpine3.18
4945

5046
GOOS ?= linux
5147
GOARCH ?= amd64
@@ -54,6 +50,9 @@ ifeq ("$(GOOS)", "windows")
5450
GOEXE := .exe
5551
endif
5652

53+
DOCKERCLI ?= $(shell which docker)
54+
DOCKER_BUILD_CLI := $(DOCKERCLI) buildx build --build-arg "IMAGE=$(ALPINE_IMAGE)" --platform linux/$(GOARCH)
55+
5756
ARANGODB ?= arangodb/arangodb:latest
5857

5958
IP ?= $(shell hostname -I | cut -d ' ' -f 1)
@@ -140,15 +139,28 @@ $(RELEASEBIN): vendor $(BIN)
140139
@cp "$(BIN)" "$(RELEASEBIN)"
141140

142141
build: vendor $(BIN)
142+
@echo ">> Build Bin $(BIN) done"
143143

144144
build-test: vendor $(TESTBIN)
145+
@echo ">> Build Tests Bin $(TESTBIN) done"
145146

146-
binaries:
147+
binary-linux:
147148
@${MAKE} -f $(MAKEFILE) -B GOOS=linux GOARCH=amd64 build
148149
@${MAKE} -f $(MAKEFILE) -B GOOS=linux GOARCH=arm64 build
150+
@${MAKE} -f $(MAKEFILE) -B GOOS=linux GOARCH=amd64 build-test
151+
@${MAKE} -f $(MAKEFILE) -B GOOS=linux GOARCH=arm64 build-test
152+
153+
binary-darwin:
149154
@${MAKE} -f $(MAKEFILE) -B GOOS=darwin GOARCH=amd64 build
150155
@${MAKE} -f $(MAKEFILE) -B GOOS=darwin GOARCH=arm64 build
156+
@${MAKE} -f $(MAKEFILE) -B GOOS=darwin GOARCH=amd64 build-test
157+
@${MAKE} -f $(MAKEFILE) -B GOOS=darwin GOARCH=arm64 build-test
158+
159+
binary-windows:
151160
@${MAKE} -f $(MAKEFILE) -B GOOS=windows GOARCH=amd64 build
161+
@${MAKE} -f $(MAKEFILE) -B GOOS=windows GOARCH=amd64 build-test
162+
163+
binaries: binary-linux binary-darwin binary-windows
152164

153165
releases:
154166
@${MAKE} -f $(MAKEFILE) -B GOOS=linux GOARCH=amd64 release
@@ -158,20 +170,14 @@ releases:
158170
@${MAKE} -f $(MAKEFILE) -B GOOS=windows GOARCH=amd64 release
159171
@(cd "$(RELEASEDIR)"; sha256sum arangodb-* > SHA256SUMS; cat SHA256SUMS | sha256sum -c)
160172

161-
binaries-test:
162-
@${MAKE} -f $(MAKEFILE) -B GOOS=linux GOARCH=amd64 build-test
163-
@${MAKE} -f $(MAKEFILE) -B GOOS=linux GOARCH=arm64 build-test
164-
@${MAKE} -f $(MAKEFILE) -B GOOS=darwin GOARCH=amd64 build-test
165-
@${MAKE} -f $(MAKEFILE) -B GOOS=darwin GOARCH=arm64 build-test
166-
@${MAKE} -f $(MAKEFILE) -B GOOS=windows GOARCH=amd64 build-test
167-
168173
$(BIN): $(GOBUILDDIR) $(GO_SOURCES)
169174
@mkdir -p $(BINDIR)
170-
@-rm resource.syso
175+
@-rm -f resource.syso
171176
ifeq ($(GOOS),windows)
172177
@echo ">> Generating versioninfo syso file ..."
173178
@$(GOPATH)/bin/goversioninfo -64 -file-version=$(VERSION) -product-version=$(VERSION)
174179
$(DOCKER_CMD) go build -ldflags "-X main.projectVersion=$(VERSION) -X main.projectBuild=$(COMMIT)" -o "$(BUILD_BIN)" .
180+
@-rm -f resource.syso
175181
else
176182
$(DOCKER_CMD) go build -installsuffix netgo -tags netgo -ldflags "-X main.projectVersion=$(VERSION) -X main.projectBuild=$(COMMIT)" -o "$(BUILD_BIN)" .
177183
endif
@@ -180,17 +186,12 @@ $(TESTBIN): $(GOBUILDDIR) $(TEST_SOURCES) $(BIN)
180186
@mkdir -p $(BINDIR)
181187
$(DOCKER_CMD) go test -c -o "$(TEST_BIN)" ./test
182188

183-
ifneq ($(MULTIARCH),1)
184189
docker: build
185-
$(DOCKERCLI) build -t arangodb/arangodb-starter --build-arg "IMAGE=$(ALPINE_IMAGE)" .
186-
else
187-
docker: binaries
188-
$(DOCKERMACLI) -t arangodb/arangodb-starter .
189-
endif
190+
@echo ">> Building Docker Image with buildx"
191+
$(DOCKER_BUILD_CLI) -t arangodb/arangodb-starter .
190192

191193
docker-push-version: docker
192-
$(DOCKERMACLI) --push $(STARTER_TAGS) .
193-
194+
$(DOCKER_BUILD_CLI) --push $(STARTER_TAGS) .
194195

195196
$(RELEASE): $(GOBUILDDIR) $(GO_SOURCES)
196197
$(DOCKER_CMD) go build -o "$(RELEASE_BIN)" $(REPOPATH)/tools/release
@@ -217,7 +218,7 @@ TESTCONTAINER := arangodb-starter-test
217218

218219
# Run all unit tests
219220
run-unit-tests: $(GO_SOURCES)
220-
go test --count=1 \
221+
go test --count=1 -v \
221222
$(REPOPATH) \
222223
$(REPOPATH)/pkg/... \
223224
$(REPOPATH)/service/... \
@@ -226,13 +227,13 @@ run-unit-tests: $(GO_SOURCES)
226227
# Run all integration tests
227228
run-tests: run-tests-local-process run-tests-docker
228229

229-
run-tests-local-process: build-test build run-tests-local-process-run
230+
run-tests-local-process: binary-linux run-tests-local-process-run
230231
run-tests-local-process-run: export TEST_MODES=localprocess
231232
run-tests-local-process-run: export DOCKER_IMAGE=$(ARANGODB)
232-
run-tests-local-process-run: export DOCKER_PARAMS:=-e "TEST_MODES=$(TEST_MODES)" -e "STARTER_MODES=$(STARTER_MODES)" -e "STARTER=/usr/code/bin/linux/amd64/arangodb"
233+
run-tests-local-process-run: export DOCKER_PARAMS:=-e "TEST_MODES=$(TEST_MODES)" -e "STARTER_MODES=$(STARTER_MODES)" -e "STARTER=/usr/code/bin/linux/$(GOARCH)/arangodb"
233234
run-tests-local-process-run:
234235
@-$(DOCKERCLI) rm -f -v $(TESTCONTAINER) &> /dev/null
235-
$(DOCKER_CMD) /usr/code/bin/linux/amd64/test -test.timeout $(TEST_TIMEOUT) -test.v $(TESTOPTIONS)
236+
$(DOCKER_CMD) /usr/code/bin/linux/$(GOARCH)/test -test.timeout $(TEST_TIMEOUT) -test.v $(TESTOPTIONS)
236237

237238
_run-tests: build-test build
238239
@TEST_MODES=$(TEST_MODES) STARTER_MODES=$(STARTER_MODES) STARTER=$(BIN) IP=$(IP) ARANGODB=$(ARANGODB) $(TESTBIN) -test.timeout $(TEST_TIMEOUT) -test.failfast -test.v $(TESTOPTIONS)

main.go

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -150,6 +150,7 @@ func init() {
150150
f.BoolVar(&opts.starter.debugCluster, "starter.debug-cluster", getEnvVar("DEBUG_CLUSTER", "") != "", "If set, log more information to debug a cluster")
151151
f.BoolVar(&opts.starter.disableIPv6, "starter.disable-ipv6", !net.IsIPv6Supported(), "If set, no IPv6 notation will be used. Use this only when IPv6 address family is disabled")
152152
f.BoolVar(&opts.starter.enableSync, "starter.sync", false, "If set, the starter will also start arangosync instances")
153+
f.MarkDeprecated("starter.sync", "ArangoSync component is deprecated and will be removed in coming releases")
153154
f.DurationVar(&opts.starter.instanceUpTimeout, "starter.instance-up-timeout", defaultInstanceUpTimeout, "Timeout to wait for an instance start")
154155
if err := features.JWTRotation().RegisterDeprecated(f); err != nil {
155156
panic(err)
@@ -169,6 +170,7 @@ func init() {
169170
f.BoolVar(&opts.server.useLocalBin, "server.use-local-bin", false, "If true, starter will try searching for binaries in local directory first")
170171
f.StringVar(&opts.server.arangodPath, "server.arangod", defaultArangodPath, "Path of arangod")
171172
f.StringVar(&opts.server.arangoSyncPath, "server.arangosync", defaultArangoSyncPath, "Path of arangosync")
173+
f.MarkDeprecated("server.arangosync", "ArangoSync component is deprecated and will be removed in coming releases")
172174
f.StringVar(&opts.server.arangodJSPath, "server.js-dir", "/usr/share/arangodb3/js", "Path of arango JS folder")
173175
f.StringVar(&opts.server.rrPath, "server.rr", "", "Path of rr")
174176
f.IntVar(&opts.server.threads, "server.threads", 0, "Adjust server.threads of each server")
@@ -180,6 +182,7 @@ func init() {
180182
f.StringVar(&opts.docker.Endpoint, "docker.endpoint", "unix:///var/run/docker.sock", "Endpoint used to reach the docker daemon")
181183
f.StringVar(&opts.docker.ImageArangoD, "docker.image", getEnvVar("DOCKER_IMAGE", ""), "name of the Docker image to use to launch arangod instances (leave empty to avoid using docker)")
182184
f.StringVar(&opts.docker.ImageArangoSync, "docker.sync-image", getEnvVar("DOCKER_ARANGOSYNC_IMAGE", ""), "name of the Docker image to use to launch arangosync instances")
185+
f.MarkDeprecated("docker.sync-image", "ArangoSync component is deprecated and will be removed in coming releases")
183186
f.StringVar(&opts.docker.imagePullPolicyRaw, "docker.imagePullPolicy", "", "pull docker image from docker hub (Always|IfNotPresent|Never)")
184187
f.StringVar(&opts.docker.User, "docker.user", "", "use the given name as user to run the Docker container")
185188
f.StringVar(&opts.docker.HostContainerName, "docker.container", "", "name of the docker container that is running this process")
@@ -199,12 +202,19 @@ func init() {
199202
f.StringVar(&opts.ssl.autoOrganization, "ssl.auto-organization", "ArangoDB", "Organization name put into self-signed certificate. See --ssl.auto-key")
200203

201204
f.BoolSliceVar(&opts.sync.startSyncMaster, "sync.start-master", nil, "should an ArangoSync master instance be started (only relevant when starter.sync is enabled)")
205+
f.MarkDeprecated("sync.start-master", "ArangoSync component is deprecated and will be removed in coming releases")
202206
f.BoolSliceVar(&opts.sync.startSyncWorker, "sync.start-worker", nil, "should an ArangoSync worker instance be started (only relevant when starter.sync is enabled)")
207+
f.MarkDeprecated("sync.start-worker", "ArangoSync component is deprecated and will be removed in coming releases")
203208
f.StringVar(&opts.sync.monitoring.token, "sync.monitoring.token", "", "Bearer token used to access ArangoSync monitoring endpoints")
209+
f.MarkDeprecated("sync.monitoring.token", "ArangoSync component is deprecated and will be removed in coming releases")
204210
f.StringVar(&opts.sync.master.jwtSecretFile, "sync.master.jwt-secret", "", "File containing JWT secret used to access the Sync Master (from Sync Worker)")
211+
f.MarkDeprecated("sync.master.jwt-secret", "ArangoSync component is deprecated and will be removed in coming releases")
205212
f.StringVar(&opts.sync.mq.Type, "sync.mq.type", "direct", "Type of message queue used by the Sync Master")
213+
f.MarkDeprecated("sync.mq.type", "ArangoSync component is deprecated and will be removed in coming releases")
206214
f.StringVar(&opts.sync.server.keyFile, "sync.server.keyfile", "", "TLS keyfile of local sync master")
215+
f.MarkDeprecated("sync.server.keyfile", "ArangoSync component is deprecated and will be removed in coming releases")
207216
f.StringVar(&opts.sync.server.clientCAFile, "sync.server.client-cafile", "", "CA Certificate used for client certificate verification")
217+
f.MarkDeprecated("sync.server.client-cafile", "ArangoSync component is deprecated and will be removed in coming releases")
208218

209219
cmdMain.Flags().SetNormalizeFunc(normalizeOptionNames)
210220

@@ -617,6 +627,7 @@ func mustPrepareService(generateAutoKeyFile bool) (*service.Service, service.Boo
617627
if opts.sync.monitoring.token == "" {
618628
opts.sync.monitoring.token = uniuri.New()
619629
}
630+
log.Warn().Msgf("ArangoSync component is deprecated and will be removed in coming releases")
620631
} else {
621632
opts.sync.startSyncMaster = []bool{false}
622633
opts.sync.startSyncWorker = []bool{false}

options.go

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -211,23 +211,23 @@ func preparePassthroughPrefixes() options.ConfigurationPrefixes {
211211
},
212212
"args.sync": {
213213
Usage: func(key string) string {
214-
return fmt.Sprintf("Passed through to all sync instances as --%s", key)
214+
return fmt.Sprintf("Deprecated: Passed through to all sync instances as --%s", key)
215215
},
216216
FieldSelector: func(p *options.Configuration, key string) *[]string {
217217
return p.ArgByProcessTypeAndName(definitions.ServerTypeSyncMaster, key)
218218
},
219219
},
220220
"args.syncmasters": {
221221
Usage: func(key string) string {
222-
return fmt.Sprintf("Passed through to all sync master instances as --%s", key)
222+
return fmt.Sprintf("Deprecated: Passed through to all sync master instances as --%s", key)
223223
},
224224
FieldSelector: func(p *options.Configuration, key string) *[]string {
225225
return p.ArgByServerTypeAndName(definitions.ServerTypeSyncMaster, key)
226226
},
227227
},
228228
"args.syncworkers": {
229229
Usage: func(key string) string {
230-
return fmt.Sprintf("Passed through to all sync workers instances as --%s", key)
230+
return fmt.Sprintf("Deprecated: Passed through to all sync workers instances as --%s", key)
231231
},
232232
FieldSelector: func(p *options.Configuration, key string) *[]string {
233233
return p.ArgByServerTypeAndName(definitions.ServerTypeSyncWorker, key)
@@ -268,23 +268,23 @@ func preparePassthroughPrefixes() options.ConfigurationPrefixes {
268268
},
269269
"envs.sync": {
270270
Usage: func(key string) string {
271-
return fmt.Sprintf("Env passed to all sync instances as %s", key)
271+
return fmt.Sprintf("Deprecated: Env passed to all sync instances as %s", key)
272272
},
273273
FieldSelector: func(p *options.Configuration, key string) *[]string {
274274
return p.EnvByProcessTypeAndName(definitions.ServerTypeSyncMaster, key)
275275
},
276276
},
277277
"envs.syncmasters": {
278278
Usage: func(key string) string {
279-
return fmt.Sprintf("Env passed to all sync master instances as %s", key)
279+
return fmt.Sprintf("Deprecated: Env passed to all sync master instances as %s", key)
280280
},
281281
FieldSelector: func(p *options.Configuration, key string) *[]string {
282282
return p.EnvByServerTypeAndName(definitions.ServerTypeSyncMaster, key)
283283
},
284284
},
285285
"envs.syncworkers": {
286286
Usage: func(key string) string {
287-
return fmt.Sprintf("Env passed to all sync master instances as %s", key)
287+
return fmt.Sprintf("Deprecated: Env passed to all sync master instances as %s", key)
288288
},
289289
FieldSelector: func(p *options.Configuration, key string) *[]string {
290290
return p.EnvByServerTypeAndName(definitions.ServerTypeSyncWorker, key)

service/database_features.go

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -98,3 +98,8 @@ func (v DatabaseFeatures) GetJWTFolderOption() bool {
9898
func (v DatabaseFeatures) SupportsActiveFailover() bool {
9999
return v.Version.CompareTo(v312) < 0
100100
}
101+
102+
// SupportsArangoSync returns true if ArangoSync is supported
103+
func (v DatabaseFeatures) SupportsArangoSync() bool {
104+
return v.Version.CompareTo(v312) < 0
105+
}

service/service.go

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1262,7 +1262,13 @@ func (s *Service) Run(rootCtx context.Context, bsCfg BootstrapConfig, clusterCon
12621262

12631263
if !s.DatabaseFeatures().SupportsActiveFailover() {
12641264
if bsCfg.Mode.IsActiveFailoverMode() || boolFromRef(bsCfg.StartResilientSingle, false) {
1265-
return fmt.Errorf("This ArangoDB version does not support running in Active-Failover (resilient-single) mode")
1265+
return fmt.Errorf("this ArangoDB version does not support running in Active-Failover (resilient-single) mode")
1266+
}
1267+
}
1268+
1269+
if !s.DatabaseFeatures().SupportsArangoSync() {
1270+
if boolFromRef(bsCfg.StartSyncMaster, false) || boolFromRef(bsCfg.StartSyncWorker, false) {
1271+
return fmt.Errorf("this ArangoDB version does not support running with ArangoSync component")
12661272
}
12671273
}
12681274

0 commit comments

Comments
 (0)