Ejemplo n.º 1
0
  /**
   * @param mapping Mapping to order.
   * @param committedVers Committed versions.
   * @param rolledbackVers Rolled back versions.
   */
  void orderCompleted(
      GridDistributedTxMapping<K, V> mapping,
      Collection<GridCacheVersion> committedVers,
      Collection<GridCacheVersion> rolledbackVers) {
    for (GridCacheTxEntry<K, V> txEntry : F.concat(false, mapping.reads(), mapping.writes())) {
      while (true) {
        GridDistributedCacheEntry<K, V> entry = (GridDistributedCacheEntry<K, V>) txEntry.cached();

        try {
          // Handle explicit locks.
          GridCacheVersion base =
              txEntry.explicitVersion() != null ? txEntry.explicitVersion() : xidVer;

          entry.doneRemote(xidVer, base, committedVers, rolledbackVers);

          if (ec()) entry.recheck();

          break;
        } catch (GridCacheEntryRemovedException ignored) {
          assert entry.obsoleteVersion() != null;

          if (log.isDebugEnabled())
            log.debug(
                "Replacing obsolete entry in remote transaction [entry="
                    + entry
                    + ", tx="
                    + this
                    + ']');

          // Replace the entry.
          txEntry.cached(cctx.cache().entryEx(txEntry.key()), entry.keyBytes());
        }
      }
    }
  }
Ejemplo n.º 2
0
  /** @param keyMap Key map to register. */
  void addKeyMapping(Map<GridRichNode, Collection<K>> keyMap) {
    for (Map.Entry<GridRichNode, Collection<K>> mapping : keyMap.entrySet()) {
      GridRichNode n = mapping.getKey();

      for (K key : mapping.getValue()) {
        GridCacheTxEntry<K, V> txEntry = txMap.get(key);

        assert txEntry != null;

        GridDistributedTxMapping<K, V> m = mappings.get(n.id());

        if (m == null) mappings.put(n.id(), m = new GridDistributedTxMapping<K, V>(n));

        txEntry.nodeId(n.id());

        m.add(txEntry);
      }
    }

    if (log.isDebugEnabled())
      log.debug(
          "Added mappings to transaction [locId="
              + cctx.nodeId()
              + ", mappings="
              + keyMap
              + ", tx="
              + this
              + ']');
  }
Ejemplo n.º 3
0
  /**
   * @param nodeId Node ID.
   * @param dhtVer DHT version.
   */
  void addDhtVersion(UUID nodeId, GridCacheVersion dhtVer) {
    // This step is very important as near and DHT versions grow separately.
    cctx.versions().onReceived(nodeId, dhtVer);

    GridDistributedTxMapping<K, V> m = mappings.get(nodeId);

    if (m != null) m.dhtVersion(dhtVer);
  }
Ejemplo n.º 4
0
  /**
   * @param nodeId Node ID to mark with explicit lock.
   * @return {@code True} if mapping was found.
   */
  boolean markExplicit(UUID nodeId) {
    GridDistributedTxMapping<K, V> m = mappings.get(nodeId);

    if (m != null) {
      m.markExplicitLock();

      return true;
    }

    return false;
  }
Ejemplo n.º 5
0
  /**
   * @param nodeId Node ID.
   * @param key Key.
   */
  public void removeMapping(UUID nodeId, K key) {
    GridDistributedTxMapping<K, V> m = mappings.get(nodeId);

    if (m != null) {
      GridCacheTxEntry<K, V> txEntry = txMap.get(key);

      if (txEntry != null) m.removeEntry(txEntry);

      if (m.empty()) mappings.remove(nodeId);
    }
  }