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); } }); }