[exo-jcr-commits] exo-jcr SVN: r5653 - in jcr/branches/1.15.x/exo.jcr.component.core/src: test/java/org/exoplatform/services/jcr/impl and 1 other directory.

do-not-reply at jboss.org do-not-reply at jboss.org
Thu Feb 16 09:31:10 EST 2012


Author: andrew.plotnikov
Date: 2012-02-16 09:31:09 -0500 (Thu, 16 Feb 2012)
New Revision: 5653

Modified:
   jcr/branches/1.15.x/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/storage/jdbc/JDBCWorkspaceDataContainerChecker.java
   jcr/branches/1.15.x/exo.jcr.component.core/src/test/java/org/exoplatform/services/jcr/impl/TestRepositoryCheckController.java
Log:
EXOJCR-1755: Improved queries for repository checking consistency

Modified: jcr/branches/1.15.x/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/storage/jdbc/JDBCWorkspaceDataContainerChecker.java
===================================================================
--- jcr/branches/1.15.x/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/storage/jdbc/JDBCWorkspaceDataContainerChecker.java	2012-02-16 13:49:34 UTC (rev 5652)
+++ jcr/branches/1.15.x/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/storage/jdbc/JDBCWorkspaceDataContainerChecker.java	2012-02-16 14:31:09 UTC (rev 5653)
@@ -76,12 +76,14 @@
       
       queries.add(new InspectionQuery(jdbcDataContainer.multiDb
          ? "select * from JCR_MITEM N where N.I_CLASS=1 and NOT EXISTS "
-            + "(select * from JCR_MITEM P where P.I_CLASS=2 and P.PARENT_ID=N.ID)"
+            + "(select * from JCR_MITEM P where P.I_CLASS=2 and P.PARENT_ID=N.ID "
+            + "and P.NAME='[http://www.jcp.org/jcr/1.0]primaryType')"
          : "select * from JCR_SITEM N where N.CONTAINER_NAME='" + jdbcDataContainer.containerName
             + "' and N.I_CLASS=1 and NOT EXISTS (select * from JCR_SITEM P "
-            + "where P.I_CLASS=2 and P.PARENT_ID=N.ID and P.CONTAINER_NAME='" + jdbcDataContainer.containerName + "')",
-         new String[]{DBConstants.COLUMN_ID, DBConstants.COLUMN_PARENTID, DBConstants.COLUMN_NAME},
-         "Nodes that do not have at least one property", InspectionStatus.ERR));
+            + "where P.I_CLASS=2 and P.PARENT_ID=N.ID and P.NAME='[http://www.jcp.org/jcr/1.0]primaryType' "
+            + "and P.CONTAINER_NAME='" + jdbcDataContainer.containerName + "')", new String[]{DBConstants.COLUMN_ID,
+         DBConstants.COLUMN_PARENTID, DBConstants.COLUMN_NAME},
+         "Nodes that do not have at least one jcr:primaryType property", InspectionStatus.ERR));
       
       queries
          .add(new InspectionQuery(jdbcDataContainer.multiDb

Modified: jcr/branches/1.15.x/exo.jcr.component.core/src/test/java/org/exoplatform/services/jcr/impl/TestRepositoryCheckController.java
===================================================================
--- jcr/branches/1.15.x/exo.jcr.component.core/src/test/java/org/exoplatform/services/jcr/impl/TestRepositoryCheckController.java	2012-02-16 13:49:34 UTC (rev 5652)
+++ jcr/branches/1.15.x/exo.jcr.component.core/src/test/java/org/exoplatform/services/jcr/impl/TestRepositoryCheckController.java	2012-02-16 14:31:09 UTC (rev 5653)
@@ -746,6 +746,7 @@
    public void testDBUsecasesNodeHasNoPropertiesSingleDB() throws Exception
    {
       checkDBUsecasesNodeHasNoProperties(helper.createRepository(container, false, false));
+      checkDBUsecasesNodeHasPrimaryTypeProperties(helper.createRepository(container, false, false));
    }
 
    /**
@@ -754,6 +755,7 @@
    public void testDBUsecasesNodeHasNoPropertiesMultiDB() throws Exception
    {
       checkDBUsecasesNodeHasNoProperties(helper.createRepository(container, true, false));
+      checkDBUsecasesNodeHasPrimaryTypeProperties(helper.createRepository(container, false, false));
    }
 
    private void checkDBUsecasesNodeHasNoProperties(ManageableRepository repository) throws Exception
@@ -766,7 +768,6 @@
 
       PropertyIterator iter = node.getProperties();
 
-
       // repository is consistent
       checkController = new RepositoryCheckController(repository);
       assertTrue(checkController.checkRepositoryDataBaseConsistency().startsWith("Repository data is consistent"));
@@ -803,6 +804,56 @@
       checkController.getLastLogFile().delete();
    }
 
+   private void checkDBUsecasesNodeHasPrimaryTypeProperties(ManageableRepository repository) throws Exception
+   {
+      // create repository and add node
+      SessionImpl session =
+         (SessionImpl)repository.login(credentials, repository.getConfiguration().getSystemWorkspaceName());
+      NodeImpl node = (NodeImpl)session.getRootNode().addNode("testNode");
+      session.save();
+
+      PropertyIterator iter = node.getProperties();
+
+      // repository is consistent
+      checkController = new RepositoryCheckController(repository);
+      assertTrue(checkController.checkRepositoryDataBaseConsistency().startsWith("Repository data is consistent"));
+      checkController.getLastLogFile().delete();
+
+      WorkspaceEntry wsEntry = repository.getConfiguration().getWorkspaceEntries().get(0);
+      boolean isMultiDb = wsEntry.getContainer().getParameterBoolean(JDBCWorkspaceDataContainer.MULTIDB);
+
+      // remove all properties
+      String sourceName = wsEntry.getContainer().getParameterValue(JDBCWorkspaceDataContainer.SOURCE_NAME);
+
+      Connection conn = ((DataSource)new InitialContext().lookup(sourceName)).getConnection();
+      while (iter.hasNext())
+      {
+         PropertyImpl prop = (PropertyImpl)iter.nextProperty();
+
+         if (!prop.getName().equals("jcr:primaryType"))
+         {
+            conn.prepareStatement(
+               "DELETE FROM JCR_" + (isMultiDb ? "M" : "S") + "VALUE WHERE PROPERTY_ID = '"
+                  + (isMultiDb ? "" : wsEntry.getName()) + prop.getInternalIdentifier() + "'").execute();
+            
+            conn.prepareStatement(
+               "DELETE FROM JCR_" + (isMultiDb ? "M" : "S") + "ITEM WHERE ID = '"
+                  + (isMultiDb ? "" : wsEntry.getName()) + prop.getInternalIdentifier() + "'").execute();
+         }
+      }
+
+      conn.commit();
+      conn.close();
+
+      assertTrue(node.getProperties().hasNext());
+
+      session.logout();
+
+      // repository is inconsistent
+      assertTrue(checkController.checkRepositoryDataBaseConsistency().startsWith("Repository data is consistent"));
+      checkController.getLastLogFile().delete();
+   }
+
    /**
     * Usescase when STORAGE_DESC field in JCR_SVALUE table is not empty but there is no file in the value storage.
     */



More information about the exo-jcr-commits mailing list