v1.2.0: skip unchanged writes, transactional schema/root counters, snapshot replay for meta:events 0-0 (drops boot republish), collect-once search driver
Build and Push Docker Image / build (push) Successful in 7m38s
Build and Push Docker Image / build (push) Successful in 7m38s
This commit is contained in:
@@ -5,38 +5,44 @@ import (
|
||||
"net/http"
|
||||
)
|
||||
|
||||
// handleSchemaGet returns the per-field schema (recomputed from the store every
|
||||
// few minutes; see schema.Indexer).
|
||||
// handleSchemaGet returns the per-field schema, folded from counters the write
|
||||
// path keeps exact (see schema.Indexer).
|
||||
func (s *Server) handleSchemaGet(w http.ResponseWriter, r *http.Request) {
|
||||
if s.schemaIndexer == nil {
|
||||
http.Error(w, "schema indexer not running", http.StatusServiceUnavailable)
|
||||
return
|
||||
}
|
||||
snap := s.schemaIndexer.Snapshot()
|
||||
snap, err := s.schemaIndexer.Snapshot(r.Context())
|
||||
if err != nil {
|
||||
http.Error(w, err.Error(), http.StatusInternalServerError)
|
||||
return
|
||||
}
|
||||
w.Header().Set("Content-Type", "application/json")
|
||||
_ = json.NewEncoder(w).Encode(snap)
|
||||
}
|
||||
|
||||
// handleSchemaRescan recomputes the schema from a full scan of the store and
|
||||
// returns it. It no longer republishes every property into meta:events — the
|
||||
// indexer reads the store itself — so a rescan floods no consumer.
|
||||
// handleSchemaRescan rebuilds the schema counters from a full read of the
|
||||
// records and returns the result. The counters are exact by construction, so
|
||||
// this is a repair tool, not routine: it runs as one write transaction, and
|
||||
// every other write waits for it (minutes on a large store).
|
||||
func (s *Server) handleSchemaRescan(w http.ResponseWriter, r *http.Request) {
|
||||
if s.schemaIndexer == nil {
|
||||
http.Error(w, "schema indexer not running", http.StatusServiceUnavailable)
|
||||
return
|
||||
}
|
||||
|
||||
snap, err := s.schemaIndexer.Rebuild(r.Context())
|
||||
if err := s.storage.RebuildCounters(); err != nil {
|
||||
http.Error(w, err.Error(), http.StatusInternalServerError)
|
||||
return
|
||||
}
|
||||
snap, err := s.schemaIndexer.Snapshot(r.Context())
|
||||
if err != nil {
|
||||
http.Error(w, err.Error(), http.StatusInternalServerError)
|
||||
return
|
||||
}
|
||||
out := *snap
|
||||
out.Source = "rescan"
|
||||
|
||||
snap.Source = "rescan"
|
||||
w.Header().Set("Content-Type", "application/json")
|
||||
_ = json.NewEncoder(w).Encode(map[string]any{
|
||||
"published_events": 0,
|
||||
"schema": &out,
|
||||
"schema": snap,
|
||||
})
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user