Info on timeout - dkmfbk/knowledgestore GitHub Wiki

Gestione dei timeout:

  • quando inserite un timeout T nella UI, il sistema cercherà di rispondere entro T secondi, possibilmente interrompendo la richiesta con messaggio di errore (prima il timeout nella UI non era sempre efficace)

  • il timeout T viene passato anche a Virtuoso, il quale risulta interrompere l'esecuzione della query scaduto il timeout, ritornando i risultati computati fino a quel momento (feature che sapevamo esistere, ma che mea culpa non ero riuscito a far andare)

  • la UI ora mostra il tempo di esecuzione delle query (incluso tempo di rendering); nel caso i risultati siano stati potenzialmente troncati da Virtuoso, viene mostrato un avviso che altri risultati potrebbero essere disponibili, in modo che l'utente non prenda per completi i risultati mostrati

  • il tentativo di rispondere entro T secondi è di natura best effort (e.g. dipende anche dalla buona volontà di Virtuoso, che non sempre rispetta il timeout passato, specie se irrealistico rispetto alla complessità della query). Come ulteriore garanzia resta il meccanismo interno 'stacca-la-spina-al-thread' del KS: passati T + T' secondi, con T'=5 una sorta di grace period (si può cambiare), il thread che gestisce la richiesta viene interrotto, indipendentemente dalla buona volontà di Virtuoso o del componente interessato dalla richiesta. Tuttavia, anche l'interruzione del thread non è sempre efficace, quindi non è escluso che l'esecuzione possa protrarsi oltre T + T' (l'alternativa sicura al 100% è uccidere il thread, ma questo lascia appese tutte le risorse che aveva allocato = leak)

  • stesso comportamento si ha nell'API del KS (basta passare parametro richiesta 'timeout')

Non ho ancora committato le modifiche nè ho modificato i Virtuosi in produzione, in modo che possiate prima fare le valutazioni del caso (vista anche l'imminente hackhathon). Non credo comunque di aver fatto danni, visto che le modifiche al codice sono stato poche (anche se toccano più moduli). Potete provare il tutto su kermadec:

http://kermadec:50056/

dove ho un KS che gira sotto il mio account, collegato al Virtuoso della FIFA WC (e alle news delle cars 2).

Se vi serve una query complessa per le prove, potete usare quella delle statistiche di linking (richiede 236 secondi per produrre i risultati completi - provate a mettere 10, 20, ... secondi di timeout e guardate il numero di risultati tornati crescere):

  SELECT ?type
         (COUNT(DISTINCT ?l) AS ?linkedEntities)
         (COUNT(DISTINCT ?e) AS ?totalEntities)
         (COUNT(DISTINCT ?d) AS ?documents)
  WHERE {
    {
      SELECT DISTINCT ?type WHERE {
        ?type a owl:Class .
        FILTER (STRSTARTS(STR(?type), "http://dbpedia.org/ontology/"))
      }
    }
    ?e a ?type .
    OPTIONAL {
      ?e gaf:denotedBy ?m .
      BIND (?e AS ?l)
      BIND (MD5(STRBEFORE(STR(?m), "#")) AS ?d)
    }
  }
  GROUP BY ?type
  HAVING (COUNT(DISTINCT ?d) >= 1)
  ORDER BY DESC(?documents)