weaviate/weaviate · error
classification: put: %w
Error message
classification: put: %w
What it means
Schedule() persists the new classification job (status 'running') into the classification repository via repo.Put before triggering the async run. This error wraps that storage write failure. The classification was never started, so the caller gets an error instead of a job id they can poll.
Source
Thrown at usecases/classification/classifier.go:177
return nil, err
}
err = NewValidator(c.classGetterWithAuthzFunc(ctx, principal), params).Do()
if err != nil {
return nil, err
}
if err := c.assignNewID(¶ms); err != nil {
return nil, fmt.Errorf("classification: assign id: %w", err)
}
params.Status = models.ClassificationStatusRunning
params.Meta = &models.ClassificationMeta{
Started: strfmt.DateTime(time.Now()),
}
if err := c.repo.Put(ctx, params); err != nil {
return nil, fmt.Errorf("classification: put: %w", err)
}
// asynchronously trigger the classification
filters, err := c.extractFilters(ctx, principal, params)
if err != nil {
return nil, err
}
enterrors.GoWrapper(func() { c.run(params, filters) }, c.logger)
return ¶ms, nil
}
func (c *Classifier) extractFilters(ctx context.Context, principal *models.Principal, params models.Classification) (Filters, error) {
if params.Filters == nil {
return classificationFilters{}, nil
}
View on GitHub (pinned to 75aa4b6d11)
Solutions
- Retry the classification scheduling request once the cluster is healthy.
- Check cluster health (GET /v1/nodes) — verify all nodes are up and RAFT/consensus is stable.
- Check node disk space and storage backend health on the coordinator node.
- Increase the client request timeout so the store write is not cancelled mid-flight.
- Inspect the wrapped error to determine whether it is a timeout, consensus, or I/O failure and address accordingly.
Defensive patterns
Strategy: retry
Validate before calling
const health = await (await fetch('http://localhost:8080/v1/nodes')).json();
const allHealthy = health.nodes?.every(n => n.status === 'HEALTHY');
if (!allHealthy) throw new Error('cluster unhealthy: resolve node status before scheduling classification'); Try / catch
try {
await scheduleClassification(params);
} catch (e) {
if (String(e).includes('classification: put')) {
await sleep(backoff);
return scheduleClassification(params); // retry after cluster recovers
}
throw e;
} Prevention
- Check GET /v1/nodes for cluster health before issuing classification jobs.
- Use client timeouts generous enough to cover the store write.
- Monitor disk space and RAFT/consensus stability on coordinator nodes.
- Retry idempotently: verify via GET /v1/classifications/{id} whether the job already exists before re-scheduling.
When it happens
Trigger: The classification store write fails during POST /v1/classifications: the underlying schema/object store returns an error (cluster consensus unavailable, node unhealthy, storage I/O failure, context deadline exceeded).
Common situations: Cluster in a degraded state (leader election in progress, RAFT unavailable); node disk full; store timeouts under heavy load; the request context cancelled by an aggressive client timeout before the write completes.
Related errors
- store %s/%s: %w
- store %s/%s: %v
- load existing schema state: %w
- create bucket for class %q: %w
- store %s/%s: %w
AI-assisted analysis of weaviate/weaviate@75aa4b6d11 (2026-09-04).
Data as JSON: /api/errors/f6812af0732c8fba.
Report an issue: GitHub.