récupère des articles perdus

This commit is contained in:
Yannick Francois
2020-03-08 00:01:41 +01:00
parent 05485ab51c
commit 0ad9a63c32
310 changed files with 14523 additions and 0 deletions
@@ -0,0 +1,112 @@
<!DOCTYPE html>
<html lang="fr">
<head>
<meta name="generator" content="Hugo 0.22.1" />
<meta charset="utf-8">
<title>Yannick François - Elsif.fr</title>
<meta name="DC.title" content="elsif.fr, site de Yannick François aka yaf (ou ya_f)."/>
<meta name="description" content="Le site de Yannick François. Développeur Senior, Responsable Produit, Pédagogue. Je travail chez Scopyleft"/>
<meta name="keywords" content="code, développement, programmation, apprentissage, apprendre, lean, agile, logiciel, tdd, objet, refactoring, libre, creative commons, linux, unix"/>
<meta name="author" content="Yannick François, https://elsif.fr"/>
<meta name="designer" content="Yannick François, https://elsif.fr"/>
<meta name="geo.placename" content="Poissy, Ile de france, France"/>
<meta name="robots" content="index,follow" />
<meta name="language" content="French" />
<meta name="HandheldFriendly" content="True" />
<meta name="MobileOptimized" content="320" />
<meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=0, minimum-scale=1.0, maximum-scale=1.0" />
<link rel="index" title="Yannick François / Développeur / Pédagogue" href="index.html" />
<link rel="stylesheet" href="/css/201912-elsif.css" media="all"/>
<link rel="alternate" type="application/rss" href="/feed.xml" title="elsif.fr/feed" />
</head>
<body>
<main>
<p>Je viens de tomber sur quelque chose d’étrange dans lutilisation de lobjet <a href="http://www.ruby-doc.org/core/classes/IO.html#M002264">IO</a> de <a href="http://ruby-lang.org">Ruby</a> : La gestion des verrous sur les fichiers. Alors jai surement du rater quelque chose, mais voici mon histoire…</p>
<pre>
{% highlight ruby %}
require 'test/unit'
DUCK="duck"
ELEPHANT="elephant"
SNAKE="snake"
FILE="test_file"
class TestFileConcurrencyAccess &lt; Test::Unit::TestCase
def test_concurrency_access
t1 = Thread.start do
File.open(FILE, "w") do |file|
file.puts SNAKE
file.flush
sleep 8
file.puts DUCK
end
end
File.open(FILE,"r") do |f1|
assert SNAKE, f1.read
end
t2 = Thread.start do
File.open(FILE,"w") do |f|
sleep 2
f.puts ELEPHANT
end
end
t2.join
File.open(FILE,"r") do |f2|
assert ELEPHANT, f2.read
end
t1.join
File.open(FILE,"r") do |f3|
assert SNAKE, f3.readline
assert DUCK, f3.readline
end
end
end
{% endhighlight %}
</pre>
<p><a href="/files/test_file_concurrency_access.rb">fichier source</a></p>
<p>Le resultat dexecution de ce test donne une erreur sur la dernière lecture:</p>
<pre>
{% highlight bash %}
Loaded suite test_file_concurrency_access
Started
E
Finished in 8.003509 seconds.
1) Error:
test_concurrency_access(TestFileConcurrencyAccess):
EOFError: end of file reached
test_file_concurrency_access.rb:38:in `readline
test_file_concurrency_access.rb:38:in `test_concurrency_access
test_file_concurrency_access.rb:36:in `open
test_file_concurrency_access.rb:36:in `test_concurrency_access
1 tests, 3 assertions, 0 failures, 1 errors
{% endhighlight %}
</pre>
<p>Mais ce qui me gène (et qui ne ressort pas dans mon test, je lavoue) cest que jaurais pensé que le deuxième <em>File.open</em> ne puisse pas sexecuté, et me renvoie une Error du type: <em>“Le fichier est déjà ouvert en écriture par quelquun dautres”</em>… Mais non, et du coup, jai un fichier assez moche qui ne ressemble à rien:</p>
<pre>
elephduck
</pre>
<p>Alors quon pourrait penser obtenir un truc dans le genre:</p>
<pre>
snake
duck
</pre>
<p>Avec éventuellement une erreur sur l’écriture d’éléphant dans le fichier.</p>
<p>Jai également fait un essai en utilisant le code contenu dans chaque thread pour les executer dans deux console différentes, jarrive au même résultat (cest du coup dans test/unit, mais au niveau du contenu de <span class="caps">FILE</span> à la fin, jai là même chose…) <a href="http://zone.elsif.fr/write_quickly.rb">Fichier write_quickly.rb pour l’écriture dELEPHANT</a> <a href="http://zone.elsif.fr/write_slowly.rb">Fichier write_slowly.rb pour l’écriture de SNAKE et DUCK</a></p>
<p>Bref, je suis perplexe. Javoue ne pas avoir envie denvoyer cela sur la <a href="http://www.ruby-lang.org/fr/community/mailing-lists/">mailing-liste Ruby-talk</a>, ni sur celle de <a href="http://jruby.org">JRuby</a> dailleurs (car jai vérifier, jai le même problème en JRuby). Du moins tant que je nai pas creusé un peu plus.</p>
<p>Jai sûrement du faire une erreur quelque part, oublier quelque chose, ou faire quelque chose de travers. <strong>Si quelquun lit cela et à une idée, merci den men parler, je suis preneur !</strong>.</p>
<p>Si cest un comportement souhaité, jaimerais comprendre pourquoi, et si cest un oubli ou une erreur, jaimerais bien aider à trouver une solution.</p>
<p><em>ps: Retour au thème Scribbish que je trouve plus lisible, en attendant que je refasse quelque chose…</em></p>
</main>
<footer>
<ul>
</ul>
</footer>
</body>
</html>