Awesome, it worked. Thank you Gian. Added @Self like below and getting the set 
of NodeRole

@Provides
  @ManageLifecycle
  @Named(EMITTER_TYPE)
  public Emitter getEmitter(MyEmitterConfig myEmitterConfig, ObjectMapper 
mapper, @Self Set<NodeRole> nodeRoleSet)
  {
    return new MyEmitter(myConfig, mapper, nodeRoleSet);
  }

Here is the log from Historical process:
2021-08-23T15:39:41,261 INFO [main] com.custom.MyEmitter - NodeRoleSet: 
[HISTORICAL]

Thank you again :) 

On 2021/08/23 14:44:06, Gian Merlino <g...@apache.org> wrote: 
> 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
> >
> >
> 

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscr...@druid.apache.org
For additional commands, e-mail: dev-h...@druid.apache.org

Reply via email to