Commit Graph
7397 Commits
Author SHA1 Message Date
Jonathan Shook 66fc07c15f docs(stdout): correct the demo workload invocation
The documented 'nb5 run vectordata_demo' does not work: run is itself a
command, so the workload name is parsed as a second one and resolves to
no service. The scenario form drops the run — 'nb5 vectordata_demo
dataset=<name>:<profile>' — and the long form names the full bundled
path, 'nb5 run workload=activities/examples/vectordata_demo.yaml'.
Both are now shown in the workload and the guide.

Verified against the 5.25.15-release binary: the workload is bundled
and listed, both corrected forms load it, and a real dataset run meters
the download and reads base, query, and neighbor records.
2026-09-02 01:04:19 +00:00
Jonathan Shook 0b9e16ee20 feat(stdout): bundle the vectordata demo as a runnable workload
The demo only worked from a checkout. It now ships in the stdout
adapter's activities, so 'nb5 run vectordata_demo dataset=<name>:<profile>'
works from the distribution alone, with --cat and --copy for reading or
editing it.

Every catalog-touching expression is guarded on the dataset parameter
being given. Bundled workloads are parsed through the expression
pipeline by --list-workloads and --list-scenarios, so a workload that
opened a catalog unconditionally would fail listing for every user
without one configured; with no dataset named it now renders usage text
and touches nothing.
2026-09-01 23:23:47 +00:00
Jonathan Shook 0edf2abd5a version bump 2026-09-01 22:12:13 +00:00
Jonathan Shook acc1034d14 docs(vectordata): runnable demo workload with a live download meter
vectordata_demo.yaml needs no database — the stdout driver exercises
dataset access alone. It prints what it derived from the dataset,
fetches a record range with the meter running, and reads records back,
so a download can be watched from one command line. prefetch=false
with mode=background moves the fetch off the load path and overlaps it
with the cycles instead.

Binding meter labels now carry the profile, matching the expr form, so
both name the same thing in a run that uses both.
2026-09-01 21:36:06 +00:00
Jonathan Shook 9085bf06ad feat(virtdata): prefetch progress, profile warm-up, and cycle ranges from exprs
A prefetch driven from a workload was silent and awkward to aim:

- every expr prefetch now reports through the same meter the bindings
  use, so a download started from a workload announces its cost, emits
  progress while the bytes move, and confirms completion
- prefetchProfile(spec) warms every facet the profile declares, each to
  the window it declares, in one call — the form that cannot
  accidentally pull a whole shared base file, since an empty window
  means the entire facet by design
- prefetchCycles(spec, facet, start, end) takes the ordinal range
  directly, which is how an activity already describes its work

The docs record the three things that bite: expressions evaluate at
load time rather than when a tagged block runs, an empty window is a
request for everything, and assignment sigils render their value where
they are written.
2026-09-01 18:51:09 +00:00
Jonathan Shook 20eb4f3c89 feat(cqld4): dataset-derived vector search workload
cql_vector_dataset.yaml takes one dataset input —
dataset='<dataset>:<profile>' — and derives everything dataset-shaped
through the expr system at load time: the schema's vector dimensions
and similarity function, rampup cycles from the base count, search
cycles from the query count, and the ANN LIMIT and recall k from the
ground-truth width. Bindings read through the vectordata mappers, so
the profile's base window warms eagerly with download progress before
the first cycle; the plan's cost is echoed into the rendered
description. Operational knobs (keyspace, table, rf, cl) stay
conventional TEMPLATE parameters.

Verified through the real load-path transforms (TemplateRewriter +
ExprPreprocessor) against a published remote dataset: dimensions 384,
train 100k, test 10k, k 100, dot_product, all spliced correctly.
2026-08-27 18:14:50 +00:00
Jonathan Shook b22741ccc9 feat(vectordata): expose dataset attributes on the view
The manifest's attributes block — distance_function and whatever else
the publisher recorded — was parsed and discarded; the Rust view
carries it for metadata accessors. TestDataView.attributes() returns
it on every profile view, which is how a workload derives
configuration from the dataset instead of restating it.
2026-08-27 18:14:50 +00:00
Jonathan Shook 85f936acac update test script 5.25.14-release 5.25.14-preview 2026-08-26 21:02:03 +00:00
Jonathan Shook ad58eb804c fix(vectordata): map ivec windows at the uniform header stride
In this catalog format, ivec/ivecs records are length-qualified but
fixed throughout — ground-truth neighbor files — so a window maps at
the header stride like any other xvec, and only the *vvec extensions
carry variable-length records. Classifying ivec as variable sent
neighbor-facet windows through the offset-index path, and a remote
ground-truth file publishes no sidecar, so the window degraded and the
consent gate refused an eager warm-up of three records.

ElementType now recognizes the *vvec extension families, and the
variable-length test fixtures use them instead of overloading .ivecs.
Verified against the real remote dataset: a neighbor window resolves
to exactly its records' bytes and the reader decodes them.

The Rust source's is_vvec_ext still classifies ivec as variable; noted
in RUST_COMPATIBILITY.md for upstream reconciliation.
2026-08-26 20:57:07 +00:00
Jonathan Shook 683c2d5849 docs(vectordata): remote access guide with a standalone smoke-test script
devdocs/vectordata/ holds the guide and remote_smoke_test.sh, which
checks base, query, and neighbor-index facets of one profile by
eagerly warming exactly the records each check reads — with the plan
announced and download progress on stderr — aborting on the first
failure. VECTORDATA_CATALOG and DATASET are required, DATASET as
'<dataset>' or '<dataset>:<profile>' with the profile defaulting to
'default', and NB selects how nosqlbench is invoked. The guide keeps
the Facet, windowed-background, and whole-profile warm-up forms as
separate examples.
2026-08-26 20:47:21 +00:00
Jonathan Shook 69510b3062 feat(virtdata): emit download progress while binding warm-ups fetch
Eager and background prefetches announce the plan's cost before any
bytes move, emit rate-limited progress on stderr while the download
runs — a meter, not a log event, so it shows regardless of logging
configuration — and confirm completion. Silent when there is nothing
to fetch, so local and already-warm facets add no noise.
2026-08-26 20:47:21 +00:00
Jonathan Shook 5b992e89df fix(vectordata): resolve sized profiles against the default profile
Published sized profiles name only what differs: a windowed base
override and their own neighbor facets, with no extends key. Facets a
profile does not declare — query vectors included — resolve from
'default' implicitly, matching the expanded layout the publishing
toolchain emits into catalogs. Java honored only explicit extends, so
a released dataset failed with 'Profile 100k lacks facet
query_vectors' while its own catalog showed the facet plainly.

The window: key also accepts the serializer's structured form (a list
of {min_incl, max_excl} maps) and bare counts; dropping an
unrecognized form silently would read the whole facet where a window
was declared, so it fails instead.

Verified against the real remote dataset: profile 100k resolves all
four facets, reads query vectors, and clips the base to its window.
2026-08-26 20:30:19 +00:00
Jonathan Shook 33cbde93fb test(vectordata): isolate unit tests from ambient vectordata settings
Every unit test now builds explicit VectorDataSettings with a temporary
cache directory instead of reaching VectorDataSettings.defaults(). The
defaults path deliberately refuses to auto-configure a cache when the
largest writable mount is outside the home filesystem — exactly the
shape of a GitHub runner — so any test depending on it fails there by
design. This broke the 5.25.14-release build, the first CI run to
execute these suites after they were tagged into the unit group.
2026-08-26 19:50:45 +00:00
Jonathan Shook cdf750344f docs(vectordata): add a quick remote smoke-test stub
Environment-variable catalog selection with an isolated VECTORDATA_HOME
and three stdout-driver one-liners: profile-window warm-up, a
caller-named ordinal range in the background, and demand-paged access.
2026-08-26 19:28:36 +00:00
Jonathan Shook 7b3f802135 docs(vectordata): how to test remote dataset access
Java API, expr, and inline-op examples for remote reads and for
precache/prefetch in both profile-window and caller-named ordinal-range
forms, plus the verification patterns the integration tests use.
2026-08-26 19:07:38 +00:00
Jonathan Shook 70ff9ac23d bump minor version 2026-08-26 18:45:30 +00:00
Jonathan Shook 81ccb847b4 feat(virtdata): expr functions for facets, windows, and prefetch
metadataResults, facet, windowedFacet, and variableFacet round out
facet access from expressions; prefetchPlan prices a caller-named
record window without fetching, prefetch blocks until it is resident,
and prefetchBackground returns the running handle. Unresolvable
windows are refused rather than quietly fetching the whole facet.
2026-08-26 18:36:01 +00:00
Jonathan Shook 4045517879 feat(virtdata): facet-addressed vector bindings with windows and prefetch modes
The standard mappers (BaseVectors, QueryVectors, NeighborIndices,
NeighborDistances, new MetadataResults) address facets by canonical
name, so Rust-published datasets resolve; each takes an optional record
window — clipping the reader and warming exactly those bytes — and a
prefetch mode of eager, background, or none. Facet reads any named
facet including scalars and custom facets; VariableFacet reads vvec
records, warming a window through the offset index while indices stay
absolute. A binding window composes with a profile-declared window by
shifting to absolute records for the fetch.
2026-08-26 18:36:01 +00:00
Jonathan Shook fdfbbdadf2 feat(vectordata): prefetch caller-named windows with planning, consent, and background fetch
A profile window names a range someone wants repeatedly; it is not a
fence. TestDataView gains prefetchPlan, prefetch, and
prefetchInBackground, taking a DSWindow in record coordinates for any
facet:

- per-format mapping: xvec by header stride, scalars at the element
  stride, vvec through the offset index — loaded whole, cached on the
  view's facet handle, and never rebuilt by a remote walk while
  planning; locally walked indexes persist atomically beside the data
- plans price chunk-level residency, coalesce ranges at chunk
  adjacency, and separate what was asked from what will be issued
- an unresolvable window degrades to a whole-facet fetch that
  WholeFacetFallback refuses unless the caller consents; an empty
  window is a request for the whole facet, never a degrade
- background prefetch exposes a handle with plan, counters,
  range-granular cancel, and a join that surfaces worker failures
- manifests accept the window-suffix sugar on source strings and key
  resolved facets canonically, so Rust-published dataset.yaml files
  resolve through the standard accessors

Behavior tracks vectordata-rs at 96d787722b39, per RUST_COMPATIBILITY.md.
2026-08-26 18:35:51 +00:00
Jonathan Shook b578f97855 fix(vectordata): read both IDXFOR sidecar layouts and clamp reader windows
Two layouts sit next to real data: N record starts (the vectordata-rs
walk rebuild) and N+1 entries ending in a payload-size sentinel (what
nbdatatools publishes). No record can start at the payload size, so the
reader detects the sentinel and both layouts describe N records; a
Rust-walked local dataset is no longer unreadable here. Sidecar probing
is size-directed — the width the payload calls for, first — and reader
windows parse the DSWindow grammar, apply the first interval, and clamp
both bounds to the data instead of throwing.
2026-08-26 18:35:51 +00:00
Jonathan Shook b30d1d074e feat(vectordata): chunk-range residency and range prebuffer on storage
RangeFill reports what fetching a byte range would cost at chunk
granularity — resident chunks are free, and alignment overfetch is
visible before the fetch. prebufferRange drives only the covering
chunks; CacheStats carries the transfer-chunk size so consumers can map
byte offsets to chunk ordinals; rangeCapable distinguishes sources that
cannot service partial fetches.
2026-08-26 18:35:36 +00:00
Jonathan Shook 2af9dec9cc feat(vectordata): add the canonical facet-name alias table
Ports the StandardFacet canonical/alias table: base_vectors and kin are
the dataset.yaml keys, with base, train, query, gt, ground_truth, the
metadata shorthands, and the prefiltered/postfiltered families accepted
as aliases. The test pins the whole table so drift from the reference
is a deliberate change, not an accident.
2026-08-26 18:35:36 +00:00
Jonathan Shook e0e9cdeae0 feat(vectordata): port the DSWindow record-window grammar
The canonical window spelling from the vectordata-rs dataset-source
parser: half-open intervals, open ends, bracket bound adjustment,
count/size suffixes with compound forms, and comma-separated interval
lists. Intervals that select no records are rejected at parse, naming
the comma-for-'..' mistake.
2026-08-26 18:35:36 +00:00
Jonathan Shook 625941cd42 test(vectordata): tag unit suites for the CI groups filter
Surefire runs only tests tagged 'unit' (nb.junit.tags), so the module's
untagged suites were invisible to 'mvn -B test' in CI. Tag every unit
test class; the *IntegrationTest suites already run under failsafe.
2026-08-26 18:35:23 +00:00
J S 4fbe0d57ff Merge pull request #2299 from nosqlbench/rehome_vectordata
Rehome vectordata
5.25.13-preview 5.25.13-release
2026-08-24 17:47:31 -05:00
J S 8530674e76 Merge branch 'main' into rehome_vectordata 2026-08-24 16:55:51 -05:00
Jonathan Shook eff569c74d fix(virtdata): isolate vectordata mapper cache settings 2026-08-24 21:32:55 +00:00
Jonathan Shook 45c8a3ca56 chore(vectordata): remove stale planning and fixture provenance 2026-08-24 21:25:30 +00:00
Jonathan Shook 2591c75d41 docs(vectordata): reconcile porting plan status 2026-08-24 20:32:05 +00:00
Jonathan Shook 9ce73b9069 refactor(virtdata): migrate vector readers to nb-vectordata 2026-08-24 20:12:56 +00:00
J S f0a3315226 Merge pull request #2298 from stonewhitener/sched_rebase
Fix metrics scheduler lifecycle across rebases
2026-08-24 15:12:37 -05:00
Jonathan Shook cbff0ee9f5 feat(vectordata): add Rust-compatible Java dataset access 2026-08-24 20:11:47 +00:00
Youki Shiraishi 654574784c Fix metrics scheduler lifecycle across rebases 2026-08-21 16:50:06 +09:00
J S 4a5e567718 Merge pull request #2292 from nosqlbench/dependabot/maven/nb-adapters/adapter-aws-opensearch/org.apache.httpcomponents.client5-httpclient5-5.6.3
build(deps): bump org.apache.httpcomponents.client5:httpclient5 from 5.2.1 to 5.6.3 in /nb-adapters/adapter-aws-opensearch
2026-08-20 16:12:02 -05:00
J S 7f1017f5a5 Merge branch 'main' into dependabot/maven/nb-adapters/adapter-aws-opensearch/org.apache.httpcomponents.client5-httpclient5-5.6.3 2026-08-20 16:11:40 -05:00
J S 6bc872bb05 Merge pull request #2293 from nosqlbench/dependabot/maven/nb-apis/nb-mql-api/org.apache.logging.log4j-log4j-api-2.25.5
build(deps): bump org.apache.logging.log4j:log4j-api from 2.25.2 to 2.25.5 in /nb-apis/nb-mql-api
2026-08-20 16:11:12 -05:00
J S c7d9d87f31 Merge branch 'main' into dependabot/maven/nb-apis/nb-mql-api/org.apache.logging.log4j-log4j-api-2.25.5 2026-08-20 16:11:00 -05:00
J S 5aa04a7294 Merge pull request #2296 from nosqlbench/dependabot/maven/nb-adapters/adapter-amqp/com.rabbitmq-amqp-client-5.33.1
build(deps): bump com.rabbitmq:amqp-client from 5.18.0 to 5.33.1 in /nb-adapters/adapter-amqp
2026-08-20 16:10:32 -05:00
J S 43644643b9 Merge branch 'main' into dependabot/maven/nb-adapters/adapter-amqp/com.rabbitmq-amqp-client-5.33.1 2026-08-20 15:27:32 -05:00
J S fa32acbf7f Merge pull request #2297 from stonewhitener/terminate
Flush pending metric snapshots at activity completion
2026-08-20 20:27:15 +00:00
J S 62a943dd86 Merge branch 'main' into terminate 2026-08-20 15:26:37 -05:00
Jonathan Shook da28736815 version update for dependencies 2026-08-20 20:26:15 +00:00
J S 449b0ef9c1 Merge pull request #2288 from nosqlbench/dependabot/github_actions/softprops/action-gh-release-3.0.2
build(deps): bump softprops/action-gh-release from 3.0.1 to 3.0.2
2026-08-20 15:22:32 -05:00
J S 7c2c210216 Merge branch 'main' into dependabot/github_actions/softprops/action-gh-release-3.0.2 2026-08-20 14:40:58 -05:00
J S 3873d542b4 Merge pull request #2294 from nosqlbench/dependabot/maven/mvn-defaults/org.apache.logging.log4j-log4j-api-2.25.5
build(deps): bump org.apache.logging.log4j:log4j-api from 2.25.3 to 2.25.5 in /mvn-defaults
2026-08-20 14:40:42 -05:00
J S 951418211d Merge branch 'main' into dependabot/maven/mvn-defaults/org.apache.logging.log4j-log4j-api-2.25.5 2026-08-20 14:15:43 -05:00
J S ad7d4f89f6 Merge pull request #2287 from nosqlbench/dependabot/github_actions/actions/setup-java-5.6.0
build(deps): bump actions/setup-java from 5 to 5.6.0
2026-08-20 14:07:04 -05:00
J S 3a19573738 Merge branch 'main' into dependabot/github_actions/actions/setup-java-5.6.0 2026-08-20 12:54:37 -05:00
Youki Shiraishi ecf34b56b2 Flush pending metric snapshots at activity completion 2026-08-19 17:32:22 +09:00
dependabot[bot] d8608d1184 build(deps): bump com.rabbitmq:amqp-client in /nb-adapters/adapter-amqp
Bumps [com.rabbitmq:amqp-client](https://github.com/rabbitmq/rabbitmq-java-client) from 5.18.0 to 5.33.1.
- [Release notes](https://github.com/rabbitmq/rabbitmq-java-client/releases)
- [Commits](https://github.com/rabbitmq/rabbitmq-java-client/compare/v5.18.0...v5.33.1)

---
updated-dependencies:
- dependency-name: com.rabbitmq:amqp-client
  dependency-version: 5.33.1
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-08-18 16:37:14 +00:00