Skip to content

Releases: flomesh-io/pipy

0.30.0

22 Mar 15:59
01e0737
Compare
Choose a tag to compare

Core

  • Add flow control mechanism for throttling any types of input
  • Add asynchronous file operations
  • Support OpenSSL engines

Filters

  • New filter tee
  • New filter throttleConcurrency
  • New filter demux (legacy demux/mux filters are renamed to demuxQueue/muxQueue)
  • Filter decodeMQTT to support protocolLevel option
  • Throttle filters support weak references as the account keys

API

  • Support TTL option for algo.Cache
  • New method stats.Metric.valueOf() for querying current metric value
  • Data.from() rejects input types other than strings

Major bug fixes

  • Fixed a bug where TLS requests could be stuck in the buffer
  • Fixed a dead loop when trying to read folders in codebases
  • Fixed some crashes when null is given to some cypto APIs
  • Fixed a crash when retrieving stats.Histogram sub-metrics
  • Fixed a bug where an HTTP 304 response would lead to forever waiting on the connection
  • Fixed a bug in Data::shift_while() that caused Dubbo decoding failures
  • The size of Data wasn't changed accordingly in some cases when packing

Build

  • Support static linking to libc
  • Support linking to external zlib

Documentation

Tremendous growth in documentation coverage has been done since the last release in English, Chinese and Japanese.

0.22.0-31

31 Jan 14:45
Compare
Choose a tag to compare

Core

  • Overhaul to the object lifecycle management to solve a few hardcore crashes
  • Supports LevelDB as a storage for codebases
  • New admin proxy mode
  • Retry failed codebase downloading during startup

PipyJS

  • Full implementation to standard JavaScript Array, Math, Date API without iterators and timezones
  • Standard-conformant JavaScript String API with UTF-32 semantics and UTF-8 representation internally

API

  • Metrics and statistics API for monitoring, with internal support for Prometheus exposition format
  • New URLSearchParams API
  • Data API supports generating arbitrary binary data
  • Handle CDATA in XML.decode() and XML.encode()
  • Support programmatically shutdown by pipy.exit()
  • Printing objects as JSON with console.log()

Filters

General

  • Support read/write timeouts for inbound connections
  • Support read/write/connect timeouts for outbound connections
  • Support signal driven tasks
  • Support listening address binding
  • use filter supports module(plugin) chains and round-trip filter paths
  • mux filters support objects as a weak key to the shared session
  • LoadBalancers support dynamic unhealthy target cache

HTTP

  • Basic HTTP/2 support without flow control
  • HTTP codec standard conformance improvements
  • Support for HTTP tunneling and WebSocket
  • Actively shutdown long-lived connections around a reload
  • Automatically chunk HTTP/1 message bodies when they are too large

TLS

  • Support mTLS between worker nodes and the repo node
  • New handleTLSClientHello filter to extract TLS client hello information
  • New detectProtocol filter for telling apart TLS and plain-TCP connections
  • Improved TLS performance
  • OpenSSL library bumped to version 1.1.1-m
  • Option to build with external OpenSSL library

SOCKS

  • New filter connectSOCKS for the client side
  • Renamed proxySOCKS to acceptSOCKS

MQTT

  • Simple MQTT codec filters for extracting MQTT packet information

GUI

  • Script editor supports IntelliSense
  • Generate pipeline graph from script enclosed in a function scope
  • Builtin documentation with full tutorial and localization

0.10.0-1

01 Oct 12:46
2d8b8ea
Compare
Choose a tag to compare

Release Note

New Design

  • Start a Pipy instance remotely from HTTP endpoints
  • Builtin codebase service as a basic control plane, and its GUI too
  • Data exchange between PJS modules can be done through pipy().import() and pipy().export(), which becomes the recommended approach over the old ones

New Filters

  • merge for interweaving multiple messages into one stream
  • pack for combining multiple messages into one
  • split for byte-wise processing of messages
  • handleXXX as aliases to onXXX
  • proxySOCKS to handle both SOCKS4 and SOCKS5 traffic
  • connectTLS and acceptTLS for TLS traffic handling, extracted from listen and connect
  • decompressMessage and decompressHTTP for message body decompression by zlib
  • demuxHTTP and muxHTTP combining HTTP codec and mux/demux
  • serveHTTP combining demuxHTTP and replaceMessage for convenience

New API

  • Function os.writeFile() for local file writing
  • Function algo.hash() for JS value hashing
  • Class Netmask for IP address range handling
  • Class algo.Percentile for percentile calculation
  • Class PublicKey, PrivateKey, Sign, Verify, Cipher, Decipher under namespace crypto

Improvements

  • IPv6 support
  • Number of concurrent connections can be limited on listen
  • Added size limit option to filters involving internal data buffers
  • Track data buffer usage and concurrent inbound/outbound connections and dump on SIGTSTP
  • HTTP codec overhaul, with the old 256KB fixed buffer optimized out
  • Class algo.Cache now has a limit to the number of entries, with old entries getting erased based on LRU policy
  • Dubbo request ID becomes a string for its 64-bit range to be handled in JS
  • Standard-conforming processing of object key ordering in PJS

0.8.0-31

31 Aug 03:03
Compare
Choose a tag to compare

[fix] Bug fix regarding HEAD request handling in HTTP codec filters
[fix] Non-shared mux sessions should be freed a while after reset to avoid recursive deletion resulted from closing of parent sessions
[filter] Do not show 'data discarded' message if data buffer limit is set to zero for filters handling message bodies
[filter] HTTP decoder to translate transport errors into 502 responses. Also fixed a memory leak in serveHTTP
[api] Support JWT verification with a PrivateKey object besides a JWK object
[core] Now that we have export/import as a better approach to variable sharing between modules, the old MessageStart.context property is now removed
[filter] Added serveHTTP filter that handles HTTP requests by simply providing a handler function that returns responses. The builtin GUI service changed to use this new filter internally
[core] Download codebase by using http::Mux filter to better handle the lifetime of a keep-alive connection
[core] Removed __argv since it is no longer needed now that we have variable export/import
Updated test scripts to match with the latest filter renaming
[design] HTTP filter renaming, revamping and optimization.
[api] Data.toString() returns undefined when data is not in valid UTF-8 encoding
[filter] New filter: split
[fix] Remotely downloaded scripts should have their base URI pathname stripped off
[fix] The new HTTP header encoder generated Connection and Keep-Alive headers without the value, which in turn invalidated the message
[api] Added dummy deselect method to HashingLoadBalancer and RoundRobinLoadBalancer so that the 3 load balancing algorithms are fully compatible to each other in interface
[filter] Added new filters demuxHTTP and muxHTTP combining HTTP codec and the functionality from the generalized demux/mux filters
[filter] Replace decompressMessageBody with decompressMessage and decompressHTTP, with the former protocol-agnostic and the latter specific for HTTP messages
[fix] Bug in the dump filter where the tails of data chunks are duplicated
[scripting] Remote download/update script files
[filter] Revamping HTTP codecs
[filter] Added sizeLimit to [handle|replace][Message|MessageBody] filters for setting a maximum body size that can be buffered internally before triggering a script callback
[fix] Missing file in CMakeLists.txt
[fix] Rewrite tap filter to fix a potential crash that might be caused by an invalid lambda after an asynchronous operation
[fix] Outbound connections should only retry on connection failures not reading/writing errors.
[fix] Listeners should not even start accepting when maxConnections == 0
[FIX] Base64Url decoding failure in some ending cases.
[feature] Added a new filter 'proxySOCKS' with basic non-authenticated SOCKS5 support. The old filter 'proxySOCKS4' is to be removed in the future.
[feature] Added aliases for onXXX as handleXXX to avoid misunderstanding. The old onXXX naming will be removed in the future.
[feature] Support one-shot tasks that can be used for initialization script.
[design] Added a 'context' property to MessageStart so that context information can be passed down connected pipeline sessions from module to module.
[feature] tap filter now re-evaluates its quota expression every 5 seconds
[api] Added new APIs that facilitate script hot reload, including:
[feature] New filter: pack, which combines multiple input messages into one output message.
[feature] New filter: merge, like a mux filter working in the way of a fork filter.
[feature] connect filter now can have a limit to its internal buffer size and just discard data when the buffer overflows.
[feature] algo.Cache now can have a limit to its size with only a number of LRU items kept alive.
[feature] New PJS features including:
[fix] Dubbo request ID requires 64-bit value range so we have to handle it in JS with a string
Changed DATA_CHUNK_SIZE from 16KB to 4KB for a better balance between throughput and memory usage.
[fix] Fixed an infinite loop happened in console.log when output has more than one lines.
[API] Added more classes to crypto including:
Optimization on Hex/Base64(Url) encoding and decoding so that no intermediate buffer is needed amid conversions between Data and string.
[feature]Added Netmask.next() method for generation of IPs over an address range.
[feature]Constructors of algo.RoundRobinLoadBalancer and algo.LeastWorkLoadBalancer now also receive target arrays in which case targets are weighted equally.
[Test] Added test/010-jwt and test/016-socks4-proxy
[Feature] Added support of bodiless HTTP responses (responses to HEAD requests).
[Feature] Added a new API pipy.restart() for programatic reloading of the current running pjs program
[Feature] Added a new API os.writeFile() for writing to local files.
[API] Added algo.Percentile for percentile calculation of things like latencies.
[API] Added a new global class Netmask CIDR network address mask operations.
[API] The tap filter now takes nullish quota as quota being unlimited.
[API] Added a new function algo.hash() for calculation the hash of a JS value
[BUG FIX] Crash on BSD due to C++ class name demangling failure.
[BUG FIX] proxySOCK4 filter wasn't drawn correctly in the graph on the web UI.
[BugFix] Fix rpm spec issue and adding static web service (#18)
[BugFix] Fix rpm spec issue and adding static web service

First release of Pipy pjs

07 Jun 04:48
f681131
Compare
Choose a tag to compare

First release of Pipy pjs

  • Transitioned to PipyJS
  • Dropped support of .cfg files in favour of JS scripts
  • Reworked all filters (formerly called modules)
  • Added builtin web UI

First release

13 Feb 13:06
05d400c
Compare
Choose a tag to compare
First release Pre-release
Pre-release

This is the very first release of pipy!
Enjoy!