2010-05-27 3 views
0

J'ai une application .NET qui génère des tâches à exécuter sur un cluster MS HPC. Nous n'utilisons aucun de ces trucs de DryadLINQ, juste en exécutant à distance un exe sur le cluster et en passant des arguments via la ligne de commande. La tâche sera le code .NET et je souhaite que l'application appelante obtienne un objet Exception réel lorsqu'une erreur se produit sur HPC.Stratégies de gestion des erreurs pour les tâches Microsoft HPC

Quelle est la meilleure technique générale pour accomplir ceci? Faites-moi savoir si vous avez besoin de plus d'informations.

Merci!

Répondre

1

Vous ne pouvez pas renvoyer l'exception de votre exécutable à l'application HPC du client lorsque vous utilisez le planificateur de traitement par lots. S'il est suffisamment bon pour savoir que l'une des tâches ou tâches en attente a échoué, vous pouvez conserver un objet SchedulerJob et ajouter un rappel à l'événement OnJobState ou OnTaskState. Chaque fois que votre travail (ou une tâche dans ce travail) change d'état, vous obtiendrez les informations jobid/taskid et state change dans votre callback; alors vous pouvez vérifier si l'état a été changé en "Échec" et agir sur cette information.

Pour marquer une tâche ou un travail comme "Échec", faites sortir votre exécutable avec un code de sortie différent de zéro. Si vous avez besoin de détails sur l'exception réelle, le mieux que vous puissiez faire est de l'imprimer sur stdout.

Si vous avez vraiment besoin de tous les détails de l'exception, une alternative pourrait être d'utiliser le framework SOA pour vos calculs. Avantages seraient:

  • vos demandes de calcul ressemblent méthode WCF appelle

  • vous rentrerez exceptions détaillées lorsque votre code va lancer

  • vous pouvez utiliser le débogueur SOA extension Visual Studio pour déboguer votre code

Inconvénients seraient:

  • plus complexes à écrire et déployer votre application à partir de votre base de code existant.

Voici quelques ressources pour vous aider à démarrer (une recherche de "Windows HPC SOA" vous devriez obtenir beaucoup plus):

MSDN SOA documentation