Open Session - Invoke modifyPort RPC only if required

This commit is contained in:
Srivats P 2016-05-14 19:49:07 +05:30
parent 3090b5eebd
commit f626c179aa
3 changed files with 40 additions and 5 deletions

View File

@ -454,6 +454,40 @@ void Port::getModifiedDeviceGroupsSinceLastSync(
->CopyFrom(*deviceGroupById(id));
}
/*!
* Finds the user modifiable fields in 'config' that are different from
* the current configuration on the port and modifes 'config' such that
* only those fields are set and returns true. If 'config' is same as
* current port config, 'config' is unmodified and false is returned
*/
bool Port::modifiablePortConfig(OstProto::Port &config) const
{
bool change = false;
OstProto::Port modCfg;
if (config.is_exclusive_control() != d.is_exclusive_control()) {
modCfg.set_is_exclusive_control(config.is_exclusive_control());
change = true;
}
if (config.transmit_mode() != d.transmit_mode()) {
modCfg.set_transmit_mode(config.transmit_mode());
change = true;
}
if (config.user_name() != d.user_name()) {
modCfg.set_user_name(config.user_name());
change = true;
}
if (change) {
modCfg.mutable_port_id()->set_id(id());
config.CopyFrom(modCfg);
return true;
}
return false;
}
void Port::when_syncComplete()
{
//reorderStreamsByOrdinals();

View File

@ -155,6 +155,8 @@ public:
void getModifiedDeviceGroupsSinceLastSync(
OstProto::DeviceGroupConfigList &streamConfigList);
bool modifiablePortConfig(OstProto::Port &config) const;
void when_syncComplete();
void setAveragePacketRate(double packetsPerSec);

View File

@ -862,15 +862,14 @@ void PortGroup::processStreamIdList(int portIndex, PbRpcController *controller)
controller));
}
// modify port FIXME: check if there's actually any change
if (newPortContent->has_port_config())
OstProto::Port portCfg = newPortContent->port_config();
if (mPorts[portIndex]->modifiablePortConfig(portCfg))
{
OstProto::PortConfigList *portConfigList =
new OstProto::PortConfigList;
OstProto::Port *port = portConfigList->add_port();
port->CopyFrom(newPortContent->port_config());
port->mutable_port_id()->set_id(portId); // overwrite
if (newPortContent->port_config().has_user_name())
port->CopyFrom(portCfg);
if (port->has_user_name())
port->set_user_name(qPrintable(myself)); // overwrite
OstProto::Ack *ack = new OstProto::Ack;