#include "msg/Message.h"
-class MonCaps;
-
class PaxosServiceMessage : public Message {
public:
version_t version;
case MSG_OSD_PGTEMP:
ALLOW_MESSAGES_FROM(CEPH_ENTITY_TYPE_OSD);
ALLOW_CAPS(PAXOS_OSDMAP, MON_CAP_R);
- paxos_dispatch(paxos_service[PAXOS_OSDMAP], m);
+ paxos_service[PAXOS_OSDMAP]->dispatch((PaxosServiceMessage*)m);
break;
case MSG_REMOVE_SNAPS:
ALLOW_CAPS(PAXOS_OSDMAP, MON_CAP_RW);
- paxos_dispatch(paxos_service[PAXOS_OSDMAP], m);
+ paxos_service[PAXOS_OSDMAP]->dispatch((PaxosServiceMessage*)m);
break;
// MDSs
case MSG_MDS_BEACON:
case MSG_MDS_OFFLOAD_TARGETS:
ALLOW_CAPS(PAXOS_MDSMAP, MON_CAP_RW);
- paxos_dispatch(paxos_service[PAXOS_MDSMAP], m);
+ paxos_service[PAXOS_MDSMAP]->dispatch((PaxosServiceMessage*)m);
break;
// auth
case MSG_MON_GLOBAL_ID:
case CEPH_MSG_AUTH:
/* no need to check caps here */
- paxos_dispatch(paxos_service[PAXOS_AUTH], m);
+ paxos_service[PAXOS_AUTH]->dispatch((PaxosServiceMessage*)m);
break;
// pg
case MSG_PGSTATS:
case MSG_GETPOOLSTATS:
ALLOW_CAPS(PAXOS_PGMAP, MON_CAP_R);
- paxos_dispatch(paxos_service[PAXOS_PGMAP], m);
+ paxos_service[PAXOS_PGMAP]->dispatch((PaxosServiceMessage*)m);
break;
case MSG_POOLOP:
ALLOW_CAPS(PAXOS_OSDMAP, MON_CAP_RX);
- paxos_dispatch(paxos_service[PAXOS_OSDMAP], m);
+ paxos_service[PAXOS_OSDMAP]->dispatch((PaxosServiceMessage*)m);
break;
// log
case MSG_LOG:
ALLOW_CAPS(PAXOS_LOG, MON_CAP_RW);
- paxos_dispatch(paxos_service[PAXOS_LOG], m);
+ paxos_service[PAXOS_LOG]->dispatch((PaxosServiceMessage*)m);
break;
// paxos
return ret;
}
-void Monitor::paxos_dispatch(PaxosService *p, Message *message)
-{
- PaxosServiceMessage *m = (PaxosServiceMessage*)message;
- if (!m->caps) {
- Session *s = (Session *) m->get_connection()->get_priv();
- m->caps = &s->caps;
- }
- p->dispatch(m);
-}
-
void Monitor::handle_subscribe(MMonSubscribe *m)
{
dout(10) << "handle_subscribe " << *m << dendl;
bool& isvalid);
bool ms_handle_reset(Connection *con);
void ms_handle_remote_reset(Connection *con) {}
- void paxos_dispatch(PaxosService *p, Message *m);
public:
Monitor(int w, MonitorStore *s, Messenger *m, MonMap *map);
int OSDMonitor::prepare_new_pool(MPoolOp *m)
{
//check permissions for the auid, then pass off to next function
- dout(10) << "prepare_new_pool from Session " << std::endl
- << ((Session *) m->get_connection()->get_priv()) << dendl;
+ Session * session = (Session *) m->get_connection()->get_priv();
+ dout(10) << "prepare_new_pool from Session " << std::endl << session << dendl;
if (m->auid) {
- if(m->caps->check_privileges(PAXOS_OSDMAP, MON_CAP_W, m->auid)) {
+ if(session->caps.check_privileges(PAXOS_OSDMAP, MON_CAP_W, m->auid)) {
return prepare_new_pool(m->name, m->auid);
} else {
dout(5) << "attempt to create new pool without sufficient auid privileges!"
return -EPERM;
}
} else {
- if (m->caps->check_privileges(PAXOS_OSDMAP, MON_CAP_W)) {
- return prepare_new_pool(m->name, m->caps->auid);
+ if (session->caps.check_privileges(PAXOS_OSDMAP, MON_CAP_W)) {
+ return prepare_new_pool(m->name, session->caps.auid);
} else {
dout(5) << "attempt to create new pool without sufficient caps!"
<< *m << dendl;
bool OSDMonitor::prepare_pool_op_auid (MPoolOp *m)
{
+ Session * session = (Session *) m->get_connection()->get_priv();
//check that current user can write to new auid
- if(m->caps->check_privileges(PAXOS_OSDMAP, MON_CAP_W, m->auid)) {
+ if(session->caps.check_privileges(PAXOS_OSDMAP, MON_CAP_W, m->auid)) {
//check that current user can write to old auid
int old_auid = osdmap.get_pg_pool(m->pool)->v.auid;
- if(m->caps->check_privileges(PAXOS_OSDMAP, MON_CAP_W, old_auid)) {
+ if(session->caps.check_privileges(PAXOS_OSDMAP, MON_CAP_W, old_auid)) {
//update pg_pool_t with new auid
pending_inc.new_pools[m->pool] = *(osdmap.get_pg_pool(m->pool));
pending_inc.new_pools[m->pool].v.auid = m->auid;