@Override public void invoke(T value) throws Exception { final NiFiDataPacket niFiDataPacket = builder.createNiFiDataPacket(value, getRuntimeContext()); final Transaction transaction = client.createTransaction(TransferDirection.SEND); if (transaction == null) { throw new IllegalStateException("Unable to create a NiFi Transaction to send data"); } transaction.send(niFiDataPacket.getContent(), niFiDataPacket.getAttributes()); transaction.confirm(); transaction.complete(); }
@Override public void error() { try { transaction.error(); } finally { final EndpointConnection state = connectionStateRef.get(); if (state != null) { pool.terminate(connectionState); connectionStateRef.set(null); } } }
private int receiveFlowFiles(final Transaction transaction, final ProcessContext context, final ProcessSession session) throws IOException, ProtocolException { final String userDn = transaction.getCommunicant().getDistinguishedName(); final DataPacket dataPacket = transaction.receive(); if (dataPacket == null) { break; flowFile = session.putAllAttributes(flowFile, dataPacket.getAttributes()); final Communicant communicant = transaction.getCommunicant(); final String host = StringUtils.isEmpty(communicant.getHost()) ? "unknown" : communicant.getHost(); final String port = communicant.getPort() < 0 ? "unknown" : String.valueOf(communicant.getPort()); final String transitUri = transaction.getCommunicant().createTransitUri(sourceFlowFileIdentifier); session.getProvenanceReporter().receive(flowFile, transitUri, "urn:nifi:" + sourceFlowFileIdentifier, "Remote DN=" + userDn, TimeUnit.NANOSECONDS.toMillis(receiveNanos)); transaction.confirm(); transaction.complete(); final String dataSize = FormatUtils.formatDataSize(bytesReceived); logger.info("{} Successfully received {} ({}) from {} in {} milliseconds at a rate of {}", new Object[]{ this, flowFileDescription, dataSize, transaction.getCommunicant().getUrl(), uploadMillis, uploadDataRate});
final String userDn = transaction.getCommunicant().getDistinguishedName(); final long startSendingNanos = System.nanoTime(); final StopWatch stopWatch = new StopWatch(true); logger.debug("{} Sent {} to {}", this, flowFile, transaction.getCommunicant().getUrl()); final String transitUri = transaction.getCommunicant().createTransitUri(flowFile.getAttribute(CoreAttributes.UUID.key())); flowFile = session.putAttribute(flowFile, SiteToSiteAttributes.S2S_PORT_ID.key(), getTargetIdentifier()); session.getProvenanceReporter().send(flowFile, transitUri, "Remote DN=" + userDn, transferMillis, false); transaction.confirm(); final String dataSize = FormatUtils.formatDataSize(bytesSent); transaction.complete(); session.commit(); this, flowFileDescription, dataSize, transaction.getCommunicant().getUrl(), uploadMillis, uploadDataRate});
@Override public void send(final byte[] content, final Map<String, String> attributes) throws IOException { transaction.send(content, attributes); }
@Override public void confirm() throws IOException { transaction.confirm(); }
@Override public TransactionCompletion complete() throws IOException { try { return transaction.complete(); } finally { final EndpointConnection state = connectionStateRef.get(); if (state != null) { pool.offer(connectionState); connectionStateRef.set(null); } } }
@Override public DataPacket receive() throws IOException { return transaction.receive(); }
@Override public Communicant getCommunicant() { return transaction.getCommunicant(); } };
private int receiveFlowFiles(final Transaction transaction, final ProcessContext context, final ProcessSession session) throws IOException, ProtocolException { final String userDn = transaction.getCommunicant().getDistinguishedName(); final DataPacket dataPacket = transaction.receive(); if (dataPacket == null) { break; flowFile = session.putAllAttributes(flowFile, dataPacket.getAttributes()); final Communicant communicant = transaction.getCommunicant(); final String host = StringUtils.isEmpty(communicant.getHost()) ? "unknown" : communicant.getHost(); final String port = communicant.getPort() < 0 ? "unknown" : String.valueOf(communicant.getPort()); final String transitUri = transaction.getCommunicant().createTransitUri(sourceFlowFileIdentifier); session.getProvenanceReporter().receive(flowFile, transitUri, "urn:nifi:" + sourceFlowFileIdentifier, "Remote DN=" + userDn, TimeUnit.NANOSECONDS.toMillis(receiveNanos)); transaction.confirm(); transaction.complete(); final String dataSize = FormatUtils.formatDataSize(bytesReceived); logger.info("{} Successfully received {} ({}) from {} in {} milliseconds at a rate of {}", new Object[]{ this, flowFileDescription, dataSize, transaction.getCommunicant().getUrl(), uploadMillis, uploadDataRate});
final String userDn = transaction.getCommunicant().getDistinguishedName(); final long startSendingNanos = System.nanoTime(); final StopWatch stopWatch = new StopWatch(true); logger.debug("{} Sent {} to {}", this, flowFile, transaction.getCommunicant().getUrl()); final String transitUri = transaction.getCommunicant().createTransitUri(flowFile.getAttribute(CoreAttributes.UUID.key())); flowFile = session.putAttribute(flowFile, SiteToSiteAttributes.S2S_PORT_ID.key(), getTargetIdentifier()); session.getProvenanceReporter().send(flowFile, transitUri, "Remote DN=" + userDn, transferMillis, false); transaction.confirm(); final String dataSize = FormatUtils.formatDataSize(bytesSent); transaction.complete(); session.commit(); this, flowFileDescription, dataSize, transaction.getCommunicant().getUrl(), uploadMillis, uploadDataRate});
@Override public void send(final DataPacket dataPacket) throws IOException { transaction.send(dataPacket); }
public TransactionCompletion sendFiles() throws IOException { Transaction transaction = siteToSiteClient.createTransaction(TransferDirection.SEND); try { DataPacketDto.getDataPacketStream(input).forEachOrdered(d -> { try { transaction.send(d); } catch (IOException e) { throw new RuntimeException(e); } }); } catch (RuntimeException e) { Throwable cause = e.getCause(); if (cause instanceof IOException) { throw (IOException) cause; } throw new IOException(e.getMessage(), e); } transaction.confirm(); return transaction.complete(); } }
public TransactionCompletion receiveFiles() throws IOException { Transaction transaction = siteToSiteClient.createTransaction(TransferDirection.RECEIVE); JsonGenerator jsonGenerator = new JsonFactory().createJsonGenerator(output); jsonGenerator.writeStartArray(); DataPacket dataPacket; while ((dataPacket = transaction.receive()) != null) { jsonGenerator.writeStartObject(); jsonGenerator.writeFieldName("attributes"); jsonGenerator.writeStartObject(); Map<String, String> attributes = dataPacket.getAttributes(); if (attributes != null) { for (Map.Entry<String, String> stringStringEntry : attributes.entrySet()) { jsonGenerator.writeStringField(stringStringEntry.getKey(), stringStringEntry.getValue()); } } jsonGenerator.writeEndObject(); InputStream data = dataPacket.getData(); if (data != null) { jsonGenerator.writeBinaryField("data", IOUtils.toByteArray(data)); } jsonGenerator.writeEndObject(); } jsonGenerator.writeEndArray(); jsonGenerator.close(); transaction.confirm(); return transaction.complete(); } }
protected void sendData(final ReportingContext context, final Transaction transaction, Map<String, String> attributes, final JsonArray jsonArray) throws IOException { if(context.getProperty(RECORD_WRITER).isSet()) { transaction.send(getData(context, new ByteArrayInputStream(jsonArray.toString().getBytes(StandardCharsets.UTF_8)), attributes), attributes); } else { transaction.send(jsonArray.toString().getBytes(StandardCharsets.UTF_8), attributes); } }
transaction.error(); session.rollback();