summaryrefslogtreecommitdiffstats
path: root/modules/indexer/internal/meilisearch/util.go
blob: 845bdb6e7ffef52f2b1381a48a1f2389b8b023dd (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
// Copyright 2023 The Gitea Authors. All rights reserved.
// SPDX-License-Identifier: MIT

package meilisearch

import (
	"fmt"

	"code.gitea.io/gitea/modules/log"
)

// VersionedIndexName returns the full index name with version
func (i *Indexer) VersionedIndexName() string {
	return versionedIndexName(i.indexName, i.version)
}

func versionedIndexName(indexName string, version int) string {
	if version == 0 {
		// Old index name without version
		return indexName
	}

	// The format of the index name is <index_name>_v<version>, not <index_name>.v<version> like elasticsearch.
	// Because meilisearch does not support "." in index name, it should contain only alphanumeric characters, hyphens (-) and underscores (_).
	// See https://www.meilisearch.com/docs/learn/core_concepts/indexes#index-uid

	return fmt.Sprintf("%s_v%d", indexName, version)
}

func (i *Indexer) checkOldIndexes() {
	for v := 0; v < i.version; v++ {
		indexName := versionedIndexName(i.indexName, v)
		_, err := i.Client.GetIndex(indexName)
		if err == nil {
			log.Warn("Found older meilisearch index named %q, Forgejo will keep the old NOT DELETED. You can delete the old version after the upgrade succeed.", indexName)
		}
	}
}