Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

This approach will create a binary with only the GetFile processor and RemoteProcessGroup along with a shared object.  The addition of new base processors will not require the addition of any cmake code or code beyond the processor and test. The shared object will include a version that identifies the built source and enables agents that load that shared object to enforce update rules. While a binary limited to GetFile and an RPG may not be useful to many, including updates to either can allow us to update agents in real time through the transmission of a shared object. Realtime updates with non updates to system dependencies can be done in realtime. This can be done by versioning the class loading mechanism. While we don't aim to match the complexity of java class loading, we can certainly use the facilities that exist now to separate class instantiation. Once registry versioning is complete, we should be able to support object isolation.

...

Code Block
languagecpp
firstline1
linenumberstrue
int8_t create_flow_file(FlowFile** flow_file, char *content_location, size_t size)
int8_t transmit_flow_file(FlowFile *flow_file, char *nifi_host);
int8_t free_flow_file(FlowFile *flow_file);

 

These efforts will be separated into multiple tickets in a larger epic. More tickets will arise from the development of this proposal; however, items one and two can begin immediate development. 

  1. Separate base processors into a conditional component
  2. Separate C2 into a conditional compile time component
  3. Improve API to facilitate building custom agents
  4. Create C library function calls to utilize this API

Cons

  • The major negative to this has been one we've already experienced: increased cost in vtables lookup and class loader lookup 1. While we can't combat the former, we have done some work with template meta programming to fight the latter. More can be done; however, the cost will always exist, but is traditionally very minimal and paid at startup. 
  • Design complexity may make development more difficult.
  • Debugging may become more difficult due to the depth of call graphs. 

...