/** * {@inheritDoc} */ @Override public void from(io.cattle.platform.core.model.InstanceHostMap from) { setId(from.getId()); setName(from.getName()); setKind(from.getKind()); setUuid(from.getUuid()); setDescription(from.getDescription()); setState(from.getState()); setCreated(from.getCreated()); setRemoved(from.getRemoved()); setRemoveTime(from.getRemoveTime()); setData(from.getData()); setInstanceId(from.getInstanceId()); setHostId(from.getHostId()); }
protected void compute(Instance instance, ProcessState state) { for (InstanceHostMap map : mapDao.findNonRemoved(InstanceHostMap.class, Instance.class, instance.getId())) { if (map.getRemoved() == null) { try { deactivate(map, state.getData()); } catch (ProcessCancelException e) { /* We ignore requested ihm because that means we allocated the instance but for * whatever reason we never activated it (server crash, message lost, etc). In this * situation we just ignore it. */ if (!CommonStatesConstants.REQUESTED.equals(map.getState())) { throw e; } } } } } }
@Override protected void populatedData(Account system, List<Object> toCreate) { List<Instance> instances = objectManager .find(Instance.class, INSTANCE.REMOVED, new Condition(ConditionType.NULL)); Map<Long, Instance> instanceIdToInstance = new HashMap<>(); for (Instance instance : instances) { instanceIdToInstance.put(instance.getId(), instance); } List<InstanceHostMap> hostMaps = objectManager .find(InstanceHostMap.class, INSTANCE_HOST_MAP.REMOVED, new Condition(ConditionType.NULL)); for (InstanceHostMap hostMap : hostMaps) { Instance instance = instanceIdToInstance.get(hostMap.getInstanceId()); if (instance == null) { continue; } Map<String, Object> data = new HashMap<>(); data.put(InstanceConstants.FIELD_HOST_ID, hostMap.getHostId()); objectManager.setFields(instance, data); } } }
private Long getInstanceHostId(HealthcheckInstanceType type, long instanceId) { if (type == HealthcheckInstanceType.INSTANCE) { List<? extends InstanceHostMap> maps = mapDao.findNonRemoved(InstanceHostMap.class, Instance.class, instanceId); if (!maps.isEmpty()) { return maps.get(0).getHostId(); } } return null; }
@Override public HandlerResult handle(ProcessState state, ProcessInstance process) { InstanceHostMap map = (InstanceHostMap)state.getResource(); Instance instance = getObjectManager().loadResource(Instance.class, map.getInstanceId()); composeManager.setupServiceAndInstance(instance); return null; }
protected HandlerResult afterDeallocate(ProcessState state, ProcessInstance process, Map<Object, Object> result) { Instance instance = (Instance) state.getResource(); for (InstanceHostMap map : mapDao.findToRemove(InstanceHostMap.class, Instance.class, instance.getId())) { if (CommonStatesConstants.ACTIVATING.equals(map.getState()) || CommonStatesConstants.ACTIVE.equals(map.getState())) { deactivate(map, state.getData()); } remove(map, state.getData()); } return new HandlerResult(result); } }
@Override public void releaseAllocation(Instance instance, InstanceHostMap map) { //Reload for persisting map = objectManager.loadResource(InstanceHostMap.class, map.getId()); DataAccessor data = getDeallocatedProp(map); Boolean done = data.as(Boolean.class); if ( done == null || ! done.booleanValue() ) { data.set(true); objectManager.persist(map); } }
@SuppressWarnings("unchecked") @Override public HandlerResult handle(ProcessState state, ProcessInstance process) { InstanceHostMap map = (InstanceHostMap)state.getResource(); Instance instance = getObjectManager().loadResource(Instance.class, map.getInstanceId()); Host host = getObjectManager().loadResource(Host.class, map.getHostId()); String dockerIp = DockerProcessUtils.getDockerIp(instance); Nic nic = nicDao.getPrimaryNic(instance); IpAddress hostIpAddress = hostDao.getIpAddressForHost(host.getId()); IpAddress primaryIp = ipAddressDao.getInstancePrimaryIp(instance); List<String> ports = DataAccessor.fields(instance).withKey(DockerInstanceConstants.FIELD_DOCKER_PORTS).as(jsonMapper, List.class); if (dockerIp != null) { primaryIp = processDockerIp(instance, nic, primaryIp, dockerIp); } if (hostIpAddress != null && ports != null) { processPorts(primaryIp, hostIpAddress, ports, instance, nic, host); } processVolumes(instance, host, state); processLabels(instance); nativeDockerBackPopulate(instance); Event event = EventVO.newEvent(IaasEvents.INVALIDATE_INSTANCE_DATA_CACHE) .withResourceType(instance.getKind()) .withResourceId(instance.getId().toString()); eventService.publish(event); return null; }
private String getHostUuid(Instance instance) { List<? extends InstanceHostMap> maps = mapDao.findNonRemoved(InstanceHostMap.class, Instance.class, instance.getId()); Long hostId = null; if (maps.size() == 1) { hostId = maps.get(0).getHostId(); } else if (maps.size() > 1) { Set<Long> hostIds = new HashSet<>(); for (InstanceHostMap ihm : maps) { hostIds.add(ihm.getHostId()); } if (hostIds.size() == 1) { hostId = hostIds.iterator().next(); } else { log.warn("Instance {} has {} instance host maps. Cannot determine host uuid. Returning null.", instance.getId(), maps.size()); return null; } } if (hostId != null) { Host h = objectManager.loadResource(Host.class, hostId); return h != null ? h.getUuid() : null; } else { return null; } }
@Override public HandlerResult handle(ProcessState state, ProcessInstance process) { InstanceHostMap map = (InstanceHostMap) state.getResource(); Instance instance = getObjectManager().loadResource(Instance.class, map.getInstanceId()); if (instance == null) { return null; } // set startCount Long startCount = instance.getStartCount() == null ? 1 : instance.getStartCount() + 1; objectManager.setFields(instance, INSTANCE.START_COUNT, startCount); return null; }
sendChange(Instance.class, accountId, ((ServiceExposeMap) obj).getInstanceId(), schedule, context); } else if (obj instanceof InstanceHostMap) { sendChange(Host.class, accountId, ((InstanceHostMap) obj).getHostId(), schedule, context); sendChange(Instance.class, accountId, ((InstanceHostMap) obj).getInstanceId(), schedule, context); } else if (obj instanceof StoragePoolHostMap) { sendChange(StoragePool.class, accountId, ((StoragePoolHostMap) obj).getStoragePoolId(), schedule, context);
@Override protected Object getAgentResource(ProcessState state, ProcessInstance process, Object dataResource) { Instance instance = (Instance)getObjectByRelationship("instance", state.getResource()); List<? extends InstanceHostMap> maps = objectManager.children(instance, InstanceHostMap.class); Host host = maps.size() > 0 ? objectManager.loadResource(Host.class, maps.get(0).getHostId()) : null; return host; }
protected Object getAccountObject(Object obj) { if (obj instanceof HostIpAddressMap) { return objectManager.loadResource(IpAddress.class, ((HostIpAddressMap) obj).getIpAddressId()); } else if (obj instanceof InstanceHostMap) { return objectManager.loadResource(Instance.class, ((InstanceHostMap) obj).getInstanceId()); } else if (obj instanceof ServiceConsumeMap) { return objectManager.loadResource(Service.class, ((ServiceConsumeMap) obj).getServiceId()); } else if (obj instanceof ServiceExposeMap) { return objectManager.loadResource(Service.class, ((ServiceExposeMap) obj).getServiceId()); } return obj; }
List<? extends InstanceHostMap> maps = mapDao.findNonRemoved(InstanceHostMap.class, Instance.class, instanceId); if (maps.size() > 0) { Long hostId = maps.get(0).getHostId(); if (hostId == null) { throw new FailedToAllocate(String.format("Dependent instance not allocated yet: %s.", instanceId));
protected void handleReconnecting(ProcessState state, Instance instance) { boolean reconnecting = false; InstanceHealthCheck healthCheck = DataAccessor.field(instance, InstanceConstants.FIELD_HEALTH_CHECK, jsonMapper, InstanceHealthCheck.class); for (InstanceHostMap map : mapDao.findNonRemoved(InstanceHostMap.class, Instance.class, instance.getId())) { Host host = objectManager.loadResource(Host.class, map.getHostId()); Agent agent = host == null ? null : objectManager.loadResource(Agent.class, host.getAgentId()); if (agent != null && (AgentConstants.STATE_RECONNECTING.equals(agent.getState()) || AgentConstants.STATE_DISCONNECTED.equals(agent.getState()))) { reconnecting = true; } else { reconnecting = false; break; } } if (reconnecting && (healthCheck != null || instance.getFirstRunning() == null)) { getObjectProcessManager().scheduleProcessInstance(InstanceConstants.PROCESS_STOP, instance, CollectionUtils.asMap(InstanceConstants.REMOVE_OPTION, true)); } }
return; hostId = hostMap.getHostId(); accountId = instance.getAccountId(); } else {