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
>
>

Reply via email to