void RebalanceImpl::unlockAll(bool oneway) { std::map<std::string, std::set<MessageQueue> > brokerMqs = buildProcessQueueTableByBrokerName(); std::map<std::string, std::set<MessageQueue> >::iterator it = brokerMqs.begin(); for (; it != brokerMqs.end(); it++) { std::string brokerName = it->first; std::set<MessageQueue> mqs = it->second; if (mqs.empty()) { continue; } FindBrokerResult findBrokerResult = m_pMQClientFactory->findBrokerAddressInSubscribe(brokerName, MixAll::MASTER_ID, true); if (!findBrokerResult.brokerAddr.empty()) { UnlockBatchRequestBody* requestBody = new UnlockBatchRequestBody(); requestBody->setConsumerGroup(m_consumerGroup); requestBody->setClientId(m_pMQClientFactory->getClientId()); requestBody->setMqSet(mqs); try { m_pMQClientFactory->getMQClientAPIImpl()->unlockBatchMQ(findBrokerResult.brokerAddr, requestBody, 1000, oneway); kpr::ScopedLock<kpr::Mutex> lock(m_processQueueTableLock); std::set<MessageQueue>::iterator itm = mqs.begin(); for (; itm!=mqs.end(); itm++) { std::map<MessageQueue, ProcessQueue*>::iterator itp = m_processQueueTable.find(*itm); if (itp != m_processQueueTable.end()) { itp->second->setLocked(false); //TODO log.info("the message queue unlock OK, Group: {} {}", this.consumerGroup, mq); } } } catch (...) { //TODO log.error("unlockBatchMQ exception, " + mqs, e); } } } }
void RebalanceImpl::unlock(MessageQueue& mq, bool oneway) { FindBrokerResult findBrokerResult = m_pMQClientFactory->findBrokerAddressInSubscribe(mq.getBrokerName(), MixAll::MASTER_ID, true); if (!findBrokerResult.brokerAddr.empty()) { UnlockBatchRequestBody* requestBody = new UnlockBatchRequestBody(); requestBody->setConsumerGroup(m_consumerGroup); requestBody->setClientId(m_pMQClientFactory->getClientId()); requestBody->getMqSet().insert(mq); try { m_pMQClientFactory->getMQClientAPIImpl()->unlockBatchMQ(findBrokerResult.brokerAddr, requestBody, 1000, oneway); } catch (...) { //TODO log.error("unlockBatchMQ exception, " + mq, e); } } }