Changeset 5740


Ignore:
Timestamp:
2010-09-10 15:03:46 (3 years ago)
Author:
karel
Message:

Added a way to reinitialise the repository_revisions table via JMX

(Note that, under normal conditions, this should not be needed)

fixes #797

Location:
trunk/daisy
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • trunk/daisy/repository/server/src/main/java/org/outerj/daisy/repository/serverimpl/LocalRepositoryManager.java

    r5719 r5740  
    194194        assureNamespacesRegistered(); 
    195195         
    196         this.repositoryMaintainer = new RepositoryMaintainerImpl(documentStrategy, systemUser, context, mbeanServer); 
     196        this.repositoryMaintainer = new RepositoryMaintainerImpl(documentStrategy, systemUser, context, dataSource, jdbcHelper, mbeanServer); 
    197197 
    198198        pluginRegistry.setPluginUser(PreSaveHook.class, preSaveHookPluginUser); 
  • trunk/daisy/repository/server/src/main/java/org/outerj/daisy/repository/serverimpl/RepositoryMaintainerImpl.java

    r5672 r5740  
    1616package org.outerj.daisy.repository.serverimpl; 
    1717 
     18import java.sql.Connection; 
     19import java.sql.PreparedStatement; 
     20import java.sql.SQLException; 
    1821import java.util.Date; 
    1922import java.util.Locale; 
     
    2326import javax.management.MBeanServer; 
    2427import javax.management.ObjectName; 
     28import javax.sql.DataSource; 
    2529 
    2630import org.apache.commons.logging.Log; 
     
    2832import org.joda.time.format.DateTimeFormatter; 
    2933import org.joda.time.format.ISODateTimeFormat; 
     34import org.outerj.daisy.jdbcutil.JdbcHelper; 
    3035import org.outerj.daisy.repository.Document; 
    3136import org.outerj.daisy.repository.VariantKey; 
     
    4247    private CommonRepository commonRepository; 
    4348    private AuthenticatedUser systemUser; 
    44     private ObjectName mbeanName = new ObjectName("Daisy:name=RepositoryMaintainerImpl"); 
     49    private DataSource dataSource; 
     50    private JdbcHelper jdbcHelper; 
     51    private ObjectName mbeanName = new ObjectName("Daisy:name=RepositoryMaintainer"); 
    4552    private MBeanServer mbeanServer; 
    4653     
     
    4956    public RepositoryMaintainerImpl() throws Exception {}; 
    5057     
    51     public RepositoryMaintainerImpl(LocalDocumentStrategy documentStrategy, AuthenticatedUser systemUser, Context context, MBeanServer mbeanServer) throws Exception { 
     58    public RepositoryMaintainerImpl(LocalDocumentStrategy documentStrategy, AuthenticatedUser systemUser, Context context, DataSource dataSource, JdbcHelper jdbcHelper, MBeanServer mbeanServer) throws Exception { 
    5259        this.documentStrategy = documentStrategy; 
    5360        this.commonRepository = context.getCommonRepository(); 
     
    5562 
    5663        this.executor = Executors.newSingleThreadExecutor(); 
     64        this.dataSource = dataSource; 
     65        this.jdbcHelper = JdbcHelper.getInstance(dataSource, log); 
    5766        this.mbeanServer = mbeanServer; 
    5867        mbeanServer.registerMBean(this, mbeanName); 
     
    119128    } 
    120129 
     130    public void rebuildRevisionTable() { 
     131        Connection conn = null; 
     132        PreparedStatement stmt = null; 
     133        try { 
     134            conn = dataSource.getConnection(); 
     135            jdbcHelper.startTransaction(conn); 
     136             
     137            stmt = conn.prepareStatement("delete from repository_revisions"); 
     138            stmt.executeUpdate(); 
     139             
     140            stmt = conn.prepareStatement("insert into repository_revisions(ns_id, doc_id, revision_date) select ns_id, doc_id, begin_date from live_history"); 
     141            stmt.executeUpdate(); 
     142             
     143            stmt = conn.prepareStatement("insert into repository_revisions(ns_id, doc_id, revision_date) select ns_id, doc_id, end_date from live_history where end_date is not null"); 
     144            stmt.executeUpdate(); 
     145             
     146            conn.commit(); 
     147        } catch (SQLException e) { 
     148            throw new RuntimeException("Failed to rebuild revision table", e); 
     149        } finally { 
     150            jdbcHelper.closeStatement(stmt); 
     151            jdbcHelper.rollback(conn); 
     152            jdbcHelper.closeConnection(conn); 
     153        } 
     154    } 
     155 
    121156} 
  • trunk/daisy/repository/server/src/main/java/org/outerj/daisy/repository/serverimpl/RepositoryMaintainerImplMBean.java

    r5672 r5740  
    2424    public void reExtractLinks(String query, String beginDate, String endDate); 
    2525     
     26    public void rebuildRevisionTable(); 
    2627} 
  • trunk/daisy/services/revision-manager/server-impl/src/main/java/org/outerj/daisy/repository/revisions/CommonRevisionManager.java

    r5672 r5740  
    168168            } 
    169169             
     170            // take a lock on the document to make sure the copied data are consistent 
     171            stmt = conn.prepareStatement("select ns_id, doc_id from documents where ns_id = ? and doc_id = ?" + jdbcHelper.getSharedLockClause()); 
     172             
    170173            stmt = conn.prepareStatement("delete from repository_revisions where ns_id = ? and doc_id = ?"); 
    171174            stmt.setLong(1, docId.getNamespaceId()); 
     
    178181            stmt.executeUpdate(); 
    179182 
    180             stmt = conn.prepareStatement("insert into repository_revisions(ns_id, doc_id, revision_date) select ns_id, doc_id, end_date from live_history where ns_id = ? and doc_id = ?"); 
     183            stmt = conn.prepareStatement("insert into repository_revisions(ns_id, doc_id, revision_date) select ns_id, doc_id, end_date from live_history where end_date is not null and ns_id = ? and doc_id = ?"); 
    181184            stmt.setLong(1, docId.getNamespaceId()); 
    182185            stmt.setLong(2, docId.getSeqId()); 
Note: See TracChangeset for help on using the changeset viewer.