コード例 #1
0
  /**
   * @param ctx Context.
   * @param e entry.
   * @return Entry collection.
   */
  private Collection<CacheContinuousQueryEntry> handleEvent(
      GridKernalContext ctx, CacheContinuousQueryEntry e) {
    assert e != null;

    if (internal) {
      if (e.isFiltered()) return Collections.emptyList();
      else return F.asList(e);
    }

    // Initial query entry or evicted entry. These events should be fired immediately.
    if (e.updateCounter() == -1L) return F.asList(e);

    PartitionRecovery rec = rcvs.get(e.partition());

    if (rec == null) {
      rec =
          new PartitionRecovery(
              ctx.log(getClass()),
              initTopVer,
              initUpdCntrs == null ? null : initUpdCntrs.get(e.partition()));

      PartitionRecovery oldRec = rcvs.putIfAbsent(e.partition(), rec);

      if (oldRec != null) rec = oldRec;
    }

    return rec.collectEntries(e);
  }
コード例 #2
0
  /**
   * @param ctx Context.
   * @param h2 H2 Indexing.
   * @throws IgniteCheckedException If failed.
   */
  public void start(final GridKernalContext ctx, final IgniteH2Indexing h2)
      throws IgniteCheckedException {
    this.ctx = ctx;
    this.h2 = h2;

    log = ctx.log(GridReduceQueryExecutor.class);

    ctx.io()
        .addMessageListener(
            GridTopic.TOPIC_QUERY,
            new GridMessageListener() {
              @Override
              public void onMessage(UUID nodeId, Object msg) {
                if (!busyLock.enterBusy()) return;

                try {
                  GridReduceQueryExecutor.this.onMessage(nodeId, msg);
                } finally {
                  busyLock.leaveBusy();
                }
              }
            });

    ctx.event()
        .addLocalEventListener(
            new GridLocalEventListener() {
              @Override
              public void onEvent(final Event evt) {
                UUID nodeId = ((DiscoveryEvent) evt).eventNode().id();

                for (QueryRun r : runs.values()) {
                  for (GridMergeIndex idx : r.idxs) {
                    if (idx.hasSource(nodeId)) {
                      handleNodeLeft(r, nodeId);

                      break;
                    }
                  }
                }
              }
            },
            EventType.EVT_NODE_FAILED,
            EventType.EVT_NODE_LEFT);
  }
コード例 #3
0
  /** {@inheritDoc} */
  @SuppressWarnings("unchecked")
  @Override
  public void notifyCallback(
      UUID nodeId, UUID routineId, Collection<?> objs, GridKernalContext ctx) {
    assert nodeId != null;
    assert routineId != null;
    assert objs != null;
    assert ctx != null;

    Collection<CacheContinuousQueryEntry> entries = (Collection<CacheContinuousQueryEntry>) objs;

    final GridCacheContext cctx = cacheContext(ctx);

    for (CacheContinuousQueryEntry e : entries) {
      GridCacheDeploymentManager depMgr = cctx.deploy();

      ClassLoader ldr = depMgr.globalLoader();

      if (ctx.config().isPeerClassLoadingEnabled()) {
        GridDeploymentInfo depInfo = e.deployInfo();

        if (depInfo != null) {
          depMgr.p2pContext(
              nodeId,
              depInfo.classLoaderId(),
              depInfo.userVersion(),
              depInfo.deployMode(),
              depInfo.participants(),
              depInfo.localDeploymentOwner());
        }
      }

      try {
        e.unmarshal(cctx, ldr);
      } catch (IgniteCheckedException ex) {
        U.error(ctx.log(getClass()), "Failed to unmarshal entry.", ex);
      }
    }

    final IgniteCache cache = cctx.kernalContext().cache().jcache(cctx.name());

    Collection<CacheContinuousQueryEntry> entries0 = new ArrayList<>();

    for (CacheContinuousQueryEntry e : entries) entries0.addAll(handleEvent(ctx, e));

    Iterable<CacheEntryEvent<? extends K, ? extends V>> evts =
        F.viewReadOnly(
            entries0,
            new C1<CacheContinuousQueryEntry, CacheEntryEvent<? extends K, ? extends V>>() {
              @Override
              public CacheEntryEvent<? extends K, ? extends V> apply(CacheContinuousQueryEntry e) {
                return new CacheContinuousQueryEvent<>(cache, cctx, e);
              }
            },
            new IgnitePredicate<CacheContinuousQueryEntry>() {
              @Override
              public boolean apply(CacheContinuousQueryEntry entry) {
                return !entry.isFiltered();
              }
            });

    locLsnr.onUpdated(evts);
  }