Author: vgritsenko Date: Fri Apr 27 17:51:37 2007 New Revision: 533273 URL: http://svn.apache.org/viewvc?view=rev&rev=533273 Log: <action dev="VG" type="update"> Do not create meta collections for the system collections. </action> <action dev="VG" type="fix" fixes-bug="42273" due-to="Natalia Shilenkova"> Save meta collection configuration in the database and initialize meta collection from the configuration on startup. This keeps meta collection configuration consistent with database configuration. </action>
Modified: xml/xindice/trunk/java/src/org/apache/xindice/core/Database.java xml/xindice/trunk/java/src/org/apache/xindice/core/MetaSystemCollection.java xml/xindice/trunk/java/src/org/apache/xindice/core/SystemCollection.java xml/xindice/trunk/java/src/org/apache/xindice/xml/dom/DOMParser.java xml/xindice/trunk/status.xml Modified: xml/xindice/trunk/java/src/org/apache/xindice/core/Database.java URL: http://svn.apache.org/viewvc/xml/xindice/trunk/java/src/org/apache/xindice/core/Database.java?view=diff&rev=533273&r1=533272&r2=533273 ============================================================================== --- xml/xindice/trunk/java/src/org/apache/xindice/core/Database.java (original) +++ xml/xindice/trunk/java/src/org/apache/xindice/core/Database.java Fri Apr 27 17:51:37 2007 @@ -52,16 +52,20 @@ private static final Log log = LogFactory.getLog(Database.class); + // Configuration elements in config/system.xml file public static final String DBROOT = "dbroot"; public static final String NAME = "name"; private static final String QUERYENGINE = "queryengine"; - private static final String COLKEY = "database.xml"; private static final String DATABASE = "database"; private static final String METADATA = "use-metadata"; public static final String DBROOT_DEFAULT = "./db/"; + // Configuration documents stored in SysConfigs collection + private static final String COLKEY = "database.xml"; + private static final String METAKEY = "meta.xml"; + private static final Map databases = new HashMap(); // String to Database private static final DatabaseShutdownHandler shutdownHandler = new DatabaseShutdownHandler(); @@ -226,12 +230,25 @@ systemCollection.getCollection(SystemCollection.CONFIGS).setDocument(COLKEY, d); getConfig().resetDirty(); } catch (Exception e) { - log.error("Error Writing Configuration '" + getName() + "', for database " + getName(), e); + log.error("Error Writing Configuration '" + COLKEY + "', for database " + getName(), e); } // Observer DBObserver.getInstance().flushDatabaseConfig(this, getConfig()); } + + if (isMetaEnabled()) { + Configuration config = metaSystemCollection.getConfig(); + if (config.isDirty()) { + try { + Document d = config.getElement().getOwnerDocument(); + systemCollection.getCollection(SystemCollection.CONFIGS).setDocument(METAKEY, d); + config.resetDirty(); + } catch (Exception e) { + log.error("Error writing configuration '" + METAKEY + "', for database " + getName(), e); + } + } + } } /** @@ -370,18 +387,19 @@ this.sysInit = true; } + Collection sysConfigCollection = systemCollection.getCollection(SystemCollection.CONFIGS); try { // Bootstrap from the database itself... This is accomplished // by intercepting the setConfig call and using a Configuration // retrieved from the database instead of the standard config - Document colDoc = systemCollection.getCollection(SystemCollection.CONFIGS).getDocument(COLKEY); + Document colDoc = sysConfigCollection.getDocument(COLKEY); if (colDoc == null) { DocumentBuilder db = DocumentBuilderFactory.newInstance().newDocumentBuilder(); colDoc = db.newDocument(); Element root = colDoc.createElement(DATABASE); root.setAttribute(NAME, getName()); colDoc.appendChild(root); - systemCollection.getCollection(SystemCollection.CONFIGS).setDocument(COLKEY, colDoc); + sysConfigCollection.setDocument(COLKEY, colDoc); } super.setConfig(new Configuration(colDoc.getDocumentElement(), false)); @@ -399,12 +417,28 @@ String metaCfg = config.getAttribute(METADATA); if (metaCfg.equalsIgnoreCase("on")) { metaEnabled = true; - if (!metaInit) { + } + + if (metaEnabled && !metaInit) { + try { metaSystemCollection = new MetaSystemCollection(this); - metaSystemCollection.init(); + + Document colDoc = sysConfigCollection.getDocument(METAKEY); + if (colDoc == null) { + metaSystemCollection.init(); + Document metaConfig = metaSystemCollection.getConfig().getElement().getOwnerDocument(); + sysConfigCollection.setDocument(METAKEY, metaConfig); + } else { + metaSystemCollection.setConfig(new Configuration(colDoc, false)); + } + super.addCollection(metaSystemCollection); metaInit = true; - log.debug("Meta information initialized"); + if (log.isDebugEnabled()) { + log.debug("Meta collection is initialized"); + } + } catch (Exception e) { + log.error("Meta collection was not initialized", e); } } Modified: xml/xindice/trunk/java/src/org/apache/xindice/core/MetaSystemCollection.java URL: http://svn.apache.org/viewvc/xml/xindice/trunk/java/src/org/apache/xindice/core/MetaSystemCollection.java?view=diff&rev=533273&r1=533272&r2=533273 ============================================================================== --- xml/xindice/trunk/java/src/org/apache/xindice/core/MetaSystemCollection.java (original) +++ xml/xindice/trunk/java/src/org/apache/xindice/core/MetaSystemCollection.java Fri Apr 27 17:51:37 2007 @@ -50,40 +50,12 @@ + " <collections>" // Meta Collections + " <collection name='" + METAS + "' compressed='true'>" - + " <filer class='org.apache.xindice.core.filer.BTreeFiler'/>" - + " <collections>" - // Add Meta collections for System collections to avoid eternal loop during initialization - + " <collection name='" + SystemCollection.SYSCOL + "'>" - + " <collections>" - // Meta for Symbol Tables Collection - + " <collection name='" + SystemCollection.SYMBOLS + "' compressed='true'>" - + " <filer class='org.apache.xindice.core.filer.BTreeFiler'/>" - + " <symbols>" - + " <symbol name='meta' nsuri='http://apache.org/xindice/metadata' id='0'/>" - + " <symbol name='xmlns' nsuri='http://www.w3.org/2000/xmlns/' id='1'/>" - + " <symbol name='system' nsuri='http://apache.org/xindice/metadata' id='2'/>" - + " <symbol name='type' id='3'/>" - + " <symbol name='attr' nsuri='http://apache.org/xindice/metadata' id='4'/>" - + " <symbol name='name' id='5'/>" - + " <symbol name='value' id='6'/>" - + " </symbols>" - + " <indexes/>" - + " </collection>" - // System Configuration Collection - + " <collection name='" + SystemCollection.CONFIGS + "' compressed='false'>" - + " <filer class='org.apache.xindice.core.filer.BTreeFiler'/>" - + " <indexes/>" - + " </collection>" - + " </collections>" - + " </collection>" - + " </collections>" - + " <indexes/>" + " </collection>" + " </collections>" + "</collection>"; private String dbCanonicalName; - // private String sysCanonicalName; + private String sysCanonicalName; public MetaSystemCollection(Database db) { @@ -91,7 +63,7 @@ // Set the canonical names dbCanonicalName = db.getCanonicalName(); - // sysCanonicalName = db.getSystemCollection().getCanonicalName(); + sysCanonicalName = db.getSystemCollection().getCanonicalName(); } public void init() throws DBException { @@ -115,6 +87,7 @@ * @param collection the collection whose meta you want * @param create whether or not to create the meta if its missing * @return collection the meta collection for the requested collection + * @throws DBException if unable to get meta collection */ public Collection getMetaCollection(Collection collection, boolean create) throws DBException { String path = collection.getCanonicalName(); @@ -130,9 +103,9 @@ } // this is the system collection - // if (path.startsWith(sysCanonicalName)) { - // return null; - // } + if (path.startsWith(sysCanonicalName)) { + return null; + } Collection current = getCollection(METAS); StringTokenizer st = new StringTokenizer(path.substring(dbCanonicalName.length()), "/"); @@ -175,6 +148,7 @@ * Collection. * * @param collection The Collection whose meta is required + * @throws DBException if unable to delete collection meta data */ public void dropCollectionMeta(Collection collection) throws DBException { Collection mcol = getMetaCollection(collection, false); @@ -196,6 +170,7 @@ * * @param collection The Collection whose meta is required * @return The requested MetaData + * @throws DBException if unable to retrieve collection meta data */ public MetaData getCollectionMeta(Collection collection) throws DBException { Collection mcol = getMetaCollection(collection, true); @@ -221,6 +196,7 @@ * * @param collection The Collection that owns the MetaData * @param meta The MetaData + * @throws DBException if unable to update collection meta data */ public void setCollectionMeta(Collection collection, MetaData meta) throws DBException { if (null == meta) { @@ -235,11 +211,12 @@ } /** - * dropDocumentMeta removes the MetaData for the specified - * Document. + * dropDocumentMeta removes the meta data for the specified + * document. * - * @param collection The Collection whose meta is required - * @param id the Document id + * @param collection Document collection + * @param id Document key + * @throws DBException if unable to delete document meta data */ public void dropDocumentMeta(Collection collection, String id) throws DBException { Collection mcol = getMetaCollection(collection, false); @@ -255,12 +232,13 @@ } /** - * getDocumentMeta retrieves the MetaData for the specified + * getDocumentMeta retrieves the meta data for the specified * document. * - * @param collection The Collection whose meta is required - * @param id the ID + * @param collection Document collection + * @param id Document key * @return The requested MetaData + * @throws DBException if unable to retrieve document meta data */ public MetaData getDocumentMeta(Collection collection, String id) throws DBException { Collection mcol = getMetaCollection(collection, true); @@ -282,11 +260,12 @@ } /** - * setDocumentMeta save the Meta for the specified Collection. + * setDocumentMeta sets the meta data for the specified document. * - * @param collection The Collection that owns the MetaData - * @param id - * @param meta The MetaData + * @param collection Document collection + * @param id Document key + * @param meta New document meta data + * @throws DBException if unable to update document meta data */ public void setDocumentMeta(Collection collection, String id, MetaData meta) throws DBException { if (null == meta) { Modified: xml/xindice/trunk/java/src/org/apache/xindice/core/SystemCollection.java URL: http://svn.apache.org/viewvc/xml/xindice/trunk/java/src/org/apache/xindice/core/SystemCollection.java?view=diff&rev=533273&r1=533272&r2=533273 ============================================================================== --- xml/xindice/trunk/java/src/org/apache/xindice/core/SystemCollection.java (original) +++ xml/xindice/trunk/java/src/org/apache/xindice/core/SystemCollection.java Fri Apr 27 17:51:37 2007 @@ -67,7 +67,7 @@ + "</collection>"; /** - * @param db + * @param db Its database */ public SystemCollection(Database db) { super(db); @@ -101,6 +101,7 @@ * * @param collection The Collection whose SymbolTable is required * @return The requested SymbolTable + * @throws DBException if unable to load symbols */ public SymbolTable loadSymbols(Collection collection) throws DBException { String name = getSymbolTableName(collection); @@ -119,6 +120,7 @@ * * @param collection The Collection that owns the SymbolTable * @param symbols The SymbolTable + * @throws DBException if unable to save symbols */ public void saveSymbols(Collection collection, SymbolTable symbols) throws DBException { String name = getSymbolTableName(collection); @@ -135,6 +137,7 @@ * dropSymbols drop the SymbolTable for the specified Collection. * * @param collection The Collection that owns the SymbolTable + * @throws DBException if unable to drop symbols */ public void dropSymbols(Collection collection) throws DBException { String name = getSymbolTableName(collection); Modified: xml/xindice/trunk/java/src/org/apache/xindice/xml/dom/DOMParser.java URL: http://svn.apache.org/viewvc/xml/xindice/trunk/java/src/org/apache/xindice/xml/dom/DOMParser.java?view=diff&rev=533273&r1=533272&r2=533273 ============================================================================== --- xml/xindice/trunk/java/src/org/apache/xindice/xml/dom/DOMParser.java (original) +++ xml/xindice/trunk/java/src/org/apache/xindice/xml/dom/DOMParser.java Fri Apr 27 17:51:37 2007 @@ -56,7 +56,8 @@ * * @version $Revision$, $Date$ */ -public final class DOMParser extends DefaultHandler implements DeclHandler, LexicalHandler { +public final class DOMParser extends DefaultHandler + implements DeclHandler, LexicalHandler { private static final Log log = LogFactory.getLog(DOMParser.class); @@ -66,14 +67,15 @@ private static final SAXParserFactory factory = SAXParserFactory.newInstance(); private SAXParser sp; - private ErrorHandler errors = null; - private EntityResolver entities = null; + private ErrorHandler errors; + private EntityResolver entities; private Document doc; private Node context; private int state = -1; private StringBuffer buf; private final ObjectStack states = new ObjectStack(); + public DOMParser() throws XindiceException { try { Modified: xml/xindice/trunk/status.xml URL: http://svn.apache.org/viewvc/xml/xindice/trunk/status.xml?view=diff&rev=533273&r1=533272&r2=533273 ============================================================================== --- xml/xindice/trunk/status.xml (original) +++ xml/xindice/trunk/status.xml Fri Apr 27 17:51:37 2007 @@ -116,7 +116,15 @@ </todo> <changes> - <release version="1.1-dev" date="(not released)"> + <release version="1.1" date="(not released)"> + <action dev="VG" type="update"> + Do not create meta collections for the system collections. + </action> + <action dev="VG" type="fix" fixes-bug="42273" due-to="Natalia Shilenkova"> + Save meta collection configuration in the database and initialize meta + collection from the configuration on startup. This keeps meta collection + configuration consistent with database configuration. + </action> <action dev="VG" type="fix" fixes-bug="42272" due-to="Natalia Shilenkova"> Clear Paged and BTree cache on close. </action>