[ https://issues.apache.org/jira/browse/ROCKETMQ-107?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
yukon resolved ROCKETMQ-107. ---------------------------- Resolution: Fixed > Access ServiceState is not thread safe when start() or shutdown() > ----------------------------------------------------------------- > > Key: ROCKETMQ-107 > URL: https://issues.apache.org/jira/browse/ROCKETMQ-107 > Project: Apache RocketMQ > Issue Type: Bug > Components: rocketmq-client > Affects Versions: 4.0.0-incubating > Reporter: Jaskey Lam > Assignee: Jaskey Lam > Priority: Minor > Fix For: 4.1.0-incubating > > > When start() or shutdown(), service's state is not thread safe which may > break happen-before. > For example: > {code} > switch (this.serviceState) { > case CREATE_JUST: > log.info("the consumer [{}] start beginning. messageModel={}, > isUnitMode={}", this.defaultMQPushConsumer.getConsumerGroup(), > this.defaultMQPushConsumer.getMessageModel(), > this.defaultMQPushConsumer.isUnitMode()); > this.serviceState = ServiceState.START_FAILED; > ..// do some start job here > this.serviceState = ServiceState.RUNNING; > break; > case RUNNING: > case START_FAILED: > case SHUTDOWN_ALREADY: > throw new MQClientException("The PushConsumer service state > not OK, maybe started once, "// > + this.serviceState// > + FAQUrl.suggestTodo(FAQUrl.CLIENT_SERVICE_NOT_OK), > null); > default: > break; > } > {code} > 1. If the user is start twice in two thread, the resources may initize twice. > 2. if the user start in threadA and shutdown very quicky in another thread B, > shutdown may not reclaim the resources. > Though the sceniro is very uncommon, but it is indeed a bug here. Fix is > actually quite trivial. -- This message was sent by Atlassian JIRA (v6.3.15#6346)