/**
   * @param keyBytes Key to remove.
   * @return {@code true} if value was actually removed, {@code false} otherwise.
   * @throws GridException If failed.
   */
  @SuppressWarnings({"unchecked"})
  @Nullable
  GridCacheSwapEntry<V> readAndRemove(byte[] keyBytes) throws GridException {
    if (!enabled) return null;

    final GridTuple<GridSwapByteArray> t = F.t1();

    swapMgr.remove(
        spaceName,
        new GridSwapByteArray(keyBytes),
        new CI1<GridSwapByteArray>() {
          @Override
          public void apply(GridSwapByteArray removed) {
            t.set(removed);
          }
        });

    if (t.get() == null) return null;

    // To unmarshal swap entry itself local class loader will be enough.
    return recreateEntry((GridCacheSwapEntry<V>) unmarshal(t.get(), cctx.deploy().localLoader()));
  }
 /**
  * @param key Key to remove.
  * @return {@code true} if value was actually removed, {@code false} otherwise.
  * @throws GridException If failed.
  */
 boolean remove(byte[] key) throws GridException {
   return enabled && swapMgr.remove(spaceName, new GridSwapByteArray(key), null);
 }