[Mondrian] MondrianOlap4jConnection requires creation of all RolapConnections

Luc Boudreau lucboudreau at gmail.com
Mon Nov 10 09:57:02 EST 2014


As I mentioned on my answer on another thread with Matt and Jeff, using the
lazy-load pattern is fine. We use it in many other places in the XMLA
driver. (see DefferedNamedList)

As for the change to MondrianOlap4jConnection, it sounds like a reasonable
request. That's how it should have been in the first place. If you can show
some code, we'll review it and get things moving.

Luc

On Fri, Nov 7, 2014 at 10:42 AM, Ganong, Kenneth <
ken.ganong at truvenhealth.com> wrote:

>  I attempted to make a code change to solve this issue by having
> MondrianOlap4jConnection lazily-load its schema map. I was then able to
> create a Connection without loading all of the schemas. Unfortunately, an
> XML/A request for Mdschema Cubes will call getOlapCatalogs on the
> OlapConnection, causing the schema loads for every catalog even though the
> XML/A request specified a catalog name.
>
>
>
> I am now attempting to have the Catalog’s schema’s be lazily-loaded as
> well so that the schemas are not loaded for catalogs until the schemas are
> requested (i.e. not during the getOlapCatalogs method nor constructor of
> MondrainOlap4jConnection). This should allow discover requests that
> specific a catalog name to not load the schemas for other catalogs.
>
>
>
> I’m also considering an option in the XML/A layer to short-cut selecting
> the catalog for the current connection. Instead of iterating over
> connection.getOlapCatalogs, it would call simply connection.getOlapCatalog
> to get the active catalog for the connection. This could be implemented as
> a property so that the XML/A layer avoids calling the method that requires
> loading of all schemas. This would require a change to
> MondrianOlapConnection so that the getOlapCatalog method no longer requires
> loading all catalogs and schemas.
>
>
>
> I would be grateful for any feedback on the options I am considering to
> solve this open issue.
>
>
>
>         Ken
>
>
>
> *From:* Ganong, Kenneth
> *Sent:* Wednesday, October 29, 2014 9:01 AM
> *To:* Mondrian developer mailing list
> *Subject:* RE: [Mondrian] MondrianOlap4jConnection requires creation of
> all RolapConnections
>
>
>
> Yes! Your jira issue does look like the same underlying cause as the issue
> I’ve run into.
>
>
>
>         Ken
>
>
>
> *From:* mondrian-bounces at pentaho.org [mailto:mondrian-bounces at pentaho.org
> <mondrian-bounces at pentaho.org>] *On Behalf Of *Roland Bouman
> *Sent:* Tuesday, October 28, 2014 6:06 PM
> *To:* Mondrian developer mailing list
> *Subject:* Re: [Mondrian] MondrianOlap4jConnection requires creation of
> all RolapConnections
>
>
>
> Hi Ken,
>
>
>
> is it possible that this is related to
> http://jira.pentaho.com/browse/MONDRIAN-1056?
>
>
>
> On Tue, Oct 28, 2014 at 10:59 PM, Ganong, Kenneth <
> ken.ganong at truvenhealth.com> wrote:
>
> Hello Mondrian Developers,
>
>
>
> We’ve encountered an issue in which a Discover query is creating
> RolapConnection’s for every schema defined in our Datasource.xml. This
> issue has been encountered in two forms:
>
> ·         A failed discover query when one of the unrelated connections
> ran into an exception during its construction.
>
> ·         Severe slow down when many catalogs where defined in
> Datasource.xml.
>
>
>
> Here is what I’ve gathered from the cause of this issue. Is there
> something that we are doing incorrectly, is this a corner case, or is this
> a true issue with Mondrian 3.6?
>
>
>
> In MondrianOlap4jConnection’s constructor, this for loop goes through
> every catalog in our Datasource.xml, including ones that are not related to
> this particular connection.
>
>
>
> for (String catalogName : catalogFinder.getCatalogNames(connection))
>
>
>
> Inside this for loop is the following line of code which ends up creating
> a RolapConnection to every schema referenced in Datasource.xml (again, not
> just the ones related to the connection).
>
>
>
>                 final Map<String, RolapSchema> rolapSchemas =
> catalogFinder.getRolapSchemas(connection, catalogName);
>
>
>
> Our Datasource.xml has a single datasource with many catalogs in it, like
> this:
>
>
>
> <DataSources>
>
>     <DataSource>
>
>         <Catalogs>
>
>             <Catalog name="a42od970_a42od970_build">
>
>             </Catalog>
>
>             <Catalog name="a42od970_a42od970_secure1_build">
>
>             </Catalog>
>
>             <Catalog name="a42od378_a42od378_build">
>
>             </Catalog>
>
>         </Catalogs>
>
>     </DataSource>
>
> </DataSources>
>
>
>
> The code path for creating all of these RolapConnections is:
>
> ·         MondrianOlap4jConnection.<init>
>
> ·         MondrianServerImpl.getRolapSchemas
>
> ·         FileRepository.getRolapSchemas
>
> ·         FileRepository$CatalogInfo.access
>
> ·         FileRepository$CatalogInfo.getRolapSchema
>
> ·         DriverManager.getConnection
>
>
>
>
>
> I don’t understand why creating a single connection would require the
> creation of every one of these connections.
>
>
>
>         Ken
>
>
> _______________________________________________
> Mondrian mailing list
> Mondrian at pentaho.org
> http://lists.pentaho.org/mailman/listinfo/mondrian
>
>
>
>
>
> --
> Roland Bouman
> blog: http://rpbouman.blogspot.com/
> twitter: @rolandbouman
> linkedin: http://www.linkedin.com/profile/view?id=5142800&trk=tab_pro
>
> Author of "Pentaho Solutions" (Wiley, ISBN: 978-0-470-48432-6
> http://tinyurl.com/lvxa88) and "Pentaho Kettle Solutions" (Wiley, ISBN:
> 978-0-470-63517-9 http://tinyurl.com/33r7a8m)
>
> _______________________________________________
> Mondrian mailing list
> Mondrian at pentaho.org
> http://lists.pentaho.org/mailman/listinfo/mondrian
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.pentaho.org/pipermail/mondrian/attachments/20141110/34e7597b/attachment.html 


More information about the Mondrian mailing list