Histórico da Página
Este documento é material de especificação dos requisitos de inovação, trata-se de conteúdo extremamente técnico. |
---|
Informações Gerais
Especificação | |||
Produto | RM | Módulo | Job Server |
Segmento Executor | Framework | ||
Projeto1 | Framework BH - 004 | IRM/EPIC1 | |
Requisito/Story/Issue1 | FRW_FRW002-227 | Subtarefa1 | FRW_FRW002-229 |
Chamado2 | |||
País | ( x ) Brasil ( ) Argentina ( ) Mexico ( ) Chile ( ) Paraguai ( ) Equador ( ) USA ( ) Colombia ( ) Outro _____________. | ||
Outros | <Caso necessário informe outras referências que sejam pertinentes a esta especificação. Exemplo: links de outros documentos ou subtarefas relacionadas>. |
Legenda: 1 – Inovação 2 – Manutenção (Os demais campos devem ser preenchidos para ambos os processos).
Objetivo
Revisar o enfileiramento de processos viabilizando o "fura fila" no JobServer.
Os Jobs prioritários devem ser executados imediatamente quando requisitados, ou o mais imediatamente possível. Isto significa que o Host App não irá mais executar os Jobs marcados como prioritário e deverá solicitar a execução imediata para um Host Job Server com maior disponibilidade no momento.
Definição da Regra de Negócio
Passo a passo da solução
- No método SubmitJob da classe RMSJobData, recebe como parâmetro um objeto da classe RMSParamsProc que contém uma propriedade chamada OnlineMode que define se o processo será executado no seu modo Online, ou seja, imediatamente sem aguardar pela latência e processamento da fila do JobServer. Esta propriedade é utilizada para marcar o Processo como "Prioritário Fura-Fila"
- Desmembrar a lógica para execução prioritária e execução em ambientes que NÃO são TRÊS CAMADAS
A variável isPrioritaryJob não pode ser utilizada juntamente com !IsThreeTier() - Criar um novo método na classe RMSJobData chamado StartPriorityJob(job.JobID)
Deverá descobrir qual é o melhor JobServer disponível para execução do job e chamá-lo diretamenteSELECT TOP 1
NOMESERVIDOR,
NUMJOBS,
MAXJOBS,
(MAXJOBS - NUMJOBS) AS DISPONIBILIDADE
FROM
GJOBSERVER (NOLOCK)
ORDER BY
DISPONIBILIDADE DESC
Se não retornar nenhum registro, ABORTAR
Criar um novo método estático na classe RMSJobServer para retornar uma nova instância semelhante ao GetServerInstance do RMSBroker, chamado GetDirectServetInstance passando o nome do Job Server como parâmetro. Esse nome pode conter porta ou não e vem da query acima (NOMESERVIDOR). O conteúdo do método deverá ser:
string host;
int port;
int portIndex = jobServerName.IndexOf(":");
if (portIndex > 0)
{
host = jobServerName.Substring(0, portIndex);
port = Convert.ToInt32(jobServerName.Substring(portIndex + 1));
}
else
{
host = jobServerName;
port = RMSBroker.Params.Port;
}RMSHostConnection hostConnection = new RMSHostConnection(host, port);
IRMSJobServer jobServer = (IRMSJobServer)RMSBroker.GetServerInstance(typeof(IRMSJobServer), "RMSJobServer", false, hostConnection);
return jobServer;A chamada deverá ser:
using (IRMSJobServer directJobServer = RMSJobServer.GetDirectServetInstance("BHD00008051:3000"))
{
directJobServer.StartJob(jobID);
}
O método StartJob(job.JobID) na classe RMSJobData deve ser chamado caso o ambiente NÃO seja TRÊS CAMADAS
O método StartPriorityJob(job.JobID) na classe RMSJobData deve ser chamado caso o Job seja Prioritário (OnlineMode)
Retirar o código abaixo do método chamado StartJob(job.JobID) da classe RMSJobServer
if (RMSJobUtils.IsThreeTier())
{
// pede para cada JobExecutor válido (em execução e sem finalização pendente) executar o job
foreach (RMSJobExecutor jobExecutor in RMSJobServer.JobExecutors.Values)
{
if (jobExecutor.IsRunning && !jobExecutor.IsFinalizing)
{
jobExecutor.StartJob(jobID);RMSSysLogTrace.WriteLine(RMSSyslogGlobal.Facility.Local0,
RMSSyslogGlobal.Level.Information, "RMSJobServer", RMSSyslogGlobal.Group.Schedule,
transactionID, RMSSyslogGlobal.Category.Engine, RMSSyslogGlobal.Step.End, string.Empty, null, null, "Fim start job. (Start Job) Id. Rotina: " + this.GetType().Name, ListParams); //donotlocalize
return;
}
}
}Este código não é mais necessário ou redundante e pode ser retirado
- Alterar o método NotifyServerForNewJobs(string jobServerName) da classe RMSJobExecutor para utilizar o método estático RMSJobServer.GetDirectServerInstance(jobServerName) recém criado
Este documento é material de especificação dos requisitos de inovação, trata-se de conteúdo extremamente técnico. |
---|