1
0
Fork 0
mirror of https://github.com/ossrs/srs.git synced 2025-03-09 15:49:59 +00:00

kafka refine comments.

This commit is contained in:
winlin 2015-10-22 14:29:37 +08:00
parent 31a77a83ed
commit de41c1c9d2
3 changed files with 42 additions and 31 deletions

View file

@ -99,6 +99,32 @@ std::string srs_kafka_summary_partitions(const vector<SrsKafkaPartition*>& parti
return srs_join_vector_string(ret, ", "); return srs_join_vector_string(ret, ", ");
} }
void srs_kafka_metadata2connector(SrsKafkaTopicMetadataResponse* metadata, vector<SrsKafkaPartition*>& partitions)
{
for (int i = 0; i < metadata->metadatas.size(); i++) {
SrsKafkaTopicMetadata* topic = metadata->metadatas.at(i);
for (int j = 0; j < topic->metadatas.size(); j++) {
SrsKafkaPartitionMetadata* partition = topic->metadatas.at(j);
SrsKafkaPartition* p = new SrsKafkaPartition();
p->id = partition->partition_id;
p->broker = partition->leader;
for (int i = 0; i < metadata->brokers.size(); i++) {
SrsKafkaBroker* broker = metadata->brokers.at(i);
if (broker->node_id == p->broker) {
p->host = broker->host.to_str();
p->port = broker->port;
break;
}
}
partitions.push_back(p);
}
}
}
SrsKafkaPartition::SrsKafkaPartition() SrsKafkaPartition::SrsKafkaPartition()
{ {
id = broker = 0; id = broker = 0;
@ -120,7 +146,7 @@ string SrsKafkaPartition::hostport()
SrsKafkaProducer::SrsKafkaProducer() SrsKafkaProducer::SrsKafkaProducer()
{ {
meatadata_ok = false; metadata_ok = false;
metadata_expired = st_cond_new(); metadata_expired = st_cond_new();
lock = st_mutex_new(); lock = st_mutex_new();
@ -156,7 +182,6 @@ int SrsKafkaProducer::initialize()
{ {
int ret = ERROR_SUCCESS; int ret = ERROR_SUCCESS;
meatadata_ok = false;
srs_info("initialize kafka producer ok."); srs_info("initialize kafka producer ok.");
return ret; return ret;
@ -175,9 +200,7 @@ int SrsKafkaProducer::start()
srs_error("start kafka thread failed. ret=%d", ret); srs_error("start kafka thread failed. ret=%d", ret);
} }
meatadata_ok = false; refresh_metadata();
st_cond_signal(metadata_expired);
srs_trace("kafka work in background");
return ret; return ret;
} }
@ -203,7 +226,7 @@ int SrsKafkaProducer::on_before_cycle()
{ {
// wait for the metadata expired. // wait for the metadata expired.
// when metadata is ok, wait for it expired. // when metadata is ok, wait for it expired.
if (meatadata_ok) { if (metadata_ok) {
st_cond_wait(metadata_expired); st_cond_wait(metadata_expired);
} }
@ -291,34 +314,20 @@ int SrsKafkaProducer::request_metadata()
srs_trace("kafka metadata: %s", summary.c_str()); srs_trace("kafka metadata: %s", summary.c_str());
// generate the partition info. // generate the partition info.
for (int i = 0; i < metadata->metadatas.size(); i++) { srs_kafka_metadata2connector(metadata, partitions);
SrsKafkaTopicMetadata* topic = metadata->metadatas.at(i);
for (int j = 0; j < topic->metadatas.size(); j++) {
SrsKafkaPartitionMetadata* partition = topic->metadatas.at(j);
SrsKafkaPartition* p = new SrsKafkaPartition();
p->id = partition->partition_id;
p->broker = partition->leader;
for (int i = 0; i < metadata->brokers.size(); i++) {
SrsKafkaBroker* broker = metadata->brokers.at(i);
if (broker->node_id == p->broker) {
p->host = broker->host.to_str();
p->port = broker->port;
break;
}
}
partitions.push_back(p);
}
}
srs_trace("kafka connector: %s", srs_kafka_summary_partitions(partitions).c_str()); srs_trace("kafka connector: %s", srs_kafka_summary_partitions(partitions).c_str());
meatadata_ok = true; metadata_ok = true;
return ret; return ret;
} }
void SrsKafkaProducer::refresh_metadata()
{
metadata_ok = false;
st_cond_signal(metadata_expired);
srs_trace("kafka async refresh metadata in background");
}
#endif #endif

View file

@ -69,7 +69,7 @@ private:
st_mutex_t lock; st_mutex_t lock;
SrsReusableThread* pthread; SrsReusableThread* pthread;
private: private:
bool meatadata_ok; bool metadata_ok;
st_cond_t metadata_expired; st_cond_t metadata_expired;
public: public:
std::vector<SrsKafkaPartition*> partitions; std::vector<SrsKafkaPartition*> partitions;
@ -93,6 +93,8 @@ public:
private: private:
virtual int do_cycle(); virtual int do_cycle();
virtual int request_metadata(); virtual int request_metadata();
// set the metadata to invalid and refresh it.
virtual void refresh_metadata();
}; };
#endif #endif

View file

@ -1010,7 +1010,7 @@ int SrsKafkaProtocol::recv_message(SrsKafkaResponse** pmsg)
// fetch cached api key. // fetch cached api key.
SrsKafkaCorrelationPool* pool = SrsKafkaCorrelationPool::instance(); SrsKafkaCorrelationPool* pool = SrsKafkaCorrelationPool::instance();
SrsKafkaApiKey key = pool->unset(header.correlation_id()); SrsKafkaApiKey key = pool->unset(header.correlation_id());
srs_trace("kafka got %d bytes response, key=%d", header.total_size(), header.correlation_id()); srs_info("kafka got %d bytes response, key=%d", header.total_size(), header.correlation_id());
// create message by cached api key. // create message by cached api key.
SrsKafkaResponse* res = NULL; SrsKafkaResponse* res = NULL;