2011-09-06 6 views
3

j'ai une vue similaire à ce (un exemple artificiel):CouchDB - Vues ne sont pas mis à jour après suppression

fonction

(doc) {
if (doc.attrib) { Emit ([doc. attrib], doc._id) }}

Tout fonctionne comme prévu jusqu'à ce que les données sont supprimées. J'obtiens ce scénario fou où il n'y a pas de données dans la base de données actuelle (confirmé via _all_docs et _changes sur curl ainsi que sur all_documents sur Futon). Cependant, la vue donne encore des données (encore sur curl et Futon).

La suppression comprend les opérations de suppression et de purge en masse via ektorp. L'exécution de _changes après chaque confirmation confirme le fonctionnement normal. recréer la vue la fait refléter l'état réel des documents dans la base de données.

Ai-je manqué quelque chose d'évident ici ou les vues dans CouchDB sont-elles seulement incrémentales?

+0

Je ne peux pas le reproduire, pouvez-vous donner plus de détails? Pouvez-vous le reproduire en utilisant curl et afficher la séquence exacte des commandes utilisées? –

+0

Il y a toujours l'option "débogage en tant que service". Obtenez un compte gratuit Cloud CouchDB, déclenchez votre erreur dessus, puis blâmez-les pour le problème. Ils vont courir soit pour (1) réparer leur bug, ou (2) vous prouver exactement pourquoi ce n'est pas leur faute en vous montrant votre bug! – JasonSmith

Répondre

3

Avez-vous vraiment _purge les données? Cela devrait invalider la vue et provoquer une reconstruction complète. Je noterai que _purge n'est pas recommandé pour une utilisation normale. Il n'existe que pour les accidents comme mettre votre mot de passe en clair dans un document. Vous avez peut-être exposé un bug dans _purge, donc si vous pouvez le faire de manière fiable avec _purge, mais pas si vous supprimez simplement, je vous encourage à déposer un ticket sur notre JIRA (https: //issues.apache.html). org/jira/browse/COUCHDB).

Je noterai également que le correctif sera de supprimer l'index si vous purgez, il n'y a pas d'approche incrémentielle possible (vous supprimez littéralement l'information qu'une approche incrémentielle nécessite).

+0

Oui, j'ai purgé les données - pas explicitement mais via ektorp. Je peux vérifier que la purge a réussi en exécutant _changes avant et après la purge. –

+0

En ce qui concerne l'utilisation de _purge, si elle n'est pas recommandée pour une utilisation normale, la vue ne devrait-elle pas être reconstruite même après une suppression? Mon expérience à ce jour est que les vues sont reconstruites à chaque fois que vous en interrogez des données, mais pas après la suppression des données. –

+0

Les vues sont mises à jour sur requête seulement, mais cela inclut la suppression des données qui ont été supprimées. Lorsque les données sont purgées, il y a du code pour balayer tout l'index et recommencer (car il est souvent impossible de purger de façon incrémentielle). Si vous voyez des données dans votre vue après l'avoir supprimée, alors c'est un bug, en supposant que vous n'utilisez pas stale = ok. –

Questions connexes