~ubuntu-branches/ubuntu/raring/ceph/raring

« back to all changes in this revision

Viewing changes to src/mds/MDS.cc

  • Committer: Package Import Robot
  • Author(s): Laszlo Boszormenyi (GCS)
  • Date: 2012-02-05 10:07:38 UTC
  • mfrom: (1.1.7) (0.1.11 sid)
  • Revision ID: package-import@ubuntu.com-20120205100738-00s0bxx93mamy8tk
Tags: 0.41-1
New upstream release.

Show diffs side-by-side

added added

removed removed

Lines of Context:
82
82
 
83
83
 
84
84
 
85
 
#ifdef ENABLE_COVERAGE
86
 
void handle_signal(int signal)
87
 
{
88
 
  exit(0);
89
 
}
90
 
#endif
91
 
 
92
85
// cons/des
93
86
MDS::MDS(const std::string &n, Messenger *m, MonClient *mc) : 
94
87
  Dispatcher(m->cct),
139
132
  // beacon
140
133
  beacon_last_seq = 0;
141
134
  beacon_sender = 0;
142
 
  beacon_killer = 0;
143
135
  was_laggy = false;
144
136
 
145
137
  // tick
512
504
 
513
505
  mds_lock.Unlock();
514
506
 
515
 
#ifdef ENABLE_COVERAGE
516
 
  signal(SIGTERM, handle_signal);
517
 
#endif
518
 
 
519
507
  return 0;
520
508
}
521
509
 
635
623
    dout(5) << "is_laggy " << since << " > " << g_conf->mds_beacon_grace
636
624
            << " since last acked beacon" << dendl;
637
625
    was_laggy = true;
 
626
    if (since > (g_conf->mds_beacon_grace*2)) {
 
627
      // maybe it's not us?
 
628
      dout(5) << "initiating monitor reconnect; maybe we're not the slow one"
 
629
              << dendl;
 
630
      monc->reopen_session();
 
631
    }
638
632
    return true;
639
633
  }
640
634
  return false;
667
661
    while (!beacon_seq_stamp.empty() &&
668
662
           beacon_seq_stamp.begin()->first <= seq)
669
663
      beacon_seq_stamp.erase(beacon_seq_stamp.begin());
670
 
    
671
 
    reset_beacon_killer();
672
664
  } else {
673
665
    dout(10) << "handle_mds_beacon " << ceph_mds_state_name(m->get_state())
674
666
             << " seq " << m->get_seq() << " dne" << dendl;
677
669
  m->put();
678
670
}
679
671
 
680
 
void MDS::reset_beacon_killer()
681
 
{
682
 
  utime_t when = beacon_last_acked_stamp;
683
 
  when += g_conf->mds_beacon_grace;
684
 
  
685
 
  dout(25) << "reset_beacon_killer last_acked_stamp at " << beacon_last_acked_stamp
686
 
           << ", will die at " << when << dendl;
687
 
  
688
 
  if (beacon_killer) timer.cancel_event(beacon_killer);
689
 
 
690
 
  beacon_killer = new C_MDS_BeaconKiller(this, beacon_last_acked_stamp);
691
 
  timer.add_event_at(when, beacon_killer);
692
 
}
693
 
 
694
 
void MDS::beacon_kill(utime_t lab)
695
 
{
696
 
  if (lab == beacon_last_acked_stamp) {
697
 
    dout(0) << "beacon_kill last_acked_stamp " << lab 
698
 
            << ", we are laggy!"
699
 
            << dendl;
700
 
    //suicide();
701
 
  } else {
702
 
    dout(20) << "beacon_kill last_acked_stamp " << beacon_last_acked_stamp 
703
 
             << " != my " << lab 
704
 
             << ", doing nothing."
705
 
             << dendl;
706
 
  }
707
 
}
708
 
 
709
672
/* This function DOES put the passed message before returning*/
710
673
void MDS::handle_command(MMonCommand *m)
711
674
{
1386
1349
    inotable->save(new C_NoopContext);
1387
1350
  }
1388
1351
 
1389
 
  if (mdsmap->get_num_mds() == 1 &&
1390
 
      mdsmap->get_num_failed() == 0) { // just me!
 
1352
  if (mdsmap->get_num_in_mds() == 1 &&
 
1353
      mdsmap->get_num_failed_mds() == 0) { // just me!
1391
1354
    dout(2) << "i am alone, moving to state reconnect" << dendl;      
1392
1355
    request_state(MDSMap::STATE_RECONNECT);
1393
1356
  } else {
1531
1494
{
1532
1495
  dout(2) << "stopping_start" << dendl;
1533
1496
 
1534
 
  if (mdsmap->get_num_mds() == 1 && !sessionmap.empty()) {
 
1497
  if (mdsmap->get_num_in_mds() == 1 && !sessionmap.empty()) {
1535
1498
    // we're the only mds up!
1536
1499
    dout(0) << "we are the last MDS, and have mounted clients: we cannot flush our journal.  suicide!" << dendl;
1537
1500
    suicide();
1562
1525
          << ", now " << ceph_mds_state_name(state) << dendl;
1563
1526
 
1564
1527
  // stop timers
1565
 
  if (beacon_killer) {
1566
 
    timer.cancel_event(beacon_killer);
1567
 
    beacon_killer = 0;
1568
 
  }
1569
1528
  if (beacon_sender) {
1570
1529
    timer.cancel_event(beacon_sender);
1571
1530
    beacon_sender = 0;
1602
1561
  }
1603
1562
  new_argv[orig_argc] = NULL;
1604
1563
 
 
1564
#if defined(__linux__)
1605
1565
  dout(1) << " cwd " << get_current_dir_name() << dendl;
 
1566
#else
 
1567
  {
 
1568
#include <sys/param.h>
 
1569
    char buf[PATH_MAX];
 
1570
    
 
1571
    getcwd(buf, sizeof(buf));
 
1572
    dout(1) << " cwd " << buf << dendl;
 
1573
  }
 
1574
#endif
1606
1575
 
1607
1576
  unblock_all_signals(NULL);
1608
1577
  execv(orig_argv[0], new_argv);