cancel
Showing results for 
Search instead for 
Did you mean: 

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

onyme
Champ in-the-making
Champ in-the-making
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 7

michaelh
Champ on-the-rise
Champ on-the-rise
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
Champ in-the-making
Champ in-the-making
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
Champ on-the-rise
Champ on-the-rise
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
Champ in-the-making
Champ in-the-making
Le serveur tourne en permanence et n'est jamais stoppé.

cdlt

lme
Champ in-the-making
Champ in-the-making
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
Champ in-the-making
Champ in-the-making
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
Champ in-the-making
Champ in-the-making
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
Getting started

Tags


Find what you came for

We want to make your experience in Hyland Connect as valuable as possible, so we put together some helpful links.