[ https://issues.apache.org/jira/browse/ROCKETMQ-272?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16138024#comment-16138024 ]
Yu Kaiyuan commented on ROCKETMQ-272: ------------------------------------- Hi [~Jaskey] The first line of producer log shows the time the message created. {code:java} 2017-08-22 14:26:25,420 INFO main com.rmq.example.TestProducer 28: Message content size = 512028 {code} The second line of producer log shows the time the response printed. {code:java} 2017-08-22 14:26:25,420 INFO main com.rmq.example.TestProducer 28: Message content size = 512028} {code} You can figure out that the elapsed time is less than 1 second. Master's config here: {code:java} brokerClusterName=SHGQTestCluster brokerName=broker-a brokerId=0 deleteWhen=04 fileReservedTime=48 brokerRole=SYNC_MASTER flushDiskType=SYNC_FLUSH storePathRootDir=/data/store storePathCommitLog=/data/store/commitlog waitTimeMillsInSendQueue=600 {code} And the config of Slave is nothing different, except `brokerRole` & `brokerId`. > The config `syncFlushTimeout` doesn't work for SYNC_MASTER > ---------------------------------------------------------- > > Key: ROCKETMQ-272 > URL: https://issues.apache.org/jira/browse/ROCKETMQ-272 > Project: Apache RocketMQ > Issue Type: Bug > Components: rocketmq-broker > Affects Versions: 4.1.0-incubating > Reporter: Yu Kaiyuan > Assignee: yukon > > It's quite frequent to get result as `sendStatus=FLUSH_SLAVE_TIMEOUT` when > sending big messages(>500k) in SYNC_MASTER/SLAVE scenario. > The timeout value used by the sync process currently as I found, is the > config `syncFlushTimeout`. And its default value is 5000 milliseconds. > But it shows that producer get the result as `FLUSH_SLAVE_TIMEOUT` less than > 1 second. > So why does the config not work as expected? > Relevant code: > {code:java} > // CommitLog.java > public PutMessageResult putMessage(final MessageExtBrokerInner msg) { > { > // Synchronous write double > if (BrokerRole.SYNC_MASTER == > this.defaultMessageStore.getMessageStoreConfig().getBrokerRole()) { > HAService service = this.defaultMessageStore.getHaService(); > if (msg.isWaitStoreMsgOK()) { > // Determine whether to wait > if (service.isSlaveOK(result.getWroteOffset() + > result.getWroteBytes())) { > if (null == request) { > request = new GroupCommitRequest(result.getWroteOffset() > + result.getWroteBytes()); > } > service.putRequest(request); > service.getWaitNotifyObject().wakeupAll(); > boolean flushOK = > // TODO > > request.waitForFlush(this.defaultMessageStore.getMessageStoreConfig().getSyncFlushTimeout()); > if (!flushOK) { > log.error("do sync transfer other node, wait return, but > failed, topic: " + msg.getTopic() + " tags: " > + msg.getTags() + " client address: " + > msg.getBornHostString()); > > putMessageResult.setPutMessageStatus(PutMessageStatus.FLUSH_SLAVE_TIMEOUT); > } > } > // Slave problem > else { > // Tell the producer, slave not available > > putMessageResult.setPutMessageStatus(PutMessageStatus.SLAVE_NOT_AVAILABLE); > } > } > } > return putMessageResult; > } > {code} -- This message was sent by Atlassian JIRA (v6.4.14#64029)