Дипломному проекту На тему: Разработка программного модуля диспетчера высокой готовности для осрв qnx 25


НазваниеДипломному проекту На тему: Разработка программного модуля диспетчера высокой готовности для осрв qnx 25
страница11/11
ТипДиплом
filling-form.ru > бланк заявлений > Диплом
1   2   3   4   5   6   7   8   9   10   11
nodeList = realNodes;

int nodeIndex;

int totalNodes = nodeList.entries();

if(totalNodes == 1)

{

log->endEvent("Have only one node in list");

return 0;

}

nodeIndex = nodeList.index(nodeNum);

assert(nodeIndex != -1);

if((nodeIndex + 1) < totalNodes)

{

log->endEvent(toString(nodeList.find(nodeIndex + 1)));

return nodeList.find(nodeIndex + 1);

}

else

{

log->endEvent(toString(nodeList.find(0)));

return nodeList.find(0);

}

}

int ProcWatch::sendMessageToNextNode(message_struct * message)

{

log->startEvent("ProcWatch::sendMessageToNextNode");

int sendStatus = -1;

int receiverNode = getnid();

do

{

answerToAllMessages();

receiverNode = nextNode(receiverNode);

if((receiverNode == getnid()) || (receiverNode == 0))

{

log->endEvent("Cant selfsend message");

return MESSAGE_CANT_SEND;

}

pid_t receiver = qnx_name_locate(0,

nodeNamePrefix + toString(receiverNode), sizeof(message_struct), NULL);

if(receiver != -1)

{

sendStatus = Send(receiver, message, message,

messageSize(message->type), sizeof(message_struct));

qnx_vc_detach(receiver);

//node who send message now unavailible

if((sendStatus != 0) && (receiverNode == message->sender))

{

log->endEvent("message cant send to sender");

return MESSAGE_CANT_SEND;

}

}

else if(receiverNode == message->sender)

{

log->endEvent("message cant send to sender");

return MESSAGE_CANT_SEND;

}

} while(sendStatus != 0);

delay(MESSAGE_TIMEOUT);

log->endEvent("message send");

return MESSAGE_SEND;

}

int ProcWatch::registerMyNodeName()

{

return qnx_name_attach(0, nodeNamePrefix + toString(getnid()));

}

void ProcWatch::registerMyNodeAsMainNode()

{

mainNodeNameId = qnx_name_attach(0, nodeNamePrefix + "main");

}

void ProcWatch::unregisterMyNodeAsMainNode()

{

qnx_name_detach(0, mainNodeNameId);

}

pid_t ProcWatch::getMessage(message_struct *message)

{

pid_t sender;

sender = Creceive(0, message, sizeof(message_struct));

if(sender == -1)

{

return NO_NEW_MESSAGES;

}

return sender;

}

int ProcWatch::sendReplyMessage(message_struct *message, pid_t sender)

{

int replyState = Reply(sender, message, sizeof(message_struct));

return replyState;

}

void ProcWatch::answerToAllMessages()

{

message_struct newMsg;

message_struct incomingMsg;

pid_t sender;

while((sender = getMessage(&incomingMsg)) != NO_NEW_MESSAGES)

{

clusterState->cycleOfLastMessage = clusterState->cycle;

log->startEvent("HAVE_NEW_MSG");

int sendNextNode = answerMessage(&incomingMsg, &newMsg);

sendReplyMessage(&incomingMsg, sender);

log->endEvent("MSG_PROCESSED");

if(sendNextNode == SEND_MESSAGE_TO_NEXT_NODE)

{

sendMessageToNextNode(&newMsg);

}

}

}

LRNode::LRNode(int lNode, int nodeWidth)

{

logicalNode = lNode;

realNode = 0;

logicalNodeWidth = nodeWidth;

}

LRNode::operator==(const LRNode &node) const

{

return(logicalNode == node.logicalNode);

}

RealNodeInfo::RealNodeInfo(nid_t rNode, int nodeStatus)

{

node = rNode;

status = nodeStatus;

}

RealNodeInfo::operator==(const RealNodeInfo &rNode) const

{

return(node == rNode.node);

}

NodesInfo::NodesInfo(WCPtrSList nodes)

{

cout << "debug: NodesInfo::NodesInfo" << endl;

int nodeNum = nodes.entries();

int nodeCount = 0;

while(nodeCount < nodeNum)

{

RealNodeInfo * node = nodes.find(nodeCount);

RealNodeInfo * rNode;

RealNodeInfo * rNodeStartState;

if(node->node == getnid())

{

rNode = new RealNodeInfo(node->node, NS_PASSIVE);

rNodeStartState = new RealNodeInfo(node->node, NS_PASSIVE);

}

else

{

rNode = new RealNodeInfo(node->node, NS_UNAVAILIBLE);

rNodeStartState = new RealNodeInfo(node->node, NS_UNAVAILIBLE);

}

rNodes.append(rNode);

rNodesStartState.append(rNodeStartState);

++nodeCount;

}

}

void NodesInfo::reset()

{

cout << "debug: NodesInfo::reset" << endl;

int nodesTotal = rNodes.entries();

int nodesCounter = 0;

rNodes.clearAndDestroy();

while(nodesCounter < nodesTotal)

{

RealNodeInfo * rNodeSS = rNodesStartState.find(nodesCounter);

RealNodeInfo * rNode = new RealNodeInfo(rNodeSS->node, rNodeSS->status);

rNodes.append(rNode);

++nodesCounter;

}

}

void NodesInfo::setRealNodeToLogicalNode(int lNode, int rNode)

{

LRNode node(lNode, 0);

int nodeIndex = lrNodes.index(&node);

assert(nodeIndex != -1);

LRNode * currentNode = lrNodes.find(nodeIndex);

currentNode->realNode = rNode;

}

int NodesInfo::getRealNodeFromLogicalNode(int lNode)

{

LRNode node(lNode, 0);

int nodeIndex = lrNodes.index(&node);

assert(nodeIndex != -1);

return lrNodes.find(nodeIndex)->realNode;

}

int NodesInfo::realNodeState(int node)

{

RealNodeInfo rNode(node, 0);

int nodeIndex = rNodes.index(&rNode);

cout << "debug: realNodeState :node " << node;

if(rNodes.find(nodeIndex)->status == NS_ACTIVE)

cout << " NS_ACTIVE" << endl;

else if(rNodes.find(nodeIndex)->status == NS_PASSIVE)

cout << " NS_PASSIVE" << endl;

else

cout << " NS_UNKNOWN" << endl;

assert(nodeIndex != -1);

return rNodes.find(nodeIndex)->status;

}

int NodesInfo::isRealNodeAvailible(int rNode)

{

RealNodeInfo realNode(rNode, NS_PASSIVE);

int nodeIndex;

if((nodeIndex = rNodes.index(&realNode)) == -1)

{

return 0;

}

else

{

if(rNodes.find(nodeIndex)->status == NS_UNAVAILIBLE)

{

return 0;

}

return 1;

}

}

int NodesInfo::haveActiveNode()

{

int nodeCount = 0;

int totalNodes = rNodes.entries();

while(nodeCount < totalNodes)

{

RealNodeInfo * realNode = rNodes.find(nodeCount);

if(realNode->status == NS_ACTIVE)

{

return 1;

}

++nodeCount;

}

return 0;

}

int NodesInfo::findMinWidthRealNode()

{

int minNodeNum = getnid();

int minNodeWidth = -1;

int nodeCount = 0;

int totalNodes = rNodes.entries();

while(nodeCount < totalNodes)

{

RealNodeInfo * realNode = rNodes.find(nodeCount);

if(realNode->status != NS_UNAVAILIBLE)

{

int nodeNum = realNode->node;

int nodeWidth = getWidthOnNode(nodeNum);

if((minNodeWidth == -1) || (nodeWidth < minNodeWidth))

{

minNodeNum = nodeNum;

minNodeWidth = nodeWidth;

}

}

++nodeCount;

}

return minNodeNum;

}

RealNodeInfo * NodesInfo::getNode(int node)

{

cout << "debug: NodesInfo::getNode(" << node << ")" << endl;

RealNodeInfo realNode(node, NS_PASSIVE);

int nodeIndex = rNodes.index(&realNode);

assert(nodeIndex != -1);

return rNodes.find(nodeIndex);

}

ClusterState::ClusterState()

{

currentRev = 0;

newRev = 0;

remainingUpdates = 0;

cycle = 0;

cycleOfLastMessage = MESSAGE_NEVER_GET;

}

int main()

{

Config conf("/home/dmitry/test/main.txt");

int status = conf.checkConfig();

log = new LogEvents();

log->startEvent("PARSE-CONFIG :file /home/dmitry/test/main.txt");

if(status != PARSE_ERROR)

{

log->endEvent("OK");

ProcWatch watcher(conf.getNodeList(), conf.getProcList());

watcher.startMonitoring();

}

else

{

log->endEvent("ERROR");

}

return 0;

}
1   2   3   4   5   6   7   8   9   10   11

Похожие:

Дипломному проекту На тему: Разработка программного модуля диспетчера высокой готовности для осрв qnx 25 iconДипломному проекту На тему: «Проектирование и разработка автоматизированной...
Охватывают различные подразделения, начиная с приема больного в стационаре и заканчивая его выпиской. В медицинских учреждениях работает...

Дипломному проекту На тему: Разработка программного модуля диспетчера высокой готовности для осрв qnx 25 iconДипломному проекту На тему: Прогнозирование безотказности современных...
Охватывает вопросы конструирования, исследования и принципов применения интегральных микросхем

Дипломному проекту На тему: Разработка программного модуля диспетчера высокой готовности для осрв qnx 25 iconСоставление линейных программ на С++ 10
Разработка кода программного продукта на основе готовых спецификаций на уровне модуля 10

Дипломному проекту На тему: Разработка программного модуля диспетчера высокой готовности для осрв qnx 25 iconАнкета поможет нам понять суть вашего проекта и предложить оптимальное...
Торговая компания, специализирующаяся в области оптовых продаж импортных и отечественных строительных материалов, средне-высокой...

Дипломному проекту На тему: Разработка программного модуля диспетчера высокой готовности для осрв qnx 25 iconКонкурсная документация по проведению открытого конкурса №1 2017к
«Разработка специального программного обеспечения для модернизации аппаратно–программного комплекса «Сапфир»

Дипломному проекту На тему: Разработка программного модуля диспетчера высокой готовности для осрв qnx 25 iconПриложение Г. Логико-структурная матрица по дипломному проекту «Внедрение...
Логико-структурная матрица по дипломному проекту «Внедрение эффективного контракта» (пример заполнения)

Дипломному проекту На тему: Разработка программного модуля диспетчера высокой готовности для осрв qnx 25 iconПермский филиал Факультет бизнес-информатики Кафедра информационных...
Данные гис – данные, полученные в результате геофизического исследования скважин. Синоним к термину «Каротажные данные»

Дипломному проекту На тему: Разработка программного модуля диспетчера высокой готовности для осрв qnx 25 iconМетодическая разработка Проведения учебного занятия на тему «Судебное разбирательство»
Методическая разработка предназначена для обучающихся специальности 38. 02. 01

Дипломному проекту На тему: Разработка программного модуля диспетчера высокой готовности для осрв qnx 25 iconАннотация рабочей программы модуля «Имплантология и реконструктивная...
Целью освоения модуля является формирование у студентов V курса стоматологического факультета, профессиональных компетенций по способности...

Дипломному проекту На тему: Разработка программного модуля диспетчера высокой готовности для осрв qnx 25 iconМетодическая разработка на тему тестовый контроль в методах и средствах...
Методическая разработка на тему: «Тестовый контроль в методах и средствах личностно ориентированного обучения». Подготовила Фалько...

Вы можете разместить ссылку на наш сайт:


Все бланки и формы на filling-form.ru




При копировании материала укажите ссылку © 2019
контакты
filling-form.ru

Поиск