/** * The core logic that initialize the thread container and executes the function */ @Override public void start() { log.info("ThreadContainer starting function with instance config {}", instanceConfig); this.fnThread = new Thread(threadGroup, javaInstanceRunnable, String.format("%s-%s", FunctionDetailsUtils.getFullyQualifiedName(instanceConfig.getFunctionDetails()), instanceConfig.getInstanceId())); this.fnThread.start(); }
@Override public void processRecord(MetricsData record, Function.FunctionDetails functionDetails) { final String source = FunctionDetailsUtils.getFullyQualifiedName(functionDetails); Map<String, Double> sourceCache = metricsCache.getIfPresent(source); if (sourceCache == null) { final Cache<String, Double> newSourceCache = createCache(); sourceCache = newSourceCache.asMap(); } sourceCache.putAll(processMetrics(record)); metricsCache.put(source, sourceCache); }
@Override public void processRecord(InstanceCommunication.MetricsData record, Function.FunctionDetails FunctionDetails) { if (isFileStart) { String filenamePrefix = filenameKey + "." + FunctionDetailsUtils.getFullyQualifiedName(FunctionDetails); writer = openNewFile(String.format("%s.%d", filenamePrefix, currentFileIndex)); writer.print("["); isFileStart = false; } else { writer.print(","); } try { String metrics = Utils.printJson(record); writer.print(metrics); } catch (Exception ex) { } }
public static String getFullyQualifiedName(FunctionDetails FunctionDetails) { return getFullyQualifiedName(FunctionDetails.getTenant(), FunctionDetails.getNamespace(), FunctionDetails.getName()); }
"%s/%s", logDirectory, FunctionDetailsUtils.getFullyQualifiedName(instanceConfig.getFunctionDetails()))); args.add("-Dpulsar.function.log.file=" + String.format( "%s-%s",
private void setupLogHandler() { if (instanceConfig.getFunctionDetails().getLogTopic() != null && !instanceConfig.getFunctionDetails().getLogTopic().isEmpty()) { logAppender = new LogAppender(client, instanceConfig.getFunctionDetails().getLogTopic(), FunctionDetailsUtils.getFullyQualifiedName(instanceConfig.getFunctionDetails())); logAppender.start(); } }
FunctionDetailsUtils.getFullyQualifiedName(this.instanceConfig.getFunctionDetails()));
/** * NOTE: this method should be called in the instance thread, in order to make class loading work. */ JavaInstance setupJavaInstance(ContextImpl contextImpl) throws Exception { // initialize the thread context ThreadContext.put("function", FunctionDetailsUtils.getFullyQualifiedName(instanceConfig.getFunctionDetails())); ThreadContext.put("functionname", instanceConfig.getFunctionDetails().getName()); ThreadContext.put("instance", instanceConfig.getInstanceName()); log.info("Starting Java Instance {} : \n Details = {}", instanceConfig.getFunctionDetails().getName(), instanceConfig.getFunctionDetails()); // start the function thread loadJars(); ClassLoader clsLoader = Thread.currentThread().getContextClassLoader(); Object object = Reflections.createInstance( instanceConfig.getFunctionDetails().getClassName(), clsLoader); if (!(object instanceof Function) && !(object instanceof java.util.function.Function)) { throw new RuntimeException("User class must either be Function or java.util.Function"); } // start the state table setupStateTable(); // start the output producer setupOutput(contextImpl); // start the input consumer setupInput(contextImpl); // start any log topic handler setupLogHandler(); return new JavaInstance(contextImpl, object); }
: FunctionDetailsUtils.getFullyQualifiedName(this.instanceConfig.getFunctionDetails())); pulsarSourceConfig.setProcessingGuarantees( FunctionConfig.ProcessingGuarantees.valueOf( FunctionDetailsUtils.getFullyQualifiedName(this.instanceConfig.getFunctionDetails())); } else { object = Reflections.createInstance(