自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

w007d的专栏

希望在技术上有所建树

  • 博客(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 322

原创 认证函数调用过程

只是梳理了函数调用,没有详细代码注释/*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 244

原创 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 222

原创 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 386

原创 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 758

原创 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 209

原创 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 240

原创 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 383

原创 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 ---&gt.

2020-09-09 16:48:43 188

原创 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 392

原创 继承-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 110

原创 继承-01

继承语法:class 派生类名 : 访问修饰符 基类名1, …, 访问修饰符 基类名n{成员变量和成员函数};访问修饰符: public、protected 或 private,则默认为 private。public:在类的内部、外部都能使用protected:在类的内部使用,在继承的子类中使用private:只能在类的内部,不能在类的外部(包括继承中的子类也不能使用)(派生类...

2019-07-14 21:56:36 82

原创 指针和引用

能用引用的地方必然可以用指针代替。什么是变量变量其实是地址的代号。访问变量名称时其实是访问变量代表的地址中的内容。也就是说访问变量时,首先先找到地址,然后取出地址中内容。什么是指针指针和变量一样也是具有自己的地址的。只不过指针地址中存放的内容,是另一个变量的地址。int x = 10; // x可以理解为地址中的内容,而&x则代表x所在的地址int *p = &x; ...

2019-07-12 00:45:38 211

原创 const

变量:const修饰变量,表示该变量只读。用于取代c语言中的宏定义,类型安全。非成员变量声明const时必须初始化const 类型说明符 变量名指针:const修饰指针时根据右结合特性,const要区分修饰的是地址(指针),还是修饰指针指向的对象char *const cp; //const指针,指针结合const。cp的指向不可以改变,但是cp指向的内容可以变化char const ...

2019-07-11 23:45:04 185

原创 按层访问二叉树

#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 197

原创 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 420 1

原创 ceph——AsyncMessenger类图

以上类图简单的画出了关键类之间的关系,可能存在错误的地方。AsyncMessenger构造打字过程1:生成DispatchQueue对象2:生成AsyncMessenger::stack,该变量为PosixNetworkStack类型指针在其父类NetworkStack构造时,会生成vector&lt;Worker*&gt;成员,Worker*是PosixWorer的父类指针Worker...

2019-03-02 22:55:08 349

原创 类A的对象作为类B的成员时,类A的构造函数如何调用

最简单情况,类A和类B都没有成员变量class A{public: A(){cout &lt;&lt; "this is A" &lt;&lt; endl;}};class B{ A a;public: B(){ cout &lt;&lt; "this is B" &lt;&lt; endl;}};int main(int argc, const ch...

2019-03-02 22:11:55 2766

原创 主MON处理创建pool的命令

创建完成pool,才会生成PGMap,下次分析PGMAP流程。创建pool流程最主要的目的是在osdmonitor中的pending_inc中保存数据,而后进行paxos流程。下文首先分析创建pool后,触发的paxos流程。...

2019-02-27 00:04:28 477

原创 paxos流程

疑问:为什么一次paxos需要提交两次数据库?buffer_list的结构,t如何去解析以及存储数据?

2019-02-26 23:57:53 252

原创 L版本PGMonitor不在使用

在PGMonitor最初的两次paxos之后,did_delete被设置为true。did_delete被设置成为true之后,PGMonitor将不在起作用。

2019-02-25 23:09:38 138

原创 MON首次_active框架

蓝色字体为重载函数

2019-02-25 22:26:41 292

原创 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 241

原创 ceph——认证——2

第二阶段mon处理:mon处理完成后再次返回CEPH_MSG_AUTH_REPLY消息给monc,monc处理如下:

2019-02-23 22:34:43 216

原创 ceph——认证——1

当链接建立或者链接异常断开后重新建立时,需要首先执行认证流程。认证流程入口如下:认证分为三个阶段。第一阶段首先MONC发送CEPH_MSG_AUTH到MONMON收到该消息之后处理如下 mon处理完成后需要给MONC返回一个CEPH_MSG_AUTH_REPLY消息,MONC收到该消息后处理如下:...

2019-02-23 22:30:34 390

原创 boost——智能指针

类型作用scoped_ptr&lt;T&gt;类似临时变量。离开作用域立刻释放内存shared_ptr&lt;T&gt;内部维护一个引用计数器来判断此指针是不是需要被释放weak_ptr&lt;T&gt;弱指针,要和shared_ptr 结合使用intrusive_ptr&lt;T&gt;要求T自己提供这个计数器,类似shared_ptrscop...

2019-02-21 23:18:11 116

原创 MON-probe 未完待续

2018-10-10 22:24:49 127

原创 MON消息接收的公共处理

2018-10-10 21:37:21 171

原创 Monitor::preinit

int Monitor::preinit()|---r = sanitize_options() |---g_conf-&gt;mon_lease_renew_interval_factor //必须小于1.0 |---g_conf-&gt;mon_lease_ack_timeout_factor // 必须大于1.0|---PerfCountersBuilder pcb(g...

2018-09-08 19:20:35 189

原创 ceph通信(3)——AsyncMessenger启动接收线程

OSD::init |—client_messenger-&amp;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 331

原创 ceph通信(2)——AsyncMessenger::bind绑定端口

|—ms_public-&gt;bind(g_conf-&gt;public_addr); // AsyncMessenger::bind(const entity_addr_t &amp;bind_addr) // 入参 bind_addr=”本节点IP:0/0” |—for (auto &amp;&amp;p : processors) |— p-&gt;bind...

2018-08-05 13:58:10 248

原创 ceph通信(1)——AsyncMessenger构造

AsyncMessenger(cct, name, type, std::move(lname), nonce); // name = entity_name_t、type = &amp;quot;async+posix&amp;quot;、 lname = &amp;quot;client&amp;quot; nonce = pidentity_name_t::OSD(whoami)|---entity_name_t(TYPE_OSD, i) // s.

2018-08-05 10:38:52 687

原创 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 229

原创 构造函数-1

#include &amp;lt;iostream&amp;gt;using namespace std;using std::ostringstream;class A{public: // A() { x = 0; cout &amp;lt;&amp;lt; &quot;x = &quot; &amp;lt;&amp;lt; x &amp;lt;&amp;lt; endl; } A(int a)

2018-07-31 21:40:08 133

原创 ceph——三副本读写——3

PrimaryLogPG::do_op(OpRequestRef&amp; op)|---if (m-&gt;finish_decode()) //解码什么?|---hobject_t head = m-&gt;get_hobj()// info.pgid.pgid.get_split_bits = unsigned pg_t::get_split_bits(unsigned pg_n...

2018-07-04 23:16:00 4193

原创 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 1201

原创 ceph——三副本读写——2

处理线程void OSD::ShardedOpWQ::_process(uint32_t thread_index, heartbeat_handle_d *hb)|---auto&amp; sdata = osd-&gt;shards[shard_index]; //vector&lt;OSDShard*&gt; shards;|---if (sdata-&gt;pqueue-&gt...

2018-07-01 21:00:00 1939 2

原创 ceph——三副本读写流程——1

加入队列 void OSD::ms_fast_dispatch(Message *m) //接受client发送到OSD的请求,并开始处理请求 |—service.is_stopping() //osd服务已经停止的话,则m-&amp;amp;gt;put(),nref减计数,计数减到0时? //op的类型是 typedef boost::intrusive_ptr Ref |—O...

2018-07-01 15:29:34 2217

原创 SocketsOps.h

一直想学习网络,有幸看到陈硕老师的muduo代码,希望可以深入学习一下。#ifndef MUDUO_NET_SOCKETSOPS_H#define MUDUO_NET_SOCKETSOPS_H#include &lt;arpa/inet.h&gt;namespace muduo{ namespace net { namespace sockets...

2018-06-10 14:04:26 151

原创 const

定义常量const 类型说明符 变量名 const int a = 10; //a的值定义后不允许变化。等同于 int const a = 10; const char *p = &amp;var_c1; //const 修饰 *p,就是说指针指向的内容(*p的值)不通过*p直接修改,但是可以通过var_c1来修改*p的值。等同于 char const *p=&a...

2018-05-22 10:04:07 97

临时meta同步数据,未完成

rgw meta同步,临时保存在这里,便于以后查询 、 rgw meta同步,临时保存在这里,便于以后查询 rgw meta同步,临时保存在这里,便于以后查询

2020-09-25

RGWRados initialize.pdf

RGWRados::initialize 框架 待完善 代码流程,需要进一步的梳理流程

2019-09-17

enterprise architecture

enterprise architecture 工具,用于画图,暂时保存在csdn

2017-10-15

source insght 显示多个文件名

网上找到的,可以让source insight 显示多个文件名,安装时会报有病毒,但是我还是安装了,下载人员慎用。感觉不太还用,但是比没有强

2017-09-12

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除