Ben Wilde
Ben Wilde

Reputation: 5672

How to undo setting Elasticsearch Index to readonly?

So I just set one of my indices to readonly, and now want to delete it.

To set it to readonly:

PUT my_index/_settings
{ "index": { "index.blocks.read_only" : true } }

When I tried to delete it I got this response:

ClusterBlockException[blocked by: [FORBIDDEN/5/index read-only (api)];]

Then I tried to set the index to readonly false:

PUT my_index/_settings
{ "index": { "index.blocks.read_only" : false } }

But that gives the same error message as above. So how to set readonly back to false?

Upvotes: 49

Views: 118986

Answers (6)

Harshdeep
Harshdeep

Reputation: 5824

In version 2.x of ElasticSearch (ES) you have to do the following

PUT your_index/_settings
{
  "index": {
    "blocks": {
      "write": "false",
      "read_only": "false"
    }
  }
}

While setting the index to read_only to true internally ES changes the write to true as well and just reverting read_only to false still does not allow you to update the index so you have to update write setting explicitly.

Upvotes: 7

ChintanShah25
ChintanShah25

Reputation: 12672

The correct way to make es index read-only is

PUT your_index/_settings
{
  "index": {
    "blocks.read_only": true
  }
}

change true to false to undo it.

You set non dynamic setting with

   {
      "index": {
        "blocks.read_only": false
      }
    }

which I think was not your intention. Also I think you should have seen an error during first operation itself as non dynamic settings can be updated only on close indices.

run

POST your_index/_close

and then try changing it.

Upvotes: 63

Suave Bajaj
Suave Bajaj

Reputation: 109

For 6.x to get the settings:

curl elasticsearch-sc:9200/_settings?pretty

To make the Indices / Cluster Writable :

curl -XPUT -H "Content-Type: application/json" \
 http://elasticsearch-sc:9200/_all/_settings \
   -d '{"index.blocks.read_only_allow_delete": null}'

Upvotes: 2

Kristofer
Kristofer

Reputation: 8556

Answers are really old so I'll add a elastic-6+ answer too:

PUT /[_all|<index-name>]/_settings
{
  "index.blocks.read_only_allow_delete": null
}

https://www.elastic.co/guide/en/elasticsearch/reference/6.x/disk-allocator.html

FYI (for context): I ran into read-only indices due to running out of disk and got error messages from logstash:

...retrying failed action with response code: 403 ({"type"=>"cluster_block_exception", "reason"=>"blocked"

elasticsearch:
ClusterBlockException[blocked by: [FORBIDDEN/12/index read-only / allow delete (api)];]

Upvotes: 81

Ryabchenko Alexander
Ryabchenko Alexander

Reputation: 12390

curl -X PUT "localhost:9200/_all/_settings" -H 'Content-Type: application/json' -d'{ "index.blocks.read_only" : false } }'

Upvotes: 12

tread
tread

Reputation: 11098

If you have Kibana installed, you can go to your kibana url:

Management (Left pane) -> Elasticseach Index Management -> Select your Index -> Edit Settings

then update:

"index.blocks.read_only_allow_delete": "false"

Also, to set it globally on kibana you can go to dev tools (left pane) and make the following request:

PUT _settings
{
  "index": {
    "blocks": {
      "read_only_allow_delete": "false"
    }
  }
}

Upvotes: 7

Related Questions