mirror of
https://github.com/ceph/ceph
synced 2024-12-12 22:46:21 +00:00
13aed89e48
A CephContext represents the context held by a single library user. There can be multiple CephContexts in the same process. For daemons and utility programs, there will be only one CephContext. The CephContext contains the configuration, the dout object, and anything else that you might want to pass to libcommon with every function call. Move some non-config things out of md_config_t and into CephContext. Signed-off-by: Colin McCabe <colin.mccabe@dreamhost.com>
75 lines
1.7 KiB
C++
75 lines
1.7 KiB
C++
// -*- mode:C++; tab-width:8; c-basic-offset:2; indent-tabs-mode:t -*-
|
|
// vim: ts=8 sw=2 smarttab
|
|
/*
|
|
* Ceph - scalable distributed file system
|
|
*
|
|
* Copyright (C) 2004-2006 Sage Weil <sage@newdream.net>
|
|
*
|
|
* This is free software; you can redistribute it and/or
|
|
* modify it under the terms of the GNU Lesser General Public
|
|
* License version 2.1, as published by the Free Software
|
|
* Foundation. See file COPYING.
|
|
*
|
|
*/
|
|
|
|
#include <iostream>
|
|
#include "common/ceph_argparse.h"
|
|
#include "os/FileStore.h"
|
|
#include "common/common_init.h"
|
|
|
|
#undef dout_prefix
|
|
#define dout_prefix *_dout
|
|
|
|
struct Foo : public Thread {
|
|
void *entry() {
|
|
dout(0) << "foo started" << dendl;
|
|
sleep(1);
|
|
dout(0) << "foo asserting 0" << dendl;
|
|
assert(0);
|
|
}
|
|
} foo;
|
|
|
|
int main(int argc, const char **argv)
|
|
{
|
|
vector<const char*> args;
|
|
argv_to_vec(argc, argv, args);
|
|
env_to_vec(args);
|
|
|
|
common_init(args, CEPH_ENTITY_TYPE_CLIENT, CODE_ENVIRONMENT_UTILITY, 0);
|
|
common_init_finish(&g_ceph_context);
|
|
|
|
// args
|
|
if (args.size() < 2) return -1;
|
|
const char *filename = args[0];
|
|
int mb = atoi(args[1]);
|
|
|
|
cout << "#dev " << filename << std::endl;
|
|
cout << "#mb " << mb << std::endl;
|
|
|
|
ObjectStore *fs = new FileStore(filename, NULL);
|
|
if (fs->mount() < 0) {
|
|
cout << "mount failed" << std::endl;
|
|
return -1;
|
|
}
|
|
|
|
ObjectStore::Transaction t;
|
|
char buf[1 << 20];
|
|
bufferlist bl;
|
|
bl.append(buf, sizeof(buf));
|
|
t.create_collection(coll_t());
|
|
|
|
for (int i=0; i<mb; i++) {
|
|
char f[30];
|
|
snprintf(f, sizeof(f), "foo%d\n", i);
|
|
sobject_t soid(f, CEPH_NOSNAP);
|
|
t.write(coll_t(), soid, 0, bl.length(), bl);
|
|
}
|
|
|
|
dout(0) << "starting thread" << dendl;
|
|
foo.create();
|
|
dout(0) << "starting op" << dendl;
|
|
fs->apply_transaction(t);
|
|
|
|
}
|
|
|