Ah, if you're wanting to get the roles of the node that your own code is running on, try adding Set<NodeRole>. You might need the @Self annotation also.
On Mon, Aug 23, 2021 at 6:27 AM Jeet Patel <jp707...@gmail.com> wrote: > Hi Gian, > > Thank you for pointing that out. Although I'm getting following error when > using DiscoveryDruidNode > > // Declared a variable in MyEmitter > private final DiscoveryDruidNode discoveryDruidNode; > > // Added in Constructor > public MyEmitter( > MyEmitterConfig myEmitterConfig, > ObjectMapper mapper, > DiscoveryDruidNode discoveryDruidNode > ) > { > this.mapper = mapper; > this.myEmitterConfig = myEmitterConfig; > this.whiteListMetricsMap = > readMap(myEmitterConfig.getWhiteListMetricsMapPath()); > this.discoveryDruidNode = discoveryDruidNode; > log.info("Constructed MyEmitter"); > } > > // Added a log.info in emit() method just to check if it works > log.info("NodeRole: " + discoveryDruidNode.getNodeRole().getJsonName()); > > Below is the error I'm getting: > 1) Could not find a suitable constructor in > org.apache.druid.discovery.DiscoveryDruidNode. Classes must have either one > (and only one) constructor annotated with @Inject > or a zero-argument constructor that is not private. > at > org.apache.druid.discovery.DiscoveryDruidNode.class(DiscoveryDruidNode.java:47) > while locating org.apache.druid.discovery.DiscoveryDruidNode > for the 3rd parameter of > com.custom.MyEmitterModule.getEmitter(MyEmitterModule.java:39) > > According to the error, it looks like I cannot add DiscoveryDruidNode > because it does not have @Inject or a zero-argument constructor. But I'm > able to ad my MyEmitterConfig class which does not have zero-argument > constructor. > > On 2021/08/22 23:40:08, Gian Merlino <g...@apache.org> wrote: > > Does the "getNodeRole()" method on DiscoveryDruidNode do what you want? > > > > On Fri, Aug 20, 2021 at 3:07 PM Jeet Patel <jp707...@gmail.com> wrote: > > > > > Hi all, > > > > > > Is there a way to to know what druid services are running in a > DruidNode > > > (Not > > > talking about the HTTP APIs)? > > > I went through druid-server module, class > > > DruidNodeDiscoveryProvider.getForNodeRole which accepts a NodeRole and > > > returns a DruidNodeDiscovery instance after which we can use > > > getAllNodes() method > > > which returns Collection<DiscoveryDruidNode>. And for each item in the > > > Collection<DiscoveryDruidNode> we can use getServiceName() method to > get > > > the service name. > > > > > > The question is, how can we get the instance of NodeRole running in the > > > druid process. For example, if we have a host running broker service, > is > > > there a way to get NodeRole for broker process dynamically? > > > > > > For now I'm doing something like this. Adding all NodeRole in every > host, > > > since our extension runs in every host.: > > > > > > List<DruidNodeDiscovery> druidNodeDiscoveryList = ImmutableList.of( > > > > druidNodeDiscoveryProvider.getForNodeRole(NodeRole.COORDINATOR), > > > druidNodeDiscoveryProvider.getForNodeRole(NodeRole.OVERLORD), > > > druidNodeDiscoveryProvider.getForNodeRole(NodeRole.HISTORICAL), > > > > druidNodeDiscoveryProvider.getForNodeRole(NodeRole.MIDDLE_MANAGER), > > > druidNodeDiscoveryProvider.getForNodeRole(NodeRole.INDEXER), > > > druidNodeDiscoveryProvider.getForNodeRole(NodeRole.BROKER), > > > druidNodeDiscoveryProvider.getForNodeRole(NodeRole.ROUTER) > > > ); > > > > > > I'm trying to build an extension. So this extension will run in every > hosts > > > in our druid cluster. After getting the service details we wanted to > some > > > further procession from our side. > > > > > > Will really appreciate some pointers on this. > > > > > > Thank you :) > > > > > > > --------------------------------------------------------------------- > To unsubscribe, e-mail: dev-unsubscr...@druid.apache.org > For additional commands, e-mail: dev-h...@druid.apache.org > >