Voici la situation:
J'ai un démon qui tourne pour récupérer des fichiers dans un répertoire
précis.
J'ai plusieurs thread qui crée le même type de fichier.
Ma question est : est-ce que lorsque l'on fait flush pour l'écriture d'un
ficher dans un répertoire, ce flush peut-il être arrêter lors du
time-slicing ? Le problème est que si le flush est arrêté, un fichier est
quand même créé (sans être fini) et mon démon le prend tel quel.... bonjour
les problèmes sachant qu'il peut y avoir beaucoup de thread...
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Jacques-Olivier Haenni
Bonjour,
En fait, le fichier est déjà créé AVANT le flush. Le flush assure uniquement que toutes les données qui ont été écrites le sont effectivement dans le fichier (i.e. les buffer sont vidés). Il ne s'agit pas d'un commit. Avec les filesystems habituels, il n'est pas possible de créer et de remplir un fichier de manière atomique.
Pour résoudre ton problème, tu peux: - utiliser une base de données (on peut y insérer des données de manière atomique) - ou créer et remplir ton fichier dans un autre répertoire, puis le déplacer dans le répertoire précis; pour autant que les deux répertoires sont sur la même partition, le déplacement peut être considéré comme atomique.
Jacques-Olivier
vincent brice wrote:
Bonjour,
Voici la situation: J'ai un démon qui tourne pour récupérer des fichiers dans un répertoire précis. J'ai plusieurs thread qui crée le même type de fichier. Ma question est : est-ce que lorsque l'on fait flush pour l'écriture d'un ficher dans un répertoire, ce flush peut-il être arrêter lors du time-slicing ? Le problème est que si le flush est arrêté, un fichier est quand même créé (sans être fini) et mon démon le prend tel quel.... bonjour les problèmes sachant qu'il peut y avoir beaucoup de thread...
Sinon y a t-il une solution ?
Merci à l'avance.
Bonjour,
En fait, le fichier est déjà créé AVANT le flush. Le flush assure
uniquement que toutes les données qui ont été écrites le sont
effectivement dans le fichier (i.e. les buffer sont vidés).
Il ne s'agit pas d'un commit. Avec les filesystems habituels, il n'est
pas possible de créer et de remplir un fichier de manière atomique.
Pour résoudre ton problème, tu peux:
- utiliser une base de données (on peut y insérer des données de manière
atomique)
- ou créer et remplir ton fichier dans un autre répertoire, puis le
déplacer dans le répertoire précis; pour autant que les deux répertoires
sont sur la même partition, le déplacement peut être considéré comme
atomique.
Jacques-Olivier
vincent brice wrote:
Bonjour,
Voici la situation:
J'ai un démon qui tourne pour récupérer des fichiers dans un répertoire
précis.
J'ai plusieurs thread qui crée le même type de fichier.
Ma question est : est-ce que lorsque l'on fait flush pour l'écriture d'un
ficher dans un répertoire, ce flush peut-il être arrêter lors du
time-slicing ? Le problème est que si le flush est arrêté, un fichier est
quand même créé (sans être fini) et mon démon le prend tel quel.... bonjour
les problèmes sachant qu'il peut y avoir beaucoup de thread...
En fait, le fichier est déjà créé AVANT le flush. Le flush assure uniquement que toutes les données qui ont été écrites le sont effectivement dans le fichier (i.e. les buffer sont vidés). Il ne s'agit pas d'un commit. Avec les filesystems habituels, il n'est pas possible de créer et de remplir un fichier de manière atomique.
Pour résoudre ton problème, tu peux: - utiliser une base de données (on peut y insérer des données de manière atomique) - ou créer et remplir ton fichier dans un autre répertoire, puis le déplacer dans le répertoire précis; pour autant que les deux répertoires sont sur la même partition, le déplacement peut être considéré comme atomique.
Jacques-Olivier
vincent brice wrote:
Bonjour,
Voici la situation: J'ai un démon qui tourne pour récupérer des fichiers dans un répertoire précis. J'ai plusieurs thread qui crée le même type de fichier. Ma question est : est-ce que lorsque l'on fait flush pour l'écriture d'un ficher dans un répertoire, ce flush peut-il être arrêter lors du time-slicing ? Le problème est que si le flush est arrêté, un fichier est quand même créé (sans être fini) et mon démon le prend tel quel.... bonjour les problèmes sachant qu'il peut y avoir beaucoup de thread...
Sinon y a t-il une solution ?
Merci à l'avance.
alexandre cartapanis
Je te conseille de regarder la classe java.nio.channels.FileLock.
Bonjour,
En fait, le fichier est déjà créé AVANT le flush. Le flush assure uniquement que toutes les données qui ont été écrites le sont effectivement dans le fichier (i.e. les buffer sont vidés). Il ne s'agit pas d'un commit. Avec les filesystems habituels, il n'est pas possible de créer et de remplir un fichier de manière atomique.
Pour résoudre ton problème, tu peux: - utiliser une base de données (on peut y insérer des données de manière atomique) - ou créer et remplir ton fichier dans un autre répertoire, puis le déplacer dans le répertoire précis; pour autant que les deux répertoires sont sur la même partition, le déplacement peut être considéré comme atomique.
Jacques-Olivier
vincent brice wrote:
Bonjour,
Voici la situation: J'ai un démon qui tourne pour récupérer des fichiers dans un répertoire précis. J'ai plusieurs thread qui crée le même type de fichier. Ma question est : est-ce que lorsque l'on fait flush pour l'écriture d'un ficher dans un répertoire, ce flush peut-il être arrêter lors du time-slicing ? Le problème est que si le flush est arrêté, un fichier est quand même créé (sans être fini) et mon démon le prend tel quel.... bonjour les problèmes sachant qu'il peut y avoir beaucoup de thread...
Sinon y a t-il une solution ?
Merci à l'avance.
Je te conseille de regarder la classe java.nio.channels.FileLock.
Bonjour,
En fait, le fichier est déjà créé AVANT le flush. Le flush assure
uniquement que toutes les données qui ont été écrites le sont
effectivement dans le fichier (i.e. les buffer sont vidés).
Il ne s'agit pas d'un commit. Avec les filesystems habituels, il n'est
pas possible de créer et de remplir un fichier de manière atomique.
Pour résoudre ton problème, tu peux:
- utiliser une base de données (on peut y insérer des données de manière
atomique)
- ou créer et remplir ton fichier dans un autre répertoire, puis le
déplacer dans le répertoire précis; pour autant que les deux répertoires
sont sur la même partition, le déplacement peut être considéré comme
atomique.
Jacques-Olivier
vincent brice wrote:
Bonjour,
Voici la situation:
J'ai un démon qui tourne pour récupérer des fichiers dans un répertoire
précis.
J'ai plusieurs thread qui crée le même type de fichier.
Ma question est : est-ce que lorsque l'on fait flush pour l'écriture
d'un
ficher dans un répertoire, ce flush peut-il être arrêter lors du
time-slicing ? Le problème est que si le flush est arrêté, un fichier est
quand même créé (sans être fini) et mon démon le prend tel quel....
bonjour
les problèmes sachant qu'il peut y avoir beaucoup de thread...
Je te conseille de regarder la classe java.nio.channels.FileLock.
Bonjour,
En fait, le fichier est déjà créé AVANT le flush. Le flush assure uniquement que toutes les données qui ont été écrites le sont effectivement dans le fichier (i.e. les buffer sont vidés). Il ne s'agit pas d'un commit. Avec les filesystems habituels, il n'est pas possible de créer et de remplir un fichier de manière atomique.
Pour résoudre ton problème, tu peux: - utiliser une base de données (on peut y insérer des données de manière atomique) - ou créer et remplir ton fichier dans un autre répertoire, puis le déplacer dans le répertoire précis; pour autant que les deux répertoires sont sur la même partition, le déplacement peut être considéré comme atomique.
Jacques-Olivier
vincent brice wrote:
Bonjour,
Voici la situation: J'ai un démon qui tourne pour récupérer des fichiers dans un répertoire précis. J'ai plusieurs thread qui crée le même type de fichier. Ma question est : est-ce que lorsque l'on fait flush pour l'écriture d'un ficher dans un répertoire, ce flush peut-il être arrêter lors du time-slicing ? Le problème est que si le flush est arrêté, un fichier est quand même créé (sans être fini) et mon démon le prend tel quel.... bonjour les problèmes sachant qu'il peut y avoir beaucoup de thread...
Sinon y a t-il une solution ?
Merci à l'avance.
Patrick Gras
Hello,
Une technique assez simple est de renommer (typiquement changer l'extension) le fichier une fois qu'il est 'complet'.
Comme ça le démon ne va le voir qu'à ce momment là...
-Patrick
"Jacques-Olivier Haenni" wrote in message news:d9g7s9$9t0$
Bonjour,
En fait, le fichier est déjà créé AVANT le flush. Le flush assure uniquement que toutes les données qui ont été écrites le sont effectivement dans le fichier (i.e. les buffer sont vidés). Il ne s'agit pas d'un commit. Avec les filesystems habituels, il n'est pas possible de créer et de remplir un fichier de manière atomique.
Pour résoudre ton problème, tu peux: - utiliser une base de données (on peut y insérer des données de manière atomique) - ou créer et remplir ton fichier dans un autre répertoire, puis le déplacer dans le répertoire précis; pour autant que les deux répertoires sont sur la même partition, le déplacement peut être considéré comme atomique.
Jacques-Olivier
vincent brice wrote:
Bonjour,
Voici la situation: J'ai un démon qui tourne pour récupérer des fichiers dans un répertoire précis. J'ai plusieurs thread qui crée le même type de fichier. Ma question est : est-ce que lorsque l'on fait flush pour l'écriture d'un
ficher dans un répertoire, ce flush peut-il être arrêter lors du time-slicing ? Le problème est que si le flush est arrêté, un fichier est quand même créé (sans être fini) et mon démon le prend tel quel.... bonjour
les problèmes sachant qu'il peut y avoir beaucoup de thread...
Sinon y a t-il une solution ?
Merci à l'avance.
Hello,
Une technique assez simple est de renommer (typiquement changer l'extension)
le fichier une fois qu'il est 'complet'.
Comme ça le démon ne va le voir qu'à ce momment là...
-Patrick
"Jacques-Olivier Haenni" <jo_no_spam@haenni.info> wrote in message
news:d9g7s9$9t0$1@dc303-su-03.dc3.solpa.net...
Bonjour,
En fait, le fichier est déjà créé AVANT le flush. Le flush assure
uniquement que toutes les données qui ont été écrites le sont
effectivement dans le fichier (i.e. les buffer sont vidés).
Il ne s'agit pas d'un commit. Avec les filesystems habituels, il n'est
pas possible de créer et de remplir un fichier de manière atomique.
Pour résoudre ton problème, tu peux:
- utiliser une base de données (on peut y insérer des données de manière
atomique)
- ou créer et remplir ton fichier dans un autre répertoire, puis le
déplacer dans le répertoire précis; pour autant que les deux répertoires
sont sur la même partition, le déplacement peut être considéré comme
atomique.
Jacques-Olivier
vincent brice wrote:
Bonjour,
Voici la situation:
J'ai un démon qui tourne pour récupérer des fichiers dans un répertoire
précis.
J'ai plusieurs thread qui crée le même type de fichier.
Ma question est : est-ce que lorsque l'on fait flush pour l'écriture
d'un
ficher dans un répertoire, ce flush peut-il être arrêter lors du
time-slicing ? Le problème est que si le flush est arrêté, un fichier est
quand même créé (sans être fini) et mon démon le prend tel quel....
bonjour
les problèmes sachant qu'il peut y avoir beaucoup de thread...
Une technique assez simple est de renommer (typiquement changer l'extension) le fichier une fois qu'il est 'complet'.
Comme ça le démon ne va le voir qu'à ce momment là...
-Patrick
"Jacques-Olivier Haenni" wrote in message news:d9g7s9$9t0$
Bonjour,
En fait, le fichier est déjà créé AVANT le flush. Le flush assure uniquement que toutes les données qui ont été écrites le sont effectivement dans le fichier (i.e. les buffer sont vidés). Il ne s'agit pas d'un commit. Avec les filesystems habituels, il n'est pas possible de créer et de remplir un fichier de manière atomique.
Pour résoudre ton problème, tu peux: - utiliser une base de données (on peut y insérer des données de manière atomique) - ou créer et remplir ton fichier dans un autre répertoire, puis le déplacer dans le répertoire précis; pour autant que les deux répertoires sont sur la même partition, le déplacement peut être considéré comme atomique.
Jacques-Olivier
vincent brice wrote:
Bonjour,
Voici la situation: J'ai un démon qui tourne pour récupérer des fichiers dans un répertoire précis. J'ai plusieurs thread qui crée le même type de fichier. Ma question est : est-ce que lorsque l'on fait flush pour l'écriture d'un
ficher dans un répertoire, ce flush peut-il être arrêter lors du time-slicing ? Le problème est que si le flush est arrêté, un fichier est quand même créé (sans être fini) et mon démon le prend tel quel.... bonjour
les problèmes sachant qu'il peut y avoir beaucoup de thread...
Sinon y a t-il une solution ?
Merci à l'avance.
Kermabon Stéphane
Passer par deux répertoire, un premier ou tu écris le fichier, et une fois l'écriture terminé tu le déplace dans le second qui lui est scruté par tes démons. Ainsi seul les fichiers complets sont considérés. Est-ce que c'est satisfaisant?
Démis
Bonjour,
Voici la situation: J'ai un démon qui tourne pour récupérer des fichiers dans un répertoire précis. J'ai plusieurs thread qui crée le même type de fichier. Ma question est : est-ce que lorsque l'on fait flush pour l'écriture d'un ficher dans un répertoire, ce flush peut-il être arrêter lors du time-slicing ? Le problème est que si le flush est arrêté, un fichier est quand même créé (sans être fini) et mon démon le prend tel quel.... bonjour les problèmes sachant qu'il peut y avoir beaucoup de thread...
Sinon y a t-il une solution ?
Merci à l'avance.
Passer par deux répertoire, un premier ou tu écris le fichier, et une
fois l'écriture terminé tu le déplace dans le second qui lui est scruté
par tes démons. Ainsi seul les fichiers complets sont considérés. Est-ce
que c'est satisfaisant?
Démis
Bonjour,
Voici la situation:
J'ai un démon qui tourne pour récupérer des fichiers dans un répertoire
précis.
J'ai plusieurs thread qui crée le même type de fichier.
Ma question est : est-ce que lorsque l'on fait flush pour l'écriture d'un
ficher dans un répertoire, ce flush peut-il être arrêter lors du
time-slicing ? Le problème est que si le flush est arrêté, un fichier est
quand même créé (sans être fini) et mon démon le prend tel quel.... bonjour
les problèmes sachant qu'il peut y avoir beaucoup de thread...
Passer par deux répertoire, un premier ou tu écris le fichier, et une fois l'écriture terminé tu le déplace dans le second qui lui est scruté par tes démons. Ainsi seul les fichiers complets sont considérés. Est-ce que c'est satisfaisant?
Démis
Bonjour,
Voici la situation: J'ai un démon qui tourne pour récupérer des fichiers dans un répertoire précis. J'ai plusieurs thread qui crée le même type de fichier. Ma question est : est-ce que lorsque l'on fait flush pour l'écriture d'un ficher dans un répertoire, ce flush peut-il être arrêter lors du time-slicing ? Le problème est que si le flush est arrêté, un fichier est quand même créé (sans être fini) et mon démon le prend tel quel.... bonjour les problèmes sachant qu'il peut y avoir beaucoup de thread...