Moodle
  1. Moodle
  2. MDL-27083

Certain actions lead to orphaned questions in the question bank

    Details

    • Type: Bug Bug
    • Status: Closed
    • Priority: Critical Critical
    • Resolution: Fixed
    • Affects Version/s: 2.0.2, 2.3.1
    • Fix Version/s: 2.2.5, 2.3.2
    • Component/s: Questions, Quiz
    • Labels:
    • Database:
      Any
    • Testing Instructions:
      Hide

      Test difficulty: difficult

      Test pre-requisites

      • Gold medal if tested on 4 DB engines
      • Create a question 'Question A' in the front page question bank
      • Create a question 'Question B' in a course question bank
      • Create a question 'Question C' in a quiz question bank

      Test 1

      1. Download test.php to your Moodle instance root directory
      2. Manually edit the database record of question A and B (mdl_question)
      3. Set their category field to 0
      4. Run `sudo -u www-data php test.php`
      5. Make sure mdl_question_categories contains a new category called 'Questions saved from deleted categories'
      6. Make sure the category field of question A and B in mdl_question match the ID of the newly created category
      7. Edit the database record of question C, and set category to 0
      8. Run `sudo -u www-data php test.php`
      9. Make sure there is no more than one category called 'Questions saved from deleted categories' in mdl_question_categories
      10. Make sure the category field of question C matches the category 'Questions saved from deleted categories'
      11. As an admin, go to any question bank
      12. Make sure you can view the three questions in the new category at system level

      Test 2

      1. Remove categories/questions created in Test 1, including the category 'Questions saved from deleted categories'
      2. Prepare a Moodle instance that can be upgraded
      3. Edit question A and B category field, and set it to 0
      4. Upgrade Moodle
      5. Go to a question bank
      6. Make sure question A and B appear under a category called 'Questions saved from deleted categories' at system level
      Show
      Test difficulty: difficult Test pre-requisites Gold medal if tested on 4 DB engines Create a question 'Question A' in the front page question bank Create a question 'Question B' in a course question bank Create a question 'Question C' in a quiz question bank Test 1 Download test.php to your Moodle instance root directory Manually edit the database record of question A and B (mdl_question) Set their category field to 0 Run `sudo -u www-data php test.php` Make sure mdl_question_categories contains a new category called 'Questions saved from deleted categories' Make sure the category field of question A and B in mdl_question match the ID of the newly created category Edit the database record of question C, and set category to 0 Run `sudo -u www-data php test.php` Make sure there is no more than one category called 'Questions saved from deleted categories' in mdl_question_categories Make sure the category field of question C matches the category 'Questions saved from deleted categories' As an admin, go to any question bank Make sure you can view the three questions in the new category at system level Test 2 Remove categories/questions created in Test 1, including the category 'Questions saved from deleted categories' Prepare a Moodle instance that can be upgraded Edit question A and B category field, and set it to 0 Upgrade Moodle Go to a question bank Make sure question A and B appear under a category called 'Questions saved from deleted categories' at system level
    • Workaround:
      Hide

      If you are having problems caused by this, then you can use Admin -> XMLDB -> Check foreign keys to find those questions where the corresponding category has been deleted, and those questions categories where the corresponding context no longer exists. (In a healthy Moodle site there should be none of these.)

      Then, you can manually go into the database and repair those foreign keys as best you can, for example by pointing the question at a category id that does exist, and pointing categories at a suitable context that does exist.

      Show
      If you are having problems caused by this, then you can use Admin -> XMLDB -> Check foreign keys to find those questions where the corresponding category has been deleted, and those questions categories where the corresponding context no longer exists. (In a healthy Moodle site there should be none of these.) Then, you can manually go into the database and repair those foreign keys as best you can, for example by pointing the question at a category id that does exist, and pointing categories at a suitable context that does exist.
    • Affected Branches:
      MOODLE_20_STABLE, MOODLE_23_STABLE
    • Fixed Branches:
      MOODLE_22_STABLE, MOODLE_23_STABLE
    • Pull from Repository:
    • Pull Master Branch:
      MDL-27083-master
    • Rank:
      16723

      Description

      We've found a series of actions that can lead to broken quizzes and loss of questions

      To reproduce

      1) Create a new quiz. This quiz has initially no questions and in my case gets an id=45;

      select id,name,questions from mdl_quiz where name like "Test%";
      
      id name questions
      45 Test quiz  

      2) Choose a spare category (or create it accordingly).
      you can see in my case this new category has id=544:

      select id,name from mdl_question_categories where name like "Test%";
      
      id name
      544 Test category - to be deleted

      3) Create a test question belonging to this category. In my case this question gets an id=10418, and is assigned the right category:

      select id,category,name from mdl_question where name like "Test%";
      
      id category name
      10418 544 Test question - short answer type

      4) Add this question to the quiz. You can see the question is correctly added to the quiz:

      select id,name,questions from mdl_quiz where name like "Test%";
      
      id name questions
      45 Test quiz 10418,0

      5) Now the malfunctioning part: Delete the recently created category. Moodle will ask you to select another category to move the Test question to. Choose any existing category.

      THIS SEEMS TO WORK, but in fact it doesn't. What happen is: category is deleted BUT affected questions are not assigned to the new category, so they become orphaned from a category point of view:

      select id,category,name from mdl_question where id=10418;
      
      id category name
      10418 544 Test question - short answer type

      BUT:

      select id,name from mdl_question_categories where id=544;
      Empty set (0.00 sec)
      

      So category is in fact deleted but affected question retains the old category id.

      This situation leads to 2 major problems:

      1) Questions inside the deleted category aren't in fact moved into the indicated category, but they are "lost" inside the database and cannot be further accessed. -> So DATA LOSS.

      2) Affected quizzes cease to work, as they have questions belonging to a non-existent category. The attached picture shows that the test quiz has one question inserted but it's not shown due to this problem. So if you try to preview or attempt these quizzes, you get a "Category ID is invalid" error. The only solution is to delete the offending quiz and to regenerate it. Well, you can also go to the database and correct the wrong category id of the affected questions, but clearly this isn't an option for everybody.

      1. test.php
        0.1 kB
        Frédéric Massart
      1. quiz.png
        39 kB

        Activity

        Hide
        Tim Hunt added a comment -

        Thank you. Very clear bug report.

        Show
        Tim Hunt added a comment - Thank you. Very clear bug report.
        Hide
        Frédéric Massart added a comment - - edited

        Sprint planning.
        Estimated development difficulty: M

        Show
        Frédéric Massart added a comment - - edited Sprint planning. Estimated development difficulty: M
        Hide
        Tim Hunt added a comment -

        Wow! as I said before, this was a very clear bug report, and I forgot all about it, so now I feel embarrassed!

        Anyway, thank you for looking into it Fred. (Can I ask that, if you assign a quiz/question bug to yourself, you add me as a watcher, so I can follow what happens. Thanks.)

        I suppose fixing this has two parts:

        1. Eliminate the underlying bug that causes the broken questions.

        2. Decide what to do with any existing broken questions in the DB.

        The first thing is a routine debugging / fixing job, though you will need to understand the question bank a bit, so feel free to ask me when the time comes.

        The second part is the hard bit, and I can see several options:

        a. Clearly, in the quiz UI (or perhaps somewhere in the question libraries) there is a JOIN on question_categories, that means that orphaned questions can never be loaded. One option is to change that to a LEFT JOIN, and then make sure the rest of the code can copy with $question->category-related-fields = null.

        b. Write some sort of upgrade script (in lib/db/upgrade.php) that rescues broken questions. For example, it could create an 'Orphaned questions' category in the questions bank, and then make orphaned questions members of that category. That sounds easy, until you remember that questions can have associated files in the file pool. To do this properly, you would have to work out which context each orphaned question belongs to, and then move it to an 'Orphaned questions' category belonging to that category, otherwise the images in the question will break.

        Option a. seems simpler at first, but actually just makes the whole system more tolerant of subtle bugs. I tend to prefer a system that makes bugs obvious, so they can be fixed.

        So, I think you should do option b. At the moment, I think it is impossible to work out the context that the question belongs to after the category has been deleted, so the only option is to create the 'Orphaned questions' category in the system context, and so the necessary fix-up is just

        UPDATE

        {question}

        SET category = :orphancategoryid WHERE NOT EXISTS (SELECT 1 FROM

        {question_categries}

        WHERE id = category)

        Images will be broken, but at least the rest of the question definition is saved.

        (Thinks: if only Moodle used foreign key constraints, this sort of bug would be impossible.)

        Show
        Tim Hunt added a comment - Wow! as I said before, this was a very clear bug report, and I forgot all about it, so now I feel embarrassed! Anyway, thank you for looking into it Fred. (Can I ask that, if you assign a quiz/question bug to yourself, you add me as a watcher, so I can follow what happens. Thanks.) I suppose fixing this has two parts: 1. Eliminate the underlying bug that causes the broken questions. 2. Decide what to do with any existing broken questions in the DB. The first thing is a routine debugging / fixing job, though you will need to understand the question bank a bit, so feel free to ask me when the time comes. The second part is the hard bit, and I can see several options: a. Clearly, in the quiz UI (or perhaps somewhere in the question libraries) there is a JOIN on question_categories, that means that orphaned questions can never be loaded. One option is to change that to a LEFT JOIN, and then make sure the rest of the code can copy with $question->category-related-fields = null. b. Write some sort of upgrade script (in lib/db/upgrade.php) that rescues broken questions. For example, it could create an 'Orphaned questions' category in the questions bank, and then make orphaned questions members of that category. That sounds easy, until you remember that questions can have associated files in the file pool. To do this properly, you would have to work out which context each orphaned question belongs to, and then move it to an 'Orphaned questions' category belonging to that category, otherwise the images in the question will break. Option a. seems simpler at first, but actually just makes the whole system more tolerant of subtle bugs. I tend to prefer a system that makes bugs obvious, so they can be fixed. So, I think you should do option b. At the moment, I think it is impossible to work out the context that the question belongs to after the category has been deleted, so the only option is to create the 'Orphaned questions' category in the system context, and so the necessary fix-up is just UPDATE {question} SET category = :orphancategoryid WHERE NOT EXISTS (SELECT 1 FROM {question_categries} WHERE id = category) Images will be broken, but at least the rest of the question definition is saved. (Thinks: if only Moodle used foreign key constraints, this sort of bug would be impossible.)
        Hide
        Frédéric Massart added a comment -

        Hum... Look like #1 is already done, I don't know who's done it, but I cannot reproduce this bug in 2.2 or master. Any other thoughts about this issue now that it looks fixed Tim?

        Show
        Frédéric Massart added a comment - Hum... Look like #1 is already done, I don't know who's done it, but I cannot reproduce this bug in 2.2 or master. Any other thoughts about this issue now that it looks fixed Tim?
        Hide
        Tim Hunt added a comment -

        Ah, #1 could well have been done during the huge code clean-up between 2.0 and 2.1.

        So the only remaining question is, should we try to do a one-off clean-up of bad data in the database, during an upgrade. If you can be bothered to implement that, I think it would be a very good thing. I am not sure what would happen if you assigned the bug back to me

        Show
        Tim Hunt added a comment - Ah, #1 could well have been done during the huge code clean-up between 2.0 and 2.1. So the only remaining question is, should we try to do a one-off clean-up of bad data in the database, during an upgrade. If you can be bothered to implement that, I think it would be a very good thing. I am not sure what would happen if you assigned the bug back to me
        Hide
        Frédéric Massart added a comment -

        Well, we should handle those orphaned questions but I'm not sure to be keen on doing it. A few things that came in my mind:

        • Isn't it a bit weird to add an upgrade script in 2.2 onwards when the problem is a really older (and fixed)
        • I think it is dangerous to automatically create categories and move questions into them as part of an automated upgrade process
        • How nicely determine the context when a question does not have any? Guessing is probably not the best option.
        • Creating a site level category for Orphaned questions does not seem to be a good option either as teacher can't access them

        At the end, if we really want to do something here, why not creating a virtual 'Orphaned questions' category in the site level question bank page which would fetch all the questions that don't have any category. That way they are findable and editable.

        Last but not least, is creating such thing is prior?

        Show
        Frédéric Massart added a comment - Well, we should handle those orphaned questions but I'm not sure to be keen on doing it. A few things that came in my mind: Isn't it a bit weird to add an upgrade script in 2.2 onwards when the problem is a really older (and fixed) I think it is dangerous to automatically create categories and move questions into them as part of an automated upgrade process How nicely determine the context when a question does not have any? Guessing is probably not the best option. Creating a site level category for Orphaned questions does not seem to be a good option either as teacher can't access them At the end, if we really want to do something here, why not creating a virtual 'Orphaned questions' category in the site level question bank page which would fetch all the questions that don't have any category. That way they are findable and editable. Last but not least, is creating such thing is prior?
        Hide
        Tim Hunt added a comment -

        OK. Assigning back to me for future consideration.

        Yes, fixing up old garbage once we have detected it later is something we have done in upgrade scripts. Our job as developers is to make life easy for Moodle users and administrators.

        Automatically creating categories and moving questions into them is sometimes the least bad way to make things work. Have a look what happens in some of the question_delete_course functions (whatever they are called).

        There is no nice way to get the context right, hence just taking the best guess, even if that is the bad guess of 'system context'.

        Virtual categories would be a huge new change to the system that I would not want to support in future.

        Show
        Tim Hunt added a comment - OK. Assigning back to me for future consideration. Yes, fixing up old garbage once we have detected it later is something we have done in upgrade scripts. Our job as developers is to make life easy for Moodle users and administrators. Automatically creating categories and moving questions into them is sometimes the least bad way to make things work. Have a look what happens in some of the question_delete_course functions (whatever they are called). There is no nice way to get the context right, hence just taking the best guess, even if that is the bad guess of 'system context'. Virtual categories would be a huge new change to the system that I would not want to support in future.
        Hide
        Frédéric Massart added a comment -

        Hi Tim, I gave it a shot today. Could you please have a look at the code? Here are few comments...

        • Instead of trying to evaluate the context, I decided to use System context. I did not figure out how to retrieve without having to check everywhere for questions used, extract context and try to match it with something.
        • There is probably a method to do a bulk upload of the categoryid in mdl_question instead of my loop, do you know anything about that?
        • I don't know how to add something in upgrade.php so I just pushed it there for review.

        Thanks Tim, I am assigning myself back.

        Show
        Frédéric Massart added a comment - Hi Tim, I gave it a shot today. Could you please have a look at the code? Here are few comments... Instead of trying to evaluate the context, I decided to use System context. I did not figure out how to retrieve without having to check everywhere for questions used, extract context and try to match it with something. There is probably a method to do a bulk upload of the categoryid in mdl_question instead of my loop, do you know anything about that? I don't know how to add something in upgrade.php so I just pushed it there for review. Thanks Tim, I am assigning myself back.
        Hide
        Tim Hunt added a comment -

        Thanks Frédéric.

        That looks basically right, but it could be better in various ways:

        1. To add something to upgrade.php, you need to increment the number in main version.php, and then use that number in this upgrade block.

        2. I think using the system context is right.

        3. I think that you should organise the code with a function upgrade_save_orphaned_questions (or something like that) in lib/upgradelib.php, and then just call that from lib/db/upgrade.php. The advantage of doing it that way is then if people run into the problem again in future, they can just make a repair script like

        <?php
        require_once('config.php');
        require_once('lib/upgradelib.php');
        upgrade_save_orphaned_questions();
        echo 'DONE';
        

        3. Once you move the code into a separate function, you can just return early if there is nothing to do, rather than having ever more deeply nested ifs. Also, you won't need to do all the unset() calls at the end.

        4. You should definitely do the update as a bulk operation using SQL:

        $DB->execute('
            UPDATE {question} SET category = :catid WHERE NOT EXISTS (
                    SELECT 1 FROM {question_categories} c WHERE c.id = category)');
        

        (Not tested. This sort of query can be tricky to get right on all DBs, you may wish to grep for ->execute to see what sort of SQL people have used in other similar situations.)

        5. Once you do that, you don't actually need the $questions array, so the first test you do can becomes a $DB->record_exists, which is more efficient.

        6. I think $uniquestamp is a good idea.

        7. $DB->insert_record is guaranteed to work, or throw an exception, so that is one if you can lose.

        8. I think we can come up with a better name than 'Default for Orphaned questions'. How about 'Questions saved from deleted categories'? Also, this string should be a language string, so it can be translated.

        9. Similarly, I think you should make the ->info longer, to explain what is going on in a way that typical admins would understand. Again these needs to be a lang string. Also, shouldn't you set ->infoformat.

        Thanks for working on this.

        Show
        Tim Hunt added a comment - Thanks Frédéric. That looks basically right, but it could be better in various ways: 1. To add something to upgrade.php, you need to increment the number in main version.php, and then use that number in this upgrade block. 2. I think using the system context is right. 3. I think that you should organise the code with a function upgrade_save_orphaned_questions (or something like that) in lib/upgradelib.php, and then just call that from lib/db/upgrade.php. The advantage of doing it that way is then if people run into the problem again in future, they can just make a repair script like <?php require_once('config.php'); require_once('lib/upgradelib.php'); upgrade_save_orphaned_questions(); echo 'DONE'; 3. Once you move the code into a separate function, you can just return early if there is nothing to do, rather than having ever more deeply nested ifs. Also, you won't need to do all the unset() calls at the end. 4. You should definitely do the update as a bulk operation using SQL: $DB->execute(' UPDATE {question} SET category = :catid WHERE NOT EXISTS ( SELECT 1 FROM {question_categories} c WHERE c.id = category)'); (Not tested. This sort of query can be tricky to get right on all DBs, you may wish to grep for ->execute to see what sort of SQL people have used in other similar situations.) 5. Once you do that, you don't actually need the $questions array, so the first test you do can becomes a $DB->record_exists, which is more efficient. 6. I think $uniquestamp is a good idea. 7. $DB->insert_record is guaranteed to work, or throw an exception, so that is one if you can lose. 8. I think we can come up with a better name than 'Default for Orphaned questions'. How about 'Questions saved from deleted categories'? Also, this string should be a language string, so it can be translated. 9. Similarly, I think you should make the ->info longer, to explain what is going on in a way that typical admins would understand. Again these needs to be a lang string. Also, shouldn't you set ->infoformat. Thanks for working on this.
        Hide
        Tim Hunt added a comment -

        I failed to click Finish peer review before.

        Show
        Tim Hunt added a comment - I failed to click Finish peer review before.
        Hide
        Frédéric Massart added a comment -

        Hi Tim, thank you for your thorough review!

        • I moved the function to upgradelib.php
        • I Removed unnecessary ifs
        • I am now using record_exists_select()
        • Now updating categories in a bulk query
        • I don't use infoformat because it is not set in both functions to create categories (default ones, and user ones).
        • Here are the lang strings. I used them before and then removed then for no reason.

        Pushing this for peer review again. Thanks!

        Show
        Frédéric Massart added a comment - Hi Tim, thank you for your thorough review! I moved the function to upgradelib.php I Removed unnecessary ifs I am now using record_exists_select() Now updating categories in a bulk query I don't use infoformat because it is not set in both functions to create categories (default ones, and user ones). Here are the lang strings. I used them before and then removed then for no reason. Pushing this for peer review again. Thanks!
        Hide
        Tim Hunt added a comment -

        That looks good.

        I just note the \ No newline at end of file bit of the diff. You should try to avoid that in future. The last byte of any file should be "\n"

        Also, I would add slightly more to the info:

        $string['orphanedquestionscategoryinfo'] = 'This category gathers the questions that became orphaned when their categories were deleted.';

        I suggest:

        Occasionally, typically due to old software bugs, questions can remain in the database even though the corresponding question category has been deleted. Of course, this should not happen, it has happened in the past on this site. This category has been created automatically, and the orphaned questions moved here so that you can manage them. Note that any images or media files used by these questions have probably been lost.

        Show
        Tim Hunt added a comment - That looks good. I just note the \ No newline at end of file bit of the diff. You should try to avoid that in future. The last byte of any file should be "\n" Also, I would add slightly more to the info: $string ['orphanedquestionscategoryinfo'] = 'This category gathers the questions that became orphaned when their categories were deleted.'; I suggest: Occasionally, typically due to old software bugs, questions can remain in the database even though the corresponding question category has been deleted. Of course, this should not happen, it has happened in the past on this site. This category has been created automatically, and the orphaned questions moved here so that you can manage them. Note that any images or media files used by these questions have probably been lost.
        Hide
        Tim Hunt added a comment -

        I'll let you decide on the final wording of that lang string, then you can submit this for integration without another review by me. Thanks for fixing this.

        Show
        Tim Hunt added a comment - I'll let you decide on the final wording of that lang string, then you can submit this for integration without another review by me. Thanks for fixing this.
        Hide
        Frédéric Massart added a comment -

        Thanks Tim. I have changed the lang string and added a newline at the end of the file. Pushing for integration now.

        Show
        Frédéric Massart added a comment - Thanks Tim. I have changed the lang string and added a newline at the end of the file. Pushing for integration now.
        Hide
        Sam Hemelryk added a comment -

        Hi Fred,

        The code looks spot on thanks.
        However could you please produce branches for the stable versions you would like this to be applied to, and perhaps if you have time rebase master (totally optional though as it applies with only minor conflicts).

        Cheers
        Sam

        Show
        Sam Hemelryk added a comment - Hi Fred, The code looks spot on thanks. However could you please produce branches for the stable versions you would like this to be applied to, and perhaps if you have time rebase master (totally optional though as it applies with only minor conflicts). Cheers Sam
        Hide
        Frédéric Massart added a comment - - edited

        Hi Sam, I did not create the Stable branches because I wasn't sure whether it had to be backported or not. I have created the branches for 2.x but I'll leave that up to you and Tim to decide if it has to be integrated. Cheers!

        Show
        Frédéric Massart added a comment - - edited Hi Sam, I did not create the Stable branches because I wasn't sure whether it had to be backported or not. I have created the branches for 2.x but I'll leave that up to you and Tim to decide if it has to be integrated. Cheers!
        Hide
        Sam Hemelryk added a comment -

        Aha my apologies, reading back through this issue it seems pretty clear this is a once off fix.

        Thinking about it, I am a undecided as to whether to backport this or not.
        I see the code is safe to run multiple times during upgrades (2.1 => 2.3 => 2.4) and I wonder whether restoring lost questions in stable branches would be more useful than having to upgrade first to 2.3, and then to 2.4 in order to retrieve your lost questions.

        Tim as quiz is your area, and Fred and myself are both sitting on the fence I think the decision comes down to you.
        Would you like to see this issue backported?

        Cheers
        Sam

        Show
        Sam Hemelryk added a comment - Aha my apologies, reading back through this issue it seems pretty clear this is a once off fix. Thinking about it, I am a undecided as to whether to backport this or not. I see the code is safe to run multiple times during upgrades (2.1 => 2.3 => 2.4) and I wonder whether restoring lost questions in stable branches would be more useful than having to upgrade first to 2.3, and then to 2.4 in order to retrieve your lost questions. Tim as quiz is your area, and Fred and myself are both sitting on the fence I think the decision comes down to you. Would you like to see this issue backported? Cheers Sam
        Hide
        Tim Hunt added a comment -

        Please back-port. No harm at all if this runs multiple times.

        Show
        Tim Hunt added a comment - Please back-port. No harm at all if this runs multiple times.
        Hide
        Sam Hemelryk added a comment -

        Thanks guys this has been integrated now

        Show
        Sam Hemelryk added a comment - Thanks guys this has been integrated now
        Hide
        Dan Poltawski added a comment -

        This is failing upgrade integration tests on 2.2 stable, looks to me like the upgrade savepoint version number is

        '2012062501.04'

        Where as the actual version number is:

        '2011120504.03'

        Going to a commit a fix to this.

        Show
        Dan Poltawski added a comment - This is failing upgrade integration tests on 2.2 stable, looks to me like the upgrade savepoint version number is '2012062501.04' Where as the actual version number is: '2011120504.03' Going to a commit a fix to this.
        Hide
        Sam Hemelryk added a comment -

        Aha good spotting, thanks Dan, not sure how I missed that one, I even thought very consciously about the version numbers. I must have starred straight at it and not even realised.

        Show
        Sam Hemelryk added a comment - Aha good spotting, thanks Dan, not sure how I missed that one, I even thought very consciously about the version numbers. I must have starred straight at it and not even realised.
        Hide
        Rajesh Taneja added a comment -

        Sorry Fred,
        In 22 last question (with invalid category) doesn't get updated. Suppose we have 3 questions with invalid category two get new category id, but 3rd one doesn't.
        Tried with only one question with invalid category and it didn't get updated as well.

        FYI:
        Works fine on master.

        Show
        Rajesh Taneja added a comment - Sorry Fred, In 22 last question (with invalid category) doesn't get updated. Suppose we have 3 questions with invalid category two get new category id, but 3rd one doesn't. Tried with only one question with invalid category and it didn't get updated as well. FYI: Works fine on master.
        Hide
        Rajesh Taneja added a comment -

        Sorry guys, works fine... My bad...

        I will ask integrators to open it again for testing.

        Show
        Rajesh Taneja added a comment - Sorry guys, works fine... My bad... I will ask integrators to open it again for testing.
        Hide
        Rajesh Taneja added a comment -

        Sorry for the noise,

        All works fine. Thanks for fixing this, Fred.

        Show
        Rajesh Taneja added a comment - Sorry for the noise, All works fine. Thanks for fixing this, Fred.
        Hide
        Aparup Banerjee added a comment -

        yay, it works!

        This issue has been put through rigorous processes and finally swam upstream along with some 65 others this week.

        Thank you all for taking the time to get us here.

        cheers!

        Show
        Aparup Banerjee added a comment - yay, it works! This issue has been put through rigorous processes and finally swam upstream along with some 65 others this week. Thank you all for taking the time to get us here. cheers!

          People

          • Votes:
            0 Vote for this issue
            Watchers:
            4 Start watching this issue

            Dates

            • Created:
              Updated:
              Resolved: