org.apache.jackrabbit.api.management.DataStoreGarbageCollector Maven / Gradle / Ivy
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.apache.jackrabbit.api.management;
import javax.jcr.RepositoryException;
/**
* Garbage collector for DataStore. This implementation iterates through all
* nodes and reads the binary properties. To detect nodes that are moved while
* the scan runs, event listeners are started. Like the well known garbage
* collection in Java, the items that are still in use are marked. Currently
* this is achieved by updating the modified date of the entries. Newly added
* entries are detected because the modified date is changed when they are
* added.
*
* Example code to run the data store garbage collection:
*
* JackrabbitRepositoryFactory jf = (JackrabbitRepositoryFactory) factory;
* RepositoryManager m = jf.getRepositoryManager((JackrabbitRepository) repository);
* GarbageCollector gc = m.createDataStoreGarbageCollector();
* gc.mark();
* gc.sweep();
*
*/
public interface DataStoreGarbageCollector {
/**
* Set the delay between scanning items.
* The main scan loop sleeps this many milliseconds after
* scanning a node. The default is 0, meaning the scan should run at full speed.
*
* @param millis the number of milliseconds to sleep
*/
void setSleepBetweenNodes(long millis);
/**
* Get the delay between scanning items.
*
* @return the number of milliseconds to sleep
*/
long getSleepBetweenNodes();
/**
* Set the event listener. If set, the event listener will be called
* for each item that is scanned. This mechanism can be used
* to display the progress.
*
* @param callback if set, this is called while scanning
*/
void setMarkEventListener(MarkEventListener callback);
/**
* Enable or disable using the IterablePersistenceManager interface
* to scan the items. This is important for clients that need
* the complete Node implementation in the ScanEventListener
* callback.
*
* @param allow true if using the IterablePersistenceManager interface is allowed
*/
void setPersistenceManagerScan(boolean allow);
/**
* Check if using the IterablePersistenceManager interface is allowed.
*
* @return true if using IterablePersistenceManager is possible.
*/
boolean isPersistenceManagerScan();
/**
* Scan the repository. The garbage collector will iterate over all nodes in the repository
* and update the last modified date. If all persistence managers implement the
* IterablePersistenceManager interface, this mechanism is used; if not, the garbage
* collector scans the repository using the JCR API starting from the root node.
*
* @throws RepositoryException
*/
void mark() throws RepositoryException;
/**
* Delete all unused items in the data store.
*
* @return the number of deleted items
* @throws RepositoryException
*/
int sweep() throws RepositoryException;
/**
* Cleanup resources used internally by this instance.
*/
void close();
}