r113 - in trunk: diswork-daemon/src/main/java/org/nuiton/diswork/daemon src/site/rst/diswork-fs
Author: bleny Date: 2010-07-27 15:01:35 +0200 (Tue, 27 Jul 2010) New Revision: 113 Url: http://nuiton.org/repositories/revision/diswork/113 Log: m?\195?\160j doc ; qualite du code Modified: trunk/diswork-daemon/src/main/java/org/nuiton/diswork/daemon/DisworkConfig.java trunk/diswork-daemon/src/main/java/org/nuiton/diswork/daemon/WorkersManager.java trunk/src/site/rst/diswork-fs/devel.rst Modified: trunk/diswork-daemon/src/main/java/org/nuiton/diswork/daemon/DisworkConfig.java =================================================================== --- trunk/diswork-daemon/src/main/java/org/nuiton/diswork/daemon/DisworkConfig.java 2010-07-26 15:02:18 UTC (rev 112) +++ trunk/diswork-daemon/src/main/java/org/nuiton/diswork/daemon/DisworkConfig.java 2010-07-27 13:01:35 UTC (rev 113) @@ -40,6 +40,7 @@ import java.util.Map; import java.util.Properties; +import org.apache.commons.io.IOUtils; import org.apache.commons.lang.StringEscapeUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; @@ -183,8 +184,9 @@ File tokensFile = getTokensFile(); if (tokensFile != null) { + InputStream tokensStream = null; try { - InputStream tokensStream = new FileInputStream(tokensFile); + tokensStream = new FileInputStream(tokensFile); Properties userTokens = new Properties(); userTokens.load(tokensStream); for (String token : userTokens.stringPropertyNames()) { @@ -203,6 +205,8 @@ } catch (IOException e) { log.error("can't read tokens file", e); throw new LocalFileException("can't read tokens file", e); + } finally { + IOUtils.closeQuietly(tokensStream); } } } @@ -255,9 +259,10 @@ if (path != null) { File file = new File(path); schedule = new ArrayList<CronExpression>(); + BufferedReader in = null; try { Reader reader = new FileReader(file); - BufferedReader in = new BufferedReader(reader); + in = new BufferedReader(reader); String line; while ((line = in.readLine()) != null) { if (!line.startsWith("#") && !"".equals(line)) { @@ -274,6 +279,8 @@ } catch (IOException e) { log.error(e); throw new LocalFileException("can't read schedule file", e); + } finally { + IOUtils.closeQuietly(in); } } else { throw new BadConfigurationException("schedule file has not been specified"); Modified: trunk/diswork-daemon/src/main/java/org/nuiton/diswork/daemon/WorkersManager.java =================================================================== --- trunk/diswork-daemon/src/main/java/org/nuiton/diswork/daemon/WorkersManager.java 2010-07-26 15:02:18 UTC (rev 112) +++ trunk/diswork-daemon/src/main/java/org/nuiton/diswork/daemon/WorkersManager.java 2010-07-27 13:01:35 UTC (rev 113) @@ -48,6 +48,7 @@ import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.nuiton.diswork.daemon.ActivityStrategy.ActivityStrategies; +import org.nuiton.diswork.daemon.WorkersManager.Worker; import org.nuiton.diswork.fs.DisworkFileSystem; import org.nuiton.diswork.fs.DisworkFileSystemException; import org.nuiton.util.FileUtil; @@ -444,7 +445,7 @@ outputFileStream); log.info("starting job now"); outputReader.start(); - + // plugging a file on the standard input String standardInputFileName = currentJob.getStandardInput(); if (standardInputFileName != null) { @@ -575,7 +576,7 @@ // wait for the process to return log.info("waiting for the end of the process"); int returnValue = currentProcess.waitFor(); - log.info("process ended"); + log.info("process ended (return " + returnValue + ")"); if (shouldStop) { // process has returned because stop() called Process.destroy() Modified: trunk/src/site/rst/diswork-fs/devel.rst =================================================================== --- trunk/src/site/rst/diswork-fs/devel.rst 2010-07-26 15:02:18 UTC (rev 112) +++ trunk/src/site/rst/diswork-fs/devel.rst 2010-07-27 13:01:35 UTC (rev 113) @@ -360,8 +360,7 @@ d'utiliser une DHT qui gère les droits au niveaux des clés. Je ne connais aucune DHT qui permet cela. -Maintenant, faisons un peu d'histoire. -Rappelez vous l'époque où il était très facile d'écrire des malwares. +On peut repenser à l'époque où il était très facile d'écrire des malwares. Il suffisait de faire un peu de C ou de tout langage bas niveau, on pouvait aller taper tout simplement dans la mémoire vive, faire un malloc sur un tableau et écrire au delà de l'espace alloué et, du coup, écrire sur le reste dans la @@ -374,12 +373,12 @@ Ce temps est aujourd'hui révolu. Aujourd'hui les programmes n'ont accès qu'à la mémoire qui leur est allouée par l'OS. Ça clos le problème. -J'y vois une analogie avec notre DHT. Notre DHT, c'est notre mémoire partagée et -on en est au même point. N'importe qui peut écrire n'importe-quoi. Qu'il s'agisse -de la gestion de la RAM (mémoire partagée entre différents processus locaux), -ou d'une DHT (mémoire partagée entre des processus distants), on a la même -problématique, peut-être que la solution de l'une peut solutionner l'autre. -C'est la réflexion que je suis en train de mener et j'ai une piste. +On peut faire une analogie avec notre utilisation de la DHT. Notre DHT est +mémoire partagée et cela pose le même problème que précédemment. N'importe qui +peut écrire n'importe-quoi. Qu'il s'agisse de gérer la mémoire vive d'un ordinateur +(mémoire partagée entre différents processus locaux), +ou d'une DHT (mémoire partagée entre des processus distants), les probèmes sont +les même et la solution du premier pourrait amener une solution au deuxième. Seconde hypothèse, on a pas compris le principe (et on est pas les seuls à s'être planté, Pastis est un exemple) et pour faire un système de fichier P2P, @@ -387,20 +386,23 @@ voire ne pas utiliser une DHT mais pour l'instant je ne vois pas de meilleure solution que l'actuelle, étant donné le CdC. -Finalement, utiliser de la cryptographie asymétrique, que ce soit pour crypter -ou signer, ça fera joli mais c'est jamais que répondre à côté de notre -problématique. Y'a un côté pavlovien "sécurité = crypto". - Le problème est intrinsèque à la DHT qui ne gère pas les droits. Je ne connais -pas de DHT qui le fasse mais j'ai, pendant mes insomnies régulières, des idées -qui surgissent sur la question, j'en ferai part si je sens que ça peut aboutir, -encore quelques nuits... +pas de DHT qui le fasse mais ça semble envisageable. Dans le cas de la gestion +de la mémoire vive, un code intermédiaire (l'OS) fait les contrôles adéquats +pour éviter qu'un programme fasse des I/O indésirables. On pourrait faire pareil +dans le DHT, en empêchant chaque nœud de faire les opérations lui-même et en +devant systématiquement les déléguées à un autre qui vérifiera les droits. +L'intermédiaire ne doit pas être choisi mais imposé et doit se charger simplement +de vérifier le droit avant que les opérations soit réellement menées, en instaurant +la méfiance entre l' nœud qui fait la requête, le nœud intermédiaire et le nœud +responsable, on multiplie les intervenants et on se base sur le principe que les +nœuds bienveillants sont majoritaires. Les solutions apportées au problème des +généraux byzantins devraient être utiles. -Tel que je vois la conception actuelle de Diswork, je pense que le plus sage -pour l'instant est la solution de placer la sécurité à la périphérie, et de -veiller à ce que seuls des nœuds de confiance se connectent au système global. -Ainsi, on cloisonne le système, c'est pas absurde si les noeuds peuvent se -trouver dans un même labo comme c'est le cas pour Isis. +En l'état actuel, le plus sage reste la solution de placer la sécurité à la +périphérie, et de veiller à ce que seuls des nœuds de confiance se connectent +au système global. Ainsi, on cloisonne le système, c'est pas absurde si les +noeuds peuvent se trouver dans un même labo comme c'est le cas pour Isis. Ou alors... il faut tout remettre à plat, et envisager pour une prochaine version de Diswork, de s'y prendre autrement, avec une DHT utilisée autrement
participants (1)
-
bleny@users.nuiton.org