Hi Andreas,

I took a closer look at https://github.com/ceph/ceph/pull/2730 implementing 
rados whereis [--dns] and I think it deserves a discussion here. If I 
understand correctly, it relies on a new function of the rados API:

  typedef struct whereis {
    int64_t osd_id;                              //< ID of the OSD hosting this 
object
    std::string osd_state;                       //< state of the OSD - either 
'active' or 'inactive'
    int64_t pg_seed;                             //< Seed of the PG hosting 
this object
    std::string ip_string;                       //< Ip as string
    std::vector<std::string> host_names;         //< optional reverse DNS 
HostNames
    std::map<std::string, std::string> user_map; //< optional user KV map
    void resolve();                              //< reverse DNS OSD IPs and 
store in HostNames
  } whereis_t;

  static int whereis(IoCtx &ioctx, const std::string &oid, 
std::vector<whereis_t> &locations);

which needs to be added there because the rados API does not expose some 
details that are needed to fill the fields of the whereis_t structure.

It looks fine to me but ... I'm not used to maintaining or developing the rados 
API and someone else may have a more informed opinion.

There is a technical detail that also needs to be sorted out : the current 
implementation exposes the RadosWhereis class (for dump) and this should either 
be moved to rados.cc or be part of the rados API (which probably is not the 
best option because it would also expose Formatter as a consequence).

Cheers
-- 
Loïc Dachary, Artisan Logiciel Libre

Attachment: signature.asc
Description: OpenPGP digital signature

Reply via email to