- 博客(68)
- 资源 (4)
- 收藏
- 关注
原创 rgw daemon命令注册与处理代码流程简介
auto cct = global_init(&defaults, args, CEPH_ENTITY_TYPE_CLIENT, CODE_ENVIRONMENT_DAEMON, flags, "rgw_data");global_pre_init(defaults, args, module_type, code_env, flags);CephContext *cct = new CephContext(iparams.module_type, code_env, flags);构造时会完
2021-02-27 11:39:15
405
原创 认证函数调用过程
只是梳理了函数调用,没有详细代码注释/*s3_main_strategy_t(CephContext* const cct, ImplicitTenants& implicit_tenant_context, RGWCtl* const ctl) : s3_main_strategy_plain(cct, implicit_tenant_context, ctl), s3_main_strategy_boto2(cct, implicit_tenant_context, ctl) {
2020-11-15 23:38:25
308
原创 rgw v2签名生成过程
/*url=ip:portparam_vec_t params;params.push_back(param_pair_t(RGW_SYS_PARAM_PREFIX "prepend-metadata", "true"));params.push_back(param_pair_t(RGW_SYS_PARAM_PREFIX "stat", "true"));params.push_back(param_pair_t(RGW_SYS_PARAM_PREFIX "sync-manifest", "")
2020-11-15 00:26:45
288
原创 01 rgw multisite 同步数据 初始化进程
run_sync_thread // 元数据同步(同步配置)meta_sync_processor_thread = new RGWMetaSyncProcessorThread(this->store, async_processor);ret = meta_sync_processor_thread->init();meta_sync_processor_thread->start();// trim logrgw::BucketTrimConfig config;
2020-09-18 15:57:41
515
原创 rgw multisite 协程源码分析
rgw multisite 协程通过RGWCoroutinesManager::run启动,然后通过call或者spawn来添加新的op到调度队列。call的作用通过call来执行的op,会将该op加入到stack的顶部,然后该op得到调用,只有最顶部的op执行完成,该op会被出栈,然后接着执行最顶部的opspawn的作用通过spawn来执行的op,会生成一个新的stack,并添加到当前的env->scheduled_stacks中,然后这些stack会被顺序调度。由于stack中的op可以
2020-09-15 19:35:20
943
原创 AtomicObjectProcessor 10M对象的处理过程
第一次写[0,4M],将4M数据保存到first_chunk中后即可返回,不涉及manifest等处理也不涉及写radosHeadObjectProcessor::process(bufferlist&& data, uint64_t logical_offset) // data.length()=4M,logical_offset=0 flush = false,data_offset = 0, head_chunk_size = 4M, remaining = count =
2020-09-10 00:50:04
267
原创 AtomicObjectProcessor 写对象
以4M作为一次写rados的上限 写10M数据// 假设写10M数据,顺序如下:[0,4M]保存到first_chunk中,[4M,8M]写入rados,[8M,10M]小于4M通过chunk写入rados// 第一次写 4M, logical_offset = 0int HeadObjectProcessor::process(bufferlist&& data, uint64_t logical_offset){ // 第一次:data.length = 4M const
2020-09-09 17:36:47
297
原创 AtomicObjectProcessor prepare&写整体流程
为了便于说明,以代码默认的4M为例prepare// prepare主要完成对manifest的初始化处理。AtomicObjectProcessor::prepare// 获取数据池的名称:head_pool// alignment : rados对齐方式, 假设64K对齐。max_head_chunk_size : head的最大长度,假设为4M// 假设 head_max_size = chunk_size = max_head_chunk_size = 4M// stripe_si
2020-09-09 17:22:29
470
原创 AtomicObjectProcessor 执行入口
List item类继承关系class RGWPutObj : public RGWOpclass RGWPutObj_ObjStore : public RGWPutObjclass RGWPutObj_ObjStore_S3 : public RGWPutObj_ObjStoreList item参数解析// RGWHandler_REST_S3::init ---> copy_source 赋值操作等RGWPutObj::verify_permission --->.
2020-09-09 16:48:43
235
原创 process_request O版本rgw处理请求入口
1:基于S3协议的put操作说明2:rgw处理client的请求的入口3:下次分析put obj 的execute流程int process_request(rgw::sal::RGWRadosStore* const store, RGWREST* const rest, RGWRequest* const req, const std::string& frontend_prefix, const rgw_auth_registry_t& auth_registry,
2020-09-09 16:05:21
466
原创 继承-02
不带虚函数的单虚继承#include "stdafx.h"#include "iostream"using namespace std;class Base{public: Base (int a = 1):base(a){} void fun0(){cout << base << endl;} int base;};clas...
2019-07-14 23:20:57
167
原创 继承-01
继承语法:class 派生类名 : 访问修饰符 基类名1, …, 访问修饰符 基类名n{成员变量和成员函数};访问修饰符: public、protected 或 private,则默认为 private。public:在类的内部、外部都能使用protected:在类的内部使用,在继承的子类中使用private:只能在类的内部,不能在类的外部(包括继承中的子类也不能使用)(派生类...
2019-07-14 21:56:36
111
原创 指针和引用
能用引用的地方必然可以用指针代替。什么是变量变量其实是地址的代号。访问变量名称时其实是访问变量代表的地址中的内容。也就是说访问变量时,首先先找到地址,然后取出地址中内容。什么是指针指针和变量一样也是具有自己的地址的。只不过指针地址中存放的内容,是另一个变量的地址。int x = 10; // x可以理解为地址中的内容,而&x则代表x所在的地址int *p = &x; ...
2019-07-12 00:45:38
270
原创 const
变量:const修饰变量,表示该变量只读。用于取代c语言中的宏定义,类型安全。非成员变量声明const时必须初始化const 类型说明符 变量名指针:const修饰指针时根据右结合特性,const要区分修饰的是地址(指针),还是修饰指针指向的对象char *const cp; //const指针,指针结合const。cp的指向不可以改变,但是cp指向的内容可以变化char const ...
2019-07-11 23:45:04
230
原创 按层访问二叉树
#include <iostream>#include<queue>using namespace std;typedef struct tag_TreeNode{ int val; struct tag_TreeNode* left; struct tag_TreeNode* right; tag_TreeNode(int ...
2019-05-27 22:41:33
238
原创 ceph——osd——osd new
将osd扩容进集群时,客户端会给mon发送一个osd new的cmd。mon收到该cmd后会给该磁盘分配osdid同时在pending_inc的new_state和new_uuid中记录信息,等待执行一次paxos...
2019-03-17 08:51:58
491
1
原创 ceph——AsyncMessenger类图
以上类图简单的画出了关键类之间的关系,可能存在错误的地方。AsyncMessenger构造打字过程1:生成DispatchQueue对象2:生成AsyncMessenger::stack,该变量为PosixNetworkStack类型指针在其父类NetworkStack构造时,会生成vector<Worker*>成员,Worker*是PosixWorer的父类指针Worker...
2019-03-02 22:55:08
421
原创 类A的对象作为类B的成员时,类A的构造函数如何调用
最简单情况,类A和类B都没有成员变量class A{public: A(){cout << "this is A" << endl;}};class B{ A a;public: B(){ cout << "this is B" << endl;}};int main(int argc, const ch...
2019-03-02 22:11:55
2878
原创 主MON处理创建pool的命令
创建完成pool,才会生成PGMap,下次分析PGMAP流程。创建pool流程最主要的目的是在osdmonitor中的pending_inc中保存数据,而后进行paxos流程。下文首先分析创建pool后,触发的paxos流程。...
2019-02-27 00:04:28
521
原创 L版本PGMonitor不在使用
在PGMonitor最初的两次paxos之后,did_delete被设置为true。did_delete被设置成为true之后,PGMonitor将不在起作用。
2019-02-25 23:09:38
187
原创 ceph——认证——3
mon收到第三阶段认证消息后处理如下:mon再次返回认证reply消息给monc,monc处理如下:疑问:1:L版本一个monc会给monmap中所有节点都发送认证消息,怎么确认哪个mon完成认证呢?2:对于链接断开后重新建立的情况,monc的global_id一定为0吗3:认证的第一步是mon分配global_id,如果素有mon同时认证,那么所有mon分配的global_id都一...
2019-02-23 22:43:43
299
原创 ceph——认证——1
当链接建立或者链接异常断开后重新建立时,需要首先执行认证流程。认证流程入口如下:认证分为三个阶段。第一阶段首先MONC发送CEPH_MSG_AUTH到MONMON收到该消息之后处理如下 mon处理完成后需要给MONC返回一个CEPH_MSG_AUTH_REPLY消息,MONC收到该消息后处理如下:...
2019-02-23 22:30:34
450
原创 boost——智能指针
类型作用scoped_ptr<T>类似临时变量。离开作用域立刻释放内存shared_ptr<T>内部维护一个引用计数器来判断此指针是不是需要被释放weak_ptr<T>弱指针,要和shared_ptr 结合使用intrusive_ptr<T>要求T自己提供这个计数器,类似shared_ptrscop...
2019-02-21 23:18:11
163
原创 Monitor::preinit
int Monitor::preinit()|---r = sanitize_options() |---g_conf->mon_lease_renew_interval_factor //必须小于1.0 |---g_conf->mon_lease_ack_timeout_factor // 必须大于1.0|---PerfCountersBuilder pcb(g...
2018-09-08 19:20:35
242
原创 ceph通信(3)——AsyncMessenger启动接收线程
OSD::init |—client_messenger-&gt;add_dispatcher_head(this) // Messenger.h void add_dispatcher_head(Dispatcher *d) |—bool first = dispatchers.empty() // 初始化时dispatcher为空,list
2018-08-05 17:08:36
397
原创 ceph通信(2)——AsyncMessenger::bind绑定端口
|—ms_public->bind(g_conf->public_addr); // AsyncMessenger::bind(const entity_addr_t &bind_addr) // 入参 bind_addr=”本节点IP:0/0” |—for (auto &&p : processors) |— p->bind...
2018-08-05 13:58:10
320
原创 ceph通信(1)——AsyncMessenger构造
AsyncMessenger(cct, name, type, std::move(lname), nonce); // name = entity_name_t、type = &quot;async+posix&quot;、 lname = &quot;client&quot; nonce = pidentity_name_t::OSD(whoami)|---entity_name_t(TYPE_OSD, i) // s.
2018-08-05 10:38:52
760
原创 AsyncMessager初步
ceph_osd.cc// 创建AsyncMessager对象|---Messenger *ms_public = Messenger::create(g_ceph_context, public_msgr_type, entity_name_t::OSD(whoami), "client", getpid(), Messenger::HAS_HE...
2018-08-01 01:15:00
288
原创 构造函数-1
#include &lt;iostream&gt;using namespace std;using std::ostringstream;class A{public: // A() { x = 0; cout &lt;&lt; "x = " &lt;&lt; x &lt;&lt; endl; } A(int a)
2018-07-31 21:40:08
164
原创 ceph——三副本读写——3
PrimaryLogPG::do_op(OpRequestRef& op)|---if (m->finish_decode()) //解码什么?|---hobject_t head = m->get_hobj()// info.pgid.pgid.get_split_bits = unsigned pg_t::get_split_bits(unsigned pg_n...
2018-07-04 23:16:00
4279
原创 ceph——创建pg
CEPH_MSG_OSD_MAP //MON通知OSD创建OSDMap的消息码bool OSD::ms_dispatch(Message *m)|---如果是标记osd down的话,直接返回service.got_stop_ack(), return true|---如果osd已经已经停止服务,则return true|---do_waiters() //li...
2018-07-04 00:11:08
1275
原创 ceph——三副本读写——2
处理线程void OSD::ShardedOpWQ::_process(uint32_t thread_index, heartbeat_handle_d *hb)|---auto& sdata = osd->shards[shard_index]; //vector<OSDShard*> shards;|---if (sdata->pqueue->...
2018-07-01 21:00:00
2060
2
原创 ceph——三副本读写流程——1
加入队列 void OSD::ms_fast_dispatch(Message *m) //接受client发送到OSD的请求,并开始处理请求 |—service.is_stopping() //osd服务已经停止的话,则m-&amp;gt;put(),nref减计数,计数减到0时? //op的类型是 typedef boost::intrusive_ptr Ref |—O...
2018-07-01 15:29:34
2322
原创 SocketsOps.h
一直想学习网络,有幸看到陈硕老师的muduo代码,希望可以深入学习一下。#ifndef MUDUO_NET_SOCKETSOPS_H#define MUDUO_NET_SOCKETSOPS_H#include <arpa/inet.h>namespace muduo{ namespace net { namespace sockets...
2018-06-10 14:04:26
198
原创 const
定义常量const 类型说明符 变量名 const int a = 10; //a的值定义后不允许变化。等同于 int const a = 10; const char *p = &var_c1; //const 修饰 *p,就是说指针指向的内容(*p的值)不通过*p直接修改,但是可以通过var_c1来修改*p的值。等同于 char const *p=&a...
2018-05-22 10:04:07
130
临时meta同步数据,未完成
2020-09-25
source insght 显示多个文件名
2017-09-12
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人