2009-05-08 10 views
3

Peu après la mise à niveau de notre dépôt vers Subversion 1.5, mon équipe a passé une nouvelle application pendant quelques mois avant de revenir brusquement à notre base de code originale. Nos développeurs utilisent TortoiseSVN 1.5.9 et Subversion Client 1.6 (seulement pour svnversion -n) et Subversion 1.5 sur notre serveur. Nos clients se connectent via svn + ssh.La recherche de svn revision semble soudainement lente (puisque svn 1.5 peut-être?)

Notre base de code originale intègre le numéro de révision SVN dans le code en utilisant svnversion -n pour interroger la révision actuelle du WC. Soudainement, cette opération est allée à ce que je me souviens prendre une seconde ou deux à 10 secondes (et j'ai vu pire encore à l'intérieur des environnements de développement VM, etc.) Nous avons également connu des retards similaires en remontant et en expérimentant avec SubWCRev de Tortoise et Subversion Client 1.5.

Ce n'est pas un gros problème, mais c'est certainement un désagrément car cette vérification est faite comme une étape de pré-compilation avant chaque opération de construction. En tant que tel, j'aimerais repasser ces quelques secondes hors de notre boucle de rétroaction! Donc, ma question: Est-ce que j'ai été trop loin de mon ancienne base de code ou quelqu'un d'autre a-t-il remarqué un retard pour cette opération?

Si ce retard est un phénomène nouveau, quelqu'un l'a-t-il corrigé? Si c'est le cas, comment?

+0

Il est difficile de dire quel est votre problème spécifique, mais j'ai trouvé que le dépôt SVN ralentit considérablement au fil du temps, surtout si vous cherchez des révisions autres que HEAD. Je doute que le ralentissement soit avec le client, car le serveur est là où le vrai travail se passe dans le calcul de tous ces diffs. – Kekoa

+0

Qu'est-ce que "subversion -n"? Il n'y a pas d'exécutable "subversion" dans mon environnement, et l'exécutable "svn" ne supporte pas l'option "-n". –

+0

Oups: cela a été corrigé à 'svnversion -n'. – antik

Répondre

2

Dans le red-bean svn book fortement recommandé, ils déclarent que les grandes validations (beaucoup de fichiers dans une validation) peuvent grandement affecter les performances. Avez-vous vérifié un grand nombre de fichiers récemment, disons dans les 100 dernières vérifications?

+0

Un commit de nombre de fichiers important dans le référentiel dans un répertoire qui ne se trouve pas sous notre chemin de paiement peut-il nous affecter de cette façon? Nous travaillons typiquement dans repo-root/proj1/... et récemment (en fait, par coïncidence avec mon observation de réponse lente) un de nos devs commet une énorme liste de fichiers à repo-root/proj2/.. – antik

+0

Running svnversion - n sur une copie de travail locale n'entraîne pas de trafic vers le serveur subversion. Je crois qu'il utilise les informations de propriété stockées dans les dossiers .svn/_svn qui contient des choses comme la révision actuelle, la dernière révision de la livraison, et si elle est modifiée ou non afin de déterminer le résultat. Si le commit large n'était pas fait dans le cadre de la copie de travail, cela aurait-il un impact local sur svnversion -n' et si oui, pourquoi? –

+0

Cela nous est arrivé, quelqu'un a décidé de valider la source du noyau Linux dans l'un des troncs de notre projet pour tester les performances. Après qu'ils l'aient 'supprimé', nous avons vu de très longs temps d'attente récupérer le journal svn, j'ai donc fini par faire un vidage du référentiel filtrant le chemin qu'ils avaient engagé et le rechargeant. –

4

Je suis d'accord avec John Weldon. Si vous utilisez Apache (http (s)), vous avez la possibilité de ralentir votre commande svn log. Cela arrive sur les commits avec beaucoup de chemins de fichiers modifiés/ajoutés. Une solution consiste à supprimer l'autorisation basée sur le chemin ou à supprimer la révision particulière. Voir plus de détails pour un here:

Toutes cette vérification de chemin peut parfois être assez cher, surtout dans le cas du journal svn. Lors de la récupération d'une liste de révisions, le serveur examine chaque chemin modifié dans chaque révision et vérifie sa lisibilité. [...] Inutile de dire que cela peut prendre beaucoup de temps sur les révisions qui affectent un grand nombre de fichiers. C'est le coût de la sécurité: même si vous n'avez pas du tout configuré un module tel que mod_authz_svn, le module mod_dav_svn demande toujours à Apache httpd d'exécuter des contrôles d'autorisation sur chaque chemin.

+0

Ai-je tort de supposer qu'un dépôt fonctionnant sur svn + ssh ne serait pas affecté par ce problème? Sinon, cette réponse n'est pas pertinente pour ma configuration: nous n'utilisons pas https. – antik

+0

Vous n'avez pas mentionné le protocole que vous utilisiez .. –

+0

Vous avez raison - merci pour une réponse qui a mis en évidence cette lacune dans la question. – antik

1

Je viens de résoudre un problème comme celui-ci sur mon serveur. Qu'est-ce que vous utilisez pour auth? Une opération checkout, commit ou log est une série de plusieurs requêtes HTTP. Dans le cas d'un affichage de journal, c'est des centaines. Si vous avez une couche d'authentification, elle sera authentifiée à chaque requête. Si vous autorisez un back-end lent qui vous ralentira. Dans mon cas, nous utilisions notre serveur IMAP (un mod_auth_imap personnalisé). Une fois que j'ai ajouté la mise en cache à la couche d'authentification (gardez les paires utilisateur/passe de hachage en place pendant soixante secondes), les choses ont considérablement accéléré: les vérifications prenaient 1,5 minutes et prenaient maintenant trois secondes.

1

Within (correctement configuré) zsh, vous pouvez essayer dans votre svn dossier racine:

sed -ns "4 p" **/.svn/entries | sort | uniq 

Il donnera la révision de votre dernière mise à jour ou la liste des révisions si votre référentiel est mélangé. Ce n'est pas aussi complet que ce que fait "svnversion", et il peut ne pas être compatible avec toutes les versions svn (le mien est 1.6.16) mais il fait le travail dans certains cas et il est incroyablement rapide (1s vs 3mn dans mon cas !

+0

Merci pour le conseil, j'ai un repo d'environ 125K fichiers et cette commande prend 31 millsecondes vs svnversion prenant 2 minutes! – RishiD