diff --git a/holder.go b/holder.go index 341120b26..78a96aba5 100644 --- a/holder.go +++ b/holder.go @@ -1874,82 +1874,6 @@ func (s *holderSyncer) readBothTranslateReader(rd TranslateEntryReader, snap *to } } -// holderCleaner removes fragments and data files that are no longer used. -type holderCleaner struct { - Node *topology.Node - - Holder *Holder - Cluster *cluster - - // Signals that the sync should stop. - Closing <-chan struct{} -} - -// TODO: this is here to satisfy the linter since holderCleaner was removed from -// the gossip implementation of removeNode. But presumably we will use it once -// we have ported over the etcd implementation. -var _ holderCleaner - -// IsClosing returns true if the cleaner has been marked to close. -func (c *holderCleaner) IsClosing() bool { - select { - case <-c.Closing: - return true - default: - return false - } -} - -// CleanHolder compares the holder with the cluster state and removes -// any unnecessary fragments and files. -func (c *holderCleaner) CleanHolder() error { - // Create a snapshot of the cluster to use for node/partition calculations. - snap := topology.NewClusterSnapshot(c.Cluster.noder, c.Cluster.Hasher, c.Cluster.ReplicaN) - - for _, index := range c.Holder.Indexes() { - // Verify cleaner has not closed. - if c.IsClosing() { - return nil - } - - // Get the fragments that node is responsible for (based on hash(index, node)). - containedShards := snap.ContainsShards(index.Name(), index.AvailableShards(includeRemote), c.Node) - - // Get the fragments registered in memory. - for _, field := range index.Fields() { - // deletedShards is used to track which shards for the field - // were deleted. Any shards that get deleted from this node - // get added to remoteAvailableShards. This is done because - // the CleanHolder process is cleaning up shards which got - // moved to other nodes. Because those shards still exist - // (just no longer on this particular node), this node still - // needs to consider each of them as an available shard in - // the cluster. - var deletedShards []uint64 - for _, view := range field.views() { - for _, fragment := range view.allFragments() { - fragShard := fragment.shard - // Ignore fragments that should be present. - if uint64InSlice(fragShard, containedShards) { - continue - } - // Delete fragment. - if err := view.deleteFragment(fragShard); err != nil { - return errors.Wrap(err, "deleting fragment") - } - deletedShards = append(deletedShards, fragShard) - } - } - if len(deletedShards) > 0 { - if err := field.AddRemoteAvailableShards(roaring.NewBitmap(deletedShards...)); err != nil { - return errors.Wrap(err, "adding remote available shards") - } - } - } - } - return nil -} - func uint64InSlice(i uint64, s []uint64) bool { for _, o := range s { if i == o { diff --git a/http/handler.go b/http/handler.go index 309bf1cde..8e74e50eb 100644 --- a/http/handler.go +++ b/http/handler.go @@ -2627,7 +2627,8 @@ func (h *Handler) handleFindIndexKeys(w http.ResponseWriter, r *http.Request) { if r.Header.Get("Content-Type") != "application/json" { http.Error(w, "Unsupported media type", http.StatusUnsupportedMediaType) return - } else if !validHeaderAcceptJSON(r.Header) { + } + if !validHeaderAcceptJSON(r.Header) { http.Error(w, "Not acceptable", http.StatusNotAcceptable) return } @@ -2669,7 +2670,8 @@ func (h *Handler) handleFindFieldKeys(w http.ResponseWriter, r *http.Request) { if r.Header.Get("Content-Type") != "application/json" { http.Error(w, "Unsupported media type", http.StatusUnsupportedMediaType) return - } else if !validHeaderAcceptJSON(r.Header) { + } + if !validHeaderAcceptJSON(r.Header) { http.Error(w, "Not acceptable", http.StatusNotAcceptable) return } @@ -2717,7 +2719,8 @@ func (h *Handler) handleCreateIndexKeys(w http.ResponseWriter, r *http.Request) if r.Header.Get("Content-Type") != "application/json" { http.Error(w, "Unsupported media type", http.StatusUnsupportedMediaType) return - } else if !validHeaderAcceptJSON(r.Header) { + } + if !validHeaderAcceptJSON(r.Header) { http.Error(w, "Not acceptable", http.StatusNotAcceptable) return } @@ -2759,7 +2762,8 @@ func (h *Handler) handleCreateFieldKeys(w http.ResponseWriter, r *http.Request) if r.Header.Get("Content-Type") != "application/json" { http.Error(w, "Unsupported media type", http.StatusUnsupportedMediaType) return - } else if !validHeaderAcceptJSON(r.Header) { + } + if !validHeaderAcceptJSON(r.Header) { http.Error(w, "Not acceptable", http.StatusNotAcceptable) return } @@ -2807,7 +2811,8 @@ func (h *Handler) handleReserveIDs(w http.ResponseWriter, r *http.Request) { if r.Header.Get("Content-Type") != "application/json" { http.Error(w, "Unsupported media type", http.StatusUnsupportedMediaType) return - } else if !validHeaderAcceptJSON(r.Header) { + } + if !validHeaderAcceptJSON(r.Header) { http.Error(w, "Not acceptable", http.StatusNotAcceptable) return } @@ -2891,6 +2896,7 @@ func (h *Handler) handleCommitIDs(w http.ResponseWriter, r *http.Request) { func (h *Handler) handleResetIDAlloc(w http.ResponseWriter, r *http.Request) { if !validHeaderAcceptType(r.Header, "text", "plain") { http.Error(w, "text/plain is not an acceptable response type", http.StatusNotAcceptable) + return } indexName, ok := mux.Vars(r)["index"] if !ok {