Commit Graph
23683 Commits
Author SHA1 Message Date
Jörn Friedrich Dreyer 49ebe072f1 Merge pull request #3426 from opencloud-eu/dependabot/go_modules/go.opentelemetry.io/otel-1.46.0
build(deps): bump go.opentelemetry.io/otel from 1.45.0 to 1.46.0
2026-09-01 08:25:05 +02:00
Jörn Friedrich Dreyer 8028e3e310 Merge pull request #3435 from fschade/test-search-cjk-parity
test(search): cover chinese search in the parity suite
2026-09-01 08:24:34 +02:00
Dominik Schmidt 7d75b98c69 Merge pull request #3423 from opencloud-eu/test/parity-readme-staleness
test(search): fail the parity suite when the committed matrix is stale
2026-09-01 08:24:15 +02:00
Florian Schade 9e8403818c test(search): cover chinese search in the parity suite 2026-09-01 07:46:03 +02:00
Dominik Schmidt ef41429838 test(search): rename the update flag to UPDATE_SEARCH_PARITY_MATRIX 2026-09-01 07:35:15 +02:00
Dominik Schmidt 268a4497b4 Merge pull request #3197 from opencloud-eu/feat/search-schema-change-handling
feat(search): check the index schema on startup and refuse breaking changes
2026-09-01 07:17:29 +02:00
Florian Schade b4893baa81 Merge pull request #3379 from opencloud-eu/ci/search-opensearch-pipelines
ci: run search API and e2e suites against OpenSearch
2026-09-01 06:56:07 +02:00
opencloudeu ebf9566886 [tx] updated from transifex 2026-08-31 23:20:06 +00:00
Jörn Friedrich Dreyer 8f44f6eb42 Merge pull request #3429 from opencloud-eu/dependabot/go_modules/google.golang.org/grpc-1.83.2
build(deps): bump google.golang.org/grpc from 1.83.1 to 1.83.2
2026-08-31 18:10:47 +02:00
Jörn Friedrich Dreyer 0f9c6dc1ec Merge pull request #3425 from pbleser-oc/chore/mise-go-1.25.9
chore(mise): upgrade go in mise to 1.25.9 after 578861b473
2026-08-31 18:07:57 +02:00
dependabot[bot] 5bfbfd8ff7 build(deps): bump google.golang.org/grpc from 1.83.1 to 1.83.2
Bumps [google.golang.org/grpc](https://github.com/grpc/grpc-go) from 1.83.1 to 1.83.2.
- [Release notes](https://github.com/grpc/grpc-go/releases)
- [Commits](https://github.com/grpc/grpc-go/compare/v1.83.1...v1.83.2)

---
updated-dependencies:
- dependency-name: google.golang.org/grpc
  dependency-version: 1.83.2
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-08-31 14:45:06 +00:00
dependabot[bot] fe1e7632fa build(deps): bump go.opentelemetry.io/otel from 1.45.0 to 1.46.0
Bumps [go.opentelemetry.io/otel](https://github.com/open-telemetry/opentelemetry-go) from 1.45.0 to 1.46.0.
- [Release notes](https://github.com/open-telemetry/opentelemetry-go/releases)
- [Changelog](https://github.com/open-telemetry/opentelemetry-go/blob/main/CHANGELOG.md)
- [Commits](https://github.com/open-telemetry/opentelemetry-go/compare/v1.45.0...v1.46.0)

---
updated-dependencies:
- dependency-name: go.opentelemetry.io/otel
  dependency-version: 1.46.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-08-31 14:44:13 +00:00
Pascal Bleser 15b7fad504 chore(mise): upgrade go in mise to 1.25.9 after 578861b473
* upgrade the go version in mise.toml to 1.25.9 because dependabot
   upgraded go to 1.25.9 in go.mod

 * mise: upgrade dlv from 1.27.0 to 1.27.1:
   https://github.com/go-delve/delve/releases/tag/v1.27.1
2026-08-31 15:52:30 +02:00
v.scharf 5c97014cd2 ci: run search API and e2e suites against OpenSearch 2026-08-31 15:29:37 +02:00
Dominik Schmidt feb13d426b test(search): name the update flag in the generated header 2026-08-31 15:16:15 +02:00
Dominik Schmidt b1533a3135 test(search): write the matrix only with UPDATE_MATRIX
A plain run compares and fails on a stale README without touching the working tree; UPDATE_MATRIX=true regenerates it.
2026-08-31 15:16:15 +02:00
Dominik Schmidt 874d8fdac2 test(search): fail the parity suite when the committed matrix is stale
The suite already regenerates README.md on every run; now a run whose content differs from the committed file also fails, so CI catches a stale matrix. The fresh content is on disk after the run, committing it is the fix.
2026-08-31 15:16:15 +02:00
Dominik Schmidt 0e2e2876f4 test(search): a golden diff says whether it needs a SchemaVersion bump
The failure runs the classifier on golden vs generated: additive means regenerate only, breaking means bump too.
2026-08-31 15:15:18 +02:00
Dominik Schmidt e11ce95d95 test(search): golden for the generated OpenSearch index definition
Pins the shipped schema as a reviewable diff; regenerate with UPDATE_GOLDEN=1.
2026-08-31 15:12:54 +02:00
Dominik Schmidt 7493f189a0 chore(search): adapt tests and golden to the v4 base
The refuse specs use registered analyzers (fulltext is gone), the golden regenerates via UPDATE_GOLDEN, MappingGetResp grew an accessor, and the parity suite passes the new NewBackend signature.
2026-08-31 15:12:54 +02:00
Dominik Schmidt 53fa66f120 chore(search): follow the rebased base
The opensearch-go bump renamed the mapping-get accessor, the schema check
takes a context and a logger now, and the golden bleve mapping carries the
word-broken Name and Title.
2026-08-31 15:12:54 +02:00
Dominik Schmidt 519dd112ea review: note SchemaVersion bump on bleve marshaling drift in golden test 2026-08-31 15:12:54 +02:00
Dominik Schmidt 414247d6c4 review: use any over interface{}, clone slice in AddBreaking 2026-08-31 15:12:54 +02:00
Dominik Schmidt 7ff2643d23 refactor(search): share SortedUnionKeys + Classification.AddBreaking
- export mapping.SortedUnionKeys and reuse it in bleve.compareKeysExcept
  instead of a copied union-of-keys block
- add Classification.AddBreaking to fold engine-specific breaking reasons and
  force the verdict, replacing the identical block in the bleve and opensearch
  Classify paths
2026-08-31 15:12:54 +02:00
Dominik Schmidt a0521f0260 review: trim verbose comments, cover Reconcile, table-driven Classify tests
- shorten the multi-line doc comments flagged as too verbose
- add reconcile_test.go: direct unit tests for Reconcile incl. the
  persisted-but-errored and classify-error branches (previously only
  reached indirectly through the engine integration tests)
- convert the 11 near-identical Classify It blocks to a DescribeTable
2026-08-31 15:12:54 +02:00
Dominik Schmidt 6b07a0d9dc chore(search): tighten the schema-reconcile comments 2026-08-31 15:12:54 +02:00
Dominik Schmidt dc863c64c6 refactor(search): single-source the new-index log message 2026-08-31 15:12:54 +02:00
Dominik Schmidt a8ffe91c79 feat(search): log a reindex hint when a fresh search index is created 2026-08-31 15:12:54 +02:00
Dominik Schmidt fec7536617 refactor(search): warn on a persisted additive change even when the reopen fails 2026-08-31 15:12:54 +02:00
Dominik Schmidt e8c93359b1 refactor(search): route schema verdict handling through a shared mapping.Reconcile 2026-08-31 15:12:54 +02:00
Dominik Schmidt 04c37d12d2 refactor(search): extract opensearch.NewClient out of server startup 2026-08-31 15:12:54 +02:00
Dominik Schmidt 9755728d43 refactor(search): harden the index-diff helpers against unset input 2026-08-31 15:12:54 +02:00
Dominik Schmidt 37eed7c321 refactor(search): only enforce analysis settings, tolerate operational drift 2026-08-31 15:12:54 +02:00
Dominik Schmidt a6bfb61935 refactor(search): make the breaking-schema error developer-facing 2026-08-31 15:12:54 +02:00
Dominik Schmidt 5abe2ccb26 fix(search): list the schema mismatch reasons on separate lines 2026-08-31 15:12:54 +02:00
Dominik Schmidt e9347998b7 fix(search): name the service to stop in the schema mismatch error 2026-08-31 15:12:54 +02:00
Dominik Schmidt 33299afbaa fix(search): address max-review findings
- the additive warnings advertise --all-spaces --force-rescan; a plain
  walk skips unchanged documents and never backfills the new fields
- Apply checks index existence first again, so a pre-provisioned index
  needs no create privilege and odd create-error shapes (string error
  bodies, cluster blocks) cannot fail a healthy startup; Create on 404
  keeps the typed already-exists swallow as the creation-race backstop
- number_of_replicas drift is not breaking, it is runtime-tunable and
  needs no rebuild
- bleve returns the classification alongside post-persist errors and
  the server warns before the error check, so the one-time additive
  warning is not lost when close or reopen fails
- a golden fixture pins the marshaled bleve mapping so a dependency
  bump that changes marshaling fails in CI instead of refusing every
  installation in the field
2026-08-31 15:12:54 +02:00
Dominik Schmidt 451e893d7d chore(search): tighten doc comments 2026-08-31 15:12:54 +02:00
Dominik Schmidt b67811ab3c chore(search): warn on additive opensearch changes and name the exact delete step
Addresses the two Copilot review comments on the PR: the additive
opensearch log now matches the bleve warning (level and re-index hint),
and the refuse message spells out how to delete the index per engine
(DELETE /<name> vs removing the bleve directory).
2026-08-31 15:12:54 +02:00
Dominik Schmidt 09ea7e5f15 chore(search): mention the impact of disabling search in the refuse message 2026-08-31 15:12:54 +02:00
Dominik Schmidt 1c130c448c chore(search): drop the changelog entry 2026-08-31 15:12:54 +02:00
Dominik Schmidt 03dfabddbb feat(search): check the index schema on startup and refuse breaking changes
Both engines now diff the stored/live index schema against the schema
generated from code when the service starts. A shared recursive
classifier in the mapping package is the single oracle:

- equal: start normally.
- additive (new fields without any indexed data): applied in place.
  OpenSearch gets a PUT _mapping with the full code properties, bleve
  persists the code mapping into the index (SetInternal + reopen) so
  the new fields are properly typed immediately and later startups
  classify equal. A startup warning lists the new fields because
  documents indexed before the upgrade lack them until re-indexed.
- breaking (changed definitions or analyzers, removed or renamed
  fields, or new fields that already contain data of unknown form):
  refuse to start with an error describing the rebuild procedure
  (delete the index, start, run "opencloud search index --all-spaces")
  and the OC_EXCLUDE_RUN_SERVICES=search escape hatch.

PUT _mapping is deliberately only the apply mechanism, never the
judge: its merge semantics cannot see removals or renames and it
accepts in-place updatable param changes with an ack. bleve
additionally checks idx.Fields() so previously dynamically indexed
data (which leaves no schema trace in bleve) is caught, matching by
exact name and by path prefix.

While at it: the OpenSearch startup check runs with a real,
minute-bounded context instead of context.TODO(), bleve indexes are
opened with a 5s bolt_timeout so a second process fails fast instead
of hanging on the file lock, and the reversed errors.Is arguments in
bleve.NewIndex were fixed.

https://github.com/opencloud-eu/opencloud/issues/3092
2026-08-31 15:12:54 +02:00
Dominik Schmidt d38fbc8e52 Merge pull request #3345 from opencloud-eu/refactor/search-mapping
refactor: reflection-based search mapping + location geopoint
2026-08-31 15:12:49 +02:00
Benedikt Kulmann 109e9555c8 chore(policies): disable gRPC or event handlers by configuration + metrics (#3287)
* add the ability to disable the gRPC API handler
   (POLICIES_GRPC_DISABLED)

 * add the ability to disable the Events API handler
   (POLICIES_EVENTS_DISABLED)

 * add metrics

 * add support for specifying rego files via the environment varirable
   POLICIES_ENGINE_FILES

 * for file paths specified in yaml or in POLICIES_ENGINE_FILES, support
   'config:' and 'data:' path prefixes

 * fix typos in the documentation, and try to make it more clear

 * add metrics to the documentation

 * add a section for testing in the documentation

 * introduces a new top-level package pkg/metrics/ with utilities for
   metrics that are backported from the groupware branch, with unit
   tests
2026-08-31 14:58:52 +02:00
Dominik Schmidt 1bf813068e docs(search): version-free index example in the README too 2026-08-31 14:17:29 +02:00
Dominik Schmidt aa2f7da029 docs(search): the unversioned index is the one up to 7.4 2026-08-31 14:15:17 +02:00
Dominik Schmidt 0188b18d2b docs(search): everything but the current index generation can go 2026-08-31 14:14:19 +02:00
Dominik Schmidt 73bfc1cf48 docs(search): just the reindex step 2026-08-31 14:12:52 +02:00
Dominik Schmidt 3a7d6ca54b docs(search): no index names in the migration steps, admins never type them 2026-08-31 14:12:38 +02:00
Dominik Schmidt 5d3c67b587 docs(search): the only migration path is a reindex
Copying the old index over misses the search sibling fields, copied documents would be unfindable.
2026-08-31 14:06:12 +02:00