예제 #1
0
  protected void handle(final APIDetachPrimaryStorageFromClusterMsg msg) {
    final APIDetachPrimaryStorageFromClusterEvent evt =
        new APIDetachPrimaryStorageFromClusterEvent(msg.getId());

    try {
      extpEmitter.preDetach(self, msg.getClusterUuid());
    } catch (PrimaryStorageException e) {
      evt.setErrorCode(
          errf.instantiateErrorCode(PrimaryStorageErrors.DETACH_ERROR, e.getMessage()));
      bus.publish(evt);
      return;
    }

    String issuer = PrimaryStorageVO.class.getSimpleName();
    List<PrimaryStorageDetachStruct> ctx = new ArrayList<PrimaryStorageDetachStruct>();
    PrimaryStorageDetachStruct struct = new PrimaryStorageDetachStruct();
    struct.setClusterUuid(msg.getClusterUuid());
    struct.setPrimaryStorageUuid(msg.getPrimaryStorageUuid());
    ctx.add(struct);
    casf.asyncCascade(
        PrimaryStorageConstant.PRIMARY_STORAGE_DETACH_CODE,
        issuer,
        ctx,
        new Completion(msg) {
          @Override
          public void success() {
            self = dbf.reload(self);
            evt.setInventory(PrimaryStorageInventory.valueOf(self));
            bus.publish(evt);
          }

          @Override
          public void fail(ErrorCode errorCode) {
            evt.setErrorCode(errorCode);
            bus.publish(evt);
          }
        });
  }