HI Sascha et al,

I think I have (almost) found the problem when help files are loaded. Hopefully 
I can explain (and not bore people too much).  If I run my application with a 
clean cache, and --BlueBerry.consoleLog, I can see that the framework starts up 
with a nice clean cache.

Framework instance  1 :  created
Framework instance  1 :  initializing
Framework instance  1 :  inited
Framework instance  1 :  Installed plugins:
[3.490] [BlueBerry] Creating CodeCache with path: 
/Users/mattclarkson/Library/Application 
Support/CMIC/NiftyView_36122371/bb-plugin_cache/

and then further along for one of my plugins, it gets registered with plugin ID 
= 31.

resolve: "uk.ac.ucl.cmic.snapshot" [ 31 ]
checkRequirePlugin: check requiring plugin 31
resolve: Done for "uk.ac.ucl.cmic.snapshot" [ 31 ]
[3.834] [BlueBerry] Extension found for extension-point: org.blueberry.ui.views 
(from uk.ac.ucl.cmic.snapshot)

I can check that this plugin cache entry does exist:

cd /Users/mattclarkson/Library/Application Support/CMIC/NiftyView_36122371/
find . -type f

./data/23/CMICNiftyViewQtHelpCollection_d31e02570c1d6127da15c809a20593a180ab2403.qhc
./data/23/qch_files/31/uk.ac.ucl.cmic.snapshot.qch
./plugins.db

(and a few more plugins).

This snapshot plugin is the last plugin loaded, and the one with the highest 
ID, chosen only by virtue of being last. The problem that I am experiencing is 
that if I edit a file in eclipse, and recompile my app (for example I edit code 
that belongs in uk.ac.ucl.cmic.qt.gui.common, causing 4 plugins to be 
recompiled, including the snapshot one). And then when I re-run I get:

Framework instance  1 :  created
Framework instance  1 :  initializing
Framework instance  1 :  inited
Framework instance  1 :  Installed plugins:
Framework instance  1 :   # 1   "org.commontk.eventadmin" : "0.0.0"   location: 
"file:///Users/mattclarkson/build/NifTK-SuperBuild/CTK-build/CTK-build/bin/liborg_commontk_eventadmin.dylib"
Framework instance  1 :   # 2   "org.blueberry.osgi" : "1.0.0"   location: 
"file:///Users/mattclarkson/build/NifTK-SuperBuild/MITK-build/MITK-build/bin/plugins/liborg_blueberry_osgi.dylib"

<snip>

Framework instance  1 :   # 30   "uk.ac.ucl.cmic.gui.qt.common" : "0.1.0"   
location: 
"file:///Users/mattclarkson/build/NifTK-SuperBuild/NifTK-build/bin/plugins/libuk_ac_ucl_cmic_gui_qt_common.dylib"
Framework instance  1 :   # 31   "uk.ac.ucl.cmic.midasmorphologicalsegmentor" : 
"0.1.0"   location: 
"file:///Users/mattclarkson/build/NifTK-SuperBuild/NifTK-build/bin/plugins/libuk_ac_ucl_cmic_midasmorphologicalsegmentor.dylib"
Framework instance  1 :   # 32   "uk.ac.ucl.cmic.midasgeneralsegmentor" : 
"0.1.0"   location: 
"file:///Users/mattclarkson/build/NifTK-SuperBuild/NifTK-build/bin/plugins/libuk_ac_ucl_cmic_midasgeneralsegmentor.dylib"
Framework instance  1 :   # 33   "uk.ac.ucl.cmic.midasnavigation" : "0.1.0"   
location: 
"file:///Users/mattclarkson/build/NifTK-SuperBuild/NifTK-build/bin/plugins/libuk_ac_ucl_cmic_midasnavigation.dylib"
Framework instance  1 :   # 34   "uk.ac.ucl.cmic.snapshot" : "0.1.0"   
location: 
"file:///Users/mattclarkson/build/NifTK-SuperBuild/NifTK-build/bin/plugins/libuk_ac_ucl_cmic_snapshot.dylib"

so, on restart, it looks like the plugin cache has changed such that the 
framework thinks that the snapshot plugin is number 34.

Subsequently in QCHPluginListener::processPlugins, we go to addPlugin, the 
QFileInfo qchDirInfo is for the wrong file, the qchDirInfo.lastModified() < 
pluginFileInfo.lastModified() evaluates to true as qchDirInfo.lastModified() is 
blank. So the framework tries to remove the plugin from the cache (as indeed it 
should to replace the cache entry as the plugin has been recompiled).

However, in removePlugin,


  QFileInfo qchDirInfo = context->getDataFile("qch_files/" + 
QString::number(plugin->getPluginId()));

  qchDirInfo.setFile(qchDirInfo.absoluteFilePath());

  qDebug() << "Matt, in listener removing plugin id=" << plugin->getPluginId()  
<< ", exists()=" << qchDirInfo.exists() << ", size()=" << qchDirInfo.size() << 
", path=" << qchDirInfo.absoluteFilePath();

  if (qchDirInfo.exists())

  {

the exists() fails because it is trying to remove plugin 34, which does not 
exist. It should remove plugin 31. So, when the framework is trying to register 
help files for plugin 34, it fails because in the qch namespace, the plugin 
names is already used. (because it was never correctly removed), and then 
finally, if in berryQtAssistantUtil.cpp I remove (comment out) the -quiet 
argument, and add some debug statements:

Matt, in listener, localQCHFiles to register= 
("/Users/mattclarkson/Library/Application 
Support/CMIC/NiftyView_36122371/data/23/qch_files/34/uk.ac.ucl.cmic.snapshot.qch")
*****  
"/Users/mattclarkson/install/qt-4.7.4/bin/assistant.app/Contents/MacOS/Assistant"
 ("-collectionFile", "/Users/mattclarkson/Library/Application 
Support/CMIC/NiftyView_36122371/data/23/CMICNiftyViewQtHelpCollection_d31e02570c1d6127da15c809a20593a180ab2403.qhc",
 "-register", "/Users/mattclarkson/Library/Application 
Support/CMIC/NiftyView_36122371/data/23/qch_files/34/uk.ac.ucl.cmic.snapshot.qch")
Matt, registerFile=1
[1.995] [BlueBerry] Registering Qt compressed help file: 
/Users/mattclarkson/Library/Application 
Support/CMIC/NiftyView_36122371/data/23/qch_files/34/uk.ac.ucl.cmic.snapshot.qch
Matt, errorString=
Matt, errorCode=5
Matt, exit=1
Matt, exitStatus=0
Matt, err=
Matt, out=Could not register documentation file
/Users/mattclarkson/Library/Application 
Support/CMIC/NiftyView_36122371/data/23/qch_files/34/uk.ac.ucl.cmic.snapshot.qch

Reason:
Namespace uk.ac.ucl.cmic.snapshot already exists!

so we can see that the framework is doing a -register without doing an 
unregister first, and this results in 2 files in the cache:

mclarkson:qch_files mattclarkson$ pwd
/Users/mattclarkson/Library/Application 
Support/CMIC/NiftyView_36122371/data/23/qch_files
mclarkson:qch_files mattclarkson$ find . -type f
./10/org.blueberry.ui.qt.log.qch
./17/org.mitk.gui.qt.datamanager.qch
./18/org.mitk.gui.qt.segmentation.qch
./19/org.mitk.gui.qt.imagenavigator.qch
./20/org.mitk.gui.qt.imagecropper.qch
./21/org.mitk.gui.qt.volumevisualization.qch
./22/org.mitk.gui.qt.pointsetinteraction.qch
./23/uk.ac.ucl.cmic.gui.qt.niftyview.qch
./25/uk.ac.ucl.cmic.imagelookuptables.qch
./26/uk.ac.ucl.cmic.midasmorphologicalsegmentor.qch
./27/uk.ac.ucl.cmic.midasgeneralsegmentor.qch
./28/uk.ac.ucl.cmic.affinetransform.qch
./29/uk.ac.ucl.cmic.thumbnail.qch
./30/uk.ac.ucl.cmic.midasnavigation.qch
./31/uk.ac.ucl.cmic.snapshot.qch
./34/uk.ac.ucl.cmic.snapshot.qch

Is this a bug or a user error?

Thanks

Matt

On 9 Jan 2012, at 15:53, Sascha Zelzer wrote:

Hi,

On 01/09/2012 02:46 PM, Clarkson, Matt wrote:
Hi there everyone,

On occasion, I have seen the fact that the help files fail to register, 
resulting in the message from berryQtAssistantUtil.cpp line 303 "You may not 
have write permission in.." complaining of no write permission in your own home 
folder, which in my case is definitely wrong.  So, i poked around for a bit, 
and have a few questions:
Yes, this error message is probably most of the time misleading. The problem is 
that we cannot get a more detailed error message from the registration process 
unless we want the QtAssistant program pop up a message box for each 
successfully registered help file on start-up. I guess a generic error message 
is better than one which is misleading in 99% of the cases...
When the application plugin is loaded, for example the 
QmitkExtApplicationPlugin, the CTK plugin framework calls 
start(ctkPluginContext *context). This registers a QCHPluginListener, and it is 
the pluginListener->processPlugins() that registers the help files.
However, in the QmitkExtAppWorkbenchAdvisor, there is another call to 
berry::QtAssistantUtil::RegisterQCHFiles(bundles).

Is one of these redundant, or is one of these duplication of effort?
The QCHPluginListener takes care of CTK plug-ins and the call in the 
QmitkExtAppWorkbenchAdvisor registers help files of legacy BlueBerry bundles. 
So the two calls should register help files from two disjoint sets of plug-ins.

Starting your application with --BlueBerry.consoleLog should print exactly the 
.qch files which are being registered.

The reason I ask is to determine if the possible reason for the above error 
message is that the file system sometimes holds locks for too long, and hence 
some of the registering/un-registering second time round fails.
We once had a problem with multiple registered QCHPluginListener instances in 
the past, which gave very similar errors. I can't remember the actual 
constellation of enabled plug-ins though...

Hope that helps,

Sascha



------------------------------------------------------------------------------
Ridiculously easy VDI. With Citrix VDI-in-a-Box, you don't need a complex
infrastructure or vast IT resources to deliver seamless, secure access to
virtual desktops. With this all-in-one solution, easily deploy virtual 
desktops for less than the cost of PCs and save 60% on VDI infrastructure 
costs. Try it free! http://p.sf.net/sfu/Citrix-VDIinabox
_______________________________________________
mitk-users mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/mitk-users

Reply via email to