| Commit message (Collapse) | Author | Age | Files | Lines |
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
ownership transfer
Avoids the case where different distributors can start merges with a max timestamp
that is lower than timestamps generated intra-second by other distributors used for
feed bound to the same bucket.
This is analogous to the existing "safe time period" functionality used for
handling external feed, and uses the same max clock skew config as this.
Correctness of this grace period is therefore inherently dependent on actual
cluster clock skew being less than this configured number.
Bucket activations are still allowed to take place during the grace period time
window, as these do not mutate the bucket contents and are therefore safe.
|
|
|
|
|
|
|
| |
transitions
Maintenance inhibition is already present, but it happens at a much lower level.
Add a high-level test to ensure that the wiring works as expected.
|
|\
| |
| |
| |
| | |
vespa-engine/vekterli/use-max-of-current-and-pending-distribution-bit-counts
Use max instead of min from current and pending cluster states' distribution bit counts [run-systemtest]
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
bit counts
Using min() has an unfortunate (very rare) edge case if a cluster goes _down_
in distribution bit counts (whether we really want to support this at all is
a different discussion, since it has some other unfortunate implications).
If the current state has e.g. 14 bits and the pending state has 8 bits, using 8
bits for `_distribution_bits` will trigger a `TooFewBucketBitsInUse` exception when
computing a cached ideal state for a bucket in the bucket DB. This is because the
ideal state algorithm is not defined for buckets using fewer bits than the state's
distribution bit count.
The cluster controller shall never push a cluster state with a distribution bit
count higher than the least split bucket across all nodes in the cluster, so
the cache lookup code should theoretically(tm) never be invoked with a bucket that
has fewer used bits than what's present in the pending state.
|
| | |
|
| | |
|
| | |
|
|/ |
|
|
|
|
|
|
|
| |
top-level distributor.
This replaces the previous hack (needed in legacy mode) that used
DistributorBucketSpaceRepo to achieve the same.
|
|
|
|
|
| |
Some assorted legacy bits and pieces still remain on the factory floor,
these will be cleaned up in follow-ups.
|
|
|
|
| |
be done
|
|\
| |
| |
| |
| | |
vespa-engine/vekterli/aggregate-pending-operation-stats-across-stripes
Aggregate pending operation stats across all stripes in stripe guard
|
| | |
|
|\ \
| |/
|/|
| |
| | |
vespa-engine/geirst/flip-to-new-distributor-stripe-code-path
Flip to always use the new distributor stripe code path.
|
| |
| |
| |
| | |
If the number of stripes is not configured, we tune it based on the sampled number of CPU cores.
|
|/ |
|
|
|
|
|
|
|
| |
Add a listener interface that lets the top-level distributor intercept
cluster state activations and use this for triggering the node init edge.
This happens when all stripes are paused so this is safe from data races.
Legacy code in the DistributorStripe remains for now.
|
| |
|
|\
| |
| |
| |
| | |
vespa-engine/vekterli/port-more-bucketdbupdater-tests
Port more BucketDBUpdater tests from legacy to new code path
|
| | |
|
|/ |
|
|\
| |
| |
| |
| | |
vespa-engine/vekterli/port-additional-tests-and-fix-regression
Port additional DB updater tests and fix delayed sending regression
|
| |
| |
| |
| |
| |
| |
| | |
Addresses a missing piece of functionality in the new code path where
queued bucket rechecks during a pending cluster state time window would
not be sent as expected when the pending state has been completed and
activated.
|
|\ \
| |/
|/|
| |
| | |
vespa-engine/geirst/main-distributor-thread-tick-wait-duration
Increase tick wait duration for main distributor thread when running …
|
| |
| |
| |
| |
| |
| |
| | |
multiple stripes.
This because it will no longer be running background maintenance jobs
(non-event tick will instead be used primarily for resending full bucket fetches etc).
|
|\ \
| |/
|/|
| |
| | |
vespa-engine/vekterli/port-first-batch-of-bucketdbupdater-tests-to-top-level
Port first batch of BucketDBUpdater tests from legacy to top-level
|
| | |
|
|/
|
|
| |
This ensures we can access each individual reporter, instead of just one of them.
|
| |
|
| |
|
|
|
|
|
|
|
|
|
|
|
| |
Also fix a minor regression caused by the stripe cluster state change
code path consulting a now unused part of the `StripeBucketDBUpdater`
on whether a cluster state change implies bucket ownership change.
This was used for adding a configurable safe period for client mutations
to ensure distributors can't step on each others toes. The responsibility
for telling stripes that state changes imply ownership changes has
now been moved to the top-level DB updater and happens through the
stripe guard interface instead.
|
| |
|
| |
|
| |
|
| |
|
| |
|
| |
|
| |
|
| |
|
|
|
|
|
|
|
| |
This is a subset of the legacy distributor tests, adapted to
explicitly test cross-stripe functionality. Once all relevant
tests have been ported to be cross-stripe, the legacy test
code will be removed.
|
|
|
|
| |
DistributorStripeTestUtil.
|
|
|
|
| |
DistributorTestUtil.
|
| |
|
|
|
|
|
|
|
| |
nodes (proton) to the cluster controller.
This is more generic than explicit address space values for enum store and multi value.
This is used in the cluster controller to determine whether to block external feed.
|
| |
|
|
|
|
| |
provide any more information.
|
|
|
|
| |
- Wire in configuration of number of rpc targets.
|
| |
|
| |
|