[Mondrian] RolapSchema #122
Will Gorman
wgorman at pentaho.com
Tue Feb 17 17:43:24 EST 2009
This may be a bug in VFS's HTTP implementation. I recall running into
this issue before Pentaho switched to our own custom vfs provider.
Will
On Tue, 2009-02-17 at 17:14 -0500, Matt Campbell wrote:
> I just noticed that RolapSchema.load() uses identical code to
> Util.readVirtualFile(). It seems likely that it would have the same
> problem with cached files.
>
> On Tue, Feb 17, 2009 at 12:18 PM, Matt Campbell <mkambol at gmail.com>
> wrote:
> It looks like the parameters in the URL are ignored on the
> second call to readVirtualFile(). The unit test below shows
> the issue. The URI of the second file returned
> by .readVirtualFile ends up being identical to uri1.
>
>
> Could you revert your change until this is fixed?
>
>
> public void testReadVirtualFile() {
> try {
> String uri1 = "http://localhost:8088/?URI1";
> String uri2 = "http://localhost:8088/?URI2";
> FileObject file1 = Util.readVirtualFile(uri1);
> FileObject file2 = Util.readVirtualFile(uri2);
>
>
> assertEquals(file1.getName().getURI(), uri1);
> assertEquals(file2.getName().getURI(), uri2);
> } catch(Exception e) {
> fail("Threw an exception while reading virtual
> file");
> }
> }
>
>
> On Mon, Feb 16, 2009 at 4:36 PM, Sherman Wood
> <swood at jaspersoft.com> wrote:
>
>
>
>
> Yep – that looks weird and bad. I'll look into it too.
>
>
>
> Sherman
>
>
>
> From:mondrian-bounces at pentaho.org
> [mailto:mondrian-bounces at pentaho.org] On Behalf Of
> Matt Campbell
> Sent: Tuesday, February 17, 2009 4:01 AM
> To: Mondrian developer mailing list
> Subject: [Mondrian] RolapSchema #122
>
>
>
>
>
> Sherman,
>
>
> It looks like a bug was introduced in the code which
> retrieves schemas from the Pool. In Pool.get() there
> is code which first loads the schema from a given URL,
> then computes its checksum. I've noticed that the new
> Util.readVirtualFile() method will sometimes return
> the content of the *previous* schema loaded.
>
>
>
>
> In the current code there is actually an extra read of
> the catalog--see the bolded section below. It's
> leftover from the previous approach for loading the
> schema. This should probably be cleaned up, but it
> helped me find the issue. When I've traced through
> this code I've seen that the catalogStr returned by
> the old code (Util.readURL) is sometimes different
> from the schema returned by Util.readVirtualFile.
>
>
>
>
> I'm going to try to come up with a clean reproducible
> test case tomorrow, but I thought I'd pass on what
> I've seen in case you see something obviously wrong.
>
>
>
>
>
> try {
>
>
> if (catalogStr == null) {
>
>
> catalogStr =
> Util.readURL(catalogUrl);
>
>
> // Use VFS to get the content
>
>
>
>
>
> FileObject file =
> Util.readVirtualFile(catalogUrl);
>
>
>
>
>
> StringBuilder buf = new
> StringBuilder(1000);
>
>
> FileContent fileContent =
> file.getContent();
>
>
> InputStream in =
> fileContent.getInputStream();
>
>
> int n;
>
>
> while ((n = in.read()) != -1)
> {
>
>
> buf.append((char) n);
>
>
> }
>
>
> catalogStr = buf.toString();
>
>
> }
>
>
> md5Bytes = encodeMD5(catalogStr);
>
>
> } catch (Exception ex) {
>
>
> // Note, can not throw an
> Exception from this method
>
>
> // but just to show that all is
> not well in Mudville
>
>
> // we print stack trace (for now -
> better to change
>
>
> // method signature and throw).
>
>
> ex.printStackTrace();
>
>
> }
>
>
>
>
>
> -Matt
>
>
>
>
> _______________________________________________
> Mondrian mailing list
> Mondrian at pentaho.org
> http://lists.pentaho.org/mailman/listinfo/mondrian
>
>
>
>
> _______________________________________________
> Mondrian mailing list
> Mondrian at pentaho.org
> http://lists.pentaho.org/mailman/listinfo/mondrian
More information about the Mondrian
mailing list