@Override public void doWithLockNoResult() { Map<String, Object> serviceData = CollectionUtils.toMap(DataUtils.getFields(event).get(FIELD_SERVICE)); if (serviceData.isEmpty()) { log.warn("Empty service for externalServiceEvent: {}.", event); return; } String kind = serviceData.get(ObjectMetaDataManager.KIND_FIELD) != null ? serviceData.get(ObjectMetaDataManager.KIND_FIELD).toString() : null; if (StringUtils.isEmpty(kind) || schemaFactory.getSchema(kind) == null) { log.warn("Couldn't find schema for service type [{}]. Returning.", kind); return; } if (StringUtils.equals(event.getEventType(), TYPE_SERVICE_CREATE)) { createService(event, serviceData); } else if (StringUtils.equals(event.getEventType(), TYPE_SERVICE_UPDATE)) { updateService(event, serviceData); } else if (StringUtils.equals(event.getEventType(), TYPE_SERVICE_DELETE)) { deleteService(event, serviceData); } else if (StringUtils.equals(event.getEventType(), TYPE_STACK_DELETE)) { deleteStack(event, serviceData); } } });
@Override public void doWithLockNoResult() { Volume volume = volumeDao.findVolumeByExternalId(storagePool.getId(), event.getExternalId()); switch (event.getEventType()) { case ExternalEventConstants.TYPE_VOLUME_CREATE: if (volume == null) { Map<String, Object> volumeData = CollectionUtils.toMap(DataUtils.getFields(event).get(FIELD_VOLUME)); if (volumeData.isEmpty()) { log.warn("Empty volume for externalVolumeEvent: {}. StoragePool: {}", event, volumeData); return; } volumeData.put(ObjectMetaDataManager.ACCOUNT_FIELD, event.getAccountId()); volumeData.put(FIELD_ATTACHED_STATE, CommonStatesConstants.INACTIVE); volumeData.put(FIELD_ALLOC_STATE, CommonStatesConstants.ACTIVE); volumeData.put(FIELD_ZONE_ID, 1L); volumeData.put(FIELD_DEV_NUM, -1); try { volumeDao.createVolumeInStoragePool(volumeData, name.toString(), storagePool); } catch (ProcessCancelException e) { log.info("Create process cancelled for volumeData {}. ProcessCancelException message: {}", volumeData, e.getMessage()); } } break; default: log.error("Unknown event type: {} for event {}", event.getEventType(), event); return; } } });
@Override public Collection<? extends Service> getServices(Object obj) { if (obj == null) { return null; } Long accountId = null; if (obj instanceof Host) { Host host = (Host) obj; accountId = host.getAccountId(); } else if (obj instanceof HostLabelMap) { HostLabelMap m = (HostLabelMap) obj; accountId = m.getAccountId(); } else if (obj instanceof ExternalEvent) { ExternalEvent event = (ExternalEvent)obj; if (KIND_EXTERNAL_HOST_EVENT.equals(event.getKind()) && TYPE_SCHEDULER_UPDATE.equals(event.getEventType())) { accountId = event.getAccountId(); } } if (accountId == null) { return null; } List<? extends Service> services = expMapDao.getActiveServices(accountId); List<Service> activeGlobalServices = new ArrayList<Service>(); for (Service service : services) { if (sdSvc.isGlobalService(service) || sdSvc.isScalePolicyService(service)) { activeGlobalServices.add(service); } } return activeGlobalServices; }
@Override public HandlerResult handle(ProcessState state, ProcessInstance process) { ExternalEvent event = (ExternalEvent)state.getResource(); if (!ExternalEventConstants.KIND_EXTERNAL_HOST_EVENT.equals(event.getKind()) || !ExternalEventConstants.TYPE_HOST_EVACUATE.equals(event.getEventType())) { return null; } boolean delete = DataAccessor.fieldBool(event, ExternalEventConstants.FIELD_DELETE_HOST); List<Long> hosts = getHosts(event); for (long hostId : hosts) { Host host = objectManager.loadResource(Host.class, hostId); if (host == null) { continue; } try { deactivateHost(state, host); } catch (ProcessCancelException e) { } if (delete) { host = objectManager.reload(host); try { remove(host, state.getData()); } catch (ProcessCancelException e) { } host = objectManager.reload(host); purge(host, state.getData()); } } return null; }
/** * {@inheritDoc} */ @Override public void from(io.cattle.platform.core.model.ExternalEvent from) { setId(from.getId()); setAccountId(from.getAccountId()); setKind(from.getKind()); setUuid(from.getUuid()); setState(from.getState()); setCreated(from.getCreated()); setData(from.getData()); setExternalId(from.getExternalId()); setEventType(from.getEventType()); setReportedAccountId(from.getReportedAccountId()); }