Version 7

    Status

     

    Merged.

     

    Description

     

    GateIn relies on the legacy DataStorage interface for performing the MOP operations, this interface is being replaced step by step by dedicated services for each piece of the MOP and with the generic goal to improve also this legacy interface. This effort has been done already for the navigation and the NavigationService is being used in GateIn since GateIn 3.2, fulfliing the goal to improve scalability of data loading for a navigation.

     

    The Page Service is a new service that cares about a portal page as an entity and does not provide access to the structural aspect of a page (i.e the layout). The goal is to improve performances when a page is displayed by loading only the information of a page (the display name are used for building the navigation and the related security is used to enforce the security of a navigation node induced by the page).

     

    Specification

     

    Guidelines

     

    The layout aspect of the page will be addressed later and the DataStorage interface should be still used for performing operations related to the structure of a page, however any operation related to the page information or page as an entity (crud) will be done through the new page service.

     

    The page service will try to be homogeneous with the existing navigation service design (naming, error code, exception, etc...) and the scope of this service is an internal API used by the portal. Other parties code should use the public API wrapping the page service.

     

    Page Service Operations

     

    Create or update a page

     

    PageService#savePage

     

    Destroy a page

     

    Service#destroyPage

     

    Clone a page

     

    PageService#clonePage

     

    Find  a page

     

    PageService#findPage

     

    DataStorage changes

     

    • Remove DataStorage#clonePage(pageId,clonedOwnerType,clonedOwnerId,clonedName)
    • Remove DataStorage#remove(page)
    • Remove DataStorage#create(page)
    • Modify DataStorage#save(page) to only update on the structure of the page (i.e changing page info will not work)
    • Modify DataStorage#load(page) to only load the structure of the page (i.e loading page info will not work)
    • Modify DataStorage#find operations to throw an exception when a page is loaded saying that the new page service should be used for searching pages

    Migration

    The migration of GateIn will be done in several steps

     

    • Develop a usable PageService (done)
    • Update the UserNodeFilter to use the new page service for checking there is an improvement (done)
    • Migrate the rest of GateIn codebase to use the new service (done)
    • Sanitize the DataStorage to keep only the necessary operation, i.e load/save of structural data (done)

     

    Preliminary performances check

     

    We expect with the new service to load less data than before, a quick survey has been done using SQLMan (tool built on top of Byteman to monitor the access to expensive resources in a server) and noticeable improvements have been measured.

     

    Default classic portal navigation

     

     


    SQL queries
    Before552
    After452

     

     

    Classic portal navigation with additional pages (5 pages)

     

     


    SQL queries
    Before964
    After576

     

    Analysis

     

    • The checks have been made with the default HSQLDB on a laptop
    • The number of SQL queries is reduced by a significant amount, specially when the number of nodes the same level of a navigation grows.
    • The number of SQL queries will remain proportional to the number of navigation nodes but it will not depend anymore on the structure of the page, except of the current page being viewed, so we reduce the constant scale factor. Before it was equals to the data of the page + the average complexity of page, now it is only the data of a page.