{"action":"created","comment":{"url":"https://api.github.com/repos/elastic/elasticsearch/pulls/comments/57132637","id":57132637,"diff_hunk":"@@ -213,25 +215,29 @@ public XContentBuilder toXContent(XContentBuilder builder, Params params) throws\n     }\n \n     public static class Counts implements Streamable, ToXContent {\n-        int total;\n-        int masterOnly;\n-        int dataOnly;\n-        int masterData;\n-        int client;\n+        static final String COORDINATING_ONLY = \"coordinating_only\";\n+\n+        private int total;\n+        private Map<String, Integer> roles;\n+\n+        Counts() {","path":"core/src/main/java/org/elasticsearch/action/admin/cluster/stats/ClusterStatsNodes.java","position":24,"original_position":24,"commit_id":"eebd0cfccde4de3a47aff2f595aef3b3925a34a0","original_commit_id":"eebd0cfccde4de3a47aff2f595aef3b3925a34a0","user":{"login":"s1monw","id":973334,"avatar_url":"https://avatars.githubusercontent.com/u/973334?v=3","gravatar_id":"","url":"https://api.github.com/users/s1monw","html_url":"https://github.com/s1monw","followers_url":"https://api.github.com/users/s1monw/followers","following_url":"https://api.github.com/users/s1monw/following{/other_user}","gists_url":"https://api.github.com/users/s1monw/gists{/gist_id}","starred_url":"https://api.github.com/users/s1monw/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/s1monw/subscriptions","organizations_url":"https://api.github.com/users/s1monw/orgs","repos_url":"https://api.github.com/users/s1monw/repos","events_url":"https://api.github.com/users/s1monw/events{/privacy}","received_events_url":"https://api.github.com/users/s1monw/received_events","type":"User","site_admin":false},"body":"any chance we can make this writeable and have all members being final?","created_at":"2016-03-23T09:53:45Z","updated_at":"2016-03-23T09:53:45Z","html_url":"https://github.com/elastic/elasticsearch/pull/16963#discussion_r57132637","pull_request_url":"https://api.github.com/repos/elastic/elasticsearch/pulls/16963","_links":{"self":{"href":"https://api.github.com/repos/elastic/elasticsearch/pulls/comments/57132637"},"html":{"href":"https://github.com/elastic/elasticsearch/pull/16963#discussion_r57132637"},"pull_request":{"href":"https://api.github.com/repos/elastic/elasticsearch/pulls/16963"}}},"pull_request":{"url":"https://api.github.com/repos/elastic/elasticsearch/pulls/16963","id":61760152,"html_url":"https://github.com/elastic/elasticsearch/pull/16963","diff_url":"https://github.com/elastic/elasticsearch/pull/16963.diff","patch_url":"https://github.com/elastic/elasticsearch/pull/16963.patch","issue_url":"https://api.github.com/repos/elastic/elasticsearch/issues/16963","number":16963,"state":"open","locked":false,"title":"Remove support for node.client setting","user":{"login":"javanna","id":832460,"avatar_url":"https://avatars.githubusercontent.com/u/832460?v=3","gravatar_id":"","url":"https://api.github.com/users/javanna","html_url":"https://github.com/javanna","followers_url":"https://api.github.com/users/javanna/followers","following_url":"https://api.github.com/users/javanna/following{/other_user}","gists_url":"https://api.github.com/users/javanna/gists{/gist_id}","starred_url":"https://api.github.com/users/javanna/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/javanna/subscriptions","organizations_url":"https://api.github.com/users/javanna/orgs","repos_url":"https://api.github.com/users/javanna/repos","events_url":"https://api.github.com/users/javanna/events{/privacy}","received_events_url":"https://api.github.com/users/javanna/received_events","type":"User","site_admin":false},"body":"As discussed in #16565, the node.client setting is an unnecessary shortcut to `node.data: false` and `node.master: false`. We have places where we treat nodes with `node.client` set to `true` differently compared to when nodes have both `node.master` set to `false` and `node.data` set to `false`. Also, with the addition of `node.ingest` (or potentially new roles in the future), it becomes confusing to figure out if a node client will act as ingest node or not. \r\n\r\nThis PR removes the node.client setting in favour being explicit using `node.master`, `node.data` and `node.ingest` instead. Note that `node.client` is now a prohibited node setting rather than ignored, so that users know they have to upgrade their settings. A node will not start if it has `node.client` among its settings.\r\n\r\nAdditionally, tribe nodes and all of the tribe clients are now coordinating only nodes (with the addition on the ingest node type they became by mistake ingest nodes too, which they shouldn't).\r\n\r\nInternally, the DiscoveryNode class supports now the notion of roles, through the inner Role enum. A node with no roles is implicitly a coordinating only node, that's the least that a node can do.\r\n\r\nThe following are the breaking changes made on the REST (and java api) layer:\r\n- `_cat/nodes` used to return `c` for client node or `d` for data node as part of the `node.role` column. It now returns `m` for master eligible, `d` for data and/or `i` for ingest. A node with no explicit roles will be a coordinating only node and marked with `-`. A node can have multiple roles. The master column has been adapted to return only whether a node is the current master (`*`) or not (`-`).\r\n\r\n- The cluster stats api now returns counts for each node role. The `master_data`, `master_only`, `data_only` and `client` fields have been removed from the response in favour of `master`, `data`, `ingest` and `coordinating_only`. The same node can have multiple roles, hence contribute to multiple roles counts. Every node is implicitly a coordinating node, so whenever a node has no explicit roles, it will be counted as coordinating only.\r\n\r\nIn addition, adapted the documentation and done some renaming in our test infra.\r\n\r\nNOTE: there are a few nocommits that need to be resolved, nothing major but I want to make sure we discuss those as part of the review before I resolve them how I think they should be resolved.\r\n\r\nCloses #16565","created_at":"2016-03-04T19:37:35Z","updated_at":"2016-03-23T09:53:45Z","closed_at":null,"merged_at":null,"merge_commit_sha":"b81f62bc5762aa84d5087d0d025a115686c154fd","assignee":null,"milestone":null,"commits_url":"https://api.github.com/repos/elastic/elasticsearch/pulls/16963/commits","review_comments_url":"https://api.github.com/repos/elastic/elasticsearch/pulls/16963/comments","review_comment_url":"https://api.github.com/repos/elastic/elasticsearch/pulls/comments{/number}","comments_url":"https://api.github.com/repos/elastic/elasticsearch/issues/16963/comments","statuses_url":"https://api.github.com/repos/elastic/elasticsearch/statuses/eebd0cfccde4de3a47aff2f595aef3b3925a34a0","head":{"label":"javanna:enhancement/remove_node_client_setting","ref":"enhancement/remove_node_client_setting","sha":"eebd0cfccde4de3a47aff2f595aef3b3925a34a0","user":{"login":"javanna","id":832460,"avatar_url":"https://avatars.githubusercontent.com/u/832460?v=3","gravatar_id":"","url":"https://api.github.com/users/javanna","html_url":"https://github.com/javanna","followers_url":"https://api.github.com/users/javanna/followers","following_url":"https://api.github.com/users/javanna/following{/other_user}","gists_url":"https://api.github.com/users/javanna/gists{/gist_id}","starred_url":"https://api.github.com/users/javanna/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/javanna/subscriptions","organizations_url":"https://api.github.com/users/javanna/orgs","repos_url":"https://api.github.com/users/javanna/repos","events_url":"https://api.github.com/users/javanna/events{/privacy}","received_events_url":"https://api.github.com/users/javanna/received_events","type":"User","site_admin":false},"repo":{"id":6652220,"name":"elasticsearch","full_name":"javanna/elasticsearch","owner":{"login":"javanna","id":832460,"avatar_url":"https://avatars.githubusercontent.com/u/832460?v=3","gravatar_id":"","url":"https://api.github.com/users/javanna","html_url":"https://github.com/javanna","followers_url":"https://api.github.com/users/javanna/followers","following_url":"https://api.github.com/users/javanna/following{/other_user}","gists_url":"https://api.github.com/users/javanna/gists{/gist_id}","starred_url":"https://api.github.com/users/javanna/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/javanna/subscriptions","organizations_url":"https://api.github.com/users/javanna/orgs","repos_url":"https://api.github.com/users/javanna/repos","events_url":"https://api.github.com/users/javanna/events{/privacy}","received_events_url":"https://api.github.com/users/javanna/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/javanna/elasticsearch","description":"Open Source, Distributed, RESTful Search Engine","fork":true,"url":"https://api.github.com/repos/javanna/elasticsearch","forks_url":"https://api.github.com/repos/javanna/elasticsearch/forks","keys_url":"https://api.github.com/repos/javanna/elasticsearch/keys{/key_id}","collaborators_url":"https://api.github.com/repos/javanna/elasticsearch/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/javanna/elasticsearch/teams","hooks_url":"https://api.github.com/repos/javanna/elasticsearch/hooks","issue_events_url":"https://api.github.com/repos/javanna/elasticsearch/issues/events{/number}","events_url":"https://api.github.com/repos/javanna/elasticsearch/events","assignees_url":"https://api.github.com/repos/javanna/elasticsearch/assignees{/user}","branches_url":"https://api.github.com/repos/javanna/elasticsearch/branches{/branch}","tags_url":"https://api.github.com/repos/javanna/elasticsearch/tags","blobs_url":"https://api.github.com/repos/javanna/elasticsearch/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/javanna/elasticsearch/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/javanna/elasticsearch/git/refs{/sha}","trees_url":"https://api.github.com/repos/javanna/elasticsearch/git/trees{/sha}","statuses_url":"https://api.github.com/repos/javanna/elasticsearch/statuses/{sha}","languages_url":"https://api.github.com/repos/javanna/elasticsearch/languages","stargazers_url":"https://api.github.com/repos/javanna/elasticsearch/stargazers","contributors_url":"https://api.github.com/repos/javanna/elasticsearch/contributors","subscribers_url":"https://api.github.com/repos/javanna/elasticsearch/subscribers","subscription_url":"https://api.github.com/repos/javanna/elasticsearch/subscription","commits_url":"https://api.github.com/repos/javanna/elasticsearch/commits{/sha}","git_commits_url":"https://api.github.com/repos/javanna/elasticsearch/git/commits{/sha}","comments_url":"https://api.github.com/repos/javanna/elasticsearch/comments{/number}","issue_comment_url":"https://api.github.com/repos/javanna/elasticsearch/issues/comments{/number}","contents_url":"https://api.github.com/repos/javanna/elasticsearch/contents/{+path}","compare_url":"https://api.github.com/repos/javanna/elasticsearch/compare/{base}...{head}","merges_url":"https://api.github.com/repos/javanna/elasticsearch/merges","archive_url":"https://api.github.com/repos/javanna/elasticsearch/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/javanna/elasticsearch/downloads","issues_url":"https://api.github.com/repos/javanna/elasticsearch/issues{/number}","pulls_url":"https://api.github.com/repos/javanna/elasticsearch/pulls{/number}","milestones_url":"https://api.github.com/repos/javanna/elasticsearch/milestones{/number}","notifications_url":"https://api.github.com/repos/javanna/elasticsearch/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/javanna/elasticsearch/labels{/name}","releases_url":"https://api.github.com/repos/javanna/elasticsearch/releases{/id}","deployments_url":"https://api.github.com/repos/javanna/elasticsearch/deployments","created_at":"2012-11-12T11:11:09Z","updated_at":"2015-04-30T08:59:29Z","pushed_at":"2016-03-22T17:40:40Z","git_url":"git://github.com/javanna/elasticsearch.git","ssh_url":"git@github.com:javanna/elasticsearch.git","clone_url":"https://github.com/javanna/elasticsearch.git","svn_url":"https://github.com/javanna/elasticsearch","homepage":"http://elasticsearch.org","size":199788,"stargazers_count":1,"watchers_count":1,"language":"Java","has_issues":false,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":0,"mirror_url":null,"open_issues_count":0,"forks":0,"open_issues":0,"watchers":1,"default_branch":"master"}},"base":{"label":"elastic:master","ref":"master","sha":"8f22a01bbd162d6595b0bc7c36010a7c7135394a","user":{"login":"elastic","id":6764390,"avatar_url":"https://avatars.githubusercontent.com/u/6764390?v=3","gravatar_id":"","url":"https://api.github.com/users/elastic","html_url":"https://github.com/elastic","followers_url":"https://api.github.com/users/elastic/followers","following_url":"https://api.github.com/users/elastic/following{/other_user}","gists_url":"https://api.github.com/users/elastic/gists{/gist_id}","starred_url":"https://api.github.com/users/elastic/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/elastic/subscriptions","organizations_url":"https://api.github.com/users/elastic/orgs","repos_url":"https://api.github.com/users/elastic/repos","events_url":"https://api.github.com/users/elastic/events{/privacy}","received_events_url":"https://api.github.com/users/elastic/received_events","type":"Organization","site_admin":false},"repo":{"id":507775,"name":"elasticsearch","full_name":"elastic/elasticsearch","owner":{"login":"elastic","id":6764390,"avatar_url":"https://avatars.githubusercontent.com/u/6764390?v=3","gravatar_id":"","url":"https://api.github.com/users/elastic","html_url":"https://github.com/elastic","followers_url":"https://api.github.com/users/elastic/followers","following_url":"https://api.github.com/users/elastic/following{/other_user}","gists_url":"https://api.github.com/users/elastic/gists{/gist_id}","starred_url":"https://api.github.com/users/elastic/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/elastic/subscriptions","organizations_url":"https://api.github.com/users/elastic/orgs","repos_url":"https://api.github.com/users/elastic/repos","events_url":"https://api.github.com/users/elastic/events{/privacy}","received_events_url":"https://api.github.com/users/elastic/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/elastic/elasticsearch","description":"Open Source, Distributed, RESTful Search Engine","fork":false,"url":"https://api.github.com/repos/elastic/elasticsearch","forks_url":"https://api.github.com/repos/elastic/elasticsearch/forks","keys_url":"https://api.github.com/repos/elastic/elasticsearch/keys{/key_id}","collaborators_url":"https://api.github.com/repos/elastic/elasticsearch/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/elastic/elasticsearch/teams","hooks_url":"https://api.github.com/repos/elastic/elasticsearch/hooks","issue_events_url":"https://api.github.com/repos/elastic/elasticsearch/issues/events{/number}","events_url":"https://api.github.com/repos/elastic/elasticsearch/events","assignees_url":"https://api.github.com/repos/elastic/elasticsearch/assignees{/user}","branches_url":"https://api.github.com/repos/elastic/elasticsearch/branches{/branch}","tags_url":"https://api.github.com/repos/elastic/elasticsearch/tags","blobs_url":"https://api.github.com/repos/elastic/elasticsearch/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/elastic/elasticsearch/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/elastic/elasticsearch/git/refs{/sha}","trees_url":"https://api.github.com/repos/elastic/elasticsearch/git/trees{/sha}","statuses_url":"https://api.github.com/repos/elastic/elasticsearch/statuses/{sha}","languages_url":"https://api.github.com/repos/elastic/elasticsearch/languages","stargazers_url":"https://api.github.com/repos/elastic/elasticsearch/stargazers","contributors_url":"https://api.github.com/repos/elastic/elasticsearch/contributors","subscribers_url":"https://api.github.com/repos/elastic/elasticsearch/subscribers","subscription_url":"https://api.github.com/repos/elastic/elasticsearch/subscription","commits_url":"https://api.github.com/repos/elastic/elasticsearch/commits{/sha}","git_commits_url":"https://api.github.com/repos/elastic/elasticsearch/git/commits{/sha}","comments_url":"https://api.github.com/repos/elastic/elasticsearch/comments{/number}","issue_comment_url":"https://api.github.com/repos/elastic/elasticsearch/issues/comments{/number}","contents_url":"https://api.github.com/repos/elastic/elasticsearch/contents/{+path}","compare_url":"https://api.github.com/repos/elastic/elasticsearch/compare/{base}...{head}","merges_url":"https://api.github.com/repos/elastic/elasticsearch/merges","archive_url":"https://api.github.com/repos/elastic/elasticsearch/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/elastic/elasticsearch/downloads","issues_url":"https://api.github.com/repos/elastic/elasticsearch/issues{/number}","pulls_url":"https://api.github.com/repos/elastic/elasticsearch/pulls{/number}","milestones_url":"https://api.github.com/repos/elastic/elasticsearch/milestones{/number}","notifications_url":"https://api.github.com/repos/elastic/elasticsearch/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/elastic/elasticsearch/labels{/name}","releases_url":"https://api.github.com/repos/elastic/elasticsearch/releases{/id}","deployments_url":"https://api.github.com/repos/elastic/elasticsearch/deployments","created_at":"2010-02-08T13:20:56Z","updated_at":"2016-03-23T09:01:40Z","pushed_at":"2016-03-23T09:48:31Z","git_url":"git://github.com/elastic/elasticsearch.git","ssh_url":"git@github.com:elastic/elasticsearch.git","clone_url":"https://github.com/elastic/elasticsearch.git","svn_url":"https://github.com/elastic/elasticsearch","homepage":"https://www.elastic.co/products/elasticsearch","size":299374,"stargazers_count":15653,"watchers_count":15653,"language":"Java","has_issues":true,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":5228,"mirror_url":null,"open_issues_count":1061,"forks":5228,"open_issues":1061,"watchers":15653,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/elastic/elasticsearch/pulls/16963"},"html":{"href":"https://github.com/elastic/elasticsearch/pull/16963"},"issue":{"href":"https://api.github.com/repos/elastic/elasticsearch/issues/16963"},"comments":{"href":"https://api.github.com/repos/elastic/elasticsearch/issues/16963/comments"},"review_comments":{"href":"https://api.github.com/repos/elastic/elasticsearch/pulls/16963/comments"},"review_comment":{"href":"https://api.github.com/repos/elastic/elasticsearch/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/elastic/elasticsearch/pulls/16963/commits"},"statuses":{"href":"https://api.github.com/repos/elastic/elasticsearch/statuses/eebd0cfccde4de3a47aff2f595aef3b3925a34a0"}}}}