diff --git a/.github/workflows/ci-opensearch.yml b/.github/workflows/ci-opensearch.yml index 7a685571e69..43e9713b946 100644 --- a/.github/workflows/ci-opensearch.yml +++ b/.github/workflows/ci-opensearch.yml @@ -16,6 +16,9 @@ jobs: - major: 1.x image: 1.0.0 distribution: opensearch + - major: 2.x + image: 2.3.0 + distribution: opensearch name: ${{ matrix.version.distribution }} ${{ matrix.version.major }} steps: - uses: actions/checkout@v3 diff --git a/pkg/es/client/cluster_client.go b/pkg/es/client/cluster_client.go index 461f5ccdc2c..7d05e29497c 100644 --- a/pkg/es/client/cluster_client.go +++ b/pkg/es/client/cluster_client.go @@ -57,7 +57,7 @@ func (c *ClusterClient) Version() (uint, error) { if err != nil { return 0, fmt.Errorf("invalid version format: %s", version[0]) } - if strings.Contains(info.TagLine, "OpenSearch") && major == 1 { + if strings.Contains(info.TagLine, "OpenSearch") && (major == 1 || major == 2) { return 7, nil } return uint(major), nil diff --git a/pkg/es/client/cluster_client_test.go b/pkg/es/client/cluster_client_test.go index 67a8ebe3511..c0ff770a427 100644 --- a/pkg/es/client/cluster_client_test.go +++ b/pkg/es/client/cluster_client_test.go @@ -63,7 +63,7 @@ const badVersionNoNumber = ` } ` -const opensearchInfo = ` +const opensearch1 = ` { "name" : "opensearch-node1", "cluster_name" : "opensearch-cluster", @@ -83,6 +83,26 @@ const opensearchInfo = ` } ` +const opensearch2 = ` +{ + "name" : "opensearch-node1", + "cluster_name" : "opensearch-cluster", + "cluster_uuid" : "1StaUGrGSx61r41d-1nDiw", + "version" : { + "distribution" : "opensearch", + "number" : "2.3.0", + "build_type" : "tar", + "build_hash" : "34550c5b17124ddc59458ef774f6b43a086522e3", + "build_date" : "2021-07-02T23:22:21.383695Z", + "build_snapshot" : false, + "lucene_version" : "8.8.2", + "minimum_wire_compatibility_version" : "6.8.0", + "minimum_index_compatibility_version" : "6.0.0-beta1" + }, + "tagline" : "The OpenSearch Project: https://opensearch.org/" + } +` + const elasticsearch7 = ` { @@ -146,9 +166,15 @@ func TestVersion(t *testing.T) { expectedResult: 7, }, { - name: "success with opensearch", + name: "success with opensearch 1", + responseCode: http.StatusOK, + response: opensearch1, + expectedResult: 7, + }, + { + name: "success with opensearch 2", responseCode: http.StatusOK, - response: opensearchInfo, + response: opensearch2, expectedResult: 7, }, { diff --git a/pkg/es/config/config.go b/pkg/es/config/config.go index e6f7909d3e3..fc47c357f24 100644 --- a/pkg/es/config/config.go +++ b/pkg/es/config/config.go @@ -202,6 +202,10 @@ func (c *Configuration) NewClient(logger *zap.Logger, metricsFactory metrics.Fac logger.Info("OpenSearch 1.x detected, using ES 7.x index mappings") esVersion = 7 } + if pingResult.Version.Number[0] == '2' { + logger.Info("OpenSearch 2.x detected, using ES 7.x index mappings") + esVersion = 7 + } } logger.Info("Elasticsearch detected", zap.Int("version", esVersion)) c.Version = uint(esVersion) diff --git a/plugin/storage/integration/elasticsearch_test.go b/plugin/storage/integration/elasticsearch_test.go index 0258a18cf65..9d2ec031b1f 100644 --- a/plugin/storage/integration/elasticsearch_test.go +++ b/plugin/storage/integration/elasticsearch_test.go @@ -71,7 +71,7 @@ func (s *ESStorageIntegration) getVersion() (uint, error) { } // OpenSearch is based on ES 7.x if strings.Contains(pingResult.TagLine, "OpenSearch") { - if pingResult.Version.Number[0] == '1' { + if pingResult.Version.Number[0] == '1' || pingResult.Version.Number[0] == '2' { esVersion = 7 } }