Skip to content

Commit 1ce5758

Browse files
Fixed use case where DataPublisher defines no metadata but is started anyway.
1 parent e226290 commit 1ce5758

File tree

1 file changed

+21
-12
lines changed

1 file changed

+21
-12
lines changed

src/lib/transport/SubscriberConnection.cpp

Lines changed: 21 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -952,24 +952,33 @@ void SubscriberConnection::HandleMetadataRefresh(uint8_t* data, uint32_t length)
952952
try
953953
{
954954
const DataSetPtr metadata = FilterClientMetadata(filterExpressions);
955-
const vector<uint8_t> serializedMetadata = SerializeMetadata(metadata);
956-
vector<DataTablePtr> tables = metadata->Tables();
957-
uint64_t rowCount = 0;
958955

959-
for (size_t i = 0; i < tables.size(); i++)
960-
rowCount += tables[i]->RowCount();
961-
962-
if (rowCount > 0)
956+
if (metadata == nullptr)
963957
{
964-
const TimeSpan elapsedTime = UtcNow() - startTime;
965-
m_parent->DispatchStatusMessage(ToString(rowCount) + " records spanning " + ToString(tables.size()) + " tables of meta-data prepared in " + ToString(elapsedTime) + ", sending response to " + GetConnectionID() + "...");
958+
m_parent->DispatchStatusMessage("No meta-data has been defined by the publisher, sending an empty response to " + GetConnectionID() + "...");
959+
SendResponse(ServerResponse::Succeeded, ServerCommand::MetadataRefresh, vector<uint8_t>(0));
966960
}
967961
else
968962
{
969-
m_parent->DispatchStatusMessage("No meta-data is available" + string(filterExpressions.empty() ? "" : " due to user applied meta-data filters") + ", sending an empty response to " + GetConnectionID() + "...");
970-
}
963+
const vector<uint8_t> serializedMetadata = SerializeMetadata(metadata);
964+
vector<DataTablePtr> tables = metadata->Tables();
965+
uint64_t rowCount = 0;
966+
967+
for (size_t i = 0; i < tables.size(); i++)
968+
rowCount += tables[i]->RowCount();
969+
970+
if (rowCount > 0)
971+
{
972+
const TimeSpan elapsedTime = UtcNow() - startTime;
973+
m_parent->DispatchStatusMessage(ToString(rowCount) + " records spanning " + ToString(tables.size()) + " tables of meta-data prepared in " + ToString(elapsedTime) + ", sending response to " + GetConnectionID() + "...");
974+
}
975+
else
976+
{
977+
m_parent->DispatchStatusMessage("No meta-data is available" + string(filterExpressions.empty() ? "" : " due to user applied meta-data filters") + ", sending an empty response to " + GetConnectionID() + "...");
978+
}
971979

972-
SendResponse(ServerResponse::Succeeded, ServerCommand::MetadataRefresh, serializedMetadata);
980+
SendResponse(ServerResponse::Succeeded, ServerCommand::MetadataRefresh, serializedMetadata);
981+
}
973982
}
974983
catch (const FilterExpressionParserException& ex)
975984
{

0 commit comments

Comments
 (0)