"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[7132],{3905:(e,n,r)=>{r.d(n,{Zo:()=>p,kt:()=>m});var t=r(67294);function i(e,n,r){return n in e?Object.defineProperty(e,n,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[n]=r,e}function a(e,n){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var t=Object.getOwnPropertySymbols(e);n&&(t=t.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),r.push.apply(r,t)}return r}function o(e){for(var n=1;n<arguments.length;n++){var r=null!=arguments[n]?arguments[n]:{};n%2?a(Object(r),!0).forEach((function(n){i(e,n,r[n])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):a(Object(r)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(r,n))}))}return e}function c(e,n){if(null==e)return{};var r,t,i=function(e,n){if(null==e)return{};var r,t,i={},a=Object.keys(e);for(t=0;t<a.length;t++)r=a[t],n.indexOf(r)>=0||(i[r]=e[r]);return i}(e,n);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(t=0;t<a.length;t++)r=a[t],n.indexOf(r)>=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(i[r]=e[r])}return i}var l=t.createContext({}),d=function(e){var n=t.useContext(l),r=n;return e&&(r="function"==typeof e?e(n):o(o({},n),e)),r},p=function(e){var n=d(e.components);return t.createElement(l.Provider,{value:n},e.children)},u="mdxType",s={inlineCode:"code",wrapper:function(e){var n=e.children;return t.createElement(t.Fragment,{},n)}},f=t.forwardRef((function(e,n){var r=e.components,i=e.mdxType,a=e.originalType,l=e.parentName,p=c(e,["components","mdxType","originalType","parentName"]),u=d(r),f=i,m=u["".concat(l,".").concat(f)]||u[f]||s[f]||a;return r?t.createElement(m,o(o({ref:n},p),{},{components:r})):t.createElement(m,o({ref:n},p))}));function m(e,n){var r=arguments,i=n&&n.mdxType;if("string"==typeof e||i){var a=r.length,o=new Array(a);o[0]=f;var c={};for(var l in n)hasOwnProperty.call(n,l)&&(c[l]=n[l]);c.originalType=e,c[u]="string"==typeof e?e:i,o[1]=c;for(var d=2;d<a;d++)o[d]=r[d];return t.createElement.apply(null,o)}return t.createElement.apply(null,r)}f.displayName="MDXCreateElement"},32306:(e,n,r)=>{r.r(n),r.d(n,{assets:()=>p,contentTitle:()=>l,default:()=>m,frontMatter:()=>c,metadata:()=>d,toc:()=>u});var t=r(87462),i=r(63366),a=(r(67294),r(3905)),o=["components"],c={id:"dynamic-configuration-api",title:"Dynamic configuration API",sidebar_label:"Dynamic configuration"},l=void 0,d={unversionedId:"api-reference/dynamic-configuration-api",id:"api-reference/dynamic-configuration-api",title:"Dynamic configuration API",description:"\x3c!--",source:"@site/docs/28.0.1/api-reference/dynamic-configuration-api.md",sourceDirName:"api-reference",slug:"/api-reference/dynamic-configuration-api",permalink:"/docs/28.0.1/api-reference/dynamic-configuration-api",draft:!1,tags:[],version:"current",frontMatter:{id:"dynamic-configuration-api",title:"Dynamic configuration API",sidebar_label:"Dynamic configuration"},sidebar:"docs",previous:{title:"Service status",permalink:"/docs/28.0.1/api-reference/service-status-api"},next:{title:"Legacy metadata",permalink:"/docs/28.0.1/api-reference/legacy-metadata-api"}},p={},u=[{value:"Coordinator dynamic configuration",id:"coordinator-dynamic-configuration",level:2},{value:"Overlord dynamic configuration",id:"overlord-dynamic-configuration",level:2}],s={toc:u},f="wrapper";function m(e){var n=e.components,r=(0,i.Z)(e,o);return(0,a.kt)(f,(0,t.Z)({},s,r,{components:n,mdxType:"MDXLayout"}),(0,a.kt)("p",null,"This document describes the API endpoints to retrieve and manage the dynamic configurations for the ",(0,a.kt)("a",{parentName:"p",href:"/docs/28.0.1/configuration/#overlord-dynamic-configuration"},"Coordinator")," and ",(0,a.kt)("a",{parentName:"p",href:"/docs/28.0.1/configuration/#dynamic-configuration"},"Overlord")," in Apache Druid."),(0,a.kt)("h2",{id:"coordinator-dynamic-configuration"},"Coordinator dynamic configuration"),(0,a.kt)("p",null,"See ",(0,a.kt)("a",{parentName:"p",href:"/docs/28.0.1/configuration/#dynamic-configuration"},"Coordinator Dynamic Configuration")," for details."),(0,a.kt)("p",null,"Note that all ",(0,a.kt)("em",{parentName:"p"},"interval")," URL parameters are ISO 8601 strings delimited by a ",(0,a.kt)("inlineCode",{parentName:"p"},"_")," instead of a ",(0,a.kt)("inlineCode",{parentName:"p"},"/"),"\nas in ",(0,a.kt)("inlineCode",{parentName:"p"},"2016-06-27_2016-06-28"),"."),(0,a.kt)("p",null,(0,a.kt)("inlineCode",{parentName:"p"},"GET /druid/coordinator/v1/config")),(0,a.kt)("p",null,"Retrieves current coordinator dynamic configuration."),(0,a.kt)("p",null,(0,a.kt)("inlineCode",{parentName:"p"},"GET /druid/coordinator/v1/config/history?interval={interval}&count={count}")),(0,a.kt)("p",null,"Retrieves history of changes to overlord dynamic configuration. Accepts ",(0,a.kt)("inlineCode",{parentName:"p"},"interval")," and  ",(0,a.kt)("inlineCode",{parentName:"p"},"count")," query string parameters\nto filter by interval and limit the number of results respectively."),(0,a.kt)("p",null,(0,a.kt)("inlineCode",{parentName:"p"},"POST /druid/coordinator/v1/config")),(0,a.kt)("p",null,"Update overlord dynamic worker configuration."),(0,a.kt)("h2",{id:"overlord-dynamic-configuration"},"Overlord dynamic configuration"),(0,a.kt)("p",null,"See ",(0,a.kt)("a",{parentName:"p",href:"/docs/28.0.1/configuration/#overlord-dynamic-configuration"},"Overlord Dynamic Configuration")," for details."),(0,a.kt)("p",null,"Note that all ",(0,a.kt)("em",{parentName:"p"},"interval")," URL parameters are ISO 8601 strings delimited by a ",(0,a.kt)("inlineCode",{parentName:"p"},"_")," instead of a ",(0,a.kt)("inlineCode",{parentName:"p"},"/"),"\nas in ",(0,a.kt)("inlineCode",{parentName:"p"},"2016-06-27_2016-06-28"),"."),(0,a.kt)("p",null,(0,a.kt)("inlineCode",{parentName:"p"},"GET /druid/indexer/v1/worker")),(0,a.kt)("p",null,"Retrieves current overlord dynamic configuration."),(0,a.kt)("p",null,(0,a.kt)("inlineCode",{parentName:"p"},"GET /druid/indexer/v1/worker/history?interval={interval}&count={count}")),(0,a.kt)("p",null,"Retrieves history of changes to overlord dynamic configuration. Accepts ",(0,a.kt)("inlineCode",{parentName:"p"},"interval")," and  ",(0,a.kt)("inlineCode",{parentName:"p"},"count")," query string parameters\nto filter by interval and limit the number of results respectively."),(0,a.kt)("p",null,(0,a.kt)("inlineCode",{parentName:"p"},"GET /druid/indexer/v1/workers")),(0,a.kt)("p",null,"Retrieves a list of all the worker nodes in the cluster along with its metadata."),(0,a.kt)("p",null,(0,a.kt)("inlineCode",{parentName:"p"},"GET /druid/indexer/v1/scaling")),(0,a.kt)("p",null,"Retrieves overlord scaling events if auto-scaling runners are in use."),(0,a.kt)("p",null,(0,a.kt)("inlineCode",{parentName:"p"},"POST /druid/indexer/v1/worker")),(0,a.kt)("p",null,"Update overlord dynamic worker configuration."))}m.isMDXComponent=!0}}]);