Item9311: Installing this contrib breaks foswiki extension update feature

pencil
Priority: Urgent
Current State: Closed
Released In: 1.1.0
Target Release: minor
Applies To: Extension
Component: KinoSearchContrib
Branches:
Reported By: SteveLin
Waiting For:
Last Change By: AndrewJones
Version: 6305 (2010-02-12)

Installing StringifierContrib broke my ability to update extensions through bin/configure. When I click "Find More Extensions", I just get a blank page with the words "Consulting Foswiki.org..."

As a workaround, I went into Foswiki::Configure::UIs::EXTENSIONS and put the following line in the _parseRow() subroutine:

if ($data{topic} =~ m/StringifierContrib/) { return ''; }

Please work to fix this bug. It was difficult to pinpoint what broke the update feature!

-- SteveLin - 12 Jul 2010

Changing AppliesTo to engine and Component to Configure, as the Foswiki's configure interface should not let a contrib break it.

Also upgrading to Urgent, on the assumption that this may also affect trunk. We cannot expect admins to have to hack configure code to recover from installing a contrib.

-- MichaelTempest - 18 Jul 2010

I can't reproduce this on trunk. Very difficult to pin down without knowing what the error was i.e. what was reported in the web server error log (if anything)

-- CrawfordCurrie - 19 Jul 2010

Unfortunately, there were no errors in the web server log. That was something that really had me scratching my head. I didn't see any problems in any logs so I started digging through the code.

-- SteveLin - 19 Jul 2010

Changing the string

use Module::Pluggable (require => 1, search_path => [qw/Foswiki::Contrib::StringifierContrib::Plugins/]);

to

use Module::Pluggable (require => 0, search_path => [qw/Foswiki::Contrib::StringifierContrib::Plugins/]);

in lib/Foswiki/Contrib/StringifierContrib/Base.pm sorts out this problem.. Not sure what it messes up though..

-- PadraigLennon - 19 Jul 2010

configure can't ever be totally immune to contribs that disappear up their own backsides. frown, sad smile

-- CrawfordCurrie - 19 Jul 2010

Reassigning to StringifierContrib

-- CrawfordCurrie - 27 Jul 2010

Tried to reproduce it without success frown, sad smile

-- OlivierRaginel - 27 Jul 2010

It looks like its trying to compile all the stringifier plugins, and not all the dependencies are installed.

Fixing Item8634 would probably fix this.

-- AndrewJones - 28 Jul 2010

I'm unable to recreate the hang in configure. But the changes I've committed to Dependency.pm make it a bit more capable of finding the installed version when the code won't eval. Also noticed that the version extraction was too greedy and would pull much more than the VERSION string when parsing the module.

Also changed extender.pl to use Dependency for studying the installation, so that eval handling of modules is in a common location.

-- GeorgeClark - 03 Sep 2010

Changing back to confirmed. Not sure there is much more to do to Dependency.pm to insulate itself from this.

-- GeorgeClark - 13 Sep 2010

Here is a patch to lib/Foswiki/Configure/Dependency.pm - it's "brute force" but it will get past the hang and still allow FindMoreExtensions to show StringifierContrib as installed:

sub studyInstallation {
    my $this        = shift;
    my $load_errors = '';


# Add this block to bypass the hang issue with StringifierContrib
    if ($this->{name} =~ m/StringifierContrib/) {
        my $path = "Foswiki/Contrib/StringifierContrib.pm";
        return 1 if ( $this->_recover_versions($path) );
        return 0;
        }
# End of addition

    if ( !$this->{module} ) {

-- GeorgeClark - 16 Oct 2010

does fixing Item8634 help with this?

-- WillNorris - 24 Oct 2010

i get this error message in error.log when this (inconsistently) happens:
[Sat Oct 23 21:10:04 2010] [error] [client 189.165.143.250] ModSecurity: Output filter: Failed to read bucket (rc 70007): The timeout specified has expired [hostname "dev.cocomint.org"] [uri "/bin/configure"] [unique_id "TMOxQUWj8jYAAAi@PfMAAAAH"]

-- WillNorris - 24 Oct 2010

SteveLin and PadraigLennon, please see if v1.12 of StringifierContrib resolves this issue. you will have to install the 1.12 version manually and then see if FindMoreExtensions still hangs.

-- WillNorris - 25 Oct 2010

The problem still exists with the latest version on StringifierContrib. I installed manually using wget and the installer.. The problem still persists..

Again this fixes the issue:

Edit lib/Foswiki/Contrib/StringifierContrib/Base.pm and change require => 0 on the following line:

use Module::Pluggable (require => 0, search_path => [qw/Foswiki::Contrib::StringifierContrib::Plugins/]);

-- PadraigLennon - 25 Oct 2010

right, thanks. but you didn't see so confident that it wouldn't break anything else. so.... i have read the docs to CPAN:Module::Pluggable, and it seems as though require => 1 should be safer than 0. anyway, as i have not been able to consistently reproduce this, i ask you to try this variation and let me know if it still hangs or not. if it does still hang, we'll probably just have to change the code to what you've said works.

use Module::Pluggable (require => 1, inner=>0, search_path => [qw/Foswiki::Contrib::StringifierContrib::Plugins/]);

also, what is the output of perl -MModule::Pluggable -e 'print $Module::Pluggable::VERSION' ? i have 3.8.

-- WillNorris - 25 Oct 2010

No difference I'm afraid Will. I tried your suggestion above. The version of Module::Pluggable I am running is 3.9. Personally I'm not too worried about the side-effects to what i suggested above. I simply thought that it might mess up something else within configure. It does not however seem to have caused any issues on our install here.

-- PadraigLennon - 26 Oct 2010

ok, thanks for the help. i'm now ready to change to require => 0. i just wish we knew what was going on. :/

-- WillNorris - 26 Oct 2010

Released this change Will as it was continuing to cause issues. Hope this is ok. I created a new release (1.14) also

-- PadraigLennon - 12 Nov 2010

Outch: Item10026

-- MichaelDaum - 15 Nov 2010

Reopening to mod StringifierContrib not to do heavy lifting in the same module storing the VERSION info.

Moving the stringFor() call to a Stringifier.pm module of its own. This affects SolrPlugin and KinoSearchContrib as well.

-- MichaelDaum - 01 Dec 2010

Released a new SolrPlugin and StringifierContrib.

Releasing a new KinoSearchContrib is still pending.

-- MichaelDaum - 01 Dec 2010

KinoSearchContrib finally released.

-- AndrewJones - 25 Mar 2011
Topic revision: r35 - 25 Mar 2011, AndrewJones
The copyright of the content on this website is held by the contributing authors, except where stated elsewhere. See Copyright Statement. Creative Commons License    Legal Imprint    Privacy Policy