@Override protected RowMapper<ImageTransfer> createEntityRowMapper() { return (rs, rowNum) -> { ImageTransfer entity = new ImageTransfer(); entity.setId(getGuidDefaultEmpty(rs, "command_id")); entity.setCommandType(ActionType.forValue(rs.getInt("command_type"))); entity.setPhase(ImageTransferPhase.forValue(rs.getInt("phase"))); entity.setType(TransferType.forValue(rs.getInt("type"))); entity.setActive(rs.getBoolean("active")); entity.setLastUpdated(new Date(rs.getTimestamp("last_updated").getTime())); entity.setMessage(rs.getString("message")); entity.setVdsId(getGuid(rs, "vds_id")); entity.setDiskId(getGuid(rs, "disk_id")); entity.setImagedTicketId(getGuid(rs, "imaged_ticket_id")); entity.setProxyUri(rs.getString("proxy_uri")); entity.setDaemonUri(rs.getString("daemon_uri")); entity.setSignedTicket(rs.getString("signed_ticket")); entity.setBytesSent(rs.getLong("bytes_sent")); entity.setBytesTotal(rs.getLong("bytes_total")); entity.setClientInactivityTimeout((Integer) rs.getObject("client_inactivity_timeout")); return entity; }; }
@Override public String toString() { return ToStringBuilder.forInstance(this) .append("id", getId()) .append("phase", getPhase()) .append("type", getType()) .append("active", getActive()) .append("lastUpdated", getLastUpdated()) .append("message", getMessage()) .append("vdsId", getVdsId()) .append("diskId", getDiskId()) .append("imagedTicketId", getImagedTicketId()) .append("proxyUri", getProxyUri()) .append("signedTicket", getSignedTicket()) .append("bytesSent", getBytesSent()) .append("bytesTotal", getBytesTotal()) .append("clientInactivityTimeout", getClientInactivityTimeout()) .build(); }
public String getProxyURLForTransfer() { return getProxyUri() + "/" + getImagedTicketId(); }
public String getDaemonURLForTransfer() { return getDaemonUri() + "/" + getImagedTicketId(); }
if (entity.getId() != null) { model.setId(entity.getId().toString()); if (entity.getVdsId() != null) { model.setHost(new Host()); model.getHost().setId(entity.getVdsId().toString()); if (entity.getDiskId() != null) { model.setImage(new Image()); model.getImage().setId(entity.getDiskId().toString()); if (entity.getProxyUri() != null && entity.getImagedTicketId() != null) { model.setProxyUrl(entity.getProxyURLForTransfer()); if (entity.getDaemonUri() != null && entity.getImagedTicketId() != null) { model.setTransferUrl(entity.getDaemonURLForTransfer()); if (entity.getSignedTicket() != null) { model.setSignedTicket(entity.getSignedTicket()); if (entity.getPhase() != null) { model.setPhase(mapPhase(entity.getPhase())); if (entity.getActive() != null) { model.setActive(entity.getActive()); if (entity.getType() != null) { model.setDirection(mapDirection(entity.getType()));
@Override protected ImageTransfer generateNewEntity() { ImageTransfer imageTransfer = new ImageTransfer(FixturesTool.IMAGE_TRANSFER_ID); imageTransfer.setCommandType(ActionType.TransferDiskImage); imageTransfer.setPhase(ImageTransferPhase.TRANSFERRING); imageTransfer.setType(TransferType.Upload); imageTransfer.setActive(true); imageTransfer.setLastUpdated(new Date()); imageTransfer.setVdsId(FixturesTool.HOST_ID); imageTransfer.setDiskId(FixturesTool.DISK_ID); imageTransfer.setBytesSent(0L); imageTransfer.setBytesTotal(SizeConverter.BYTES_IN_GB); return imageTransfer; }
private void respondToPollStatus(FrontendActionAsyncResult result) { if (result.getReturnValue() != null && result.getReturnValue().getSucceeded()) { ImageTransfer rv = result.getReturnValue().getActionReturnValue(); log.info("Upload phase: " + rv.getPhase().toString()); //$NON-NLS-1$ switch (rv.getPhase()) { case UNKNOWN: setVdsId(rv.getVdsId()); setDiskId(rv.getDiskId()); setImageTicketId(rv.getImagedTicketId()); String proxyURI = rv.getProxyUri(); String signedTicket = rv.getSignedTicket();
private void initiateResumeUploadCheckStatus(FrontendActionAsyncResult result) { AsyncQuery<String> asyncQuery = (AsyncQuery<String>) result.getState(); if (result.getReturnValue() != null && result.getReturnValue().getSucceeded()) { ImageTransfer rv = result.getReturnValue().getActionReturnValue(); if (rv.getBytesTotal() != getImageSize()) { if (rv.getBytesTotal() == 0) { // This upload was generated by the API. asyncQuery.getAsyncCallback().onSuccess( messages.uploadImageFailedToResumeUploadOriginatedInAPI()); } else { asyncQuery.getAsyncCallback().onSuccess( messages.uploadImageFailedToResumeSizeMessage(rv.getBytesTotal(), getImageSize())); } return; } // Resumable uploads already have a command running on engine, so get its id and resume it. ImageTransfer updates = new ImageTransfer(); updates.setPhase(ImageTransferPhase.RESUMING); TransferImageStatusParameters parameters = new TransferImageStatusParameters(rv.getId()); parameters.setUpdates(updates); Frontend.getInstance().runAction(ActionType.TransferImageStatus, parameters, this::initiateResumeUploadStartTransfer); } else { setProgressStr(messages.uploadImageFailedToResumeMessage(result.getReturnValue().getDescription())); } asyncQuery.getAsyncCallback().onSuccess(null); }
private TransferImageStatusParameters prepareStatusParams(ImageTransferPhase phase) { org.ovirt.engine.core.common.businessentities.storage.ImageTransfer updates = new org.ovirt.engine.core.common.businessentities.storage.ImageTransfer(guid); updates.setPhase(phase); TransferImageStatusParameters params = new TransferImageStatusParameters(); params.setTransferImageCommandId(guid); params.setUpdates(updates); return params; }
@Mapping(from = ImageTransfer.class, to = org.ovirt.engine.core.common.businessentities.storage.ImageTransfer.class) public static org.ovirt.engine.core.common.businessentities.storage.ImageTransfer map(ImageTransfer model, org.ovirt.engine.core.common.businessentities.storage.ImageTransfer template) { org.ovirt.engine.core.common.businessentities.storage.ImageTransfer entity = template != null ? template : new org.ovirt.engine.core.common.businessentities.storage.ImageTransfer(); if (model.isSetId()) { entity.setId(GuidUtils.asGuid(model.getId())); } if (model.isSetHost() && model.getHost().isSetId()) { entity.setVdsId(GuidUtils.asGuid(model.getHost().getId())); } if (model.isSetImage() && model.getImage().isSetId()) { entity.setDiskId(GuidUtils.asGuid(model.getImage().getId())); } return entity; }
ImageTransfer updates = new ImageTransfer(); TransferImageStatusParameters statusParameters = new TransferImageStatusParameters(getCommandId(), updates); statusParameters.getUpdates().setPhase(ImageTransferPhase.FINALIZING_SUCCESS); raiseUploadFinishedEvent(ImageTransferPhase.FINALIZING_SUCCESS); } else if (getUploadState() == UploadState.CLIENT_ERROR) { setProgressStr("Pausing due to client error"); //$NON-NLS-1$ statusParameters.getUpdates().setPhase(ImageTransferPhase.PAUSED_SYSTEM); statusParameters.setDiskId(getDiskId()); statusParameters.setAuditLogType(auditLogType); } else { setProgressStr("Finalizing failure..."); //$NON-NLS-1$ statusParameters.getUpdates().setPhase(ImageTransferPhase.FINALIZING_FAILURE); raiseUploadFinishedEvent(ImageTransferPhase.FINALIZING_FAILURE); log.info("Updating status to " + statusParameters.getUpdates().getPhase()); //$NON-NLS-1$ Frontend.getInstance().runAction(ActionType.TransferImageStatus, statusParameters, result -> {
private void initiateResumeUploadStartTransfer(FrontendActionAsyncResult result) { if (result.getReturnValue() != null && result.getReturnValue().getSucceeded()) { ImageTransfer rv = result.getReturnValue().getActionReturnValue(); setCommandId(rv.getId()); setBytesSent(rv.getBytesSent()); setBytesEndOffset(rv.getBytesTotal()); startStatusPolling(); } else { setProgressStr(messages.uploadImageFailedToResumeMessage(result.getReturnValue().getDescription())); } }
private void startStatusPolling() { setContinuePolling(true); Scheduler.get().scheduleFixedDelay(() -> { log.info("Polling for status"); //$NON-NLS-1$ TransferImageStatusParameters statusParameters = new TransferImageStatusParameters(getCommandId()); ImageTransfer updates = new ImageTransfer(); updateBytesSent(updates); updates.setMessage(getProgressStr()); statusParameters.setUpdates(updates); Frontend.getInstance().runAction(ActionType.TransferImageStatus, statusParameters, this::respondToPollStatus); return isContinuePolling(); }, POLLING_DELAY_MS); }
@Override public Guid getQueryableId() { return getId(); }
@Test public void testGetByVdsId() { List<ImageTransfer> imageTransfers = dao.getByVdsId(FixturesTool.HOST_ID); assertNotNull(imageTransfers); assertTrue(imageTransfers.stream() .allMatch(imageTransfer -> imageTransfer.getVdsId().equals(FixturesTool.HOST_ID)), "Transfers must be associated with the specified host"); } }
@Test public void testGetByDiskId() { ImageTransfer imageTransfer = dao.getByDiskId(FixturesTool.DISK_ID); assertNotNull(imageTransfer); assertEquals(FixturesTool.DISK_ID, imageTransfer.getDiskId()); }
@Override protected void updateExistingEntity() { existingEntity.setPhase(ImageTransferPhase.PAUSED_SYSTEM); }
public static void pauseUploads(List<? extends Disk> disks) { ArrayList<ActionParametersBase> list = new ArrayList<>(); for (Disk disk : disks) { ImageTransfer updates = new ImageTransfer(); updates.setPhase(ImageTransferPhase.PAUSED_USER); TransferImageStatusParameters parameters = new TransferImageStatusParameters(); parameters.setUpdates(updates); parameters.setDiskId(disk.getId()); list.add(parameters); } Frontend.getInstance().runMultipleAction(ActionType.TransferImageStatus, list); }
private void initiateDownload(ImageTransfer imageTransfer) { String url = imageTransfer.getProxyUri() + "/" + imageTransfer.getImagedTicketId(); //$NON-NLS-1$ log.info("Initiating download: " + url); //$NON-NLS-1$ // Invoke download Frame frame = new Frame(url); frame.addLoadHandler(loadEvent -> Scheduler.get().scheduleDeferred(() -> RootPanel.get().remove(frame))); frame.getElement().getStyle().setDisplay(Style.Display.NONE); RootPanel.get().add(frame); }
@Override protected MapSqlParameterSource createFullParametersMapper(ImageTransfer entity) { MapSqlParameterSource mapper = createIdParameterMapper(entity.getId()); mapper.addValue("command_id", entity.getId()); mapper.addValue("command_type", entity.getCommandType()); mapper.addValue("phase", entity.getPhase()); mapper.addValue("type", entity.getType()); mapper.addValue("active", entity.getActive()); mapper.addValue("last_updated", entity.getLastUpdated()); mapper.addValue("message", entity.getMessage()); mapper.addValue("vds_id", entity.getVdsId() == null ? null : entity.getVdsId().toString()); mapper.addValue("disk_id", entity.getDiskId() == null ? null : entity.getDiskId().toString()); mapper.addValue("imaged_ticket_id", entity.getImagedTicketId() == null ? null : entity.getImagedTicketId().toString()); mapper.addValue("proxy_uri", entity.getProxyUri()); mapper.addValue("daemon_uri", entity.getDaemonUri()); mapper.addValue("signed_ticket", entity.getSignedTicket()); mapper.addValue("bytes_sent", entity.getBytesSent()); mapper.addValue("bytes_total", entity.getBytesTotal()); mapper.addValue("client_inactivity_timeout", entity.getClientInactivityTimeout()); return mapper; }