Opened 8 years ago
Closed 6 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 8 years ago by rlacroix
comment:2 Changed 8 years ago by rlacroix
Une solution de contournement a été utilisée pour l'instant (r854).
comment:3 Changed 6 years ago by ymipsl
- Resolution set to fixed
- Status changed from new to closed
Fixed
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