Device Emulation (contd.): Apply for deviceGroups implemented. This code has revealed bugs in other parts of the code which will be fixed in subsequent commits

This commit is contained in:
Srivats P 2016-03-05 04:06:36 +05:30
parent bb69e644b1
commit 0ccb3e2fbd
4 changed files with 118 additions and 3 deletions

View File

@ -409,6 +409,38 @@ void Port::getModifiedStreamsSinceLastSync(
qDebug("Done %s", __FUNCTION__);
}
void Port::getDeletedDeviceGroupsSinceLastSync(
OstProto::DeviceGroupIdList &deviceGroupIdList)
{
deviceGroupIdList.clear_device_group_id();
foreach(int id, lastSyncDeviceGroupList_) {
if (!deviceGroupById(id))
deviceGroupIdList.add_device_group_id()->set_id(id);
}
}
void Port::getNewDeviceGroupsSinceLastSync(
OstProto::DeviceGroupIdList &deviceGroupIdList)
{
deviceGroupIdList.clear_device_group_id();
foreach(OstProto::DeviceGroup *dg, deviceGroups_) {
quint32 dgid = dg->device_group_id().id();
if (!lastSyncDeviceGroupList_.contains(dgid))
deviceGroupIdList.add_device_group_id()->set_id(dgid);
}
}
void Port::getModifiedDeviceGroupsSinceLastSync(
OstProto::DeviceGroupConfigList &deviceGroupConfigList)
{
// FIXME: we currently don't have any mechanism to check
// if a DeviceGroup was modified since last sync, so we
// include all DeviceGroups
deviceGroupConfigList.clear_device_group();
foreach(OstProto::DeviceGroup *dg, deviceGroups_)
deviceGroupConfigList.add_device_group()->CopyFrom(*dg);
}
void Port::when_syncComplete()
{
//reorderStreamsByOrdinals();
@ -416,6 +448,12 @@ void Port::when_syncComplete()
mLastSyncStreamList.clear();
for (int i=0; i<mStreams.size(); i++)
mLastSyncStreamList.append(mStreams[i]->id());
lastSyncDeviceGroupList_.clear();
for (int i = 0; i < deviceGroups_.size(); i++) {
lastSyncDeviceGroupList_.append(
deviceGroups_.at(i)->device_group_id().id());
}
}
void Port::updateStats(OstProto::PortStats *portStats)

View File

@ -52,6 +52,7 @@ class Port : public QObject {
QList<quint32> mLastSyncStreamList;
QList<Stream*> mStreams; // sorted by stream's ordinal value
QList<quint32> lastSyncDeviceGroupList_;
QList<OstProto::DeviceGroup*> deviceGroups_;
uint newStreamId();
@ -134,6 +135,13 @@ public:
void getModifiedStreamsSinceLastSync(
OstProto::StreamConfigList &streamConfigList);
void getDeletedDeviceGroupsSinceLastSync(
OstProto::DeviceGroupIdList &streamIdList);
void getNewDeviceGroupsSinceLastSync(
OstProto::DeviceGroupIdList &streamIdList);
void getModifiedDeviceGroupsSinceLastSync(
OstProto::DeviceGroupConfigList &streamConfigList);
void when_syncComplete();
void setAveragePacketRate(double packetsPerSec);

View File

@ -389,6 +389,13 @@ void PortGroup::when_configApply(int portIndex)
QApplication::setOverrideCursor(QCursor(Qt::WaitCursor));
mainWindow->setDisabled(true);
// FIXME: as currently written this code will make unnecessary RPCs
// even if the request contains no data; the fix will need to take
// care to identify when sync is complete
//
// Update/Sync Streams
//
qDebug("applying 'deleted streams' ...");
streamIdList = new OstProto::StreamIdList;
ack = new OstProto::Ack;
@ -422,6 +429,47 @@ void PortGroup::when_configApply(int portIndex)
serviceStub->modifyStream(controller, streamConfigList, ack,
NewCallback(this, &PortGroup::processModifyStreamAck,
portIndex, controller));
//
// Update/Sync DeviceGroups
//
OstProto::DeviceGroupIdList *deviceGroupIdList;
OstProto::DeviceGroupConfigList *deviceGroupConfigList;
qDebug("applying 'deleted deviceGroups' ...");
deviceGroupIdList = new OstProto::DeviceGroupIdList;
ack = new OstProto::Ack;
controller = new PbRpcController(deviceGroupIdList, ack);
deviceGroupIdList->mutable_port_id()->set_id(mPorts[portIndex]->id());
mPorts[portIndex]->getDeletedDeviceGroupsSinceLastSync(*deviceGroupIdList);
serviceStub->deleteDeviceGroup(controller, deviceGroupIdList, ack,
NewCallback(this, &PortGroup::processDeleteDeviceGroupAck, controller));
qDebug("applying 'new deviceGroups' ...");
deviceGroupIdList = new OstProto::DeviceGroupIdList;
ack = new OstProto::Ack;
controller = new PbRpcController(deviceGroupIdList, ack);
deviceGroupIdList->mutable_port_id()->set_id(mPorts[portIndex]->id());
mPorts[portIndex]->getNewDeviceGroupsSinceLastSync(*deviceGroupIdList);
serviceStub->addDeviceGroup(controller, deviceGroupIdList, ack,
NewCallback(this, &PortGroup::processAddDeviceGroupAck, controller));
qDebug("applying 'modified deviceGroups' ...");
deviceGroupConfigList = new OstProto::DeviceGroupConfigList;
ack = new OstProto::Ack;
controller = new PbRpcController(deviceGroupConfigList, ack);
deviceGroupConfigList->mutable_port_id()->set_id(mPorts[portIndex]->id());
mPorts[portIndex]->getModifiedDeviceGroupsSinceLastSync(
*deviceGroupConfigList);
serviceStub->modifyDeviceGroup(controller, deviceGroupConfigList, ack,
NewCallback(this, &PortGroup::processModifyDeviceGroupAck,
portIndex, controller));
}
void PortGroup::processAddStreamAck(PbRpcController *controller)
@ -440,6 +488,25 @@ void PortGroup::processModifyStreamAck(int portIndex,
PbRpcController *controller)
{
qDebug("In %s", __FUNCTION__);
delete controller;
}
void PortGroup::processAddDeviceGroupAck(PbRpcController *controller)
{
qDebug("In %s", __FUNCTION__);
delete controller;
}
void PortGroup::processDeleteDeviceGroupAck(PbRpcController *controller)
{
qDebug("In %s", __FUNCTION__);
delete controller;
}
void PortGroup::processModifyDeviceGroupAck(int portIndex,
PbRpcController *controller)
{
qDebug("In %s", __FUNCTION__);
qDebug("apply completed");
mPorts[portIndex]->when_syncComplete();
@ -563,8 +630,6 @@ void PortGroup::processStreamIdList(int portIndex, PbRpcController *controller)
mPorts[portIndex]->insertStream(streamId);
}
mPorts[portIndex]->when_syncComplete();
// Are we done for all ports?
if (numPorts() && portIndex >= (numPorts()-1))
{
@ -706,7 +771,7 @@ void PortGroup::processDeviceGroupIdList(
mPorts[portIndex]->insertDeviceGroup(devGrpId);
}
//FIXME: mPorts[portIndex]->when_syncComplete();
mPorts[portIndex]->when_syncComplete();
// Are we done for all ports?
if (numPorts() && portIndex >= (numPorts()-1))

View File

@ -106,6 +106,10 @@ public:
void processDeleteStreamAck(PbRpcController *controller);
void processModifyStreamAck(int portIndex, PbRpcController *controller);
void processAddDeviceGroupAck(PbRpcController *controller);
void processDeleteDeviceGroupAck(PbRpcController *controller);
void processModifyDeviceGroupAck(int portIndex, PbRpcController *controller);
void modifyPort(int portId, OstProto::Port portConfig);
void processModifyPortAck(PbRpcController *controller);
void processUpdatedPortConfig(PbRpcController *controller);