J'ai constaté, sauf erreur, que le dossier "contentstore.deleted"...

cancel
Showing results for 
Search instead for 
Did you mean: 
onyme
Member II

J'ai constaté, sauf erreur, que le dossier "contentstore.deleted"...

Bonjour,

J'ai constaté, sauf erreur, que le dossier "contentstore.deleted" contenait les documents d'Alfresco mis à la poubelle. J'ai purgé la poubelle par la fonctionnalité "gérer les élements effacés". Je ne vois pas ce dossier "contentstore.deleted" diminuer en volume.
J'en déduit qu'il garde tous les élements effacés.

1) peut-on éventuellement récupérer ces élements?
2) comment purger ce dossier afin d'éviter une inflation de l'espace du disque? Mes essais se sont révélés catastrophiques en supprimant une partie de ce dossier.

Ce dossier a probablement une destination complètement différente de celle que je pense avoir comprise.

Suse 10.2; Alfresco 2.0 avec Tomcat livré avec le download complet Linux, MySQL 5, Java 1.5

Bien cordialement.
7 Replies
michaelh
Active Member

Re: J'ai constaté, sauf erreur, que le dossier "contentstore.deleted"...

La réponse se trouve dans le fichier content-services-context.xml en particulier.
<property name="protectDays" >
         <value>14</value>
      </property>
Après suppression d'un contenu un "délai de grâce" est accordé pendant une durée de 14 jours (par défaut). On peut modifier ce délai si besoin.

Chaque jour un job de nettoyage vérifie les éléments contenus dans l'entrepôt et n'ayant plus de référence en base (contentStoreCleanerTrigger, lancé à 4h00 du matin depuis scheduled-jobs-context.xml) et supprime ceux qui sont au delà de ce délai. On peut les récupérer pendant cette période par programmation, mais il est clair que vouloir les supprimer "a la mano" a des conséquences pour le moins indésirables.

D'un manière générale, on ne doit JAMAIS intervenir sur contentstore, à moins de savoir exactement ce que cela implique).

Voir aussi http://wiki.alfresco.com/wiki/Content_Store_Configuration#Cleaning_up_Orphaned_Content
onyme
Member II

Re: J'ai constaté, sauf erreur, que le dossier "contentstore.deleted"...

Bonjour,

Merci pour l'info. Il y a aussi des choses intéressantes : http://wiki.alfresco.com/wiki/Scheduled_Actions

1) Le dossier "contentstore.deleted" ne diminue pas et j'ai toujours des fichiers anciens (juin et juillet par ex.). J'ai bien identifié le fichier scheduled-jobs-context.xml :

<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE beans PUBLIC '-//SPRING//DTD BEAN//EN' 'http://www.springframework.org/dtd/spring-beans.dtd'>

<beans>

    <!– Task scheduler –>
    <!– Triggers should not appear here - the scheduler should be injected into the trigger definition –>
    <!– This bean should not need to apear else where in extension configuration –>
    <bean id="schedulerFactory" class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
        <property name="waitForJobsToCompleteOnShutdown">
            <value>true</value>
        </property>
        <property name="configLocation">
            <value>classpath:alfresco/domain/quartz.properties</value>
        </property>
        <property name="schedulerName">
            <value>DefaultScheduler</value>
        </property>
    </bean>

    <!–                 –>
    <!– Scheduled tasks –>
    <!–                 –>

    <bean id="ftsIndexerTrigger" class="org.alfresco.util.TriggerBean">
        <property name="jobDetail">
            <bean id="ftsIndexerJobDetail" class="org.springframework.scheduling.quartz.JobDetailBean">
                <property name="jobClass">
                    <value>org.alfresco.repo.search.impl.lucene.fts.FTSIndexerJob</value>
                </property>
                <property name="jobDataAsMap">
                    <map>
                        <entry key="bean">
                            <ref bean="LuceneFullTextSearchIndexer" />
                        </entry>
                    </map>
                </property>
            </bean>
        </property>
        <property name="scheduler">
            <ref bean="schedulerFactory" />
        </property>
        <property name="startDelayMinutes">
            <value>1</value>
        </property>
        <property name="repeatIntervalMinutes">
            <value>1</value>
        </property>
    </bean>

    <bean id="indexRecoveryTrigger" class="org.alfresco.util.TriggerBean">
        <property name="jobDetail">
            <bean class="org.springframework.scheduling.quartz.JobDetailBean">
                <property name="jobClass">
                    <value>org.alfresco.repo.node.index.IndexRecoveryJob</value>
                </property>
                <property name="jobDataAsMap">
                    <map>
                        <entry key="indexRecoveryComponent">
                            <ref bean="indexRecoveryComponent" />
                        </entry>
                    </map>
                </property>
            </bean>
        </property>
        <property name="scheduler">
            <ref bean="schedulerFactory" />
        </property>
        <property name="startDelayMinutes">
            <value>1</value>
        </property>
        <property name="repeatCount">
            <value>0</value>
        </property>
    </bean>
   
    <bean id="tempFileCleanerTrigger" class="org.alfresco.util.TriggerBean">
        <property name="jobDetail">
            <bean id="tempFileCleanerJobDetail" class="org.springframework.scheduling.quartz.JobDetailBean">
                <property name="jobClass">
                    <value>org.alfresco.util.TempFileProvider$TempFileCleanerJob</value>
                </property>
                <property name="jobDataAsMap">
                    <map>
                        <entry key="protectHours">
                            <value>1</value>
                        </entry>
                    </map>
                </property>
            </bean>
        </property>
        <property name="scheduler">
            <ref bean="schedulerFactory" />
        </property>
        <!– start after half an hour and repeat hourly –>
        <property name="startDelayMinutes">
            <value>30</value>
        </property>
        <property name="repeatIntervalMinutes">
            <value>60</value>
        </property>
    </bean>

    <bean id="fileContentStoreCleanerJobDetail" class="org.springframework.scheduling.quartz.JobDetailBean">
        <property name="jobClass">
            <value>org.alfresco.repo.content.cleanup.ContentStoreCleanupJob</value>
        </property>
        <property name="jobDataAsMap">
            <map>
                <entry key="contentStoreCleaner">
                    <ref bean="contentStoreCleaner" />
                </entry>
            </map>
        </property>
    </bean>
    <bean id="contentStoreCleanerTrigger" class="org.alfresco.util.CronTriggerBean">
        <property name="jobDetail">
            <ref bean="fileContentStoreCleanerJobDetail" />
        </property>
        <property name="scheduler">
            <ref bean="schedulerFactory" />
        </property>
        <!– trigger at 4am each day –>
        <property name="cronExpression">
            <value>0 0 4 * * ?</value>
        </property>
    </bean>

    <bean id="indexBackupJobDetail" class="org.springframework.scheduling.quartz.JobDetailBean">
        <property name="jobClass">
            <value>org.alfresco.repo.search.impl.lucene.LuceneIndexerAndSearcherFactory2$LuceneIndexBackupJob</value>
        </property>
        <property name="jobDataAsMap">
            <map>
                <entry key="luceneIndexBackupComponent">
                    <ref bean="luceneIndexBackupComponent" />
                </entry>
            </map>
        </property>
    </bean>
    <bean id="indexBackupTrigger" class="org.alfresco.util.CronTriggerBean">
        <property name="jobDetail">
            <ref bean="indexBackupJobDetail" />
        </property>
        <property name="scheduler">
            <ref bean="schedulerFactory" />
        </property>
        <!– trigger at 3am each day –>
        <property name="cronExpression">
            <value>0 0 3 * * ?</value>
        </property>
    </bean>

    <!– enable DEBUG for 'org.alfresco.repo.cache.EhCacheTracerJob' and enable scheduler property to activate –>
    <bean id="ehCacheTracerJob" class="org.alfresco.util.TriggerBean">
        <property name="jobDetail">
            <bean id="ehCacheTracerJobDetail" class="org.springframework.scheduling.quartz.JobDetailBean">
                <property name="jobClass">
                    <value>org.alfresco.repo.cache.EhCacheTracerJob</value>
                </property>
            </bean>
        </property>
        <!– enable this to activate bean
        <property name="scheduler">
            <ref bean="schedulerFactory" />
        </property>
        –>
        <!– start after an hour and repeat hourly –>
        <property name="startDelayMinutes">
            <value>60</value>
        </property>
        <property name="repeatIntervalMinutes">
            <value>60</value>
        </property>
    </bean>
pour info le fichier "content-services-context.xml", où le délai de grace est ramené à 7 jours :

 <?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE beans PUBLIC '-//SPRING//DTD BEAN//EN' 'http://www.springframework.org/dtd/spring-beans.dtd'>

<beans>
  
   <bean id="fileContentStore" class="org.alfresco.repo.content.filestore.FileContentStore">
      <constructor-arg>
         <value>${dir.contentstore}</value>
      </constructor-arg>
   </bean>
  
   <!– deleted content will get pushed into this store, where it can be cleaned up at will –>
   <bean id="deletedContentStore" class="org.alfresco.repo.content.filestore.FileContentStore">
      <constructor-arg>
         <value>${dir.contentstore.deleted}</value>
      </constructor-arg>
   </bean>
   <!– bean to move deleted content into the the backup store –>
   <bean id="deletedContentBackupListener" class="org.alfresco.repo.content.cleanup.DeletedContentBackupCleanerListener" >
      <property name="store">
         <ref bean="deletedContentStore" />
      </property>
   </bean>
   <!– Performs the content cleanup –>
   <bean id="contentStoreCleaner" class="org.alfresco.repo.content.cleanup.ContentStoreCleaner" >
      <property name="dictionaryService">
         <ref bean="dictionaryService" />
      </property>
      <property name="nodeDaoService" >
         <ref bean="nodeDaoService" />
      </property>
      <property name="avmNodeDAO">
           <ref bean="avmNodeDAO"/>
      </property>
      <property name="transactionService" >
         <ref bean="transactionComponent" />
      </property>
      <property name="protectDays" >
         <value>7</value>
      </property>
      <property name="stores" >
         <list>
            <ref bean="fileContentStore" />
         </list>
      </property>
      <property name="listeners" >
         <list>
            <ref bean="deletedContentBackupListener" />
         </list>
      </property>
   </bean>
2) A titre accessoire, il est fait allusion à une récup possible par programmation. Puet on en savoir plus?

dans l'attente bien cordialement.
michaelh
Active Member

Re: J'ai constaté, sauf erreur, que le dossier "contentstore.deleted"...

Est-ce qu'alfresco est bien lancé à 4h du matin, lors de la séance de nettoyage ?

Pour la récupération, je pense qu'un script est possible, la référence du noeud a récupérer étant disponible dans le navigateur de noeud du panneau d'administration.
onyme
Member II

Re: J'ai constaté, sauf erreur, que le dossier "contentstore.deleted"...

Le serveur tourne en permanence et n'est jamais stoppé.

cdlt
lme
Partner

Re: J'ai constaté, sauf erreur, que le dossier "contentstore.deleted"...

De mémoire, un fichier supprimé passe par les étapes suivantes :

1. le fichier est supprimé, il est alors déplacé dans la corbeille (mais toujours dispo dans le contentstore)
2. la corbeille est vidée
3. on attend $protectDay jours (soit 14 par défaut)
4. le fichier est déplace du contentstore vers le contentstore.deleted par le job de nettoyage (celui qui est exécuté à 4h)
5. c'est tout Smiley Happy

En fait, Alfresco ne supprime jamais un fichier, il le déplace tout simplement dans un autre dossier. Il est alors possible de vider le contenu du contentstore.deleted sans problème pour gagner de la place (enfin c'est à tester tout de même Smiley Wink).
onyme
Member II

Re: J'ai constaté, sauf erreur, que le dossier "contentstore.deleted"...

Si je comprends bien, on peut détruire les fichiers contenus dans "contentstore.deleted" sans autres précautions. J'avais déjà testé cela et avais eu des soucis après. Je refais un test sur plateforme de dev.

Cdlt.
onyme
Member II

Re: J'ai constaté, sauf erreur, que le dossier "contentstore.deleted"...

Le processus décrit par LaurentM fonctionne parfaitement.

Une fois les fichiers dans le contentstore.deleted on peut les détruire. Alfresco fonctionne normalement et il n'y a rien de particulier dans les logs.
Je n'ai toutefois pas détruit le dossier le plus récent.

Je suis néanmoins ce qui se passe sur les jours qui viennent.

cdlt