// deleteIndexMutationsWithReversedColumns deletes index mutations with a // different mutationID than the schema changer and a reference to one of the // reversed columns. func (sc *SchemaChanger) deleteIndexMutationsWithReversedColumns( desc *sqlbase.TableDescriptor, columns map[string]struct{}, ) { newMutations := make([]sqlbase.DescriptorMutation, 0, len(desc.Mutations)) for _, mutation := range desc.Mutations { if mutation.MutationID != sc.mutationID { if idx := mutation.GetIndex(); idx != nil { deleteMutation := false for _, name := range idx.ColumnNames { if _, ok := columns[name]; ok { // Such an index mutation has to be with direction ADD and // in the DELETE_ONLY state. Live indexes referencing live // columns cannot be deleted and thus never have direction // DROP. All mutations with the ADD direction start off in // the DELETE_ONLY state. if mutation.Direction != sqlbase.DescriptorMutation_ADD || mutation.State != sqlbase.DescriptorMutation_DELETE_ONLY { panic(fmt.Sprintf("mutation in bad state: %+v", mutation)) } log.Warningf(context.TODO(), "delete schema change mutation: %+v", mutation) deleteMutation = true break } } if deleteMutation { continue } } } newMutations = append(newMutations, mutation) } // Reset mutations. desc.Mutations = newMutations }