Details

    • Type: Bug
    • Status: Done
    • Priority: Medium
    • Resolution: Done
    • Affects Version/s: None
    • Fix Version/s: BLAZEGRAPH_RELEASE_1_5_2
    • Component/s: None
    • Labels:
      None

      Description

      A stochastic problem can occur where a declared vocabulary item (such as xsd:double) is not associated with an RDF Value in when an attempt is made to create a FunctionNode object in ValueExprBuilder.visit(ASTFunctionCall node, Object data). This appears to be a data race in setting the Value on the IV through IVCache.setValue().

        Issue Links

          Activity

          Hide
          bryanthompson bryanthompson added a comment -

          While we have not tracked down where setValue() winds up being invoked on the VocabByteIV, it appears that the fix is to BaseVocabularyDecl#generateIVs() where the following lines where found.

                      // Note: Do not cache the Value on the IV.
                      // iv.setValue(value);
          

          Michael points out that I added these lines myself back in the TERMS_REFACTOR_BRANCH.

          The VocabByteIV and VocabShortIV both implement IVCache.clone(boolean:clearValue) to NOT clear the Value cache and return "this". Thus, once the Value cache is set on these classes it remains set. Further, we have empirically verified that these cached Value objects are never cleared by a setValue(null) invocation.

          Therefore the code snippet above is replaced by

                      // Cache the Value on the IV.  See BLZG-1386
                      iv.setValue(value);
          
          Show
          bryanthompson bryanthompson added a comment - While we have not tracked down where setValue() winds up being invoked on the VocabByteIV, it appears that the fix is to BaseVocabularyDecl#generateIVs() where the following lines where found. // Note: Do not cache the Value on the IV. // iv.setValue(value); Michael points out that I added these lines myself back in the TERMS_REFACTOR_BRANCH. The VocabByteIV and VocabShortIV both implement IVCache.clone(boolean:clearValue) to NOT clear the Value cache and return "this". Thus, once the Value cache is set on these classes it remains set. Further, we have empirically verified that these cached Value objects are never cleared by a setValue(null) invocation. Therefore the code snippet above is replaced by // Cache the Value on the IV. See BLZG-1386 iv.setValue(value);
          Hide
          bryanthompson bryanthompson added a comment -

          Note: Per duplicate ticket BLGZ-764, this problem was definitely present in 1.5.1 as well. And based on the root cause, it has been present for several years.

          Show
          bryanthompson bryanthompson added a comment - Note: Per duplicate ticket BLGZ-764, this problem was definitely present in 1.5.1 as well. And based on the root cause, it has been present for several years.
          Hide
          michaelschmidt michaelschmidt added a comment -

          Yes, I can confirm that BSBM EXPLORE+UPDATE multithreaded reveals this problem in 1.5.1. Looks like we actually never (properly) ran the EXPLORE+UPDATE in a multithreaded setting.

          Show
          michaelschmidt michaelschmidt added a comment - Yes, I can confirm that BSBM EXPLORE+UPDATE multithreaded reveals this problem in 1.5.1. Looks like we actually never (properly) ran the EXPLORE+UPDATE in a multithreaded setting.
          Hide
          michaelschmidt michaelschmidt added a comment -

          Fixed in 1.5.2RC1 branch and in master. Closing issue.

          Show
          michaelschmidt michaelschmidt added a comment - Fixed in 1.5.2RC1 branch and in master. Closing issue.

            People

            • Assignee:
              michaelschmidt michaelschmidt
              Reporter:
              bryanthompson bryanthompson
            • Votes:
              0 Vote for this issue
              Watchers:
              4 Start watching this issue

              Dates

              • Created:
                Updated:
                Resolved: