protected void attachFilterProfileInformation(List entries) {
    {
      /* <TXEntryStateWithRegionAndKey> */
      for (final Object entry : entries) {
        TXEntryStateWithRegionAndKey o = (TXEntryStateWithRegionAndKey) entry;
        try {
          if (o.r.isUsedForPartitionedRegionBucket()) {
            BucketRegion bucket = (BucketRegion) o.r;
            /*
             * The event must contain the bucket region
             */
            @Released
            EntryEventImpl ev =
                (EntryEventImpl) o.es.getEvent(o.r, o.key, o.es.getTXRegionState().getTXState());
            if (ev.getOperation() == null) {
              // A read op with detect read conflicts does not need filter routing.
              continue;
            }
            try {
              /*
               * The routing information is derived from the PR advisor, not the bucket advisor.
               */
              FilterRoutingInfo fri = bucket.getPartitionedRegion().getRegionAdvisor()
                  .adviseFilterRouting(ev, Collections.EMPTY_SET);
              o.es.setFilterRoutingInfo(fri);
              Set set = bucket.getAdjunctReceivers(ev, Collections.EMPTY_SET, new HashSet(), fri);
              o.es.setAdjunctRecipients(set);

              if (o.es.getPendingCallback() != null) {
                if (fri != null) {
                  // For tx host, local filter info was also calculated.
                  // Set this local filter info in corresponding pending callback so that
                  // notifyBridgeClient has correct routing info.
                  FilterRoutingInfo.FilterInfo localRouting = fri.getLocalFilterInfo();
                  o.es.getPendingCallback().setLocalFilterInfo(localRouting);
                }
                // Do not hold pending callback reference in TXEntryState as it is no longer used.
                o.es.setPendingCallback(null);
              }
            } finally {
              ev.release();
            }
          }
        } catch (RegionDestroyedException ex) {
          // region was destroyed out from under us; after conflict checking
          // passed. So act as if the region destroy happened right after the
          // commit. We act this way by doing nothing; including distribution
          // of this region's commit data.
        } catch (CancelException ex) {
          // cache was closed out from under us; after conflict checking
          // passed. So do nothing.
        }
      }
    }

  }
keeps track of TransactionDataRebalancedException during txPutEntry
geode-core/src/main/java/org/apache/geode/internal/cache/TXState.java