Exemplo n.º 1
0
 /** Get list of not-persistent qi */
 public ArrayList<QI> getList() {
   ArrayList<QI> result = new ArrayList<QI>();
   for (ArrayList<QI> list : _map.values()) {
     for (QI qi : list) {
       if (qi.get_id() == QI.NOT_PERSISTENT) result.add(qi);
     }
   }
   return result;
 }
Exemplo n.º 2
0
 /** Contains such quantum invariant? */
 public boolean contains(QI qi) {
   long hashCode = qi.getHashCode();
   ArrayList<QI> list = _map.get(hashCode);
   if (list == null) {
     return false;
   } else {
     for (QI aux : list) {
       if (aux.isEqual(qi)) return true;
     }
     return false;
   }
 }
Exemplo n.º 3
0
 /** Returns null if the qi is new to the repository otherwise returns the already stored QI */
 public synchronized QI add(QI qi) {
   long hashCode = qi.getHashCode();
   ArrayList<QI> list = _map.get(hashCode);
   if (list == null) {
     list = new ArrayList<QI>();
     _map.put(hashCode, list);
     list.add(qi);
     return null;
   } else {
     for (QI aux : list) {
       if (aux.isEqual(qi)) return aux;
     }
     list.add(qi);
     return null;
   }
 }
  @Before
  public void setUp() throws Exception {
    shapeHelperWrapper = Mockito.mock(ShapeHelperWrapper.class, "shapeHelperWrapper");
    unoRuntimeWrapper = Mockito.mock(UnoRuntimeWrapper.class, "unoRuntimeWrapper");
    Injector injector = Guice.createInjector(new TestModule(shapeHelperWrapper, unoRuntimeWrapper));

    QI.setUnoRuntimeWrapper(unoRuntimeWrapper);
    diagramWalker = injector.getInstance(DiagramWalker.class);
  }
  public void serve() {

    long startTime, endTime;

    try {
      // query = (query)incomingPeer.receive();

      startTime = (new Date()).getTime();

      queryLiteral = query.getLiteral();
      inheritedHistory = (LinkedList) query.getHistory();
      inheritedSupportingRules = query.getSupportingMappings();
      inheritedConflictingRules = query.getConflictingMappings();

      System.out.println("\n\n |||||| New query session ||||||\n");
      System.out.println("\tLocal reasoning for: " + queryLiteral.getSignWithName());

      /*
      if((cachedAnswer=incQueriesCache.getAnswerForLiteral(queryLiteral))!=null)
      {
          System.out.println(" is already cached: " + ((MyBoolean)cachedAnswer.getAnswer()).getMyBoolean() );
          if(queryLiteral.getSign()==true)
              incomingPeer.send(new QueryResponse(cachedAnswer.getAnswer(), cachedAnswer.getSet(), null));
          else
              incomingPeer.send(new QueryResponse(cachedAnswer.getAnswer(), null, cachedAnswer.getSet()));

          return;
      }
      */
      System.out.println("you are querying about: " + queryLiteral);
      if (kb.isRuleInside(KnowledgeBase.localSetName, queryLiteral)) {
        System.out.println("First Step");
        localAnswer = new MyBoolean(false);
        System.out.println("Sec Step");
        currLocalHistory.add(queryLiteral);
        System.out.println("third Step");
        local_alg(queryLiteral, currLocalHistory, localAnswer);
        System.out.println("4 Step");
        if (localAnswer.getMyBoolean()) {
          System.out.println("local true");
          System.out.println("  Answer: " + localAnswer.getMyBoolean());
          // incQueriesCache.rememberLiteral(queryLiteral, localAnswer, null);
          System.out.println("Result Answer: " + localAnswer.getMyBoolean());
          QI.sendResults(new QueryResponse(query, localAnswer, null, null), this.processID);
          return;
        }
      }
      System.out.println("reverse Step");

      queryLiteral.reverseSign();

      if (kb.isRuleInside("L", queryLiteral)) {

        System.out.println("inside1 Step");

        localAnswer = new MyBoolean(false);
        currLocalHistory.clear();
        currLocalHistory.add(queryLiteral);
        local_alg(queryLiteral, currLocalHistory, localAnswer);

        if (localAnswer.getMyBoolean()) {
          localAnswer.setMyBoolean(false);
          queryLiteral.reverseSign();
          System.out.println("inside2 Step");
          // incQueriesCache.rememberLiteral(queryLiteral, localAnswer, null);
          QI.sendResults(new QueryResponse(query, localAnswer, null, null), this.processID);
          return;
        }
      }

      // VERIFIED TILL HERE

      queryLiteral.reverseSign();

      System.out.println("reverse1 Step");

      ////////////////////////////////////////////////////////////////////////
      ////////////// distributed reasoning for supporting rules //////////////

      rulesCollection = (Collection) kb.getSupportingRulesByHeadLiteral(queryLiteral);
      rules = rulesCollection.iterator();

      System.out.println(
          "\n\n\tReasoning for support of literal: " + queryLiteral.getSignWithName());
      while (rules.hasNext()) {
        flag = false;
        supportingRules = new LinkedList();

        rule = (Rule) rules.next();
        body = rule.getBody();

        bequeathHistory = new LinkedList(inheritedHistory);

        while (body.hasNext()) {
          literal = (Literal) body.next();

          if (inheritedHistory.contains(literal.getSignWithName())) {
            flag = true;
            break;
          } else {
            uniteSets(bequeathHistory, inheritedHistory);
            bequeathHistory.add(literal.getSignWithName());

            suppForLiteral = new LinkedList();
            conflForLiteral = new LinkedList();
            System.out.println(
                "\tRequesting literal: "
                    + literal.getSignWithName()
                    + "  from: "
                    + literal.getLocation()
                    + "\n");

            boolean local = false;
            if (literal.getLocation().equals("local")
                || literal.getLocation().equals(this.QI.getName())) local = true;

            Query q;
            if (local) {
              q =
                  new Query(
                      this.QI.getName(),
                      this.processID,
                      false,
                      this.QI.getName(),
                      literal,
                      false,
                      suppForLiteral,
                      conflForLiteral,
                      bequeathHistory);
              QI.incomingQuery(q);
              // QI.sendQueryToPeer(q);//to test
            } else {
              q =
                  new Query(
                      this.QI.getName(),
                      this.processID,
                      false,
                      literal.getLocation(),
                      literal,
                      false,
                      suppForLiteral,
                      conflForLiteral,
                      bequeathHistory);
              QI.sendQueryToPeer(q);
            }

            queryResponse = this.dr.take();

            if (queryResponse.getReturnValue() == false) {
              flag = true;
              break;
            } else if (queryResponse.getReturnValue() == true
                && (kb.isLocalLiteralInside(literal) == false)) supportingRules.add(literal);
            else {
              supportingRules =
                  (LinkedList) uniteSets(supportingRules, queryResponse.getSupportingSet());
            }

            // outQueriesCache.rememberLiteral(literal, new
            // MyBoolean(queryResponse.getReturnValue()), supportingRules);
          }
        }

        if (flag == true) continue;
        else handleSupportingSet();
      }

      if (inheritedSupportingRules.size() == 0) {
        System.out.println("Sending results");
        // incQueriesCache.rememberLiteral(queryLiteral, new MyBoolean(false), null);
        this.QI.sendResults(
            new QueryResponse(query, new MyBoolean(false), null, null), this.processID);
        return;
      }

      /////////////////////////////////////////////////////////////////////////
      ////////////// distributed reasoning for conflicting rules //////////////

      rulesCollection = (Collection) kb.getConflictingRulesByHeadLiteral(queryLiteral);
      rules = rulesCollection.iterator();
      System.out.println(
          "\tReasoning for conflicts for literal: " + queryLiteral.getSignWithName());

      while (rules.hasNext()) {
        flag = false;
        supportingRules = new LinkedList();

        rule = (Rule) rules.next();
        body = rule.getBody();

        bequeathHistory = new LinkedList(inheritedHistory);

        while (body.hasNext()) {
          literal = (Literal) body.next();

          if (inheritedHistory.contains(literal.getSignWithName())) {
            flag = true;
            break;
          } else {
            uniteSets(bequeathHistory, inheritedHistory);
            bequeathHistory.add(literal.getSignWithName());

            //   findPeerMessage = adhoc.findPeer(literal.getLocation(), this.groupName);
            //   outcomingPeer = new Peer(literal.getLocation(), findPeerMessage.getIPAddress(),
            // findPeerMessage.getPort());

            suppForLiteral = new LinkedList();
            conflForLiteral = new LinkedList();
            System.out.println(
                "\tRequesting literal: "
                    + literal.getSignWithName()
                    + "  from: "
                    + literal.getLocation()
                    + "\n");

            Query q =
                new Query(
                    this.QI.getName(),
                    this.processID,
                    false,
                    literal.getLocation(),
                    literal,
                    false,
                    suppForLiteral,
                    conflForLiteral,
                    bequeathHistory);
            QI.sendQueryToPeer(q);
            queryResponse = this.dr.take();

            if (queryResponse.getReturnValue() == false) {
              flag = true;
              break;
            } else if (queryResponse.getReturnValue() == true
                && (kb.isLocalLiteralInside(literal) == false)) supportingRules.add(literal);
            else
              supportingRules =
                  (LinkedList) uniteSets(supportingRules, queryResponse.getSupportingSet());

            //  outQueriesCache.rememberLiteral(literal, new
            // MyBoolean(queryResponse.getReturnValue()), supportingRules);

          }
        }
        if (flag == true) continue;
        else handleConflictingSet();
      }

      endTime = (new Date()).getTime();

      System.out.println("\n   Time taken: " + (endTime - startTime));

      if (inheritedConflictingRules.size() == 0) {
        //   incQueriesCache.rememberLiteral(queryLiteral, new MyBoolean(true),
        // inheritedSupportingRules);

        this.QI.sendResults(
            new QueryResponse(query, new MyBoolean(true), inheritedSupportingRules, null),
            this.processID);
        return;
      }

      resolveConflicts();

      return;

    } catch (Throwable t) {
      t.printStackTrace();
      this.QI.notifyFailure(query, processID);
    }
  }
Exemplo n.º 6
0
  public static void main(String[] args)
      throws FileNotFoundException, IOException, SQLException, ClassNotFoundException {
    // Args: Limit / numThreads / numedges / qiIDPrefix
    int numThreads = 16;
    if (args.length >= 2) {
      numThreads = Integer.parseInt(args[1]);
    }
    BlinkBuffer blinkBuffer = new BlinkBuffer();
    QICalculator[] threads = new QICalculator[numThreads];

    int numedges = 0;
    if (args.length >= 3) {
      numedges = Integer.parseInt(args[2]);
    }

    long qiIDPrefix = 0;
    if (args.length >= 4) {
      qiIDPrefix = Integer.parseInt(args[3]);
    }

    BlinkDB db = (BlinkDB) App.getRepositorio();
    long t0 = System.currentTimeMillis();

    QIRepository R = new QIRepository();

    // fill in QIRepository
    ArrayList<QI> qis = App.getRepositorio().getQIs();
    for (QI q : qis) R.add(q);

    HashMap<BlinkEntry, QI> _map = new HashMap<BlinkEntry, QI>();
    int limit = Integer.parseInt(args[0]);
    long blinkIDs[] = db.getBlinkIDsWithoutQI(limit, numedges);
    System.out.println("Found " + blinkIDs.length + " blinks without QI");
    int delta = 100;
    int count = 1;
    int acum = 0;
    for (int k = 0; k < blinkIDs.length; k += delta) {

      long t = System.currentTimeMillis();
      long[] curIDs = Arrays.copyOfRange(blinkIDs, k, Math.min(k + delta, blinkIDs.length));
      System.out.print("Calc for ");
      for (long x : curIDs) {
        System.out.print(" " + x);
      }
      System.out.println("");
      ArrayList<BlinkEntry> bs = db.getBlinksByIDsArray(curIDs);

      t = System.currentTimeMillis();

      blinkBuffer.reset(bs);
      for (int i = 0; i < numThreads; ++i) {
        threads[i] = new QICalculator(blinkBuffer);
        threads[i].start();
      }
      try {
        for (int i = 0; i < numThreads; ++i) {
          threads[i].join();
        }
      } catch (InterruptedException e) {
        System.out.println("Problem!");
      }

      System.out.println(String.format(" %.2f sec.", (System.currentTimeMillis() - t) / 1000.0));
      for (int i = 0; i < bs.size(); ++i) {
        BlinkEntry be = bs.get(i);

        QI qi = blinkBuffer.qis[i];

        // add to repository
        QI qiRep = R.add(qi);
        if (qiRep == null) qiRep = qi;

        //
        _map.put(be, qiRep);
      }

      //
      ArrayList<QI> list = R.getList(); // get list of not persistent QIs
      // t = System.currentTimeMillis();

      db.insertQIs(list, qiIDPrefix);
      acum = acum + list.size();
      System.out.println(
          String.format(
              "Inserted %6d new QIs total QIs %6d in %.2f sec.",
              list.size(), acum, (System.currentTimeMillis() - t0) / 1000.0));

      // updating biEntry
      for (BlinkEntry be : bs) {
        QI qi = _map.get(be);
        be.set_qi(qi.get_id());
      }

      // update qis
      t = System.currentTimeMillis();
      db.updateBlinksQI(bs);
      // System.out.println(String.format("Updated QIs %d blinks in %.2f sec.", bs.size(),
      // (System.currentTimeMillis() - t) / 1000.0));

      // update index
      System.out.println(
          "Calculated " + (k + curIDs.length) + " of " + blinkIDs.length + " blinks QI");
    }

    System.out.println(
        String.format(
            "Total Time to calculate QIs %.2f sec.", (System.currentTimeMillis() - t0) / 1000.0));
    System.exit(0);
  }