public void compensate()

in alpha/alpha-core/src/main/java/org/apache/servicecomb/pack/alpha/core/CompositeOmegaCallback.java [41:68]


  public void compensate(TxEvent event) {
    Map<String, OmegaCallback> serviceCallbacks = callbacks.getOrDefault(event.serviceName(), emptyMap());

    OmegaCallback omegaCallback = serviceCallbacks.get(event.instanceId());
    if (omegaCallback == null) {
      LOG.info("Cannot find the service with the instanceId {}, call the other instance.", event.instanceId());
      // TODO extract an Interface to let user define the serviceCallback instance pick strategy
      Iterator<OmegaCallback> iterator = new ArrayList<>(serviceCallbacks.values()).iterator();
      if(iterator.hasNext()) {
        omegaCallback = iterator.next();
      }
    }
    if(omegaCallback==null){
      throw new AlphaException("No such omega callback found for service " + event.serviceName());
    }

    try {
      omegaCallback.compensate(event);
    } catch (CompensateConnectException e) {
      serviceCallbacks.values().remove(omegaCallback);
      throw e;
    } catch (CompensateAckFailedException e) {
      throw e;
    } catch (Exception e) {
      serviceCallbacks.values().remove(omegaCallback);
      throw e;
    }
  }