Author: kevinshen
Date: 2009-11-13 11:37:34 +0100 (Fri, 13 Nov 2009)
New Revision: 39678
Added:
CMSContainer/trunk/CMSContainer/cmsc/maintenance/src/java/com/finalist/cmsc/maintenance/beans/CheckIntegrityBean.java
CMSContainer/trunk/CMSContainer/cmsc/maintenance/src/java/com/finalist/cmsc/maintenance/sql/CheckIntegrity.java
CMSContainer/trunk/CMSContainer/cmsc/maintenance/src/webapp/editors/maintenance/checkintegrity.jsp
Log:
CMSC-1582 Create a maintenance script to check integrity of MMBase database
Added:
CMSContainer/trunk/CMSContainer/cmsc/maintenance/src/java/com/finalist/cmsc/maintenance/beans/CheckIntegrityBean.java
===================================================================
---
CMSContainer/trunk/CMSContainer/cmsc/maintenance/src/java/com/finalist/cmsc/maintenance/beans/CheckIntegrityBean.java
(rev 0)
+++
CMSContainer/trunk/CMSContainer/cmsc/maintenance/src/java/com/finalist/cmsc/maintenance/beans/CheckIntegrityBean.java
2009-11-13 10:37:34 UTC (rev 39678)
@@ -0,0 +1,67 @@
+package com.finalist.cmsc.maintenance.beans;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+
+import org.mmbase.bridge.Cloud;
+import org.mmbase.bridge.NodeList;
+import org.mmbase.bridge.NodeManager;
+import org.mmbase.bridge.NodeManagerList;
+import org.mmbase.bridge.NotFoundException;
+import org.mmbase.util.logging.Logger;
+import org.mmbase.util.logging.Logging;
+
+import com.finalist.cmsc.maintenance.sql.CheckIntegrity;
+import com.finalist.cmsc.sql.SqlExecutor;
+
+public class CheckIntegrityBean {
+
+ private Cloud cloud;
+
+ /** MMbase logging system */
+ private static final Logger log =
Logging.getLoggerInstance(CheckIntegrityBean.class.getName());
+
+ public CheckIntegrityBean(Cloud cloud) {
+ this.cloud = cloud;
+ }
+
+ public List execute() {
+ NodeManagerList nodeManagerList = cloud.getNodeManagers();
+ List<String> corruptNodes = new ArrayList<String>();
+ for(NodeManager nodeManager : nodeManagerList) {
+ String nodeManagerName = nodeManager.getName();
+ List<String> list = new ArrayList<String>();
+
+
+ if (!"object".equalsIgnoreCase(nodeManagerName)) {
+ // NodeManager parentNodeManager = nodeManager.getParent();
+ // list.add(nodeManager.getName());
+ while(nodeManager != null ) {
+ list.add(nodeManager.getName());
+ try {
+ nodeManager = nodeManager.getParent();
+ }
+ catch (NotFoundException nfe) {
+ break;
+ }
+ }
+ String otypeNodeManager = list.get(0);
+ NodeManager typeDef = cloud.getNodeManager("typedef");
+ NodeList nodeList = typeDef.getList("name='"+otypeNodeManager+"'",
"", "");
+ int otype = 0;
+ if(!nodeList.isEmpty()) {
+ otype = nodeList.getNode(0).getNumber();
+ }
+ log.debug("otype======"+otype);
+ for (int i = 0 ; i < list.size()-1; i++) {
+ String managerName = list.get(i);
+ CheckIntegrity checkIntegrity = new
CheckIntegrity(otype,managerName,corruptNodes,otypeNodeManager);
+ new SqlExecutor().execute(checkIntegrity);
+ }
+ }
+ }
+
+ return corruptNodes;
+ }
+}
Added:
CMSContainer/trunk/CMSContainer/cmsc/maintenance/src/java/com/finalist/cmsc/maintenance/sql/CheckIntegrity.java
===================================================================
---
CMSContainer/trunk/CMSContainer/cmsc/maintenance/src/java/com/finalist/cmsc/maintenance/sql/CheckIntegrity.java
(rev 0)
+++
CMSContainer/trunk/CMSContainer/cmsc/maintenance/src/java/com/finalist/cmsc/maintenance/sql/CheckIntegrity.java
2009-11-13 10:37:34 UTC (rev 39678)
@@ -0,0 +1,48 @@
+package com.finalist.cmsc.maintenance.sql;
+
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.util.List;
+
+import org.mmbase.bridge.BridgeException;
+
+import com.finalist.cmsc.sql.SqlAction;
+
+public class CheckIntegrity extends SqlAction {
+
+ private int otype;
+
+ private String nodeManager;
+
+ private List corruptNodes;
+
+ private String otypeNodeName;
+
+ public CheckIntegrity(int otype, String nodeManager, List corruptNodes,
String otypeNodeName) {
+ this.otype = otype;
+ this.nodeManager = nodeManager;
+ this.corruptNodes = corruptNodes;
+ this.otypeNodeName = otypeNodeName;
+ }
+ @Override
+ public String getSql() {
+ String sql = "select number from "+this.getTable("object")+ " where
otype="+otype+" and number not in(select number from
"+this.getTable(nodeManager)+")";
+
+ return sql;
+ }
+
+ @Override
+ public String process(ResultSet rs) throws BridgeException, SQLException {
+ while (rs.next()) {
+ int nodeNumber = rs.getInt(getFieldname("number"));
+ if(otypeNodeName.equalsIgnoreCase(nodeManager)) {
+ corruptNodes.add(nodeManager+"("+nodeNumber+")");
+ }
+ else {
+
corruptNodes.add(nodeManager+"("+nodeNumber+")("+otypeNodeName+")");
+ }
+ }
+ return null;
+ }
+
+}
Added:
CMSContainer/trunk/CMSContainer/cmsc/maintenance/src/webapp/editors/maintenance/checkintegrity.jsp
===================================================================
---
CMSContainer/trunk/CMSContainer/cmsc/maintenance/src/webapp/editors/maintenance/checkintegrity.jsp
(rev 0)
+++
CMSContainer/trunk/CMSContainer/cmsc/maintenance/src/webapp/editors/maintenance/checkintegrity.jsp
2009-11-13 10:37:34 UTC (rev 39678)
@@ -0,0 +1,45 @@
+<%...@page language="java" contentType="text/html;charset=UTF-8"
+%><%...@include file="globals.jsp"
+%><%@ page import="com.finalist.cmsc.maintenance.beans.*"
+%><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml/DTD/transitional.dtd">
+<html xmlns="http://www.w3.org/TR/xhtml">
+<head>
+<title>Check integrity of MMBase database</title>
+<meta http-equiv="pragma" value="no-cache" />
+<meta http-equiv="expires" value="0" />
+<link href="../style.css" type="text/css" rel="stylesheet"/>
+</head>
+ <body>
+ <h2>Check integrity of MMBase database.</h2>
+ <mm:cloud jspvar="cloud" loginpage="../editors/login.jsp"
rank="administrator">
+ <mm:log jspvar="log">
+ <form method="post">
+ <input type="hidden" name="action" value="check"/>
+
+ <input type="submit" name="action" value="Check"/>
+ </form>
+
+ <mm:import externid="action"/>
+ <mm:present referid="action">
+ <%
+ java.util.List nodes = new
CheckIntegrityBean(cloud).execute();
+ pageContext.setAttribute("list", nodes);
+
+ %>
+ <c:if test="${fn:length(list) > 0}">
+ <p>Corrupt nodes :</p>
+ <ul>
+ <c:forEach var='item' items='${list}'>
+ <li><c:out value='${item}'/></li>
+
+ </c:forEach>
+</ul>
+ </c:if>
+ <c:if test="${fn:length(list) == 0}">
+ No corrupt nodes.
+ </c:if>
+ </mm:present>
+
+</mm:log>
+</mm:cloud>
+</body>
_______________________________________________
Cvs mailing list
[email protected]
http://lists.mmbase.org/mailman/listinfo/cvs