diff options
36 files changed, 742 insertions, 746 deletions
diff --git a/client/go/go.mod b/client/go/go.mod index a35298b0ba6..ae5fdffc7fd 100644 --- a/client/go/go.mod +++ b/client/go/go.mod @@ -14,7 +14,7 @@ require ( github.com/pkg/browser v0.0.0-20240102092130-5ac0b6a4141c github.com/spf13/cobra v1.8.0 github.com/spf13/pflag v1.0.5 - github.com/stretchr/testify v1.8.4 + github.com/stretchr/testify v1.9.0 github.com/zalando/go-keyring v0.2.3 golang.org/x/net v0.21.0 golang.org/x/sys v0.17.0 diff --git a/client/go/go.sum b/client/go/go.sum index 0ac75c1ba20..bb52fdceaa3 100644 --- a/client/go/go.sum +++ b/client/go/go.sum @@ -51,6 +51,8 @@ github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An github.com/stretchr/objx v0.5.0 h1:1zr/of2m5FGMsad5YfcqgdqdWrIhu+EBEJRhR1U7z/c= github.com/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcUk= github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo= +github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg= +github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= github.com/zalando/go-keyring v0.2.3 h1:v9CUu9phlABObO4LPWycf+zwMG7nlbb3t/B5wa97yms= github.com/zalando/go-keyring v0.2.3/go.mod h1:HL4k+OXQfJUWaMnqyuSOc0drfGPX2b51Du6K+MRgZMk= golang.org/x/exp v0.0.0-20231110203233-9a3e6036ecaa h1:FRnLl4eNAQl8hwxVVC17teOw8kdjVDVAiFMtgUdTSRQ= diff --git a/client/js/app/yarn.lock b/client/js/app/yarn.lock index 754e47f0b92..fed78603706 100644 --- a/client/js/app/yarn.lock +++ b/client/js/app/yarn.lock @@ -1642,26 +1642,15 @@ arr-union@^3.1.0: resolved "https://registry.yarnpkg.com/arr-union/-/arr-union-3.1.0.tgz#e39b09aea9def866a8f206e288af63919bae39c4" integrity sha512-sKpyeERZ02v1FeCZT8lrfJq5u6goHCtpTAzPwJYe7c8SPFOboNjNg1vz2L4VTn9T4PQxEx13TbXLmYUcS6Ug7Q== -array-buffer-byte-length@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/array-buffer-byte-length/-/array-buffer-byte-length-1.0.0.tgz#fabe8bc193fea865f317fe7807085ee0dee5aead" - integrity sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A== - dependencies: - call-bind "^1.0.2" - is-array-buffer "^3.0.1" - -array-includes@^3.1.6: - version "3.1.6" - resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.1.6.tgz#9e9e720e194f198266ba9e18c29e6a9b0e4b225f" - integrity sha512-sgTbLvL6cNnw24FnbaDyjmvddQ2ML8arZsgaJhoABMoplz/4QRhtrYS+alr1BUM1Bwp6dhx8vVCBSLG+StwOFw== +array-buffer-byte-length@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/array-buffer-byte-length/-/array-buffer-byte-length-1.0.1.tgz#1e5583ec16763540a27ae52eed99ff899223568f" + integrity sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg== dependencies: - call-bind "^1.0.2" - define-properties "^1.1.4" - es-abstract "^1.20.4" - get-intrinsic "^1.1.3" - is-string "^1.0.7" + call-bind "^1.0.5" + is-array-buffer "^3.0.4" -array-includes@^3.1.7: +array-includes@^3.1.6, array-includes@^3.1.7: version "3.1.7" resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.1.7.tgz#8cd2e01b26f7a3086cbc87271593fe921c62abda" integrity sha512-dlcsNBIiWhPkHdOEEKnehA+RNUWDc4UqFtnIXU4uuYDPtA4LDkr7qip2p0VvFAEXNDr0yWZ9PJyIRiGjRLQzwQ== @@ -1677,6 +1666,17 @@ array-unique@^0.3.2: resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.3.2.tgz#a894b75d4bc4f6cd679ef3244a9fd8f46ae2d428" integrity sha512-SleRWjh9JUud2wH1hPs9rZBZ33H6T9HOiL0uwGnGx9FpE6wKGyfWugmbkEOIs6qWrZhg0LWeLziLrEwQJhs5mQ== +array.prototype.findlast@^1.2.4: + version "1.2.4" + resolved "https://registry.yarnpkg.com/array.prototype.findlast/-/array.prototype.findlast-1.2.4.tgz#eeb9e45fc894055c82e5675c463e8077b827ad36" + integrity sha512-BMtLxpV+8BD+6ZPFIWmnUBpQoy+A+ujcg4rhp2iwCRJYA7PEh2MS4NL3lz8EiDlLrJPp2hg9qWihr5pd//jcGw== + dependencies: + call-bind "^1.0.5" + define-properties "^1.2.1" + es-abstract "^1.22.3" + es-errors "^1.3.0" + es-shim-unscopables "^1.0.2" + array.prototype.findlastindex@^1.2.3: version "1.2.3" resolved "https://registry.yarnpkg.com/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.3.tgz#b37598438f97b579166940814e2c0493a4f50207" @@ -1688,17 +1688,7 @@ array.prototype.findlastindex@^1.2.3: es-shim-unscopables "^1.0.0" get-intrinsic "^1.2.1" -array.prototype.flat@^1.3.1: - version "1.3.1" - resolved "https://registry.yarnpkg.com/array.prototype.flat/-/array.prototype.flat-1.3.1.tgz#ffc6576a7ca3efc2f46a143b9d1dda9b4b3cf5e2" - integrity sha512-roTU0KWIOmJ4DRLmwKd19Otg0/mT3qPNt0Qb3GWW8iObuZXxrjB/pzn0R3hqpRSWg4HCwqx+0vwOnWnvlOyeIA== - dependencies: - call-bind "^1.0.2" - define-properties "^1.1.4" - es-abstract "^1.20.4" - es-shim-unscopables "^1.0.0" - -array.prototype.flat@^1.3.2: +array.prototype.flat@^1.3.1, array.prototype.flat@^1.3.2: version "1.3.2" resolved "https://registry.yarnpkg.com/array.prototype.flat/-/array.prototype.flat-1.3.2.tgz#1476217df8cff17d72ee8f3ba06738db5b387d18" integrity sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA== @@ -1708,16 +1698,6 @@ array.prototype.flat@^1.3.2: es-abstract "^1.22.1" es-shim-unscopables "^1.0.0" -array.prototype.flatmap@^1.3.1: - version "1.3.1" - resolved "https://registry.yarnpkg.com/array.prototype.flatmap/-/array.prototype.flatmap-1.3.1.tgz#1aae7903c2100433cb8261cd4ed310aab5c4a183" - integrity sha512-8UGn9O1FDVvMNB0UlLv4voxRMze7+FpHyF5mSMRjWHUMlpoDViniy05870VlxhfgTnLbpuwTzvD76MTtWxB/mQ== - dependencies: - call-bind "^1.0.2" - define-properties "^1.1.4" - es-abstract "^1.20.4" - es-shim-unscopables "^1.0.0" - array.prototype.flatmap@^1.3.2: version "1.3.2" resolved "https://registry.yarnpkg.com/array.prototype.flatmap/-/array.prototype.flatmap-1.3.2.tgz#c9a7c6831db8e719d6ce639190146c24bbd3e527" @@ -1728,28 +1708,39 @@ array.prototype.flatmap@^1.3.2: es-abstract "^1.22.1" es-shim-unscopables "^1.0.0" -array.prototype.tosorted@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/array.prototype.tosorted/-/array.prototype.tosorted-1.1.1.tgz#ccf44738aa2b5ac56578ffda97c03fd3e23dd532" - integrity sha512-pZYPXPRl2PqWcsUs6LOMn+1f1532nEoPTYowBtqLwAW+W8vSVhkIGnmOX1t/UQjD6YGI0vcD2B1U7ZFGQH9jnQ== +array.prototype.toreversed@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/array.prototype.toreversed/-/array.prototype.toreversed-1.1.2.tgz#b989a6bf35c4c5051e1dc0325151bf8088954eba" + integrity sha512-wwDCoT4Ck4Cz7sLtgUmzR5UV3YF5mFHUlbChCzZBQZ+0m2cl/DH3tKgvphv1nKgFsJ48oCSg6p91q2Vm0I/ZMA== dependencies: call-bind "^1.0.2" - define-properties "^1.1.4" - es-abstract "^1.20.4" + define-properties "^1.2.0" + es-abstract "^1.22.1" es-shim-unscopables "^1.0.0" - get-intrinsic "^1.1.3" -arraybuffer.prototype.slice@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.2.tgz#98bd561953e3e74bb34938e77647179dfe6e9f12" - integrity sha512-yMBKppFur/fbHu9/6USUe03bZ4knMYiwFBcyiaXB8Go0qNehwX6inYPzK9U0NeQvGxKthcmHcaR8P5MStSRBAw== +array.prototype.tosorted@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/array.prototype.tosorted/-/array.prototype.tosorted-1.1.3.tgz#c8c89348337e51b8a3c48a9227f9ce93ceedcba8" + integrity sha512-/DdH4TiTmOKzyQbp/eadcCVexiCb36xJg7HshYOYJnNZFDj33GEv0P7GxsynpShhq4OLYJzbGcBDkLsDt7MnNg== dependencies: - array-buffer-byte-length "^1.0.0" - call-bind "^1.0.2" - define-properties "^1.2.0" - es-abstract "^1.22.1" - get-intrinsic "^1.2.1" - is-array-buffer "^3.0.2" + call-bind "^1.0.5" + define-properties "^1.2.1" + es-abstract "^1.22.3" + es-errors "^1.1.0" + es-shim-unscopables "^1.0.2" + +arraybuffer.prototype.slice@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.3.tgz#097972f4255e41bc3425e37dc3f6421cf9aefde6" + integrity sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A== + dependencies: + array-buffer-byte-length "^1.0.1" + call-bind "^1.0.5" + define-properties "^1.2.1" + es-abstract "^1.22.3" + es-errors "^1.2.1" + get-intrinsic "^1.2.3" + is-array-buffer "^3.0.4" is-shared-array-buffer "^1.0.2" assign-symbols@^1.0.0: @@ -1769,10 +1760,12 @@ atob@^2.1.2: resolved "https://registry.yarnpkg.com/atob/-/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9" integrity sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg== -available-typed-arrays@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz#92f95616501069d07d10edb2fc37d3e1c65123b7" - integrity sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw== +available-typed-arrays@^1.0.6, available-typed-arrays@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz#a5cc375d6a03c2efc87a553f3e0b1522def14846" + integrity sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ== + dependencies: + possible-typed-array-names "^1.0.0" babel-jest@^26.6.3: version "26.6.3" @@ -1961,14 +1954,16 @@ cache-base@^1.0.1: union-value "^1.0.0" unset-value "^1.0.0" -call-bind@^1.0.0, call-bind@^1.0.2, call-bind@^1.0.4, call-bind@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.5.tgz#6fa2b7845ce0ea49bf4d8b9ef64727a2c2e2e513" - integrity sha512-C3nQxfFZxFRVoJoGKKI8y3MOEo129NQ+FgQ08iye+Mk4zNZZGdjfs06bVTr+DBSlA66Q2VEcMki/cUCP4SercQ== +call-bind@^1.0.2, call-bind@^1.0.5, call-bind@^1.0.6, call-bind@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.7.tgz#06016599c40c56498c18769d2730be242b6fa3b9" + integrity sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w== dependencies: + es-define-property "^1.0.0" + es-errors "^1.3.0" function-bind "^1.1.2" - get-intrinsic "^1.2.1" - set-function-length "^1.1.1" + get-intrinsic "^1.2.4" + set-function-length "^1.2.1" callsites@^3.0.0: version "3.1.0" @@ -2220,16 +2215,16 @@ deepmerge@^4.2.2: resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-4.3.1.tgz#44b5f2147cd3b00d4b56137685966f26fd25dd4a" integrity sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A== -define-data-property@^1.0.1, define-data-property@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/define-data-property/-/define-data-property-1.1.1.tgz#c35f7cd0ab09883480d12ac5cb213715587800b3" - integrity sha512-E7uGkTzkk1d0ByLeSc6ZsFS79Axg+m1P/VsgYsxHgiuc3tFSj+MjMIwe90FC4lOAZzNBdY7kkO2P2wKdsQ1vgQ== +define-data-property@^1.0.1, define-data-property@^1.1.2, define-data-property@^1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/define-data-property/-/define-data-property-1.1.4.tgz#894dc141bb7d3060ae4366f6a0107e68fbe48c5e" + integrity sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A== dependencies: - get-intrinsic "^1.2.1" + es-define-property "^1.0.0" + es-errors "^1.3.0" gopd "^1.0.1" - has-property-descriptors "^1.0.0" -define-properties@^1.1.3, define-properties@^1.1.4, define-properties@^1.2.0, define-properties@^1.2.1: +define-properties@^1.1.3, define-properties@^1.2.0, define-properties@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.2.1.tgz#10781cc616eb951a80a034bafcaa7377f6af2b6c" integrity sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg== @@ -2321,81 +2316,96 @@ error-ex@^1.3.1: dependencies: is-arrayish "^0.2.1" -es-abstract@^1.20.4, es-abstract@^1.22.1: - version "1.22.3" - resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.22.3.tgz#48e79f5573198de6dee3589195727f4f74bc4f32" - integrity sha512-eiiY8HQeYfYH2Con2berK+To6GrK2RxbPawDkGq4UiCQQfZHb6wX9qQqkbpPqaxQFcl8d9QzZqo0tGE0VcrdwA== - dependencies: - array-buffer-byte-length "^1.0.0" - arraybuffer.prototype.slice "^1.0.2" - available-typed-arrays "^1.0.5" - call-bind "^1.0.5" - es-set-tostringtag "^2.0.1" +es-abstract@^1.22.1, es-abstract@^1.22.3, es-abstract@^1.22.4: + version "1.22.5" + resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.22.5.tgz#1417df4e97cc55f09bf7e58d1e614bc61cb8df46" + integrity sha512-oW69R+4q2wG+Hc3KZePPZxOiisRIqfKBVo/HLx94QcJeWGU/8sZhCvc829rd1kS366vlJbzBfXf9yWwf0+Ko7w== + dependencies: + array-buffer-byte-length "^1.0.1" + arraybuffer.prototype.slice "^1.0.3" + available-typed-arrays "^1.0.7" + call-bind "^1.0.7" + es-define-property "^1.0.0" + es-errors "^1.3.0" + es-set-tostringtag "^2.0.3" es-to-primitive "^1.2.1" function.prototype.name "^1.1.6" - get-intrinsic "^1.2.2" - get-symbol-description "^1.0.0" + get-intrinsic "^1.2.4" + get-symbol-description "^1.0.2" globalthis "^1.0.3" gopd "^1.0.1" - has-property-descriptors "^1.0.0" - has-proto "^1.0.1" + has-property-descriptors "^1.0.2" + has-proto "^1.0.3" has-symbols "^1.0.3" - hasown "^2.0.0" - internal-slot "^1.0.5" - is-array-buffer "^3.0.2" + hasown "^2.0.1" + internal-slot "^1.0.7" + is-array-buffer "^3.0.4" is-callable "^1.2.7" - is-negative-zero "^2.0.2" + is-negative-zero "^2.0.3" is-regex "^1.1.4" - is-shared-array-buffer "^1.0.2" + is-shared-array-buffer "^1.0.3" is-string "^1.0.7" - is-typed-array "^1.1.12" + is-typed-array "^1.1.13" is-weakref "^1.0.2" object-inspect "^1.13.1" object-keys "^1.1.1" - object.assign "^4.1.4" - regexp.prototype.flags "^1.5.1" - safe-array-concat "^1.0.1" - safe-regex-test "^1.0.0" + object.assign "^4.1.5" + regexp.prototype.flags "^1.5.2" + safe-array-concat "^1.1.0" + safe-regex-test "^1.0.3" string.prototype.trim "^1.2.8" string.prototype.trimend "^1.0.7" string.prototype.trimstart "^1.0.7" - typed-array-buffer "^1.0.0" - typed-array-byte-length "^1.0.0" - typed-array-byte-offset "^1.0.0" - typed-array-length "^1.0.4" + typed-array-buffer "^1.0.2" + typed-array-byte-length "^1.0.1" + typed-array-byte-offset "^1.0.2" + typed-array-length "^1.0.5" unbox-primitive "^1.0.2" - which-typed-array "^1.1.13" + which-typed-array "^1.1.14" + +es-define-property@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/es-define-property/-/es-define-property-1.0.0.tgz#c7faefbdff8b2696cf5f46921edfb77cc4ba3845" + integrity sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ== + dependencies: + get-intrinsic "^1.2.4" -es-iterator-helpers@^1.0.12: - version "1.0.14" - resolved "https://registry.yarnpkg.com/es-iterator-helpers/-/es-iterator-helpers-1.0.14.tgz#19cd7903697d97e21198f3293b55e8985791c365" - integrity sha512-JgtVnwiuoRuzLvqelrvN3Xu7H9bu2ap/kQ2CrM62iidP8SKuD99rWU3CJy++s7IVL2qb/AjXPGR/E7i9ngd/Cw== +es-errors@^1.0.0, es-errors@^1.1.0, es-errors@^1.2.1, es-errors@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/es-errors/-/es-errors-1.3.0.tgz#05f75a25dab98e4fb1dcd5e1472c0546d5057c8f" + integrity sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw== + +es-iterator-helpers@^1.0.17: + version "1.0.17" + resolved "https://registry.yarnpkg.com/es-iterator-helpers/-/es-iterator-helpers-1.0.17.tgz#123d1315780df15b34eb181022da43e734388bb8" + integrity sha512-lh7BsUqelv4KUbR5a/ZTaGGIMLCjPGPqJ6q+Oq24YP0RdyptX1uzm4vvaqzk7Zx3bpl/76YLTTDj9L7uYQ92oQ== dependencies: asynciterator.prototype "^1.0.0" - call-bind "^1.0.2" - define-properties "^1.2.0" - es-abstract "^1.22.1" - es-set-tostringtag "^2.0.1" - function-bind "^1.1.1" - get-intrinsic "^1.2.1" + call-bind "^1.0.7" + define-properties "^1.2.1" + es-abstract "^1.22.4" + es-errors "^1.3.0" + es-set-tostringtag "^2.0.2" + function-bind "^1.1.2" + get-intrinsic "^1.2.4" globalthis "^1.0.3" - has-property-descriptors "^1.0.0" + has-property-descriptors "^1.0.2" has-proto "^1.0.1" has-symbols "^1.0.3" - internal-slot "^1.0.5" - iterator.prototype "^1.1.0" - safe-array-concat "^1.0.0" + internal-slot "^1.0.7" + iterator.prototype "^1.1.2" + safe-array-concat "^1.1.0" -es-set-tostringtag@^2.0.1: - version "2.0.2" - resolved "https://registry.yarnpkg.com/es-set-tostringtag/-/es-set-tostringtag-2.0.2.tgz#11f7cc9f63376930a5f20be4915834f4bc74f9c9" - integrity sha512-BuDyupZt65P9D2D2vA/zqcI3G5xRsklm5N3xCwuiy+/vKy8i0ifdsQP1sLgO4tZDSCaQUSnmC48khknGMV3D2Q== +es-set-tostringtag@^2.0.2, es-set-tostringtag@^2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/es-set-tostringtag/-/es-set-tostringtag-2.0.3.tgz#8bb60f0a440c2e4281962428438d58545af39777" + integrity sha512-3T8uNMC3OQTHkFUsFq8r/BwAXLHvU/9O9mE0fBc/MY5iq/8H7ncvO947LmYA6ldWw9Uh8Yhf25zu6n7nML5QWQ== dependencies: - get-intrinsic "^1.2.2" - has-tostringtag "^1.0.0" - hasown "^2.0.0" + get-intrinsic "^1.2.4" + has-tostringtag "^1.0.2" + hasown "^2.0.1" -es-shim-unscopables@^1.0.0: +es-shim-unscopables@^1.0.0, es-shim-unscopables@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/es-shim-unscopables/-/es-shim-unscopables-1.0.2.tgz#1f6942e71ecc7835ed1c8a83006d8771a63a3763" integrity sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw== @@ -2527,26 +2537,28 @@ eslint-plugin-react-perf@^3: integrity sha512-boVn4IDHAjgGoAuAQ5Zrewt8fNbMDdiR7B2AkuiSK8lrJ9FwlOZc085kCs7+8u6B+YZ+pOn+tYG00xktnGAfOw== eslint-plugin-react@^7: - version "7.33.2" - resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.33.2.tgz#69ee09443ffc583927eafe86ffebb470ee737608" - integrity sha512-73QQMKALArI8/7xGLNI/3LylrEYrlKZSb5C9+q3OtOewTnMQi5cT+aE9E41sLCmli3I9PGGmD1yiZydyo4FEPw== + version "7.34.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.34.0.tgz#ab71484d54fc409c37025c5eca00eb4177a5e88c" + integrity sha512-MeVXdReleBTdkz/bvcQMSnCXGi+c9kvy51IpinjnJgutl3YTHWsDdke7Z1ufZpGfDG8xduBDKyjtB9JH1eBKIQ== dependencies: - array-includes "^3.1.6" - array.prototype.flatmap "^1.3.1" - array.prototype.tosorted "^1.1.1" + array-includes "^3.1.7" + array.prototype.findlast "^1.2.4" + array.prototype.flatmap "^1.3.2" + array.prototype.toreversed "^1.1.2" + array.prototype.tosorted "^1.1.3" doctrine "^2.1.0" - es-iterator-helpers "^1.0.12" + es-iterator-helpers "^1.0.17" estraverse "^5.3.0" jsx-ast-utils "^2.4.1 || ^3.0.0" minimatch "^3.1.2" - object.entries "^1.1.6" - object.fromentries "^2.0.6" - object.hasown "^1.1.2" - object.values "^1.1.6" + object.entries "^1.1.7" + object.fromentries "^2.0.7" + object.hasown "^1.1.3" + object.values "^1.1.7" prop-types "^15.8.1" - resolve "^2.0.0-next.4" + resolve "^2.0.0-next.5" semver "^6.3.1" - string.prototype.matchall "^4.0.8" + string.prototype.matchall "^4.0.10" eslint-plugin-unused-imports@^3: version "3.1.0" @@ -2873,7 +2885,7 @@ fsevents@^2.3.2, fsevents@~2.3.2, fsevents@~2.3.3: resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.3.tgz#cac6407785d03675a2a5e1a5305c697b347d90d6" integrity sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw== -function-bind@^1.1.1, function-bind@^1.1.2: +function-bind@^1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.2.tgz#2c02d864d97f3ea6c8830c464cbd11ab6eab7a1c" integrity sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA== @@ -2903,11 +2915,12 @@ get-caller-file@^2.0.5: resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== -get-intrinsic@^1.0.2, get-intrinsic@^1.1.1, get-intrinsic@^1.1.3, get-intrinsic@^1.2.0, get-intrinsic@^1.2.1, get-intrinsic@^1.2.2: - version "1.2.2" - resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.2.2.tgz#281b7622971123e1ef4b3c90fd7539306da93f3b" - integrity sha512-0gSo4ml/0j98Y3lngkFEot/zhiCeWsbYIlZ+uZOVgzLyLaUw7wxUL+nCTP0XJvJg1AXulJRI3UJi8GsbDuxdGA== +get-intrinsic@^1.1.1, get-intrinsic@^1.1.3, get-intrinsic@^1.2.1, get-intrinsic@^1.2.2, get-intrinsic@^1.2.3, get-intrinsic@^1.2.4: + version "1.2.4" + resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.2.4.tgz#e385f5a4b5227d449c3eabbad05494ef0abbeadd" + integrity sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ== dependencies: + es-errors "^1.3.0" function-bind "^1.1.2" has-proto "^1.0.1" has-symbols "^1.0.3" @@ -2930,13 +2943,14 @@ get-stream@^6.0.0: resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-6.0.1.tgz#a262d8eef67aced57c2852ad6167526a43cbf7b7" integrity sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg== -get-symbol-description@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/get-symbol-description/-/get-symbol-description-1.0.0.tgz#7fdb81c900101fbd564dd5f1a30af5aadc1e58d6" - integrity sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw== +get-symbol-description@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/get-symbol-description/-/get-symbol-description-1.0.2.tgz#533744d5aa20aca4e079c8e5daf7fd44202821f5" + integrity sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg== dependencies: - call-bind "^1.0.2" - get-intrinsic "^1.1.1" + call-bind "^1.0.5" + es-errors "^1.3.0" + get-intrinsic "^1.2.4" get-value@^2.0.3, get-value@^2.0.6: version "2.0.6" @@ -3013,29 +3027,29 @@ has-flag@^4.0.0: resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== -has-property-descriptors@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/has-property-descriptors/-/has-property-descriptors-1.0.1.tgz#52ba30b6c5ec87fd89fa574bc1c39125c6f65340" - integrity sha512-VsX8eaIewvas0xnvinAe9bw4WfIeODpGYikiWYLH+dma0Jw6KHYqWiWfhQlgOVK8D6PvjubK5Uc4P0iIhIcNVg== +has-property-descriptors@^1.0.0, has-property-descriptors@^1.0.1, has-property-descriptors@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz#963ed7d071dc7bf5f084c5bfbe0d1b6222586854" + integrity sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg== dependencies: - get-intrinsic "^1.2.2" + es-define-property "^1.0.0" -has-proto@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/has-proto/-/has-proto-1.0.1.tgz#1885c1305538958aff469fef37937c22795408e0" - integrity sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg== +has-proto@^1.0.1, has-proto@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/has-proto/-/has-proto-1.0.3.tgz#b31ddfe9b0e6e9914536a6ab286426d0214f77fd" + integrity sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q== has-symbols@^1.0.2, has-symbols@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.3.tgz#bb7b2c4349251dce87b125f7bdf874aa7c8b39f8" integrity sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A== -has-tostringtag@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/has-tostringtag/-/has-tostringtag-1.0.0.tgz#7e133818a7d394734f941e73c3d3f9291e658b25" - integrity sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ== +has-tostringtag@^1.0.0, has-tostringtag@^1.0.1, has-tostringtag@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/has-tostringtag/-/has-tostringtag-1.0.2.tgz#2cdc42d40bef2e5b4eeab7c01a73c54ce7ab5abc" + integrity sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw== dependencies: - has-symbols "^1.0.2" + has-symbols "^1.0.3" has-value@^0.3.1: version "0.3.1" @@ -3068,12 +3082,7 @@ has-values@^1.0.0: is-number "^3.0.0" kind-of "^4.0.0" -has@^1.0.3: - version "1.0.4" - resolved "https://registry.yarnpkg.com/has/-/has-1.0.4.tgz#2eb2860e000011dae4f1406a86fe80e530fb2ec6" - integrity sha512-qdSAmqLF6209RFj4VVItywPMbm3vWylknmB3nvNiUIs72xAimcM8nVYxYr7ncvZq5qzk9MKIZR8ijqD/1QuYjQ== - -hasown@^2.0.0: +hasown@^2.0.0, hasown@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/hasown/-/hasown-2.0.1.tgz#26f48f039de2c0f8d3356c223fb8d50253519faa" integrity sha512-1/th4MHjnwncwXsIW6QMzlvYL9kG5e/CpVvLRZe4XPa8TOUNbCELqmvhDmnkNsAjwaG4+I8gJJL0JBvTTLO9qA== @@ -3146,21 +3155,12 @@ inherits@2: resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== -internal-slot@^1.0.3: - version "1.0.5" - resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.0.5.tgz#f2a2ee21f668f8627a4667f309dc0f4fb6674986" - integrity sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ== - dependencies: - get-intrinsic "^1.2.0" - has "^1.0.3" - side-channel "^1.0.4" - -internal-slot@^1.0.5: - version "1.0.6" - resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.0.6.tgz#37e756098c4911c5e912b8edbf71ed3aa116f930" - integrity sha512-Xj6dv+PsbtwyPpEflsejS+oIZxmMlV44zAhG479uYu89MsjcYOhCFnNyKrkJrihbsiasQyY0afoCl/9BLR65bg== +internal-slot@^1.0.5, internal-slot@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.0.7.tgz#c06dcca3ed874249881007b0a5523b172a190802" + integrity sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g== dependencies: - get-intrinsic "^1.2.2" + es-errors "^1.3.0" hasown "^2.0.0" side-channel "^1.0.4" @@ -3178,14 +3178,13 @@ is-accessor-descriptor@^1.0.0: dependencies: kind-of "^6.0.0" -is-array-buffer@^3.0.1, is-array-buffer@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/is-array-buffer/-/is-array-buffer-3.0.2.tgz#f2653ced8412081638ecb0ebbd0c41c6e0aecbbe" - integrity sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w== +is-array-buffer@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/is-array-buffer/-/is-array-buffer-3.0.4.tgz#7a1f92b3d61edd2bc65d24f130530ea93d7fae98" + integrity sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw== dependencies: call-bind "^1.0.2" - get-intrinsic "^1.2.0" - is-typed-array "^1.1.10" + get-intrinsic "^1.2.1" is-arrayish@^0.2.1: version "0.2.1" @@ -3238,13 +3237,6 @@ is-core-module@^2.13.0, is-core-module@^2.13.1: dependencies: hasown "^2.0.0" -is-core-module@^2.9.0: - version "2.13.0" - resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.13.0.tgz#bb52aa6e2cbd49a30c2ba68c42bf3435ba6072db" - integrity sha512-Z7dk6Qo8pOCp3l4tsX2C5ZVas4V+UxwQodwZhLopL91TX8UyyHEXafPcyoeeWuLrwzHcr3igO78wNLwHJHsMCQ== - dependencies: - has "^1.0.3" - is-data-descriptor@^0.1.4: version "0.1.4" resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz#0b5ee648388e2c860282e793f1856fec3f301b56" @@ -3337,10 +3329,10 @@ is-map@^2.0.1: resolved "https://registry.yarnpkg.com/is-map/-/is-map-2.0.2.tgz#00922db8c9bf73e81b7a335827bc2a43f2b91127" integrity sha512-cOZFQQozTha1f4MxLFzlgKYPTyj26picdZTx82hbc/Xf4K/tZOOXSCkMvU4pKioRXGDLJRn0GM7Upe7kR721yg== -is-negative-zero@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.2.tgz#7bf6f03a28003b8b3965de3ac26f664d765f3150" - integrity sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA== +is-negative-zero@^2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.3.tgz#ced903a027aca6381b777a5743069d7376a49747" + integrity sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw== is-number-object@^1.0.4: version "1.0.7" @@ -3386,12 +3378,12 @@ is-set@^2.0.1: resolved "https://registry.yarnpkg.com/is-set/-/is-set-2.0.2.tgz#90755fa4c2562dc1c5d4024760d6119b94ca18ec" integrity sha512-+2cnTEZeY5z/iXGbLhPrOAaK/Mau5k5eXq9j14CpRTftq0pAJu2MwVRSZhyZWBzx3o6X795Lz6Bpb6R0GKf37g== -is-shared-array-buffer@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz#8f259c573b60b6a32d4058a1a07430c0a7344c79" - integrity sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA== +is-shared-array-buffer@^1.0.2, is-shared-array-buffer@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/is-shared-array-buffer/-/is-shared-array-buffer-1.0.3.tgz#1237f1cba059cdb62431d378dcc37d9680181688" + integrity sha512-nA2hv5XIhLR3uVzDDfCIknerhx8XUKnstuOERPNNIinXG7v9u+ohXF67vxm4TPTEPU6lm61ZkwP3c9PCB97rhg== dependencies: - call-bind "^1.0.2" + call-bind "^1.0.7" is-stream@^1.1.0: version "1.1.0" @@ -3417,12 +3409,12 @@ is-symbol@^1.0.2, is-symbol@^1.0.3: dependencies: has-symbols "^1.0.2" -is-typed-array@^1.1.10, is-typed-array@^1.1.12, is-typed-array@^1.1.9: - version "1.1.12" - resolved "https://registry.yarnpkg.com/is-typed-array/-/is-typed-array-1.1.12.tgz#d0bab5686ef4a76f7a73097b95470ab199c57d4a" - integrity sha512-Z14TF2JNG8Lss5/HMqt0//T9JeHXttXy5pH/DBU4vi98ozO2btxzq9MwYDZYnKwU8nRsz/+GVFVRDq3DkVuSPg== +is-typed-array@^1.1.13: + version "1.1.13" + resolved "https://registry.yarnpkg.com/is-typed-array/-/is-typed-array-1.1.13.tgz#d6c5ca56df62334959322d7d7dd1cca50debe229" + integrity sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw== dependencies: - which-typed-array "^1.1.11" + which-typed-array "^1.1.14" is-typedarray@^1.0.0: version "1.0.0" @@ -3534,16 +3526,16 @@ istanbul-reports@^3.1.3: html-escaper "^2.0.0" istanbul-lib-report "^3.0.0" -iterator.prototype@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/iterator.prototype/-/iterator.prototype-1.1.0.tgz#690c88b043d821f783843aaf725d7ac3b62e3b46" - integrity sha512-rjuhAk1AJ1fssphHD0IFV6TWL40CwRZ53FrztKx43yk2v6rguBYsY4Bj1VU4HmoMmKwZUlx7mfnhDf9cOp4YTw== +iterator.prototype@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/iterator.prototype/-/iterator.prototype-1.1.2.tgz#5e29c8924f01916cb9335f1ff80619dcff22b0c0" + integrity sha512-DR33HMMr8EzwuRL8Y9D3u2BMj8+RqSE850jfGu59kS7tbmPLzGkZmVSfyCFSDxuZiEY6Rzt3T2NA/qU+NwVj1w== dependencies: - define-properties "^1.1.4" - get-intrinsic "^1.1.3" + define-properties "^1.2.1" + get-intrinsic "^1.2.1" has-symbols "^1.0.3" - has-tostringtag "^1.0.0" - reflect.getprototypeof "^1.0.3" + reflect.getprototypeof "^1.0.4" + set-function-name "^2.0.1" jest-changed-files@^29.7.0: version "29.7.0" @@ -4309,7 +4301,7 @@ object-copy@^0.1.0: define-property "^0.2.5" kind-of "^3.0.3" -object-inspect@^1.13.1, object-inspect@^1.9.0: +object-inspect@^1.13.1: version "1.13.1" resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.13.1.tgz#b96c6109324ccfef6b12216a956ca4dc2ff94bc2" integrity sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ== @@ -4326,7 +4318,7 @@ object-visit@^1.0.0: dependencies: isobject "^3.0.0" -object.assign@^4.1.4: +object.assign@^4.1.4, object.assign@^4.1.5: version "4.1.5" resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.5.tgz#3a833f9ab7fdb80fc9e8d2300c803d216d8fdbb0" integrity sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ== @@ -4336,7 +4328,7 @@ object.assign@^4.1.4: has-symbols "^1.0.3" object-keys "^1.1.1" -object.entries@^1.1.6: +object.entries@^1.1.7: version "1.1.7" resolved "https://registry.yarnpkg.com/object.entries/-/object.entries-1.1.7.tgz#2b47760e2a2e3a752f39dd874655c61a7f03c131" integrity sha512-jCBs/0plmPsOnrKAfFQXRG2NFjlhZgjjcBLSmTnEhU8U6vVTsVe8ANeQJCHTl3gSsI4J+0emOoCgoKlmQPMgmA== @@ -4345,15 +4337,6 @@ object.entries@^1.1.6: define-properties "^1.2.0" es-abstract "^1.22.1" -object.fromentries@^2.0.6: - version "2.0.6" - resolved "https://registry.yarnpkg.com/object.fromentries/-/object.fromentries-2.0.6.tgz#cdb04da08c539cffa912dcd368b886e0904bfa73" - integrity sha512-VciD13dswC4j1Xt5394WR4MzmAQmlgN72phd/riNp9vtD7tp4QQWJ0R4wvclXcafgcYK8veHRed2W6XeGBvcfg== - dependencies: - call-bind "^1.0.2" - define-properties "^1.1.4" - es-abstract "^1.20.4" - object.fromentries@^2.0.7: version "2.0.7" resolved "https://registry.yarnpkg.com/object.fromentries/-/object.fromentries-2.0.7.tgz#71e95f441e9a0ea6baf682ecaaf37fa2a8d7e616" @@ -4373,7 +4356,7 @@ object.groupby@^1.0.1: es-abstract "^1.22.1" get-intrinsic "^1.2.1" -object.hasown@^1.1.2: +object.hasown@^1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/object.hasown/-/object.hasown-1.1.3.tgz#6a5f2897bb4d3668b8e79364f98ccf971bda55ae" integrity sha512-fFI4VcYpRHvSLXxP7yiZOMAd331cPfd2p7PFDVbgUsYOfCT3tICVqXWngbjr4m49OvsBwUBQ6O2uQoJvy3RexA== @@ -4545,6 +4528,11 @@ posix-character-classes@^0.1.0: resolved "https://registry.yarnpkg.com/posix-character-classes/-/posix-character-classes-0.1.1.tgz#01eac0fe3b5af71a2a6c02feabb8c1fef7e00eab" integrity sha512-xTgYBc3fuo7Yt7JbiuFxSYGToMoz8fLoE6TC9Wx1P/u+LfeThMOAqmuyECnlBaaJb+u1m9hHiXUEtwW4OzfUJg== +possible-typed-array-names@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/possible-typed-array-names/-/possible-typed-array-names-1.0.0.tgz#89bb63c6fada2c3e90adc4a647beeeb39cc7bf8f" + integrity sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q== + postcss@^8.4.35: version "8.4.35" resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.35.tgz#60997775689ce09011edf083a549cea44aabe2f7" @@ -4697,15 +4685,16 @@ react@^18: dependencies: loose-envify "^1.1.0" -reflect.getprototypeof@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/reflect.getprototypeof/-/reflect.getprototypeof-1.0.3.tgz#2738fd896fcc3477ffbd4190b40c2458026b6928" - integrity sha512-TTAOZpkJ2YLxl7mVHWrNo3iDMEkYlva/kgFcXndqMgbo/AZUmmavEkdXV+hXtE4P8xdyEKRzalaFqZVuwIk/Nw== +reflect.getprototypeof@^1.0.4: + version "1.0.5" + resolved "https://registry.yarnpkg.com/reflect.getprototypeof/-/reflect.getprototypeof-1.0.5.tgz#e0bd28b597518f16edaf9c0e292c631eb13e0674" + integrity sha512-62wgfC8dJWrmxv44CA36pLDnP6KKl3Vhxb7PL+8+qrrFMMoJij4vgiMP8zV4O8+CBMXY1mHxI5fITGHXFHVmQQ== dependencies: - call-bind "^1.0.2" - define-properties "^1.1.4" - es-abstract "^1.20.4" - get-intrinsic "^1.1.1" + call-bind "^1.0.5" + define-properties "^1.2.1" + es-abstract "^1.22.3" + es-errors "^1.0.0" + get-intrinsic "^1.2.3" globalthis "^1.0.3" which-builtin-type "^1.1.3" @@ -4722,23 +4711,15 @@ regex-not@^1.0.0, regex-not@^1.0.2: extend-shallow "^3.0.2" safe-regex "^1.1.0" -regexp.prototype.flags@^1.4.3: - version "1.5.0" - resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.5.0.tgz#fe7ce25e7e4cca8db37b6634c8a2c7009199b9cb" - integrity sha512-0SutC3pNudRKgquxGoRGIz946MZVHqbNfPjBdxeOhBrdgDKlRoXmYLQN9xRbrR09ZXWeGAdPuif7egofn6v5LA== - dependencies: - call-bind "^1.0.2" - define-properties "^1.2.0" - functions-have-names "^1.2.3" - -regexp.prototype.flags@^1.5.1: - version "1.5.1" - resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.5.1.tgz#90ce989138db209f81492edd734183ce99f9677e" - integrity sha512-sy6TXMN+hnP/wMy+ISxg3krXx7BAtWVO4UouuCN/ziM9UEne0euamVNafDfvC83bRNr95y0V5iijeDQFUNpvrg== +regexp.prototype.flags@^1.5.0, regexp.prototype.flags@^1.5.2: + version "1.5.2" + resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.5.2.tgz#138f644a3350f981a858c44f6bb1a61ff59be334" + integrity sha512-NcDiDkTLuPR+++OCKB0nWafEmhg/Da8aUPLPMQbK+bxKKCm1/S5he+AqYa4PlMCVBalb4/yxIRub6qkEx5yJbw== dependencies: - call-bind "^1.0.2" - define-properties "^1.2.0" - set-function-name "^2.0.0" + call-bind "^1.0.6" + define-properties "^1.2.1" + es-errors "^1.3.0" + set-function-name "^2.0.1" remove-trailing-separator@^1.0.1: version "1.1.0" @@ -4805,12 +4786,12 @@ resolve@^1.20.0: path-parse "^1.0.7" supports-preserve-symlinks-flag "^1.0.0" -resolve@^2.0.0-next.4: - version "2.0.0-next.4" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-2.0.0-next.4.tgz#3d37a113d6429f496ec4752d2a2e58efb1fd4660" - integrity sha512-iMDbmAWtfU+MHpxt/I5iWI7cY6YVEZUQ3MBgPQ++XD1PELuJHIl82xBmObyP2KyQmkNB2dsqF7seoQQiAn5yDQ== +resolve@^2.0.0-next.5: + version "2.0.0-next.5" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-2.0.0-next.5.tgz#6b0ec3107e671e52b68cd068ef327173b90dc03c" + integrity sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA== dependencies: - is-core-module "^2.9.0" + is-core-module "^2.13.0" path-parse "^1.0.7" supports-preserve-symlinks-flag "^1.0.0" @@ -4865,23 +4846,23 @@ run-parallel@^1.1.9: dependencies: queue-microtask "^1.2.2" -safe-array-concat@^1.0.0, safe-array-concat@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/safe-array-concat/-/safe-array-concat-1.0.1.tgz#91686a63ce3adbea14d61b14c99572a8ff84754c" - integrity sha512-6XbUAseYE2KtOuGueyeobCySj9L4+66Tn6KQMOPQJrAJEowYKW/YR/MGJZl7FdydUdaFu4LYyDZjxf4/Nmo23Q== +safe-array-concat@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/safe-array-concat/-/safe-array-concat-1.1.0.tgz#8d0cae9cb806d6d1c06e08ab13d847293ebe0692" + integrity sha512-ZdQ0Jeb9Ofti4hbt5lX3T2JcAamT9hfzYU1MNB+z/jaEbB6wfFfPIR/zEORmZqobkCCJhSjodobH6WHNmJ97dg== dependencies: - call-bind "^1.0.2" - get-intrinsic "^1.2.1" + call-bind "^1.0.5" + get-intrinsic "^1.2.2" has-symbols "^1.0.3" isarray "^2.0.5" -safe-regex-test@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/safe-regex-test/-/safe-regex-test-1.0.0.tgz#793b874d524eb3640d1873aad03596db2d4f2295" - integrity sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA== +safe-regex-test@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/safe-regex-test/-/safe-regex-test-1.0.3.tgz#a5b4c0f06e0ab50ea2c395c14d8371232924c377" + integrity sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw== dependencies: - call-bind "^1.0.2" - get-intrinsic "^1.1.3" + call-bind "^1.0.6" + es-errors "^1.3.0" is-regex "^1.1.4" safe-regex@^1.1.0: @@ -4930,24 +4911,27 @@ semver@^7.5.3, semver@^7.5.4: dependencies: lru-cache "^6.0.0" -set-function-length@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/set-function-length/-/set-function-length-1.1.1.tgz#4bc39fafb0307224a33e106a7d35ca1218d659ed" - integrity sha512-VoaqjbBJKiWtg4yRcKBQ7g7wnGnLV3M8oLvVWwOk2PdYY6PEFegR1vezXR0tw6fZGF9csVakIRjrJiy2veSBFQ== +set-function-length@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/set-function-length/-/set-function-length-1.2.1.tgz#47cc5945f2c771e2cf261c6737cf9684a2a5e425" + integrity sha512-j4t6ccc+VsKwYHso+kElc5neZpjtq9EnRICFZtWyBsLojhmeF/ZBd/elqm22WJh/BziDe/SBiOeAt0m2mfLD0g== dependencies: - define-data-property "^1.1.1" - get-intrinsic "^1.2.1" + define-data-property "^1.1.2" + es-errors "^1.3.0" + function-bind "^1.1.2" + get-intrinsic "^1.2.3" gopd "^1.0.1" - has-property-descriptors "^1.0.0" + has-property-descriptors "^1.0.1" -set-function-name@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/set-function-name/-/set-function-name-2.0.1.tgz#12ce38b7954310b9f61faa12701620a0c882793a" - integrity sha512-tMNCiqYVkXIZgc2Hnoy2IvC/f8ezc5koaRFkCjrpWzGpCd3qbZXPzVy9MAZzK1ch/X0jvSkojys3oqJN0qCmdA== +set-function-name@^2.0.0, set-function-name@^2.0.1: + version "2.0.2" + resolved "https://registry.yarnpkg.com/set-function-name/-/set-function-name-2.0.2.tgz#16a705c5a0dc2f5e638ca96d8a8cd4e1c2b90985" + integrity sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ== dependencies: - define-data-property "^1.0.1" + define-data-property "^1.1.4" + es-errors "^1.3.0" functions-have-names "^1.2.3" - has-property-descriptors "^1.0.0" + has-property-descriptors "^1.0.2" set-value@^2.0.0, set-value@^2.0.1: version "2.0.1" @@ -4984,13 +4968,14 @@ shebang-regex@^3.0.0: integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== side-channel@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.4.tgz#efce5c8fdc104ee751b25c58d4290011fa5ea2cf" - integrity sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw== + version "1.0.6" + resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.6.tgz#abd25fb7cd24baf45466406b1096b7831c9215f2" + integrity sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA== dependencies: - call-bind "^1.0.0" - get-intrinsic "^1.0.2" - object-inspect "^1.9.0" + call-bind "^1.0.7" + es-errors "^1.3.0" + get-intrinsic "^1.2.4" + object-inspect "^1.13.1" signal-exit@^3.0.0, signal-exit@^3.0.2, signal-exit@^3.0.3, signal-exit@^3.0.7: version "3.0.7" @@ -5120,18 +5105,19 @@ string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: is-fullwidth-code-point "^3.0.0" strip-ansi "^6.0.1" -string.prototype.matchall@^4.0.8: - version "4.0.8" - resolved "https://registry.yarnpkg.com/string.prototype.matchall/-/string.prototype.matchall-4.0.8.tgz#3bf85722021816dcd1bf38bb714915887ca79fd3" - integrity sha512-6zOCOcJ+RJAQshcTvXPHoxoQGONa3e/Lqx90wUA+wEzX78sg5Bo+1tQo4N0pohS0erG9qtCqJDjNCQBjeWVxyg== +string.prototype.matchall@^4.0.10: + version "4.0.10" + resolved "https://registry.yarnpkg.com/string.prototype.matchall/-/string.prototype.matchall-4.0.10.tgz#a1553eb532221d4180c51581d6072cd65d1ee100" + integrity sha512-rGXbGmOEosIQi6Qva94HUjgPs9vKW+dkG7Y8Q5O2OYkWL6wFaTRZO8zM4mhP94uX55wgyrXzfS2aGtGzUL7EJQ== dependencies: call-bind "^1.0.2" - define-properties "^1.1.4" - es-abstract "^1.20.4" - get-intrinsic "^1.1.3" + define-properties "^1.2.0" + es-abstract "^1.22.1" + get-intrinsic "^1.2.1" has-symbols "^1.0.3" - internal-slot "^1.0.3" - regexp.prototype.flags "^1.4.3" + internal-slot "^1.0.5" + regexp.prototype.flags "^1.5.0" + set-function-name "^2.0.0" side-channel "^1.0.4" string.prototype.trim@^1.2.8: @@ -5330,44 +5316,49 @@ type-fest@^0.21.3: resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.21.3.tgz#d260a24b0198436e133fa26a524a6d65fa3b2e37" integrity sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w== -typed-array-buffer@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/typed-array-buffer/-/typed-array-buffer-1.0.0.tgz#18de3e7ed7974b0a729d3feecb94338d1472cd60" - integrity sha512-Y8KTSIglk9OZEr8zywiIHG/kmQ7KWyjseXs1CbSo8vC42w7hg2HgYTxSWwP0+is7bWDc1H+Fo026CpHFwm8tkw== +typed-array-buffer@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/typed-array-buffer/-/typed-array-buffer-1.0.2.tgz#1867c5d83b20fcb5ccf32649e5e2fc7424474ff3" + integrity sha512-gEymJYKZtKXzzBzM4jqa9w6Q1Jjm7x2d+sh19AdsD4wqnMPDYyvwpsIc2Q/835kHuo3BEQ7CjelGhfTsoBb2MQ== dependencies: - call-bind "^1.0.2" - get-intrinsic "^1.2.1" - is-typed-array "^1.1.10" + call-bind "^1.0.7" + es-errors "^1.3.0" + is-typed-array "^1.1.13" -typed-array-byte-length@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/typed-array-byte-length/-/typed-array-byte-length-1.0.0.tgz#d787a24a995711611fb2b87a4052799517b230d0" - integrity sha512-Or/+kvLxNpeQ9DtSydonMxCx+9ZXOswtwJn17SNLvhptaXYDJvkFFP5zbfU/uLmvnBJlI4yrnXRxpdWH/M5tNA== +typed-array-byte-length@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/typed-array-byte-length/-/typed-array-byte-length-1.0.1.tgz#d92972d3cff99a3fa2e765a28fcdc0f1d89dec67" + integrity sha512-3iMJ9q0ao7WE9tWcaYKIptkNBuOIcZCCT0d4MRvuuH88fEoEH62IuQe0OtraD3ebQEoTRk8XCBoknUNc1Y67pw== dependencies: - call-bind "^1.0.2" + call-bind "^1.0.7" for-each "^0.3.3" - has-proto "^1.0.1" - is-typed-array "^1.1.10" + gopd "^1.0.1" + has-proto "^1.0.3" + is-typed-array "^1.1.13" -typed-array-byte-offset@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/typed-array-byte-offset/-/typed-array-byte-offset-1.0.0.tgz#cbbe89b51fdef9cd6aaf07ad4707340abbc4ea0b" - integrity sha512-RD97prjEt9EL8YgAgpOkf3O4IF9lhJFr9g0htQkm0rchFp/Vx7LW5Q8fSXXub7BXAODyUQohRMyOc3faCPd0hg== +typed-array-byte-offset@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/typed-array-byte-offset/-/typed-array-byte-offset-1.0.2.tgz#f9ec1acb9259f395093e4567eb3c28a580d02063" + integrity sha512-Ous0vodHa56FviZucS2E63zkgtgrACj7omjwd/8lTEMEPFFyjfixMZ1ZXenpgCFBBt4EC1J2XsyVS2gkG0eTFA== dependencies: - available-typed-arrays "^1.0.5" - call-bind "^1.0.2" + available-typed-arrays "^1.0.7" + call-bind "^1.0.7" for-each "^0.3.3" - has-proto "^1.0.1" - is-typed-array "^1.1.10" + gopd "^1.0.1" + has-proto "^1.0.3" + is-typed-array "^1.1.13" -typed-array-length@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/typed-array-length/-/typed-array-length-1.0.4.tgz#89d83785e5c4098bec72e08b319651f0eac9c1bb" - integrity sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng== +typed-array-length@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/typed-array-length/-/typed-array-length-1.0.5.tgz#57d44da160296d8663fd63180a1802ebf25905d5" + integrity sha512-yMi0PlwuznKHxKmcpoOdeLwxBoVPkqZxd7q2FgMkmD3bNwvF5VW0+UlUQ1k1vmktTu4Yu13Q0RIxEP8+B+wloA== dependencies: - call-bind "^1.0.2" + call-bind "^1.0.7" for-each "^0.3.3" - is-typed-array "^1.1.9" + gopd "^1.0.1" + has-proto "^1.0.3" + is-typed-array "^1.1.13" + possible-typed-array-names "^1.0.0" typedarray-to-buffer@^3.1.5: version "3.1.5" @@ -5430,9 +5421,9 @@ use-composed-ref@^1.3.0: integrity sha512-GLMG0Jc/jiKov/3Ulid1wbv3r54K9HlMW29IWcDFPEqFkSO2nS0MuefWgMJpeHQ9YJeXDL3ZUF+P3jdXlZX/cQ== use-context-selector@^1: - version "1.4.1" - resolved "https://registry.yarnpkg.com/use-context-selector/-/use-context-selector-1.4.1.tgz#eb96279965846b72915d7f899b8e6ef1d768b0ae" - integrity sha512-Io2ArvcRO+6MWIhkdfMFt+WKQX+Vb++W8DS2l03z/Vw/rz3BclKpM0ynr4LYGyU85Eke+Yx5oIhTY++QR0ZDoA== + version "1.4.2" + resolved "https://registry.yarnpkg.com/use-context-selector/-/use-context-selector-1.4.2.tgz#168aa55fb9403bc7cc6c2c5c4ff8ca1118b0d9cd" + integrity sha512-OZvd4TWirCMOwIwFlQFnECIyEGb3fvSrd71A8sGWiAPl6SIJTS60Ho+WnAr67T6/JedvlperiReCM5n9mnM3fQ== use-isomorphic-layout-effect@^1.1.1: version "1.1.2" @@ -5517,27 +5508,16 @@ which-collection@^1.0.1: is-weakmap "^2.0.1" is-weakset "^2.0.1" -which-typed-array@^1.1.11, which-typed-array@^1.1.13: - version "1.1.13" - resolved "https://registry.yarnpkg.com/which-typed-array/-/which-typed-array-1.1.13.tgz#870cd5be06ddb616f504e7b039c4c24898184d36" - integrity sha512-P5Nra0qjSncduVPEAr7xhoF5guty49ArDTwzJ/yNuPIbZppyRxFQsRCWrocxIY+CnMVG+qfbU2FmDKyvSGClow== +which-typed-array@^1.1.14, which-typed-array@^1.1.9: + version "1.1.14" + resolved "https://registry.yarnpkg.com/which-typed-array/-/which-typed-array-1.1.14.tgz#1f78a111aee1e131ca66164d8bdc3ab062c95a06" + integrity sha512-VnXFiIW8yNn9kIHN88xvZ4yOWchftKDsRJ8fEPacX/wl1lOvBrhsJ/OeJCXq7B0AaijRuqgzSKalJoPk+D8MPg== dependencies: - available-typed-arrays "^1.0.5" - call-bind "^1.0.4" - for-each "^0.3.3" - gopd "^1.0.1" - has-tostringtag "^1.0.0" - -which-typed-array@^1.1.9: - version "1.1.11" - resolved "https://registry.yarnpkg.com/which-typed-array/-/which-typed-array-1.1.11.tgz#99d691f23c72aab6768680805a271b69761ed61a" - integrity sha512-qe9UWWpkeG5yzZ0tNYxDmd7vo58HDBc39mZ0xWWpolAGADdFOzkfamWLDxkOWcvHQKVmdTyQdLD4NOfjLWTKew== - dependencies: - available-typed-arrays "^1.0.5" - call-bind "^1.0.2" + available-typed-arrays "^1.0.6" + call-bind "^1.0.5" for-each "^0.3.3" gopd "^1.0.1" - has-tostringtag "^1.0.0" + has-tostringtag "^1.0.1" which@^1.2.9: version "1.3.1" diff --git a/config-model/src/main/java/com/yahoo/schema/derived/VsmSummary.java b/config-model/src/main/java/com/yahoo/schema/derived/VsmSummary.java index a2c220b6cbc..e3d7becd86a 100644 --- a/config-model/src/main/java/com/yahoo/schema/derived/VsmSummary.java +++ b/config-model/src/main/java/com/yahoo/schema/derived/VsmSummary.java @@ -38,7 +38,7 @@ public class VsmSummary extends Derived implements VsmsummaryConfig.Producer { if (doMapField(schema, summaryField)) { SDField sdField = schema.getConcreteField(summaryField.getName()); if (sdField != null && GeoPos.isAnyPos(sdField)) { - summaryMap.put(summaryField, Collections.singletonList(summaryField.getName())); + summaryMap.put(summaryField, List.of(summaryField.getName())); } else { summaryMap.put(summaryField, from); } diff --git a/config-model/src/main/java/com/yahoo/vespa/model/application/validation/RoutingSelectorValidator.java b/config-model/src/main/java/com/yahoo/vespa/model/application/validation/RoutingSelectorValidator.java deleted file mode 100644 index bd933f1c656..00000000000 --- a/config-model/src/main/java/com/yahoo/vespa/model/application/validation/RoutingSelectorValidator.java +++ /dev/null @@ -1,31 +0,0 @@ -// Copyright Vespa.ai. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. -package com.yahoo.vespa.model.application.validation; - -import com.yahoo.document.select.DocumentSelector; -import com.yahoo.vespa.model.application.validation.Validation.Context; -import com.yahoo.vespa.model.search.IndexedSearchCluster; -import com.yahoo.vespa.model.search.SearchCluster; - - -/** - * Validates routing selector for search and content clusters - */ -public class RoutingSelectorValidator implements Validator { - - @Override - public void validate(Context context) { - for (SearchCluster cluster : context.model().getSearchClusters()) { - if (cluster instanceof IndexedSearchCluster) { - IndexedSearchCluster sc = (IndexedSearchCluster) cluster; - String routingSelector = sc.getRoutingSelector(); - if (routingSelector == null) continue; - try { - new DocumentSelector(routingSelector); - } catch (com.yahoo.document.select.parser.ParseException e) { - context.illegal("Failed to parse routing selector for search cluster '" + sc.getClusterName() + "'", e); - } - } - } - } - -} diff --git a/config-model/src/main/java/com/yahoo/vespa/model/application/validation/Validation.java b/config-model/src/main/java/com/yahoo/vespa/model/application/validation/Validation.java index 56b7e6ee0c8..ed0804f7420 100644 --- a/config-model/src/main/java/com/yahoo/vespa/model/application/validation/Validation.java +++ b/config-model/src/main/java/com/yahoo/vespa/model/application/validation/Validation.java @@ -7,7 +7,6 @@ import com.yahoo.config.application.api.ValidationOverrides.ValidationException; import com.yahoo.config.model.api.ConfigChangeAction; import com.yahoo.config.model.api.ValidationParameters; import com.yahoo.config.model.deploy.DeployState; -import com.yahoo.config.provision.ClusterSpec; import com.yahoo.vespa.model.VespaModel; import com.yahoo.vespa.model.application.validation.change.CertificateRemovalChangeValidator; import com.yahoo.vespa.model.application.validation.change.ConfigValueChangeValidator; @@ -28,13 +27,10 @@ import com.yahoo.yolean.Exceptions; import java.util.ArrayList; import java.util.LinkedHashMap; -import java.util.LinkedHashSet; import java.util.List; import java.util.Map; import java.util.Optional; -import java.util.Set; import java.util.logging.Level; -import java.util.stream.Collectors; /** * Executor of validators. This defines the right order of validator execution. @@ -82,7 +78,6 @@ public class Validation { private static void validateRouting(Execution execution) { new RoutingValidator().validate(execution); - new RoutingSelectorValidator().validate(execution); } private static void validateModel(ValidationParameters validationParameters, Execution execution) { diff --git a/config-model/src/main/java/com/yahoo/vespa/model/container/search/searchchain/SearchChain.java b/config-model/src/main/java/com/yahoo/vespa/model/container/search/searchchain/SearchChain.java index 6f9e72117c8..0a8ae69ccf0 100644 --- a/config-model/src/main/java/com/yahoo/vespa/model/container/search/searchchain/SearchChain.java +++ b/config-model/src/main/java/com/yahoo/vespa/model/container/search/searchchain/SearchChain.java @@ -5,7 +5,6 @@ import com.yahoo.component.chain.model.ChainSpecification; import com.yahoo.search.searchchain.model.federation.FederationOptions; import com.yahoo.vespa.model.container.component.chain.Chain; -import java.util.Collections; import java.util.List; /** @@ -25,7 +24,7 @@ public class SearchChain extends Chain<Searcher<?>> { //A list of documents types that this search chain provides results for, empty if unknown public List<String> getDocumentTypes() { - return Collections.emptyList(); + return List.of(); } @Override diff --git a/config-model/src/main/java/com/yahoo/vespa/model/content/ContentSearchCluster.java b/config-model/src/main/java/com/yahoo/vespa/model/content/ContentSearchCluster.java index 0027a9ca45c..fc5b5c25e6d 100644 --- a/config-model/src/main/java/com/yahoo/vespa/model/content/ContentSearchCluster.java +++ b/config-model/src/main/java/com/yahoo/vespa/model/content/ContentSearchCluster.java @@ -70,7 +70,7 @@ public class ContentSearchCluster extends TreeConfigProducer<AnyConfigProducer> private final List<SearchNode> nonIndexed = new ArrayList<>(); private final Map<StorageGroup, NodeSpec> groupToSpecMap = new LinkedHashMap<>(); - private Optional<ResourceLimits> resourceLimits = Optional.empty(); + private ResourceLimits resourceLimits; private final ProtonConfig.Indexing.Optimize.Enum feedSequencerType; private final double defaultFeedConcurrency; private final double defaultFeedNiceness; @@ -103,14 +103,13 @@ public class ContentSearchCluster extends TreeConfigProducer<AnyConfigProducer> Boolean flushOnShutdownElem = clusterElem.childAsBoolean("engine.proton.flush-on-shutdown"); Boolean syncTransactionLog = clusterElem.childAsBoolean("engine.proton.sync-transactionlog"); - ContentSearchCluster search = new ContentSearchCluster(ancestor, - clusterName, - deployState.getProperties().featureFlags(), - documentDefinitions, - globallyDistributedDocuments, - getFlushOnShutdown(flushOnShutdownElem), - syncTransactionLog, - fractionOfMemoryReserved); + var search = new ContentSearchCluster(ancestor, clusterName, + deployState.getProperties().featureFlags(), + documentDefinitions, + globallyDistributedDocuments, + getFlushOnShutdown(flushOnShutdownElem), + syncTransactionLog, + fractionOfMemoryReserved); ModelElement tuning = clusterElem.childByPath("engine.proton.tuning"); if (tuning != null) { @@ -161,8 +160,7 @@ public class ContentSearchCluster extends TreeConfigProducer<AnyConfigProducer> String clusterName, ContentSearchCluster search) { List<ModelElement> indexedDefs = getIndexedSchemas(clusterElem); if (!indexedDefs.isEmpty()) { - IndexedSearchCluster isc = new IndexedSearchCluster(search, clusterName, 0, deployState.featureFlags()); - isc.setRoutingSelector(clusterElem.childAsString("documents.selection")); + IndexedSearchCluster isc = new IndexedSearchCluster(search, clusterName, 0, search, deployState.featureFlags()); Double visibilityDelay = clusterElem.childAsDouble("engine.proton.visibility-delay"); if (visibilityDelay != null) { @@ -236,7 +234,6 @@ public class ContentSearchCluster extends TreeConfigProducer<AnyConfigProducer> if (queryTimeout != null) { cluster.setQueryTimeout(queryTimeout); } - cluster.defaultDocumentsConfig(); cluster.deriveFromSchemas(deployState); addCluster(cluster); } @@ -295,11 +292,10 @@ public class ContentSearchCluster extends TreeConfigProducer<AnyConfigProducer> NodeSpec spec = getNextSearchNodeSpec(parentGroup); SearchNode searchNode; TransactionLogServer tls; - Optional<Tuning> tuning = Optional.ofNullable(this.tuning); if (element == null) { searchNode = SearchNode.create(parent, "" + node.getDistributionKey(), node.getDistributionKey(), spec, clusterName, node, flushOnShutdown, tuning, resourceLimits, deployState.isHosted(), - fractionOfMemoryReserved, this, deployState.featureFlags()); + fractionOfMemoryReserved, deployState.featureFlags()); searchNode.setHostResource(node.getHostResource()); searchNode.initService(deployState); @@ -308,7 +304,7 @@ public class ContentSearchCluster extends TreeConfigProducer<AnyConfigProducer> tls.initService(deployState); } else { searchNode = new SearchNode.Builder(""+node.getDistributionKey(), spec, clusterName, node, flushOnShutdown, - tuning, resourceLimits, fractionOfMemoryReserved, this) + tuning, resourceLimits, fractionOfMemoryReserved) .build(deployState, parent, element.getXml()); tls = new TransactionLogServer.Builder(clusterName, syncTransactionLog).build(deployState, searchNode, element.getXml()); } @@ -337,7 +333,7 @@ public class ContentSearchCluster extends TreeConfigProducer<AnyConfigProducer> public void setTuning(Tuning tuning) { this.tuning = tuning; } private void setResourceLimits(ResourceLimits resourceLimits) { - this.resourceLimits = Optional.of(resourceLimits); + this.resourceLimits = resourceLimits; } public boolean usesHierarchicDistribution() { @@ -345,11 +341,6 @@ public class ContentSearchCluster extends TreeConfigProducer<AnyConfigProducer> } public void handleRedundancy(Redundancy redundancy) { - if (hasIndexedCluster()) { - // Important: these must all be the normalized "within a single leaf group" values, - // _not_ the cluster-wide, cross-group values. - indexedCluster.setRedundancy(redundancy.finalRedundancy()); - } this.redundancy = redundancy; } @@ -437,7 +428,7 @@ public class ContentSearchCluster extends TreeConfigProducer<AnyConfigProducer> int numDocumentDbs = builder.documentdb.size(); builder.initialize(new ProtonConfig.Initialize.Builder().threads(numDocumentDbs + 1)); - resourceLimits.ifPresent(limits -> limits.getConfig(builder)); + if (resourceLimits != null) resourceLimits.getConfig(builder); if (tuning != null) { tuning.getConfig(builder); diff --git a/config-model/src/main/java/com/yahoo/vespa/model/search/DocumentSelectionConverter.java b/config-model/src/main/java/com/yahoo/vespa/model/search/DocumentSelectionConverter.java deleted file mode 100644 index 89d2bdaf54f..00000000000 --- a/config-model/src/main/java/com/yahoo/vespa/model/search/DocumentSelectionConverter.java +++ /dev/null @@ -1,57 +0,0 @@ -// Copyright Vespa.ai. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. -package com.yahoo.vespa.model.search; - -import com.yahoo.document.select.*; -import com.yahoo.document.select.convert.SelectionExpressionConverter; -import com.yahoo.document.select.parser.ParseException; -import java.util.Map; - -/** - * @author Ulf Lilleengen - */ -// TODO: This should be renamed to reflect it is only a validator of expressions -// (in DocumentSelector and SelectionExpressionConverter) -public class DocumentSelectionConverter { - - private final DocumentSelector selector; - private final Map<String, String> queryExpressionMap; - - public DocumentSelectionConverter(String selection) throws ParseException, UnsupportedOperationException, IllegalArgumentException { - this.selector = new DocumentSelector(selection); - NowCheckVisitor nowChecker = new NowCheckVisitor(); - selector.visit(nowChecker); - if (nowChecker.requiresConversion()) { - SelectionExpressionConverter converter = new SelectionExpressionConverter(); - selector.visit(converter); - this.queryExpressionMap = converter.getQueryMap(); - } else { - this.queryExpressionMap = null; - } - } - - /** - * Transforms the selection into a search query. - * - * @return a search query representing the selection - */ - public String getQuery(String documentType) { - if (queryExpressionMap == null) - return null; - if (!queryExpressionMap.containsKey(documentType)) - return null; - return queryExpressionMap.get(documentType); - } - - /** - * Transforms the selection into an inverted search query. - * - * @return a search query representing the selection - */ - public String getInvertedQuery(String documentType) { - String query = getQuery(documentType); - if (query == null) - return null; - return query.replaceAll(">", "<"); - } - -} diff --git a/config-model/src/main/java/com/yahoo/vespa/model/search/IndexedSearchCluster.java b/config-model/src/main/java/com/yahoo/vespa/model/search/IndexedSearchCluster.java index 8824112c118..885cb53a148 100644 --- a/config-model/src/main/java/com/yahoo/vespa/model/search/IndexedSearchCluster.java +++ b/config-model/src/main/java/com/yahoo/vespa/model/search/IndexedSearchCluster.java @@ -20,11 +20,11 @@ import com.yahoo.vespa.config.search.RankProfilesConfig; import com.yahoo.vespa.config.search.core.ProtonConfig; import com.yahoo.vespa.configdefinition.IlscriptsConfig; import com.yahoo.vespa.model.content.DispatchTuning; +import com.yahoo.vespa.model.content.Redundancy; import com.yahoo.vespa.model.content.SearchCoverage; import java.util.ArrayList; import java.util.Collections; -import java.util.Iterator; import java.util.LinkedList; import java.util.List; @@ -44,30 +44,21 @@ public class IndexedSearchCluster extends SearchCluster private Tuning tuning; private SearchCoverage searchCoverage; - // This is the document selector string as derived from the subscription tag. - private String routingSelector = null; private final List<DocumentDatabase> documentDbs = new LinkedList<>(); private final MultipleDocumentDatabasesConfigProducer documentDbsConfigProducer; - private int redundancy = 1; + private final Redundancy.Provider redundancyProvider; private final List<SearchNode> searchNodes = new ArrayList<>(); private final DispatchTuning.DispatchPolicy defaultDispatchPolicy; private final double dispatchWarmup; private final String summaryDecodePolicy; - /** - * Returns the document selector that is able to resolve what documents are to be routed to this search cluster. - * This string uses the document selector language as defined in the "document" module. - * - * @return the document selector - */ - public String getRoutingSelector() { - return routingSelector; - } - public IndexedSearchCluster(TreeConfigProducer<AnyConfigProducer> parent, String clusterName, int index, ModelContext.FeatureFlags featureFlags) { + public IndexedSearchCluster(TreeConfigProducer<AnyConfigProducer> parent, String clusterName, int index, + Redundancy.Provider redundancyProvider, ModelContext.FeatureFlags featureFlags) { super(parent, clusterName, index); documentDbsConfigProducer = new MultipleDocumentDatabasesConfigProducer(this, documentDbs); + this.redundancyProvider = redundancyProvider; defaultDispatchPolicy = DispatchTuning.Builder.toDispatchPolicy(featureFlags.queryDispatchPolicy()); dispatchWarmup = featureFlags.queryDispatchWarmup(); summaryDecodePolicy = featureFlags.summaryDecodePolicy(); @@ -102,32 +93,6 @@ public class IndexedSearchCluster extends SearchCluster .configid(sdoc.getConfigId()); } - public void setRoutingSelector(String selector) { - this.routingSelector = selector; - if (this.routingSelector != null) { - try { - new DocumentSelectionConverter(this.routingSelector); - } catch (Exception e) { - throw new IllegalArgumentException("Invalid routing selector: " + e.getMessage()); - } - } - } - /** - * Create default config if not specified by user. - * Accept empty strings as user config - it means that all feeds/documents are accepted. - */ - public void defaultDocumentsConfig() { - if ((routingSelector == null) && !getDocumentNames().isEmpty()) { - Iterator<String> it = getDocumentNames().iterator(); - routingSelector = it.next(); - StringBuilder sb = new StringBuilder(routingSelector); - while (it.hasNext()) { - sb.append(" or ").append(it.next()); - } - routingSelector = sb.toString(); - } - } - @Override public void deriveFromSchemas(DeployState deployState) { for (SchemaInfo spec : schemas().values()) { @@ -188,10 +153,6 @@ public class IndexedSearchCluster extends SearchCluster documentDbsConfigProducer.getConfig(builder); } - public void setRedundancy(int redundancy) { - this.redundancy = redundancy; - } - private static DistributionPolicy.Enum toDistributionPolicy(DispatchTuning.DispatchPolicy tuning) { return switch (tuning) { case ADAPTIVE: yield DistributionPolicy.ADAPTIVE; @@ -227,7 +188,7 @@ public class IndexedSearchCluster extends SearchCluster if (tuning.dispatch.getMaxHitsPerPartition() != null) builder.maxHitsPerNode(tuning.dispatch.getMaxHitsPerPartition()); - builder.redundancy(redundancy); + builder.redundancy(redundancyProvider.redundancy().finalRedundancy()); if (searchCoverage != null) { if (searchCoverage.getMinimum() != null) builder.minSearchCoverage(searchCoverage.getMinimum() * 100.0); diff --git a/config-model/src/main/java/com/yahoo/vespa/model/search/SearchCluster.java b/config-model/src/main/java/com/yahoo/vespa/model/search/SearchCluster.java index c4f1069e0aa..2ab11e31f59 100644 --- a/config-model/src/main/java/com/yahoo/vespa/model/search/SearchCluster.java +++ b/config-model/src/main/java/com/yahoo/vespa/model/search/SearchCluster.java @@ -58,14 +58,6 @@ public abstract class SearchCluster extends TreeConfigProducer<AnyConfigProducer /** Returns the document databases contained in this cluster */ public abstract List<DocumentDatabase> getDocumentDbs(); - /** Returns a list of the document type names used in this search cluster */ - public List<String> getDocumentNames() { - return schemas.values() - .stream() - .map(schema -> schema.fullSchema().getDocument().getDocumentName().getName()) - .toList(); - } - public String getClusterName() { return clusterName; } public final String getIndexingModeName() { return getIndexingMode().getName(); } public final boolean isStreaming() { return getIndexingMode() == IndexingMode.STREAMING; } @@ -79,8 +71,6 @@ public abstract class SearchCluster extends TreeConfigProducer<AnyConfigProducer public final void setClusterIndex(int index) { this.index = index; } public final int getClusterIndex() { return index; } - public abstract void defaultDocumentsConfig(); - public abstract void getConfig(AttributesConfig.Builder builder); public abstract void getConfig(RankProfilesConfig.Builder builder); diff --git a/config-model/src/main/java/com/yahoo/vespa/model/search/SearchNode.java b/config-model/src/main/java/com/yahoo/vespa/model/search/SearchNode.java index dc4f9273868..61933c10504 100644 --- a/config-model/src/main/java/com/yahoo/vespa/model/search/SearchNode.java +++ b/config-model/src/main/java/com/yahoo/vespa/model/search/SearchNode.java @@ -21,7 +21,6 @@ import com.yahoo.vespa.model.admin.monitoring.Monitoring; import com.yahoo.vespa.model.application.validation.RestartConfigs; import com.yahoo.vespa.model.builder.xml.dom.VespaDomBuilder; import com.yahoo.vespa.model.content.ContentNode; -import com.yahoo.vespa.model.content.Redundancy; import com.yahoo.vespa.model.content.ResourceLimits; import org.w3c.dom.Element; @@ -64,10 +63,9 @@ public class SearchNode extends AbstractService implements private final String clusterName; private TransactionLogServer tls; private final AbstractService serviceLayerService; - private final Optional<Tuning> tuning; - private final Optional<ResourceLimits> resourceLimits; + private final Tuning tuning; + private final ResourceLimits resourceLimits; private final double fractionOfMemoryReserved; - private final Redundancy.Provider redundancyProvider; public static class Builder extends VespaDomBuilder.DomConfigProducerBuilderBase<SearchNode> { @@ -76,14 +74,13 @@ public class SearchNode extends AbstractService implements private final String clusterName; private final ContentNode contentNode; private final boolean flushOnShutdown; - private final Optional<Tuning> tuning; - private final Optional<ResourceLimits> resourceLimits; + private final Tuning tuning; + private final ResourceLimits resourceLimits; private final double fractionOfMemoryReserved; - private final Redundancy.Provider redundancyProvider; public Builder(String name, NodeSpec nodeSpec, String clusterName, ContentNode node, - boolean flushOnShutdown, Optional<Tuning> tuning, Optional<ResourceLimits> resourceLimits, - double fractionOfMemoryReserved, Redundancy.Provider redundancyprovider) { + boolean flushOnShutdown, Tuning tuning, ResourceLimits resourceLimits, + double fractionOfMemoryReserved) { this.name = name; this.nodeSpec = nodeSpec; this.clusterName = clusterName; @@ -92,7 +89,6 @@ public class SearchNode extends AbstractService implements this.tuning = tuning; this.resourceLimits = resourceLimits; this.fractionOfMemoryReserved = fractionOfMemoryReserved; - this.redundancyProvider = redundancyprovider; } @Override @@ -100,18 +96,18 @@ public class SearchNode extends AbstractService implements Element producerSpec) { return SearchNode.create(ancestor, name, contentNode.getDistributionKey(), nodeSpec, clusterName, contentNode, flushOnShutdown, tuning, resourceLimits, deployState.isHosted(), - fractionOfMemoryReserved, redundancyProvider, deployState.featureFlags()); + fractionOfMemoryReserved, deployState.featureFlags()); } } public static SearchNode create(TreeConfigProducer<?> parent, String name, int distributionKey, NodeSpec nodeSpec, String clusterName, AbstractService serviceLayerService, boolean flushOnShutdown, - Optional<Tuning> tuning, Optional<ResourceLimits> resourceLimits, - boolean isHostedVespa, double fractionOfMemoryReserved, Redundancy.Provider redundancyProvider, + Tuning tuning, ResourceLimits resourceLimits, + boolean isHostedVespa, double fractionOfMemoryReserved, ModelContext.FeatureFlags featureFlags) { SearchNode node = new SearchNode(parent, name, distributionKey, nodeSpec, clusterName, serviceLayerService, flushOnShutdown, - tuning, resourceLimits, isHostedVespa, fractionOfMemoryReserved, redundancyProvider); + tuning, resourceLimits, isHostedVespa, fractionOfMemoryReserved); if (featureFlags.loadCodeAsHugePages()) { node.addEnvironmentVariable("VESPA_LOAD_CODE_AS_HUGEPAGES", true); } @@ -123,8 +119,8 @@ public class SearchNode extends AbstractService implements private SearchNode(TreeConfigProducer<?> parent, String name, int distributionKey, NodeSpec nodeSpec, String clusterName, AbstractService serviceLayerService, boolean flushOnShutdown, - Optional<Tuning> tuning, Optional<ResourceLimits> resourceLimits, boolean isHostedVespa, - double fractionOfMemoryReserved, Redundancy.Provider redundancyProvider) { + Tuning tuning, ResourceLimits resourceLimits, boolean isHostedVespa, + double fractionOfMemoryReserved) { super(parent, name); this.distributionKey = distributionKey; this.serviceLayerService = serviceLayerService; @@ -141,7 +137,6 @@ public class SearchNode extends AbstractService implements // Properties are set in DomSearchBuilder this.tuning = tuning; this.resourceLimits = resourceLimits; - this.redundancyProvider = redundancyProvider; setPropertiesElastic(clusterName, distributionKey); addEnvironmentVariable("OMP_NUM_THREADS", 1); } @@ -277,13 +272,12 @@ public class SearchNode extends AbstractService implements } Optional<NodeResources> nodeResources = getSpecifiedNodeResources(); if (nodeResources.isPresent()) { - var nodeResourcesTuning = new NodeResourcesTuning(nodeResources.get(), - tuning.map(Tuning::threadsPerSearch).orElse(1), - fractionOfMemoryReserved); + int threadsPerSearch = tuning != null ? tuning.threadsPerSearch() : 1; + var nodeResourcesTuning = new NodeResourcesTuning(nodeResources.get(), threadsPerSearch, fractionOfMemoryReserved); nodeResourcesTuning.getConfig(builder); - tuning.ifPresent(t -> t.getConfig(builder)); - resourceLimits.ifPresent(l -> l.getConfig(builder)); + if (tuning != null) tuning.getConfig(builder); + if (resourceLimits != null) resourceLimits.getConfig(builder); } } diff --git a/config-model/src/main/java/com/yahoo/vespa/model/search/StreamingSearchCluster.java b/config-model/src/main/java/com/yahoo/vespa/model/search/StreamingSearchCluster.java index 7a4dd935acf..f3ae7e2a312 100644 --- a/config-model/src/main/java/com/yahoo/vespa/model/search/StreamingSearchCluster.java +++ b/config-model/src/main/java/com/yahoo/vespa/model/search/StreamingSearchCluster.java @@ -95,9 +95,6 @@ public class StreamingSearchCluster extends SearchCluster implements } @Override - public void defaultDocumentsConfig() { } - - @Override public void getConfig(IndexInfoConfig.Builder builder) { derivedConfig.getIndexInfo().getConfig(builder); } diff --git a/config-model/src/test/java/com/yahoo/vespa/model/container/search/searchchain/MockSearchClusters.java b/config-model/src/test/java/com/yahoo/vespa/model/container/search/searchchain/MockSearchClusters.java index 75884c298fb..8f9102801c2 100644 --- a/config-model/src/test/java/com/yahoo/vespa/model/container/search/searchchain/MockSearchClusters.java +++ b/config-model/src/test/java/com/yahoo/vespa/model/container/search/searchchain/MockSearchClusters.java @@ -28,42 +28,19 @@ public class MockSearchClusters { @Override public void deriveFromSchemas(DeployState deployState) { } + @Override public List<DocumentDatabase> getDocumentDbs() {return List.of();} + @Override public void getConfig(AttributesConfig.Builder builder) {} + @Override public void getConfig(DocumentdbInfoConfig.Builder builder) {} + @Override public void getConfig(RankProfilesConfig.Builder builder) {} + @Override public void getConfig(IndexInfoConfig.Builder builder) {} + @Override public void getConfig(IlscriptsConfig.Builder builder) {} + @Override public void getConfig(SchemaInfoConfig.Builder builder) {} @Override - public List<DocumentDatabase> getDocumentDbs() { - return List.of(); + protected SearchCluster.IndexingMode getIndexingMode() { + return streaming ? SearchCluster.IndexingMode.STREAMING : SearchCluster.IndexingMode.REALTIME; } - @Override - public void defaultDocumentsConfig() {} - - @Override - public void getConfig(AttributesConfig.Builder builder) { - } - - @Override - public void getConfig(DocumentdbInfoConfig.Builder builder) { - } - - @Override - public void getConfig(RankProfilesConfig.Builder builder) { - } - - @Override - public void getConfig(IndexInfoConfig.Builder builder) { - } - - @Override - public void getConfig(IlscriptsConfig.Builder builder) { - } - - @Override - public void getConfig(SchemaInfoConfig.Builder builder) { - } - - @Override - protected SearchCluster.IndexingMode getIndexingMode() { return streaming ? SearchCluster.IndexingMode.STREAMING : SearchCluster.IndexingMode.REALTIME; } - } public static SearchCluster mockSearchCluster(AbstractConfigProducerRoot root, String clusterName, int clusterIndex, boolean isStreaming) { diff --git a/config-model/src/test/java/com/yahoo/vespa/model/search/test/DocumentSelectionConverterTest.java b/config-model/src/test/java/com/yahoo/vespa/model/search/test/DocumentSelectionConverterTest.java deleted file mode 100644 index f495de2c6a4..00000000000 --- a/config-model/src/test/java/com/yahoo/vespa/model/search/test/DocumentSelectionConverterTest.java +++ /dev/null @@ -1,33 +0,0 @@ -// Copyright Vespa.ai. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. -package com.yahoo.vespa.model.search.test; - -import com.yahoo.document.select.parser.ParseException; -import com.yahoo.vespa.model.search.DocumentSelectionConverter; -import org.junit.jupiter.api.Test; - -import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.junit.jupiter.api.Assertions.assertNull; - -/** - * Unit tests for RemoveSelection. - * @author Ulf Lilleengen - */ -public class DocumentSelectionConverterTest { - @Test - void testQueryConversion() throws ParseException, IllegalArgumentException, UnsupportedOperationException { - DocumentSelectionConverter converter = new DocumentSelectionConverter("music.expire>now() - 3600 and video.expire > now() - 300"); - assertEquals("expire:>now(3600)", converter.getQuery("music")); - assertEquals("expire:<now(3600)", converter.getInvertedQuery("music")); - assertEquals("expire:>now(300)", converter.getQuery("video")); - assertEquals("expire:<now(300)", converter.getInvertedQuery("video")); - assertNull(converter.getQuery("book")); - assertNull(converter.getInvertedQuery("book")); - } - - @Test - void testSelection() throws ParseException, IllegalArgumentException, UnsupportedOperationException { - DocumentSelectionConverter converter = new DocumentSelectionConverter("music.expire>music.expire.nowdate"); - assertNull(converter.getQuery("music")); - assertNull(converter.getInvertedQuery("music")); - } -} diff --git a/config-model/src/test/java/com/yahoo/vespa/model/search/test/SearchNodeTest.java b/config-model/src/test/java/com/yahoo/vespa/model/search/test/SearchNodeTest.java index 55a55075625..bc981c3de7c 100644 --- a/config-model/src/test/java/com/yahoo/vespa/model/search/test/SearchNodeTest.java +++ b/config-model/src/test/java/com/yahoo/vespa/model/search/test/SearchNodeTest.java @@ -10,14 +10,11 @@ import com.yahoo.vespa.config.search.core.ProtonConfig; import com.yahoo.vespa.defaults.Defaults; import com.yahoo.vespa.model.Host; import com.yahoo.vespa.model.HostResource; -import com.yahoo.vespa.model.content.Redundancy; import com.yahoo.vespa.model.search.NodeSpec; import com.yahoo.vespa.model.search.SearchNode; import com.yahoo.vespa.model.search.TransactionLogServer; import org.junit.jupiter.api.Test; -import java.util.Optional; - import static org.junit.jupiter.api.Assertions.*; /** @@ -50,7 +47,7 @@ public class SearchNodeTest { private static SearchNode createSearchNode(MockRoot root, String name, int distributionKey, NodeSpec nodeSpec, boolean flushOnShutDown, boolean isHosted, ModelContext.FeatureFlags featureFlags) { return SearchNode.create(root, name, distributionKey, nodeSpec, "mycluster", null, flushOnShutDown, - Optional.empty(), Optional.empty(), isHosted, 0.0, () -> new Redundancy(1,1,1,1,1), featureFlags); + null, null, isHosted, 0.0, featureFlags); } private static SearchNode createSearchNode(MockRoot root) { diff --git a/configserver/src/main/java/com/yahoo/vespa/config/server/ApplicationRepository.java b/configserver/src/main/java/com/yahoo/vespa/config/server/ApplicationRepository.java index 5116898b795..07a8179732f 100644 --- a/configserver/src/main/java/com/yahoo/vespa/config/server/ApplicationRepository.java +++ b/configserver/src/main/java/com/yahoo/vespa/config/server/ApplicationRepository.java @@ -1107,7 +1107,7 @@ public class ApplicationRepository implements com.yahoo.config.provision.Deploye private File decompressApplication(CompressedApplicationInputStream in, File tempDir) { try { return in.decompress(tempDir); - } catch (IOException e) { + } catch (IOException | UncheckedIOException e) { throw new IllegalArgumentException("Unable to decompress application stream", e); } } diff --git a/configserver/src/test/java/com/yahoo/vespa/config/server/http/v2/ApplicationApiHandlerTest.java b/configserver/src/test/java/com/yahoo/vespa/config/server/http/v2/ApplicationApiHandlerTest.java index d4aa0676c4f..07b7fa0f244 100644 --- a/configserver/src/test/java/com/yahoo/vespa/config/server/http/v2/ApplicationApiHandlerTest.java +++ b/configserver/src/test/java/com/yahoo/vespa/config/server/http/v2/ApplicationApiHandlerTest.java @@ -180,7 +180,7 @@ class ApplicationApiHandlerTest { """ { "error-code": "BAD_REQUEST", - "message": "Error preprocessing application package for test.default, session 2: services.xml does not exist in application package" + "message": "Unable to decompress application stream: Cannot find zip signature within the file" } """); } diff --git a/dependency-versions/pom.xml b/dependency-versions/pom.xml index 30a940d6b7f..107ba05c004 100644 --- a/dependency-versions/pom.xml +++ b/dependency-versions/pom.xml @@ -65,7 +65,7 @@ <assertj.vespa.version>3.25.3</assertj.vespa.version> <!-- Athenz dependencies. Make sure these dependencies match those in Vespa's internal repositories --> - <aws-sdk.vespa.version>1.12.670</aws-sdk.vespa.version> + <aws-sdk.vespa.version>1.12.671</aws-sdk.vespa.version> <athenz.vespa.version>1.11.52</athenz.vespa.version> <!-- Athenz END --> @@ -87,7 +87,7 @@ <commons-lang3.vespa.version>3.14.0</commons-lang3.vespa.version> <commons-logging.vespa.version>1.3.0</commons-logging.vespa.version> <!-- Bindings exported by jdisc through jcl-over-slf4j. --> <commons.math3.vespa.version>3.6.1</commons.math3.vespa.version> - <commons-compress.vespa.version>1.25.0</commons-compress.vespa.version> + <commons-compress.vespa.version>1.26.0</commons-compress.vespa.version> <commons-cli.vespa.version>1.6.0</commons-cli.vespa.version> <curator.vespa.version>5.6.0</curator.vespa.version> <dropwizard.metrics.vespa.version>4.2.25</dropwizard.metrics.vespa.version> <!-- ZK 3.9.1 requires this --> @@ -125,7 +125,7 @@ <onnxruntime.vespa.version>1.17.1</onnxruntime.vespa.version> <opennlp.vespa.version>2.3.2</opennlp.vespa.version> <opentest4j.vespa.version>1.3.0</opentest4j.vespa.version> - <org.json.vespa.version>20240205</org.json.vespa.version> + <org.json.vespa.version>20240303</org.json.vespa.version> <org.lz4.vespa.version>1.8.0</org.lz4.vespa.version> <prometheus.client.vespa.version>0.16.0</prometheus.client.vespa.version> <plexus-interpolation.vespa.version>1.27</plexus-interpolation.vespa.version> @@ -150,8 +150,8 @@ <!-- CAUTION: upgrading junit for tenants poms may break testing frameworks --> <!-- CAUTION 2: this version must match the exported packages from the tenant-cd-api module --> <!-- CAUTION 3: this is probably not a good idea to change too ofter; consider a major version next time --> - <junit.vespa.tenant.version>5.10.2</junit.vespa.tenant.version> - <junit.platform.vespa.tenant.version>1.10.2</junit.platform.vespa.tenant.version> + <junit.vespa.tenant.version>5.10.1</junit.vespa.tenant.version> + <junit.platform.vespa.tenant.version>1.10.1</junit.platform.vespa.tenant.version> <surefire.vespa.tenant.version>${surefire.vespa.version}</surefire.vespa.tenant.version> <!-- Maven plugins --> diff --git a/dist/vespa.spec b/dist/vespa.spec index 0da35964e62..14e1869b6a5 100644 --- a/dist/vespa.spec +++ b/dist/vespa.spec @@ -42,7 +42,7 @@ License: Commercial URL: http://vespa.ai Source0: vespa-%{version}.tar.gz -BuildRequires: vespa-build-dependencies >= 1.2.7 +BuildRequires: vespa-build-dependencies = 1.2.7 Requires: %{name}-base = %{version}-%{release} Requires: %{name}-base-libs = %{version}-%{release} diff --git a/documentapi/src/main/java/com/yahoo/documentapi/messagebus/protocol/RoutableFactories80.java b/documentapi/src/main/java/com/yahoo/documentapi/messagebus/protocol/RoutableFactories80.java index ef1575e2101..778eaeda5f0 100644 --- a/documentapi/src/main/java/com/yahoo/documentapi/messagebus/protocol/RoutableFactories80.java +++ b/documentapi/src/main/java/com/yahoo/documentapi/messagebus/protocol/RoutableFactories80.java @@ -193,8 +193,8 @@ abstract class RoutableFactories80 { } private static ByteBuffer serializeDoc(Document doc) { - var buf = new GrowableByteBuffer(); - doc.serialize(buf); + var buf = new GrowableByteBuffer(8 * 1024, 2.0f); + doc.serialize(DocumentSerializerFactory.createHead(buf)); buf.flip(); return buf.getByteBuffer(); } @@ -233,7 +233,7 @@ abstract class RoutableFactories80 { } private static ByteBuffer serializeUpdate(DocumentUpdate update) { - var buf = new GrowableByteBuffer(); + var buf = new GrowableByteBuffer(4 * 1024, 2.0f); update.serialize(DocumentSerializerFactory.createHead(buf)); buf.flip(); return buf.getByteBuffer(); diff --git a/eval/src/tests/eval/compiled_function/compiled_function_test.cpp b/eval/src/tests/eval/compiled_function/compiled_function_test.cpp index 7b1f9a84b6d..d84939caff2 100644 --- a/eval/src/tests/eval/compiled_function/compiled_function_test.cpp +++ b/eval/src/tests/eval/compiled_function/compiled_function_test.cpp @@ -29,10 +29,11 @@ TEST("require that separate parameter passing works") { TEST("require that array parameter passing works") { CompiledFunction arr_cf(*Function::parse(params_10, expr_10), PassParams::ARRAY); auto arr_fun = arr_cf.get_function(); - EXPECT_EQUAL(10.0, arr_fun(&std::vector<double>({1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0})[0])); - EXPECT_EQUAL(50.0, arr_fun(&std::vector<double>({5.0, 5.0, 5.0, 5.0, 5.0, 5.0, 5.0, 5.0, 5.0, 5.0})[0])); - EXPECT_EQUAL(45.0, arr_fun(&std::vector<double>({0.0, 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0})[0])); - EXPECT_EQUAL(45.0, arr_fun(&std::vector<double>({9.0, 8.0, 7.0, 6.0, 5.0, 4.0, 3.0, 2.0, 1.0, 0.0})[0])); + auto eval_arr_fun = [&arr_fun](std::vector<double> args) { return arr_fun(&args[0]); }; + EXPECT_EQUAL(10.0, eval_arr_fun({1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0})); + EXPECT_EQUAL(50.0, eval_arr_fun({5.0, 5.0, 5.0, 5.0, 5.0, 5.0, 5.0, 5.0, 5.0, 5.0})); + EXPECT_EQUAL(45.0, eval_arr_fun({0.0, 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0})); + EXPECT_EQUAL(45.0, eval_arr_fun({9.0, 8.0, 7.0, 6.0, 5.0, 4.0, 3.0, 2.0, 1.0, 0.0})); } double my_resolve(void *ctx, size_t idx) { return ((double *)ctx)[idx]; } @@ -40,10 +41,11 @@ double my_resolve(void *ctx, size_t idx) { return ((double *)ctx)[idx]; } TEST("require that lazy parameter passing works") { CompiledFunction lazy_cf(*Function::parse(params_10, expr_10), PassParams::LAZY); auto lazy_fun = lazy_cf.get_lazy_function(); - EXPECT_EQUAL(10.0, lazy_fun(my_resolve, &std::vector<double>({1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0})[0])); - EXPECT_EQUAL(50.0, lazy_fun(my_resolve, &std::vector<double>({5.0, 5.0, 5.0, 5.0, 5.0, 5.0, 5.0, 5.0, 5.0, 5.0})[0])); - EXPECT_EQUAL(45.0, lazy_fun(my_resolve, &std::vector<double>({0.0, 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0})[0])); - EXPECT_EQUAL(45.0, lazy_fun(my_resolve, &std::vector<double>({9.0, 8.0, 7.0, 6.0, 5.0, 4.0, 3.0, 2.0, 1.0, 0.0})[0])); + auto eval_lazy_fun = [&lazy_fun](std::vector<double> args) { return lazy_fun(my_resolve, &args[0]); }; + EXPECT_EQUAL(10.0, eval_lazy_fun({1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0})); + EXPECT_EQUAL(50.0, eval_lazy_fun({5.0, 5.0, 5.0, 5.0, 5.0, 5.0, 5.0, 5.0, 5.0, 5.0})); + EXPECT_EQUAL(45.0, eval_lazy_fun({0.0, 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0})); + EXPECT_EQUAL(45.0, eval_lazy_fun({9.0, 8.0, 7.0, 6.0, 5.0, 4.0, 3.0, 2.0, 1.0, 0.0})); } //----------------------------------------------------------------------------- diff --git a/eval/src/tests/eval/gbdt/gbdt_test.cpp b/eval/src/tests/eval/gbdt/gbdt_test.cpp index 2f5c5d75105..739202e68bf 100644 --- a/eval/src/tests/eval/gbdt/gbdt_test.cpp +++ b/eval/src/tests/eval/gbdt/gbdt_test.cpp @@ -275,10 +275,11 @@ TEST("require that less only VM tree optimizer works") { CompiledFunction compiled_function(*function, PassParams::ARRAY, less_only_vm_chain); EXPECT_EQUAL(1u, compiled_function.get_forests().size()); auto f = compiled_function.get_function(); - EXPECT_EQUAL(11.0, f(&std::vector<double>({0.5, 0.0, 0.0, 0.5, 0.0, 0.0})[0])); - EXPECT_EQUAL(22.0, f(&std::vector<double>({1.5, 0.5, 0.5, 1.5, 0.5, 0.5})[0])); - EXPECT_EQUAL(33.0, f(&std::vector<double>({1.5, 0.5, 1.5, 1.5, 0.5, 1.5})[0])); - EXPECT_EQUAL(44.0, f(&std::vector<double>({1.5, 1.5, 0.0, 1.5, 1.5, 0.0})[0])); + auto eval_f = [&f](std::vector<double> args) { return f(&args[0]); }; + EXPECT_EQUAL(11.0, eval_f({0.5, 0.0, 0.0, 0.5, 0.0, 0.0})); + EXPECT_EQUAL(22.0, eval_f({1.5, 0.5, 0.5, 1.5, 0.5, 0.5})); + EXPECT_EQUAL(33.0, eval_f({1.5, 0.5, 1.5, 1.5, 0.5, 1.5})); + EXPECT_EQUAL(44.0, eval_f({1.5, 1.5, 0.0, 1.5, 1.5, 0.0})); } TEST("require that models with in checks are rejected by less only vm optimizer") { @@ -305,10 +306,11 @@ TEST("require that general VM tree optimizer works") { CompiledFunction compiled_function(*function, PassParams::ARRAY, general_vm_chain); EXPECT_EQUAL(1u, compiled_function.get_forests().size()); auto f = compiled_function.get_function(); - EXPECT_EQUAL(11.0, f(&std::vector<double>({0.5, 0.0, 0.0, 1.0, 0.0, 0.0})[0])); - EXPECT_EQUAL(22.0, f(&std::vector<double>({1.5, 2.0, 1.0, 2.0, 0.5, 0.5})[0])); - EXPECT_EQUAL(33.0, f(&std::vector<double>({1.5, 2.0, 2.0, 2.0, 0.5, 1.5})[0])); - EXPECT_EQUAL(44.0, f(&std::vector<double>({1.5, 5.0, 0.0, 2.0, 1.5, 0.0})[0])); + auto eval_f = [&f](std::vector<double> args) { return f(&args[0]); }; + EXPECT_EQUAL(11.0, eval_f({0.5, 0.0, 0.0, 1.0, 0.0, 0.0})); + EXPECT_EQUAL(22.0, eval_f({1.5, 2.0, 1.0, 2.0, 0.5, 0.5})); + EXPECT_EQUAL(33.0, eval_f({1.5, 2.0, 2.0, 2.0, 0.5, 1.5})); + EXPECT_EQUAL(44.0, eval_f({1.5, 5.0, 0.0, 2.0, 1.5, 0.0})); } TEST("require that models with too large sets are rejected by general vm optimizer") { diff --git a/filedistribution/pom.xml b/filedistribution/pom.xml index ebf79c00714..d6877451a71 100644 --- a/filedistribution/pom.xml +++ b/filedistribution/pom.xml @@ -47,6 +47,10 @@ <artifactId>commons-compress</artifactId> </dependency> <dependency> + <groupId>commons-codec</groupId> + <artifactId>commons-codec</artifactId> + </dependency> + <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <scope>test</scope> diff --git a/flags/src/main/java/com/yahoo/vespa/flags/Flags.java b/flags/src/main/java/com/yahoo/vespa/flags/Flags.java index e0fad41a8bd..5e5e4452154 100644 --- a/flags/src/main/java/com/yahoo/vespa/flags/Flags.java +++ b/flags/src/main/java/com/yahoo/vespa/flags/Flags.java @@ -201,7 +201,7 @@ public class Flags { public static final UnboundIntFlag MAX_ACTIVATION_INHIBITED_OUT_OF_SYNC_GROUPS = defineIntFlag( "max-activation-inhibited-out-of-sync-groups", 0, - List.of("vekterli"), "2021-02-19", "2024-03-01", + List.of("vekterli"), "2021-02-19", "2024-06-01", "Allows replicas in up to N content groups to not be activated " + "for query visibility if they are out of sync with a majority of other replicas", "Takes effect at redeployment", @@ -209,7 +209,7 @@ public class Flags { public static final UnboundDoubleFlag MIN_NODE_RATIO_PER_GROUP = defineDoubleFlag( "min-node-ratio-per-group", 0.0, - List.of("geirst", "vekterli"), "2021-07-16", "2024-03-01", + List.of("geirst", "vekterli"), "2021-07-16", "2024-06-01", "Minimum ratio of nodes that have to be available (i.e. not Down) in any hierarchic content cluster group for the group to be Up", "Takes effect at redeployment", INSTANCE_ID); @@ -234,7 +234,7 @@ public class Flags { public static final UnboundBooleanFlag ENABLED_HORIZON_DASHBOARD = defineFeatureFlag( "enabled-horizon-dashboard", false, - List.of("olaa"), "2021-09-13", "2024-03-01", + List.of("olaa"), "2021-09-13", "2024-09-01", "Enable Horizon dashboard", "Takes effect immediately", TENANT_ID, CONSOLE_USER_EMAIL @@ -270,7 +270,7 @@ public class Flags { public static final UnboundBooleanFlag SEPARATE_METRIC_CHECK_CONFIG = defineFeatureFlag( "separate-metric-check-config", false, - List.of("olaa"), "2022-07-04", "2024-03-01", + List.of("olaa"), "2022-07-04", "2024-09-01", "Determines whether one metrics config check should be written per Vespa node", "Takes effect on next tick", HOSTNAME); @@ -285,14 +285,14 @@ public class Flags { public static final UnboundBooleanFlag ENABLE_OTELCOL = defineFeatureFlag( "enable-otel-collector", false, - List.of("olaa"), "2022-09-23", "2024-03-01", + List.of("olaa"), "2022-09-23", "2024-09-01", "Whether an OpenTelemetry collector should be enabled", "Takes effect at next tick", INSTANCE_ID); public static final UnboundListFlag<String> OTELCOL_LOGS = defineListFlag( "otelcol-logs", List.of(), String.class, - List.of("olaa"), "2024-01-15", "2024-03-01", + List.of("olaa"), "2024-01-15", "2024-09-01", "Determines log files handled by the OpenTelemetry collector", "Takes effect at next tick", INSTANCE_ID, HOSTNAME @@ -318,14 +318,14 @@ public class Flags { public static final UnboundBooleanFlag SORT_BLUEPRINTS_BY_COST = defineFeatureFlag( "sort-blueprints-by-cost", false, - List.of("baldersheim"), "2023-12-19", "2024-02-29", + List.of("baldersheim"), "2023-12-19", "2024-05-31", "If true blueprints are sorted based on cost estimate, rather that absolute estimated hits", "Takes effect at redeployment", INSTANCE_ID); public static final UnboundBooleanFlag ALWAYS_MARK_PHRASE_EXPENSIVE = defineFeatureFlag( "always-mark-phrase-expensive", false, - List.of("baldersheim"), "2023-11-20", "2024-02-29", + List.of("baldersheim"), "2023-11-20", "2024-05-31", "If true all phrases will be marked expensive, independent of parents", "Takes effect at redeployment", INSTANCE_ID); @@ -401,7 +401,7 @@ public class Flags { public static final UnboundBooleanFlag CLOUD_TRIAL_NOTIFICATIONS = defineFeatureFlag( "cloud-trial-notifications", false, - List.of("bjorncs", "oyving"), "2023-10-13", "2024-03-01", + List.of("bjorncs", "oyving"), "2023-10-13", "2024-12-31", "Whether to send cloud trial email notifications", "Takes effect immediately"); diff --git a/searchlib/src/tests/queryeval/iterator_benchmark/CMakeLists.txt b/searchlib/src/tests/queryeval/iterator_benchmark/CMakeLists.txt index ea0ffbae9f1..34c5928c123 100644 --- a/searchlib/src/tests/queryeval/iterator_benchmark/CMakeLists.txt +++ b/searchlib/src/tests/queryeval/iterator_benchmark/CMakeLists.txt @@ -1,6 +1,7 @@ # Copyright Vespa.ai. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. vespa_add_executable(searchlib_iterator_benchmark_test_app TEST SOURCES + disk_index_builder.cpp iterator_benchmark_test.cpp DEPENDS searchlib diff --git a/searchlib/src/tests/queryeval/iterator_benchmark/benchmark_searchable.h b/searchlib/src/tests/queryeval/iterator_benchmark/benchmark_searchable.h new file mode 100644 index 00000000000..5fce2570feb --- /dev/null +++ b/searchlib/src/tests/queryeval/iterator_benchmark/benchmark_searchable.h @@ -0,0 +1,27 @@ +// Copyright Vespa.ai. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. + +#pragma once + +#include <memory> + +namespace search::query { class Node; } + +namespace search::queryeval { +class Blueprint; +class FieldSpec; +class IRequestContext; +} + +namespace search::queryeval::test { + +/** + * Simplified interface used to create a Blueprint, similar to search::queryeval::Searchable. + */ +class BenchmarkSearchable { +public: + virtual ~BenchmarkSearchable() = default; + virtual std::unique_ptr<Blueprint> create_blueprint(const FieldSpec& field, + const search::query::Node& term) = 0; +}; + +} diff --git a/searchlib/src/tests/queryeval/iterator_benchmark/disk_index_builder.cpp b/searchlib/src/tests/queryeval/iterator_benchmark/disk_index_builder.cpp new file mode 100644 index 00000000000..96fcc261837 --- /dev/null +++ b/searchlib/src/tests/queryeval/iterator_benchmark/disk_index_builder.cpp @@ -0,0 +1,88 @@ +// Copyright Vespa.ai. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. + +#include "disk_index_builder.h" +#include <vespa/searchlib/common/bitvector.h> +#include <vespa/searchlib/diskindex/diskindex.h> +#include <vespa/searchlib/index/docidandfeatures.h> +#include <vespa/searchlib/queryeval/blueprint.h> +#include <vespa/searchlib/queryeval/fake_requestcontext.h> +#include <filesystem> + +using search::diskindex::DiskIndex; +using search::index::DocIdAndPosOccFeatures; +using search::index::Schema; + +namespace search::queryeval::test { + +constexpr search::queryeval::Source default_source = 0; + +DiskIndexBuilder::DiskIndexBuilder(const Schema& schema, vespalib::stringref index_dir, uint32_t docid_limit, uint64_t num_words) + : _schema(schema), + _field_length_inspector(), + _tune_file_indexing(), + _tune_file_attributes(), + _tune_file_search(), + _file_header_ctx(), + _index_dir(index_dir), + _selector(default_source, _index_dir + "/selector", docid_limit), + _builder(_schema, index_dir, docid_limit, num_words, _field_length_inspector, _tune_file_indexing, _file_header_ctx), + _field_builder(_builder.startField(0)) +{ + // Mark all documents as being part of this disk index. + for (uint32_t docid = 0; docid < docid_limit; ++docid) { + _selector.setSource(docid, default_source); + } +} + +void +DiskIndexBuilder::add_word(vespalib::stringref word, search::BitVector& docids, uint32_t num_occs) +{ + DocIdAndPosOccFeatures diaf; + diaf.word_positions().reserve(num_occs); + for (uint32_t word_pos = 0; word_pos < num_occs; ++word_pos) { + diaf.addNextOcc(0, word_pos, 1, num_occs * 10); + } + diaf.set_field_length(num_occs * 10); + diaf.set_num_occs(num_occs); + _field_builder->startWord(word); + docids.foreach_truebit([&](uint32_t docid) { + diaf.set_doc_id(docid); + _field_builder->add_document(diaf); + }); + _field_builder->endWord(); +} + +namespace { + +class DiskIndexSearchable : public BenchmarkSearchable { +private: + std::unique_ptr<DiskIndex> _index; + +public: + DiskIndexSearchable(std::unique_ptr<DiskIndex> index) : _index(std::move(index)) {} + ~DiskIndexSearchable() { + vespalib::string index_dir = _index->getIndexDir(); + _index.reset(); + std::filesystem::remove_all(std::filesystem::path(index_dir)); + } + std::unique_ptr<Blueprint> create_blueprint(const FieldSpec& field, + const search::query::Node& term) override { + FakeRequestContext req_ctx; + return _index->createBlueprint(req_ctx, field, term); + } +}; + +} + +std::unique_ptr<BenchmarkSearchable> +DiskIndexBuilder::build() +{ + _field_builder.reset(); + _selector.extractSaveInfo(_index_dir + "/selector")->save(_tune_file_attributes, _file_header_ctx); + auto index = std::make_unique<DiskIndex>(_index_dir); + bool setup = index->setup(_tune_file_search); + assert(setup); + return std::make_unique<DiskIndexSearchable>(std::move(index)); +} + +} diff --git a/searchlib/src/tests/queryeval/iterator_benchmark/disk_index_builder.h b/searchlib/src/tests/queryeval/iterator_benchmark/disk_index_builder.h new file mode 100644 index 00000000000..6901a48b46e --- /dev/null +++ b/searchlib/src/tests/queryeval/iterator_benchmark/disk_index_builder.h @@ -0,0 +1,41 @@ +// Copyright Vespa.ai. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. + +#pragma once + +#include "benchmark_searchable.h" +#include <vespa/searchcommon/common/schema.h> +#include <vespa/searchlib/attribute/fixedsourceselector.h> +#include <vespa/searchlib/diskindex/indexbuilder.h> +#include <vespa/searchlib/index/dummyfileheadercontext.h> +#include <vespa/searchlib/test/index/mock_field_length_inspector.h> +#include <memory> + +namespace search { class BitVector; } +namespace search::index { class DocIdAndFeatures; } +namespace search::diskindex { class DiskIndex; } + +namespace search::queryeval::test { + +/** + * Class used to build a disk index, used for benchmarking. + */ +class DiskIndexBuilder { +private: + search::index::Schema _schema; + search::index::test::MockFieldLengthInspector _field_length_inspector; + TuneFileIndexing _tune_file_indexing; + TuneFileAttributes _tune_file_attributes; + TuneFileSearch _tune_file_search; + search::index::DummyFileHeaderContext _file_header_ctx; + vespalib::string _index_dir; + search::FixedSourceSelector _selector; + search::diskindex::IndexBuilder _builder; + std::unique_ptr<search::index::FieldIndexBuilder> _field_builder; + +public: + DiskIndexBuilder(const search::index::Schema& schema, vespalib::stringref index_dir, uint32_t docid_limit, uint64_t num_words); + void add_word(vespalib::stringref word, search::BitVector& docids, uint32_t num_occs); + std::unique_ptr<BenchmarkSearchable> build(); +}; + +} diff --git a/searchlib/src/tests/queryeval/iterator_benchmark/iterator_benchmark_test.cpp b/searchlib/src/tests/queryeval/iterator_benchmark/iterator_benchmark_test.cpp index d1fa9209dd0..65fa55174d4 100644 --- a/searchlib/src/tests/queryeval/iterator_benchmark/iterator_benchmark_test.cpp +++ b/searchlib/src/tests/queryeval/iterator_benchmark/iterator_benchmark_test.cpp @@ -1,5 +1,7 @@ // Copyright Vespa.ai. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. +#include "benchmark_searchable.h" +#include "disk_index_builder.h" #include <vespa/searchcommon/attribute/config.h> #include <vespa/searchcommon/attribute/iattributecontext.h> #include <vespa/searchlib/attribute/attribute_blueprint_factory.h> @@ -7,7 +9,9 @@ #include <vespa/searchlib/attribute/attributevector.h> #include <vespa/searchlib/attribute/integerbase.h> #include <vespa/searchlib/attribute/stringbase.h> +#include <vespa/searchlib/diskindex/diskindex.h> #include <vespa/searchlib/fef/matchdata.h> +#include <vespa/searchlib/index/docidandfeatures.h> #include <vespa/searchlib/query/tree/integer_term_vector.h> #include <vespa/searchlib/query/tree/node.h> #include <vespa/searchlib/query/tree/simplequery.h> @@ -31,10 +35,16 @@ using namespace search::queryeval; using namespace search; using namespace vespalib; +using search::index::DocIdAndFeatures; +using search::index::Schema; +using search::queryeval::test::BenchmarkSearchable; +using search::queryeval::test::DiskIndexBuilder; + // TODO: Re-seed for each benchmark setup constexpr uint32_t default_seed = 1234; std::mt19937 gen(default_seed); -const vespalib::string field = "myfield"; +const vespalib::string field_name = "myfield"; +const vespalib::string index_dir = "indexdir"; double budget_sec = 1.0; BitVector::UP @@ -90,10 +100,47 @@ public: } return res; } + size_t size() const { return _specs.size(); } auto begin() const { return _specs.begin(); } auto end() const { return _specs.end(); } }; +vespalib::string +to_string(const Config& attr_config) +{ + std::ostringstream oss; + auto col_type = attr_config.collectionType(); + auto basic_type = attr_config.basicType(); + if (col_type == CollectionType::SINGLE) { + oss << basic_type.asString(); + } else { + oss << col_type.asString() << "<" << basic_type.asString() << ">"; + } + if (attr_config.fastSearch()) { + oss << "(fs)"; + } + return oss.str(); +} + +class FieldConfig { +private: + std::variant<Config, Schema::IndexField> _cfg; + +public: + FieldConfig(const Config& attr_cfg_in) : _cfg(attr_cfg_in) {} + FieldConfig(const Schema::IndexField& index_cfg_in) : _cfg(index_cfg_in) {} + bool is_attr() const { return _cfg.index() == 0; } + const Config& attr_cfg() const { return std::get<0>(_cfg); } + Schema index_cfg() const { + Schema res; + res.addIndexField(std::get<1>(_cfg)); + return res; + } + vespalib::string to_string() const { + return is_attr() ? ::to_string(attr_cfg()) : "diskindex"; + } +}; + template <typename AttributeType, bool is_string, bool is_multivalue> void populate_attribute(AttributeType& attr, uint32_t docid_limit, const HitSpecs& hit_specs) @@ -121,7 +168,7 @@ populate_attribute(AttributeType& attr, uint32_t docid_limit, const HitSpecs& hi AttributeVector::SP make_attribute(const Config& cfg, uint32_t num_docs, const HitSpecs& hit_specs) { - auto attr = AttributeFactory::createAttribute(field, cfg); + auto attr = AttributeFactory::createAttribute(field_name, cfg); attr->addReservedDoc(); attr->addDocs(num_docs); uint32_t docid_limit = attr->getNumDocs(); @@ -146,13 +193,38 @@ make_attribute(const Config& cfg, uint32_t num_docs, const HitSpecs& hit_specs) return attr; } -std::unique_ptr<IAttributeContext> -make_attribute_context(const Config& cfg, uint32_t num_docs, const HitSpecs& hit_specs) +class AttributeSearchable : public BenchmarkSearchable { +private: + std::unique_ptr<MockAttributeContext> _attr_ctx; + +public: + AttributeSearchable(std::unique_ptr<MockAttributeContext> attr_ctx) : _attr_ctx(std::move(attr_ctx)) {} + std::unique_ptr<Blueprint> create_blueprint(const FieldSpec& field_spec, + const search::query::Node& term) override { + AttributeBlueprintFactory factory; + FakeRequestContext req_ctx(_attr_ctx.get()); + return factory.createBlueprint(req_ctx, field_spec, term); + } +}; + +std::unique_ptr<BenchmarkSearchable> +make_searchable(const FieldConfig& cfg, uint32_t num_docs, const HitSpecs& hit_specs) { - auto attr = make_attribute(cfg, num_docs, hit_specs); - auto res = std::make_unique<MockAttributeContext>(); - res->add(std::move(attr)); - return res; + if (cfg.is_attr()) { + auto attr = make_attribute(cfg.attr_cfg(), num_docs, hit_specs); + auto ctx = std::make_unique<MockAttributeContext>(); + ctx->add(std::move(attr)); + return std::make_unique<AttributeSearchable>(std::move(ctx)); + } else { + uint32_t docid_limit = num_docs + 1; + DiskIndexBuilder builder(cfg.index_cfg(), index_dir, docid_limit, hit_specs.size()); + for (auto spec : hit_specs) { + // TODO: make number of occurrences configurable. + uint32_t num_occs = 1; + builder.add_word(std::to_string(spec.term_value), *random_docids(docid_limit, spec.num_hits), num_occs); + } + return builder.build(); + } } struct BenchmarkResult { @@ -356,11 +428,9 @@ benchmark_search(Blueprint::UP blueprint, uint32_t docid_limit, bool strict_cont } Blueprint::UP -make_leaf_blueprint(const Node& node, IAttributeContext& attr_ctx, uint32_t docid_limit) +make_leaf_blueprint(const Node& node, BenchmarkSearchable& searchable, uint32_t docid_limit) { - FakeRequestContext request_ctx(&attr_ctx); - AttributeBlueprintFactory source; - auto blueprint = source.createBlueprint(request_ctx, FieldSpec(field, 0, 0), node); + auto blueprint = searchable.create_blueprint(FieldSpec(field_name, 0, 0), node); assert(blueprint.get()); blueprint->setDocIdLimit(docid_limit); blueprint->update_flow_stats(docid_limit); @@ -391,23 +461,6 @@ to_string(QueryOperator query_op) } vespalib::string -to_string(const Config& attr_config) -{ - std::ostringstream oss; - auto col_type = attr_config.collectionType(); - auto basic_type = attr_config.basicType(); - if (col_type == CollectionType::SINGLE) { - oss << basic_type.asString(); - } else { - oss << col_type.asString() << "<" << basic_type.asString() << ">"; - } - if (attr_config.fastSearch()) { - oss << "(fs)"; - } - return oss.str(); -} - -vespalib::string to_string(bool val) { return val ? "true" : "false"; @@ -418,21 +471,21 @@ make_query_node(QueryOperator query_op, const benchmark::TermVector& terms) { if (query_op == QueryOperator::Term) { assert(terms.size() == 1); - return std::make_unique<SimpleNumberTerm>(std::to_string(terms[0]), field, 0, Weight(1)); + return std::make_unique<SimpleStringTerm>(std::to_string(terms[0]), field_name, 0, Weight(1)); } else if (query_op == QueryOperator::In) { auto termv = std::make_unique<IntegerTermVector>(terms.size()); for (auto term : terms) { termv->addTerm(term); } - return std::make_unique<SimpleInTerm>(std::move(termv), MultiTerm::Type::INTEGER, field, 0, Weight(1)); + return std::make_unique<SimpleInTerm>(std::move(termv), MultiTerm::Type::INTEGER, field_name, 0, Weight(1)); } else if (query_op == QueryOperator::WeightedSet) { - auto res = std::make_unique<SimpleWeightedSetTerm>(terms.size(), field, 0, Weight(1)); + auto res = std::make_unique<SimpleWeightedSetTerm>(terms.size(), field_name, 0, Weight(1)); for (auto term : terms) { res->addTerm(term, Weight(1)); } return res; } else if (query_op == QueryOperator::DotProduct) { - auto res = std::make_unique<SimpleDotProduct>(terms.size(), field, 0, Weight(1)); + auto res = std::make_unique<SimpleDotProduct>(terms.size(), field_name, 0, Weight(1)); for (auto term : terms) { res->addTerm(term, Weight(1)); } @@ -443,12 +496,12 @@ make_query_node(QueryOperator query_op, const benchmark::TermVector& terms) template <typename BlueprintType> Blueprint::UP -make_intermediate_blueprint(IAttributeContext& attr_ctx, const benchmark::TermVector& terms, uint32_t docid_limit) +make_intermediate_blueprint(BenchmarkSearchable& searchable, const benchmark::TermVector& terms, uint32_t docid_limit) { auto blueprint = std::make_unique<BlueprintType>(); for (auto term : terms) { - SimpleNumberTerm sterm(std::to_string(term), field, 0, Weight(1)); - auto child = make_leaf_blueprint(sterm, attr_ctx, docid_limit); + SimpleStringTerm sterm(std::to_string(term), field_name, 0, Weight(1)); + auto child = make_leaf_blueprint(sterm, searchable, docid_limit); blueprint->addChild(std::move(child)); } blueprint->setDocIdLimit(docid_limit); @@ -457,15 +510,15 @@ make_intermediate_blueprint(IAttributeContext& attr_ctx, const benchmark::TermVe } BenchmarkResult -run_benchmark(IAttributeContext& attr_ctx, QueryOperator query_op, const benchmark::TermVector& terms, uint32_t docid_limit, bool strict_context, bool force_strict, double filter_hit_ratio) +run_benchmark(BenchmarkSearchable& searchable, QueryOperator query_op, const benchmark::TermVector& terms, uint32_t docid_limit, bool strict_context, bool force_strict, double filter_hit_ratio) { if (query_op == QueryOperator::And) { - return benchmark_search(make_intermediate_blueprint<AndBlueprint>(attr_ctx, terms, docid_limit), docid_limit, strict_context, force_strict, filter_hit_ratio); + return benchmark_search(make_intermediate_blueprint<AndBlueprint>(searchable, terms, docid_limit), docid_limit, strict_context, force_strict, filter_hit_ratio); } else if (query_op == QueryOperator::Or) { - return benchmark_search(make_intermediate_blueprint<OrBlueprint>(attr_ctx, terms, docid_limit), docid_limit, strict_context, force_strict, filter_hit_ratio); + return benchmark_search(make_intermediate_blueprint<OrBlueprint>(searchable, terms, docid_limit), docid_limit, strict_context, force_strict, filter_hit_ratio); } else { auto query_node = make_query_node(query_op, terms); - auto blueprint = make_leaf_blueprint(*query_node, attr_ctx, docid_limit); + auto blueprint = make_leaf_blueprint(*query_node, searchable, docid_limit); return benchmark_search(std::move(blueprint), docid_limit, strict_context, force_strict, filter_hit_ratio); } } @@ -513,18 +566,18 @@ print_result(const BenchmarkCaseResult& result) } struct BenchmarkCase { - Config attr_cfg; + FieldConfig field_cfg; QueryOperator query_op; bool strict_context; bool force_strict; - BenchmarkCase(const Config& attr_cfg_in, QueryOperator query_op_in, bool strict_context_in) - : attr_cfg(attr_cfg_in), + BenchmarkCase(const FieldConfig& field_cfg_in, QueryOperator query_op_in, bool strict_context_in) + : field_cfg(field_cfg_in), query_op(query_op_in), strict_context(strict_context_in), force_strict(false) {} vespalib::string to_string() const { - return "op=" + ::to_string(query_op) + ", cfg=" + ::to_string(attr_cfg) + + return "op=" + ::to_string(query_op) + ", cfg=" + field_cfg.to_string() + ", strict_context=" + ::to_string(strict_context) + ", force_strict=" + ::to_string(force_strict); } }; @@ -609,7 +662,7 @@ struct BenchmarkCaseSetup { struct BenchmarkSetup { uint32_t num_docs; - std::vector<Config> attr_cfgs; + std::vector<FieldConfig> field_cfgs; std::vector<QueryOperator> query_ops; std::vector<bool> strictness; std::vector<double> op_hit_ratios; @@ -619,13 +672,13 @@ struct BenchmarkSetup { uint32_t default_values_per_document; double filter_crossover_factor; BenchmarkSetup(uint32_t num_docs_in, - const std::vector<Config>& attr_cfgs_in, + const std::vector<FieldConfig>& field_cfgs_in, const std::vector<QueryOperator>& query_ops_in, const std::vector<bool>& strictness_in, const std::vector<double>& op_hit_ratios_in, const std::vector<uint32_t>& child_counts_in) : num_docs(num_docs_in), - attr_cfgs(attr_cfgs_in), + field_cfgs(field_cfgs_in), query_ops(query_ops_in), strictness(strictness_in), op_hit_ratios(op_hit_ratios_in), @@ -636,11 +689,11 @@ struct BenchmarkSetup { filter_crossover_factor(1.0) {} BenchmarkSetup(uint32_t num_docs_in, - const std::vector<Config>& attr_cfgs_in, + const std::vector<FieldConfig>& field_cfgs_in, const std::vector<QueryOperator>& query_ops_in, const std::vector<bool>& strictness_in, const std::vector<double>& op_hit_ratios_in) - : BenchmarkSetup(num_docs_in, attr_cfgs_in, query_ops_in, strictness_in, op_hit_ratios_in, {1}) + : BenchmarkSetup(num_docs_in, field_cfgs_in, query_ops_in, strictness_in, op_hit_ratios_in, {1}) {} BenchmarkCaseSetup make_case_setup(const BenchmarkCase& bcase) const { BenchmarkCaseSetup res(num_docs, bcase, op_hit_ratios, child_counts); @@ -685,10 +738,10 @@ run_benchmark_case(const BenchmarkCaseSetup& setup) HitSpecs hit_specs(55555); hit_specs.add(setup.default_values_per_document, setup.num_docs); auto terms = hit_specs.add(children, hits_per_term); - auto attr_ctx = make_attribute_context(setup.bcase.attr_cfg, setup.num_docs, hit_specs); + auto searchable = make_searchable(setup.bcase.field_cfg, setup.num_docs, hit_specs); for (double filter_hit_ratio : setup.filter_hit_ratios) { if (filter_hit_ratio * setup.filter_crossover_factor <= op_hit_ratio) { - auto res = run_benchmark(*attr_ctx, setup.bcase.query_op, terms, setup.num_docs + 1, + auto res = run_benchmark(*searchable, setup.bcase.query_op, terms, setup.num_docs + 1, setup.bcase.strict_context, setup.bcase.force_strict, filter_hit_ratio); print_result(res, terms, op_hit_ratio, filter_hit_ratio, setup.num_docs); result.add(res); @@ -704,10 +757,10 @@ void run_benchmarks(const BenchmarkSetup& setup) { BenchmarkSummary summary; - for (const auto& attr_cfg : setup.attr_cfgs) { + for (const auto& field_cfg : setup.field_cfgs) { for (auto query_op : setup.query_ops) { for (bool strict : setup.strictness) { - BenchmarkCase bcase(attr_cfg, query_op, strict); + BenchmarkCase bcase(field_cfg, query_op, strict); auto case_setup = setup.make_case_setup(bcase); auto results = run_benchmark_case(case_setup); summary.add(bcase, results); @@ -718,34 +771,50 @@ run_benchmarks(const BenchmarkSetup& setup) print_summary(summary); } -Config -make_config(BasicType basic_type, CollectionType col_type, bool fast_search) +FieldConfig +make_attr_config(BasicType basic_type, CollectionType col_type, bool fast_search) { - Config res(basic_type, col_type); - res.setFastSearch(fast_search); - return res; + Config cfg(basic_type, col_type); + cfg.setFastSearch(fast_search); + return FieldConfig(cfg); +} + +FieldConfig +make_index_config() +{ + Schema::IndexField field(field_name, search::index::schema::DataType::STRING, search::index::schema::CollectionType::SINGLE); + field.set_interleaved_features(true); + return FieldConfig(field); } constexpr uint32_t num_docs = 10'000'000; const std::vector<double> base_hit_ratios = {0.001, 0.01, 0.1, 0.5}; -const Config int32 = make_config(BasicType::INT32, CollectionType::SINGLE, false); -const Config int32_fs = make_config(BasicType::INT32, CollectionType::SINGLE, true); -const Config int32_array = make_config(BasicType::INT32, CollectionType::ARRAY, false); -const Config int32_array_fs = make_config(BasicType::INT32, CollectionType::ARRAY, true); -const Config int32_wset = make_config(BasicType::INT32, CollectionType::WSET, false); -const Config int32_wset_fs = make_config(BasicType::INT32, CollectionType::WSET, true); -const Config str = make_config(BasicType::STRING, CollectionType::SINGLE, false); -const Config str_fs = make_config(BasicType::STRING, CollectionType::SINGLE, true); -const Config str_array = make_config(BasicType::STRING, CollectionType::ARRAY, false); -const Config str_array_fs = make_config(BasicType::STRING, CollectionType::ARRAY, true); -const Config str_wset = make_config(BasicType::STRING, CollectionType::WSET, false); - +const auto int32 = make_attr_config(BasicType::INT32, CollectionType::SINGLE, false); +const auto int32_fs = make_attr_config(BasicType::INT32, CollectionType::SINGLE, true); +const auto int32_array = make_attr_config(BasicType::INT32, CollectionType::ARRAY, false); +const auto int32_array_fs = make_attr_config(BasicType::INT32, CollectionType::ARRAY, true); +const auto int32_wset = make_attr_config(BasicType::INT32, CollectionType::WSET, false); +const auto int32_wset_fs = make_attr_config(BasicType::INT32, CollectionType::WSET, true); +const auto str = make_attr_config(BasicType::STRING, CollectionType::SINGLE, false); +const auto str_fs = make_attr_config(BasicType::STRING, CollectionType::SINGLE, true); +const auto str_array = make_attr_config(BasicType::STRING, CollectionType::ARRAY, false); +const auto str_array_fs = make_attr_config(BasicType::STRING, CollectionType::ARRAY, true); +const auto str_wset = make_attr_config(BasicType::STRING, CollectionType::WSET, false); +const auto str_index = make_index_config(); + +TEST(IteratorBenchmark, analyze_term_search_in_disk_index) +{ + const std::vector<double> hit_ratios = {0.001, 0.01, 0.1, 0.5, 1.0}; + BenchmarkSetup setup(num_docs, {str_index}, {QueryOperator::Term}, {true, false}, hit_ratios); + setup.filter_hit_ratios = {0.00001, 0.00005, 0.0001, 0.0005, 0.001, 0.005, 0.01, 0.05, 0.1, 0.2, 0.5, 1.0}; + run_benchmarks(setup); +} TEST(IteratorBenchmark, analyze_term_search_in_attributes_without_fast_search) { - std::vector<Config> attr_cfgs = {int32, int32_array, int32_wset, str, str_array, str_wset}; + std::vector<FieldConfig> field_cfgs = {int32, int32_array, int32_wset, str, str_array, str_wset}; const std::vector<double> hit_ratios = {0.001, 0.01, 0.1, 0.5, 1.0}; - BenchmarkSetup setup(num_docs, attr_cfgs, {QueryOperator::Term}, {true, false}, hit_ratios); + BenchmarkSetup setup(num_docs, field_cfgs, {QueryOperator::Term}, {true, false}, hit_ratios); setup.default_values_per_document = 1; setup.filter_hit_ratios = {0.00001, 0.00005, 0.0001, 0.0005, 0.001, 0.005, 0.01, 0.05, 0.1, 0.2, 0.5, 1.0}; run_benchmarks(setup); @@ -753,9 +822,9 @@ TEST(IteratorBenchmark, analyze_term_search_in_attributes_without_fast_search) TEST(IteratorBenchmark, analyze_term_search_in_attributes_with_fast_search) { - std::vector<Config> attr_cfgs = {int32_fs, int32_array_fs, str_fs, str_array_fs}; + std::vector<FieldConfig> field_cfgs = {int32_fs, int32_array_fs, str_fs, str_array_fs}; const std::vector<double> hit_ratios = {0.001, 0.01, 0.1, 0.5, 1.0}; - BenchmarkSetup setup(num_docs, attr_cfgs, {QueryOperator::Term}, {true, false}, hit_ratios); + BenchmarkSetup setup(num_docs, field_cfgs, {QueryOperator::Term}, {true, false}, hit_ratios); setup.filter_hit_ratios = {0.00001, 0.00005, 0.0001, 0.0005, 0.001, 0.005, 0.01, 0.05, 0.1, 0.2, 0.5, 1.0}; run_benchmarks(setup); } @@ -763,9 +832,9 @@ TEST(IteratorBenchmark, analyze_term_search_in_attributes_with_fast_search) TEST(IteratorBenchmark, analyze_term_search_in_attributes_combined) { // Note: all fast-search attributes has similar performance, so only needed to include one. - std::vector<Config> attr_cfgs = {int32_fs, int32, int32_array, int32_wset, str, str_array, str_wset}; + std::vector<FieldConfig> field_cfgs = {int32_fs, int32, int32_array, int32_wset, str, str_array, str_wset}; const std::vector<double> hit_ratios = {0.001, 0.01, 0.1, 0.5, 1.0}; - BenchmarkSetup setup(num_docs, attr_cfgs, {QueryOperator::Term}, {true, false}, hit_ratios); + BenchmarkSetup setup(num_docs, field_cfgs, {QueryOperator::Term}, {true, false}, hit_ratios); setup.default_values_per_document = 1; setup.filter_hit_ratios = {0.00001, 0.00005, 0.0001, 0.0005, 0.001, 0.005, 0.01, 0.05, 0.1, 0.2, 0.5, 1.0}; setup.filter_crossover_factor = 1.0; @@ -774,10 +843,10 @@ TEST(IteratorBenchmark, analyze_term_search_in_attributes_combined) TEST(IteratorBenchmark, analyze_complex_leaf_operators) { - std::vector<Config> attr_cfgs = {int32_array_fs}; + std::vector<FieldConfig> field_cfgs = {int32_array_fs}; std::vector<QueryOperator> query_ops = {QueryOperator::In, QueryOperator::DotProduct}; const std::vector<double> hit_ratios = {0.001, 0.01, 0.1, 0.2, 0.4, 0.6, 0.8}; - BenchmarkSetup setup(num_docs, attr_cfgs, query_ops, {true, false}, hit_ratios, {1, 2, 10, 100}); + BenchmarkSetup setup(num_docs, field_cfgs, query_ops, {true, false}, hit_ratios, {1, 2, 10, 100}); run_benchmarks(setup); } diff --git a/searchlib/src/tests/queryeval/monitoring_search_iterator/monitoring_search_iterator_test.cpp b/searchlib/src/tests/queryeval/monitoring_search_iterator/monitoring_search_iterator_test.cpp index c20c7091355..f6f0d1557ab 100644 --- a/searchlib/src/tests/queryeval/monitoring_search_iterator/monitoring_search_iterator_test.cpp +++ b/searchlib/src/tests/queryeval/monitoring_search_iterator/monitoring_search_iterator_test.cpp @@ -47,8 +47,11 @@ struct SimpleFixture { _res.search(_itr); } + ~SimpleFixture(); }; +SimpleFixture::~SimpleFixture() = default; + struct AdvancedFixture { MonitoringSearchIterator _itr; diff --git a/searchlib/src/vespa/searchlib/predicate/document_features_store.cpp b/searchlib/src/vespa/searchlib/predicate/document_features_store.cpp index 3237dc84fc7..e267bf35403 100644 --- a/searchlib/src/vespa/searchlib/predicate/document_features_store.cpp +++ b/searchlib/src/vespa/searchlib/predicate/document_features_store.cpp @@ -198,7 +198,7 @@ DocumentFeaturesStore::insert(const PredicateTreeAnnotations &annotations, uint3 ref = _word_store.addWord(word); _word_index.insert(ref, BTreeNoLeafData(), cmp); } - ranges.emplace_back(ref, range.from, range.to); + ranges.push_back({ref, range.from, range.to}); } cur_refs._ranges = _ranges.add(ranges); if (old_ranges_ref.valid()) { diff --git a/searchlib/src/vespa/searchlib/queryeval/blueprint.cpp b/searchlib/src/vespa/searchlib/queryeval/blueprint.cpp index 15eb4c0b4fb..5f3cf0567bc 100644 --- a/searchlib/src/vespa/searchlib/queryeval/blueprint.cpp +++ b/searchlib/src/vespa/searchlib/queryeval/blueprint.cpp @@ -121,7 +121,6 @@ Blueprint::Blueprint() noexcept _flow_stats(0.0, 0.0, 0.0), _sourceId(0xffffffff), _docid_limit(0), - _force_strict(false), _frozen(false) { } diff --git a/searchlib/src/vespa/searchlib/queryeval/blueprint.h b/searchlib/src/vespa/searchlib/queryeval/blueprint.h index b19ae699fdc..b2edfb8a3ba 100644 --- a/searchlib/src/vespa/searchlib/queryeval/blueprint.h +++ b/searchlib/src/vespa/searchlib/queryeval/blueprint.h @@ -205,7 +205,6 @@ private: FlowStats _flow_stats; uint32_t _sourceId; uint32_t _docid_limit; - bool _force_strict; bool _frozen; protected: diff --git a/searchlib/src/vespa/searchlib/queryeval/flow.h b/searchlib/src/vespa/searchlib/queryeval/flow.h index 785a4c5e63c..ba0235991a8 100644 --- a/searchlib/src/vespa/searchlib/queryeval/flow.h +++ b/searchlib/src/vespa/searchlib/queryeval/flow.h @@ -391,7 +391,7 @@ private: template <typename FLOW> struct type_tag{}; template <typename FLOW> AnyFlow(InFlow in_flow, type_tag<FLOW>) noexcept { using stored_type = Wrapper<FLOW>; - static_assert(alignof(stored_type) <= alignof(_space)); + static_assert(alignof(stored_type) <= 8); static_assert(sizeof(stored_type) <= sizeof(_space)); API *upcasted = ::new (static_cast<void*>(_space)) stored_type(in_flow); (void) upcasted; diff --git a/vespaclient-java/src/main/java/com/yahoo/vespa/feed/perf/FeederParams.java b/vespaclient-java/src/main/java/com/yahoo/vespa/feed/perf/FeederParams.java index 21f476c7f94..2654e316c3e 100644 --- a/vespaclient-java/src/main/java/com/yahoo/vespa/feed/perf/FeederParams.java +++ b/vespaclient-java/src/main/java/com/yahoo/vespa/feed/perf/FeederParams.java @@ -8,7 +8,6 @@ import org.apache.commons.cli.Options; import org.apache.commons.cli.ParseException; import java.io.BufferedInputStream; -import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; @@ -151,36 +150,36 @@ class FeederParams { CommandLine cmd = new DefaultParser().parse(opts, args); if (cmd.hasOption('n')) { - numDispatchThreads = Integer.valueOf(cmd.getOptionValue('n').trim()); + numDispatchThreads = Integer.parseInt(cmd.getOptionValue('n').trim()); } if (cmd.hasOption('m')) { - maxPending = Integer.valueOf(cmd.getOptionValue('m').trim()); + maxPending = Integer.parseInt(cmd.getOptionValue('m').trim()); } if (cmd.hasOption('c')) { - numConnectionsPerTarget = Integer.valueOf(cmd.getOptionValue('c').trim()); + numConnectionsPerTarget = Integer.parseInt(cmd.getOptionValue('c').trim()); } if (cmd.hasOption("wi")) { - windowIncrementSize = Integer.valueOf(cmd.getOptionValue("wi").trim()); + windowIncrementSize = Integer.parseInt(cmd.getOptionValue("wi").trim()); } if (cmd.hasOption("wd")) { - windowDecrementFactor = Double.valueOf(cmd.getOptionValue("wd").trim()); + windowDecrementFactor = Double.parseDouble(cmd.getOptionValue("wd").trim()); } if (cmd.hasOption("wb")) { - windowSizeBackOff = Double.valueOf(cmd.getOptionValue("wb").trim()); + windowSizeBackOff = Double.parseDouble(cmd.getOptionValue("wb").trim()); } if (cmd.hasOption("wr")) { - windowResizeRate = Double.valueOf(cmd.getOptionValue("wr").trim()); + windowResizeRate = Double.parseDouble(cmd.getOptionValue("wr").trim()); } if (cmd.hasOption('r')) { route = Route.parse(cmd.getOptionValue('r').trim()); } if (cmd.hasOption("t")) { - timeout = Double.valueOf(cmd.getOptionValue("t").trim()); + timeout = Double.parseDouble(cmd.getOptionValue("t").trim()); } benchmarkMode = cmd.hasOption('b'); if (cmd.hasOption('o')) { String fileName = cmd.getOptionValue('o').trim(); - dumpStream = new FileOutputStream(new File(fileName)); + dumpStream = new FileOutputStream(fileName); if (fileName.endsWith(".vespa")) { dumpFormat = DumpFormat.VESPA; } @@ -189,13 +188,13 @@ class FeederParams { setSerialTransfer(); } if (cmd.hasOption('l')) { - numMessagesToSend = Long.valueOf(cmd.getOptionValue('l').trim()); + numMessagesToSend = Long.parseLong(cmd.getOptionValue('l').trim()); } if ( !cmd.getArgList().isEmpty()) { inputStreams.clear(); for (String fileName : cmd.getArgList()) { - inputStreams.add(new BufferedInputStream(new FileInputStream(new File(fileName)), BUFFER_SIZE)); + inputStreams.add(new BufferedInputStream(new FileInputStream(fileName), BUFFER_SIZE)); } } |