~ubuntu-branches/ubuntu/precise/ceph/precise-proposed

« back to all changes in this revision

Viewing changes to src/cosd.cc

  • Committer: Bazaar Package Importer
  • Author(s): Laszlo Boszormenyi (GCS)
  • Date: 2011-09-24 16:51:57 UTC
  • mfrom: (1.1.5 upstream) (0.1.8 sid)
  • Revision ID: james.westby@ubuntu.com-20110924165157-x9zh5nxpipno2u33
Tags: 0.35-1
New upstream release.

Show diffs side-by-side

added added

removed removed

Lines of Context:
43
43
void usage() 
44
44
{
45
45
  derr << "usage: cosd -i osdid [--osd-data=path] [--osd-journal=path] "
46
 
       << "[--mkfs] [--mkjournal]" << dendl;
 
46
       << "[--mkfs] [--mkjournal] [--convert-filestore]" << dendl;
47
47
  derr << "   --debug_osd N   set debug level (e.g. 10)" << dendl;
48
48
  generic_server_usage();
49
49
}
50
50
 
51
51
int main(int argc, const char **argv) 
52
52
{
53
 
  DEFINE_CONF_VARS(usage);
54
53
  vector<const char*> args;
55
54
  argv_to_vec(argc, argv, args);
56
55
  env_to_vec(args);
64
63
  bool mkjournal = false;
65
64
  bool mkkey = false;
66
65
  bool flushjournal = false;
67
 
  char *dump_pg_log = 0;
68
 
  FOR_EACH_ARG(args) {
69
 
    if (CEPH_ARGPARSE_EQ("mkfs", '\0')) {
 
66
  bool convertfilestore = false;
 
67
  std::string dump_pg_log;
 
68
 
 
69
  std::string val;
 
70
  for (std::vector<const char*>::iterator i = args.begin(); i != args.end(); ) {
 
71
    if (ceph_argparse_double_dash(args, i)) {
 
72
      break;
 
73
    } else if (ceph_argparse_flag(args, i, "-h", "--help", (char*)NULL)) {
 
74
      usage();
 
75
      exit(0);
 
76
    } else if (ceph_argparse_flag(args, i, "--mkfs", (char*)NULL)) {
70
77
      mkfs = true;
71
 
    } else if (CEPH_ARGPARSE_EQ("mkjournal", '\0')) {
 
78
    } else if (ceph_argparse_flag(args, i, "--mkjournal", (char*)NULL)) {
72
79
      mkjournal = true;
73
 
    } else if (CEPH_ARGPARSE_EQ("mkkey", '\0')) {
 
80
    } else if (ceph_argparse_flag(args, i, "--mkkey", (char*)NULL)) {
74
81
      mkkey = true;
75
 
    } else if (CEPH_ARGPARSE_EQ("flush-journal", '\0')) {
 
82
    } else if (ceph_argparse_flag(args, i, "--flush-journal", (char*)NULL)) {
76
83
      flushjournal = true;
77
 
    } else if (CEPH_ARGPARSE_EQ("dump-pg-log", '\0')) {
78
 
      CEPH_ARGPARSE_SET_ARG_VAL(&dump_pg_log, OPT_STR);
 
84
    } else if (ceph_argparse_flag(args, i, "--convert-filestore", (char*)NULL)) {
 
85
      convertfilestore = true;
 
86
    } else if (ceph_argparse_witharg(args, i, &val, "--dump-pg-log", (char*)NULL)) {
 
87
      dump_pg_log = val;
79
88
    } else {
80
 
      derr << "unrecognized arg " << args[i] << dendl;
81
 
      usage();
 
89
      ++i;
82
90
    }
83
91
  }
 
92
  if (!args.empty()) {
 
93
    derr << "unrecognized arg " << args[0] << dendl;
 
94
    usage();
 
95
  }
84
96
 
85
 
  if (dump_pg_log) {
 
97
  if (!dump_pg_log.empty()) {
86
98
    common_init_finish(g_ceph_context);
87
99
    bufferlist bl;
88
100
    std::string error;
89
 
    int r = bl.read_file(dump_pg_log, &error);
 
101
    int r = bl.read_file(dump_pg_log.c_str(), &error);
90
102
    if (r >= 0) {
91
103
      PG::Log::Entry e;
92
104
      bufferlist::iterator p = bl.begin();
189
201
         << dendl;
190
202
    exit(0);
191
203
  }
 
204
 
 
205
  if (convertfilestore) {
 
206
    int err = OSD::convertfs(g_conf->osd_data, g_conf->osd_journal);
 
207
    if (err < 0) {
 
208
      derr << TEXT_RED << " ** ERROR: error converting store " << g_conf->osd_data
 
209
           << ": " << cpp_strerror(-err) << TEXT_NORMAL << dendl;
 
210
      exit(1);
 
211
    }
 
212
  }
192
213
  
193
214
  string magic;
194
215
  ceph_fsid_t fsid;
251
272
 
252
273
  uint64_t supported =
253
274
    CEPH_FEATURE_UID | 
254
 
    CEPH_FEATURE_NOSRCADDR;
 
275
    CEPH_FEATURE_NOSRCADDR |
 
276
    CEPH_FEATURE_PGID64;
255
277
 
256
278
  client_messenger->set_default_policy(SimpleMessenger::Policy::stateless_server(supported, 0));
257
279
  client_messenger->set_policy(entity_name_t::TYPE_CLIENT,
259
281
  client_messenger->set_policy_throttler(entity_name_t::TYPE_CLIENT, &client_throttler);
260
282
  client_messenger->set_policy(entity_name_t::TYPE_MON,
261
283
                               SimpleMessenger::Policy::client(supported,
262
 
                                                               CEPH_FEATURE_UID));
 
284
                                                               CEPH_FEATURE_UID |
 
285
                                                               CEPH_FEATURE_PGID64));
263
286
  //try to poison pill any OSD connections on the wrong address
264
287
  client_messenger->set_policy(entity_name_t::TYPE_OSD,
265
288
                               SimpleMessenger::Policy::stateless_server(0,0));
267
290
  cluster_messenger->set_default_policy(SimpleMessenger::Policy::stateless_server(0, 0));
268
291
  cluster_messenger->set_policy(entity_name_t::TYPE_MON, SimpleMessenger::Policy::client(0,0));
269
292
  cluster_messenger->set_policy(entity_name_t::TYPE_OSD,
270
 
                                SimpleMessenger::Policy::lossless_peer(supported, CEPH_FEATURE_UID));
 
293
                                SimpleMessenger::Policy::lossless_peer(supported,
 
294
                                                                       CEPH_FEATURE_UID |
 
295
                                                                       CEPH_FEATURE_PGID64));
271
296
  cluster_messenger->set_policy(entity_name_t::TYPE_CLIENT,
272
297
                                SimpleMessenger::Policy::stateless_server(0, 0));
273
298
 
275
300
  // Leave stderr open in case we need to report errors.
276
301
  global_init_daemonize(g_ceph_context, CINIT_FLAG_NO_CLOSE_STDERR);
277
302
  common_init_finish(g_ceph_context);
 
303
 
 
304
  int err = OSD::convertfs(g_conf->osd_data, g_conf->osd_journal);
 
305
  if (err < 0) {
 
306
    derr << TEXT_RED << " ** ERROR: error converting store " << g_conf->osd_data
 
307
         << ": " << cpp_strerror(-err) << TEXT_NORMAL << dendl;
 
308
    exit(1);
 
309
  }
 
310
 
278
311
  MonClient mc(g_ceph_context);
279
312
  if (mc.build_initial_monmap() < 0)
280
313
    return -1;
284
317
                     messenger_hbin, messenger_hbout,
285
318
                     &mc,
286
319
                     g_conf->osd_data, g_conf->osd_journal);
287
 
  int err = osd->pre_init();
 
320
  err = osd->pre_init();
288
321
  if (err < 0) {
289
322
    derr << TEXT_RED << " ** ERROR: initializing osd failed: " << cpp_strerror(-err)
290
323
         << TEXT_NORMAL << dendl;