Opened 4 years ago

Closed 3 years ago

#93 closed defect (fixed)

problem when freq_op differrent of 1ts

Reported by: ymipsl Owned by: rlacroix
Priority: major Component: XIOS
Version: 2.0 Keywords:
Cc:

Description

Salut Rémi,

J'ai investigué un peu, et le problème est assez sérieux. Tout se passe dans la routine CTemporalFilter::apply

  CDataPacketPtr CTemporalFilter::apply(std::vector<CDataPacketPtr> data)
  {
    CDataPacketPtr packet;

    if (data[0]->status != CDataPacket::END_OF_STREAM)
    {
      const bool usePacket = isOnceOperation ? isFirstOperation : (data[0]->date >= nextSamplingDate);
      if (usePacket)
      {
        if (!tmpData.numElements())
          tmpData.resize(data[0]->data.numElements());

        (*functor)(data[0]->data);

        nextSamplingDate = nextSamplingDate + samplingFreq;
      }

      const bool outputResult = isOnceOperation ? isFirstOperation : (data[0]->date + samplingFreq > nextOperationDate);
      if (outputResult)
      {
        functor->final();

        packet = CDataPacketPtr(new CDataPacket);
        packet->date = data[0]->date;
        packet->timestamp = data[0]->timestamp;
        packet->status = data[0]->status;
        packet->data.resize(tmpData.numElements());
        packet->data = tmpData;

        isFirstOperation = false;
        nextOperationDate = nextOperationDate + opFreq;
      }
    }

    return packet;
  }

Lors du test :

const bool outputResult = (data[0]->date + samplingFreq > nextOperationDate);

Dans notre cas, on a freq_op = 2 ts, timestep=1h et freq_ouput=1 mo.
Le flux de sortie l'opérateur temporel sera généré le 30/01 à 23 h car 30/01 23:00 + 2h > 01/02 00:00.
Donc le serveur reçoit un packet à la date : 30/01 23:00 et en déduit que le prochain flux valide sera le 30/02 23:00 (+1 mo) ce qui pose un problème dans le cas Grégorien et met un bazar pas possible.

En fait il faudrait que le flux soit envoyé au serveur le 01/02 00:00, mais ce flux ne pourra pas être déclenché à ce moment là puisqu'on envoie tous les 2 pas de temps. C'est un peu Cornélien...

Tu peux aller voir sur ADA (tu connais ?) sur lequel j'ai un cas test à disposition.

/workgpfs/rech/psl/rpsl565/DEBUG_NEMO

Tu peux jouer avec le freq_op pour voir les différence entre 1 ts et 2ts (ou plus)

Fais moi part de ton sentiment sur la question.

Merci

Yann

le flux de sortie est généré correctment mais il n'est pas à la bonne date, car il va être généré

Change History (3)

comment:1 Changed 4 years ago by rlacroix

Bonjour Yann,

Je confirme le problème de calendrier, il y a un cas qui n'est pas (ou plus) traité correctement. Je vais corriger ça le plus rapidement possible.

Pour le reste il me semble qu'il n'y a pas vraiment de bug, à priori ça correspond bien au fonctionnement normal de XIOS et je ne vois pas trop ce que nous pouvons faire. La seule solution que je vois serait de proposer un autre mode pour les sorties permettant par exemple d'avoir une sortie le 1er de chaque mois à 00:00.

Une autre solution serait de considérer que le client devrait décaler d'un pas de temps la première écriture. S'il souhaite mettre à jour cette valeur tous les 2 pas de temps, il serait peut-être logique de faire le premier send_field à t=2ts plutôt qu'à t=1ts.

Rémi

comment:2 Changed 4 years ago by rlacroix

Une solution de contournement a été utilisée pour l'instant (r854).

comment:3 Changed 3 years ago by ymipsl

  • Resolution set to fixed
  • Status changed from new to closed

Fixed

Note: See TracTickets for help on using tickets.