You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@rocketmq.apache.org by yuzhou li <ia...@gmail.com> on 2018/05/29 09:56:28 UTC

rocketmq落盘消息协议CRC的疑问

this.resetByteBuffer(msgStoreItemMemory, msgLen);
// 1 TOTALSIZE
this.msgStoreItemMemory.putInt(msgLen);
// 2 MAGICCODE
this.msgStoreItemMemory.putInt(CommitLog.MESSAGE_MAGIC_CODE);
// 3 BODYCRC
this.msgStoreItemMemory.putInt(msgInner.getBodyCRC());
// 4 QUEUEID
this.msgStoreItemMemory.putInt(msgInner.getQueueId());
// 5 FLAG
this.msgStoreItemMemory.putInt(msgInner.getFlag());


落盘的消息只存放了消息内容的CRC校验值,似乎没有对整个落盘数据做CRC校验,这块是有其他地方做了整体的CRC验证吗?还是我理解错了呢?

Re: rocketmq落盘消息协议CRC的疑问

Posted by yuzhou li <ia...@gmail.com>.
rocketmq的一条消息是由几部分组成的,比如消息+消息的properties+系统属性(服务端timestamp等等),我的意思是现在代码里面的CRC只对消息本身做了CRC校验,并没有对消息的properties以及系统属性做CRC;而相对应的,kakfa的CRC则是对整个落盘数据做了CRC校验的,所以我才会问下,是我代码没有看全还是确实是这样的呢?

老胡 <23...@qq.com> 于2018年5月29日周二 下午6:07写道:

> crc是数据校验,所有的数据都crc都对了,整个就对了。 对当前mappedfile实时crc,是不现实的操作。 如何可能crc的功能是关闭的
> ------------------ 原始邮件 ------------------
> *发件人:* "yuzhou li"<ia...@gmail.com>
> *发送时间:* 2018年5月29日(星期二) 下午5:56
> *收件人:* "users"<us...@rocketmq.apache.org>;
> *主题:* rocketmq落盘消息协议CRC的疑问
>
> this.resetByteBuffer(msgStoreItemMemory, msgLen);
> // 1 TOTALSIZE
> this.msgStoreItemMemory.putInt(msgLen);
> // 2 MAGICCODE
> this.msgStoreItemMemory.putInt(CommitLog.MESSAGE_MAGIC_CODE);
> // 3 BODYCRC
> this.msgStoreItemMemory.putInt(msgInner.getBodyCRC());
> // 4 QUEUEID
> this.msgStoreItemMemory.putInt(msgInner.getQueueId());
> // 5 FLAG
> this.msgStoreItemMemory.putInt(msgInner.getFlag());
>
>
> 落盘的消息只存放了消息内容的CRC校验值,似乎没有对整个落盘数据做CRC校验,这块是有其他地方做了整体的CRC验证吗?还是我理解错了呢?
>

回复:rocketmq落盘消息协议CRC的疑问

Posted by 老胡 <23...@qq.com>.
crc是数据校验,所有的数据都crc都对了,整个就对了。 对当前mappedfile实时crc,是不现实的操作。 如何可能crc的功能是关闭的------------------ 原始邮件 ------------------
发件人: "yuzhou li"<ia...@gmail.com>
发送时间: 2018年5月29日(星期二) 下午5:56
收件人: "users"<us...@rocketmq.apache.org>;
主题: rocketmq落盘消息协议CRC的疑问


this.resetByteBuffer(msgStoreItemMemory, msgLen);
// 1 TOTALSIZE
this.msgStoreItemMemory.putInt(msgLen);
// 2 MAGICCODE
this.msgStoreItemMemory.putInt(CommitLog.MESSAGE_MAGIC_CODE);
// 3 BODYCRC
this.msgStoreItemMemory.putInt(msgInner.getBodyCRC());
// 4 QUEUEID
this.msgStoreItemMemory.putInt(msgInner.getQueueId());
// 5 FLAG
this.msgStoreItemMemory.putInt(msgInner.getFlag());

落盘的消息只存放了消息内容的CRC校验值,似乎没有对整个落盘数据做CRC校验,这块是有其他地方做了整体的CRC验证吗?还是我理解错了呢?