v2.0.0
IO(Source/Sink)
-
Connection management https://ekuiper.org/docs/en/latest/guide/connections/overview.html
- Connection pool framework (gradually adapt existing connections)
- Connection become a physical instance instead of a rule logical configuration, it will run from the start and refered by multiple rules
- Standalone connection status
- Auto reconnect
- Adapt mqtt, sql, nng(neuron), edgex, websocket, httppush
- APIs to manage connection instances
- Connection status metrics
- Connection pool framework (gradually adapt existing connections)
-
Source/sink operators split source split/sink split
- Finer-grained runtime metrics can be supported to understand the status and latency of each sub-task.
- Parallel computation of sub-tasks can be implemented, improving the overall efficiency of rule execution.
-
Source down sampling support doc
-
Formats
- Delimited format support header
- Add urlencoded format (usually use in HTTP form request, extract from REST sink)
-
Multi-level decode (format and payloadFormat)
-
File sink supports enctryption (AES now)
-
REST sink supports full format like delimited(csv), also add validation for mapping of format and bodyType
SQL/Streaming runtime
- General ONNX function plugin, run ONNX model inference without coding doc
- Support stream EOF so that we can run a rule in batch mode
- File/simulator source stops after read all and no loop/interval is set
- MQTT stream allows to stop by sending EOF message
- Rule gracefully exit: wait until all operators close
- New function: object_size
- Support window function doc
- Datetime format, support multiple S in format layout
Operation
- Tracing support doc
- REST API tracing
- Query rule trace API
- Tracing data from/to Neuron
- Local trace
- Tracing collector
- Rule state cleanup
- View rule metrics after close
- Avoid malform state
- New rule metrics: all metrics now
- connection related metrics for source/sink
- CPU usage metric
- API updates
- Import
- Asnc API
- Supports YAML content
- Meta list return plugin type info
- List streams API show format and type
- Drop dependency validation
- stream
- plugin
- Import
- Store conf in KV by default
- Conf: use time.Duration for intervals
Extension
- Native plugin develop
- Update extention spec, users need to rewrite plugins
- Do not need to depend on eKuiper project any more
- Portable plugin
- Support sink ack so that it can leverage sink cache doc
- Start as long running instance
- Plugin status API, reference count
- Remove recv size limit (won’t fail when communication payload is bigger than 1MB)
- Support REST external service retry
Test & Build
- Upgrade to go 1.23
- Build: add docker alpine-python image
- UT coverage 71%
- Security
- Fix integer truncate problem
- SQL prepare to avoid injection
- Escape html response
What's Changed
- chore: remove repetitive words by @InventiveCoder in #2718
- build: upgrade base image go version by @ngjaying in #2720
- feat: introduce rule metrics by @Yisaer in #2716
- build: upgrade go and dependant mods by @ngjaying in #2719
- feat: refact sql indexValue into muti indexValue by @Yisaer in #2717
- refactor(xsql): unify row and collection by @ngjaying in #2700
- fix: fix doc error by @Yisaer in #2724
- feat(module): modularize io by @ngjaying in #2721
- feat: add multi field index api by @Yisaer in #2729
- feat(module): modularize converter by @ngjaying in #2728
- docs: fix some errors by @L-607 in #2731
- feat: let IntegerLiteral Value as int64 by @Yisaer in #2727
- fix: fix describe rule exposes password by @Yisaer in #2732
- docs: add doc for multiple sql index field by @Yisaer in #2733
- docs: fix websocket doc path by @Yisaer in #2735
- feat(modularize): modularize function by @ngjaying in #2737
- chore(ci): fix tag list error by @Swilder-M in #2738
- fix: replace password when create rule by @Yisaer in #2736
- feat: support nested array schema by @Yisaer in #2734
- fix(planner): avoid create subtopo in error by @ngjaying in #2740
- fix: check rule exists before create by @Yisaer in #2741
- fix: redisPubSub ping by @retoool in #2739
- fix: doc problem for tdengine sink by @carlclone in #2743
- feat: add security to edgex via openziti by @dovholuknf in #2603
- refactor: split sink batch by @ngjaying in #2745
- fix: fix load stream when meet error by @Yisaer in #2751
- ci: delete v prefix in git tag by @Rory-Z in #2752
- fix: ignore nil value in array convert by @carlclone in #2748
- fix: fix template sql index value update strategy by @Yisaer in #2754
- feat: support modify sqlSource field index value by @Yisaer in #2730
- feat: support rule stop by error metrics by @Yisaer in #2755
- feat: package v2 by @ngjaying in #2766
- refactor: move api to standalone go mod by @ngjaying in #2770
- chore(temp): remove extensions by @ngjaying in #2777
- feat(v2): mvp features by @ngjaying in #2780
- feat: new source/sink v2 API by @ngjaying in #2783
- refactor(contract): keep interfaces only by @ngjaying in #2790
- chore: refer to correct contract mod by @ngjaying in #2792
- fix(test): source/sink test update by @ngjaying in #2797
- feat(api): add error ingest for source subscribe by @ngjaying in #2800
- refactor(sink): split compression op by @ngjaying in #2802
- feat(sink): split encryptor by @ngjaying in #2807
- feat(op): add dedup trigger op by @ngjaying in #2801
- refactor(converter): add context to converter API by @ngjaying in #2812
- feat(sink): add back file sink by @ngjaying in #2811
- feat: separate schema layer from decoder by @Yisaer in #2815
- refactor(sink): mqtt sink use connection pool by @ngjaying in #2814
- feat: remove useless flag in conveter by @Yisaer in #2823
- feat(sink): support file sink rolling hook by @ngjaying in #2819
- refactor: provide schema when instantiating by @ngjaying in #2821
- chore: update contract version by @ngjaying in #2826
- feat(function): object pick enhancement (#232) by @ngjaying in #2833
- refactor(model): extract raw tuple by @ngjaying in #2835
- feat(sink): add sink dynamic properties support by @ngjaying in #2837
- refactor(op): decode op schema more logs by @ngjaying in #2840
- chore: update codecov action by @ngjaying in #2843
- fix: detach for non shared connection by @ngjaying in #2845
- refactor(sink): split cache op by @ngjaying in #2852
- fix: revise interval config by @Yisaer in #2839
- feat(cache): resend alter queue support by @ngjaying in #2855
- fix: let config compatible by @Yisaer in #2861
- refactor(node): use time.Duration and time.Time by @ngjaying in #2864
- fix: support wait operators close by @Yisaer in #2862
- feat(io): add file source in lines mode by @ngjaying in #2866
- fix(mqtt): avoid npe for publish by @ngjaying in #2869
- feat(source): file source refactor by @ngjaying in #2870
- feat: support manage connection by @Yisaer in #2867
- feat: introduce bump version manager by @Yisaer in #2876
- refactor(converter): add context to provider func by @ngjaying in #2877
- feat: support structured rule status response by @Yisaer in #2874
- fix: fix waitClose panic by @Yisaer in #2881
- feat(op): support payload decode by @ngjaying in #2879
- feat: support store configuration in kv by @Yisaer in #2880
- refactor(api): source distinct pull and push by @ngjaying in #2885
- feat: support connection reconnect by @Yisaer in #2883
- fix: fix NewRuleState by @Yisaer in #2892
- feat: let connection pool read config by @Yisaer in #2889
- feat(op): support rate limit by @ngjaying in #2888
- feat: support portable plugin by @Yisaer in #2886
- feat: support rewrite url/token conf by @Yisaer in #2895
- fix: register connections before startup by @ngjaying in #2903
- fix: fix connection manager load by @Yisaer in #2901
- feat: revise error msg by @Yisaer in #2904
- feat(op): rate limit customized merger by @ngjaying in #2902
- fix(topo): fix error handling for nodes by @ngjaying in #2905
- feat(lookup): restore lookup source by @ngjaying in #2907
- feat: support portable plugin management by @Yisaer in #2898
- feat: refactor plugins manager lock by @Yisaer in #2899
- feat: support connection status api by @Yisaer in #2906
- test: revise mqtt test with embedded broker by @Yisaer in #2914
- test: add test for plugin manager by @Yisaer in #2913
- test: fix embedded mqtt broker test by @Yisaer in #2916
- fix(op): payload batch decode validate by @ngjaying in #2915
- feat(lookup): support lookup bytes by @ngjaying in #2919
- feat: revise connection interface by @Yisaer in #2922
- fix: fix fastjson decode by @Yisaer in #2924
- feat(lookup): support lookup embedded format by @ngjaying in #2923
- feat: support plugins reference count by @Yisaer in #2928
- fix(lookup): table plan and update problem by @ngjaying in #2927
- feat(io): restore neuron source/sink by @ngjaying in #2921
- fix(lookup): update schema by @ngjaying in #2929
- feat: check plugin reference before drop by @Yisaer in #2930
- feat: check stream before drop by @Yisaer in #2931
- feat: support bump sql source conf by @Yisaer in #2937
- feat(io): video source add props by @ngjaying in #2939
- feat: support sql source by @Yisaer in #2933
- feat: support rewind by @Yisaer in #2940
- feat: support sql reconnection by @Yisaer in #2941
- refactor(node): scan table acc by @ngjaying in #2944
- feat: support sql sink by @Yisaer in #2945
- fix(test): checkpoint tests by @ngjaying in #2948
- fix: let prom metrics controlled by tag by @Yisaer in #2956
- chore: organize built-in source/sink by @ngjaying in #2957
- refactor(converter): add ext props by @ngjaying in #2958
- feat: support http pull source by @Yisaer in #2953
- feat: support httppull source with auth by @Yisaer in #2960
- fix(file): scanner dynamic buffer by @ngjaying in #2959
- fix: lookup table problems by @ngjaying in #2961
- refactor(io): move extended plugins by @ngjaying in #2964
- feat(js): restore js functions by @ngjaying in #2965
- feat: support httppull incremental by @Yisaer in #2962
- feat: restore native plugin manager by @ngjaying in #2967
- feat: support rest sink by @Yisaer in #2966
- fix(lookup): no return for empty result by @ngjaying in #2971
- feat(plugin): restore sample plugins & ut by @ngjaying in #2973
- feat: support httppush source by @Yisaer in #2968
- refactor(contract): function exec ctx arg first by @ngjaying in #2976
- feat: support websocket socket source by @Yisaer in #2980
- feat(graph): restore graph api by @ngjaying in #2979
- chore: remove centos support by @ngjaying in #2982
- chore: deploy docs action update by @ngjaying in #2987
- feat: support websocket sink by @Yisaer in #2985
- docs(source): add down sampling doc by @ngjaying in #2990
- fix: let reload connection have timeout by @Yisaer in #2988
- feat: support cpu profiling with rule by @Rookiecom in #2978
- feat(converter): json partial decode by @ngjaying in #2989
- feat: support ws client by @Yisaer in #2992
- feat: support simulator source by @Yisaer in #2993
- refactor: extension impl structure by @ngjaying in #2995
- feat: support export metadata in yaml by @Yisaer in #2996
- feat: support push projection by @Yisaer in #3001
- feat: support rule trial by @Yisaer in #3000
- fix: fix restart rule state by @Yisaer in #3003
- feat(io): restore edgex source/sink by @ngjaying in #2998
- fix: fix trigger omitempty by @Yisaer in #3008
- feat(converter): delimiter supports header by @ngjaying in #3004
- fix(topo): detach subtopo from closed rule by @ngjaying in #3010
- feat(planner): set default payload format by @ngjaying in #3016
- fix(op): compress op input tuple by @ngjaying in #3017
- fix(nng): remove recv size limit by @ngjaying in #3020
- feat: support load connections env by @Yisaer in #3011
- feat: support import yaml (#3009) by @ngjaying in #3023
- chore: port 1.4.x change to v2 by @ngjaying in #3022
- feat: let url props compatibility by @Yisaer in #3021
- fix: remove create connection from critical area by @Yisaer in #3015
- feat: remove hidden passwd by @Yisaer in #3025
- feat: restore redis io by @ngjaying in #3034
- feat(ext): restore image sink by @ngjaying in #3035
- feat(ext): restore influx/influx2 sink by @ngjaying in #3036
- feat: restore import export plugins by @Yisaer in #3042
- feat(ext): restore zmq source/sink by @ngjaying in #3039
- feat(ext): restore tflite function by @ngjaying in #3044
- feat: restore kafka by @Yisaer in #3041
- feat: support sql lookup and ping by @Yisaer in #3043
- feat: support sql sink reconnect by @Yisaer in #3048
- feat(cli): restore rpc by @ngjaying in #3047
- feat(ext): restore image and geo functions by @ngjaying in #3045
- feat: support httppull lookup by @Yisaer in #3051
- chore: merge 1.14 influx changes by @ngjaying in #3050
- feat: support parquet file source (#2847) by @ngjaying in #3049
- feat: stop/delete rule should wait operator close by @Yisaer in #3056
- feat: portable plugin process live with ekuiper by @Yisaer in #3058
- feat: add initialize connection stauts by @Yisaer in #3059
- fix: fix mqtt client ping by @Yisaer in #3061
- fix(rest): do not override content type (#3024) by @ngjaying in #3055
- feat: revise portable plugin process by @Yisaer in #3068
- feat(mqtt): support batch eof sig by @ngjaying in #3069
- fix: fix dburl by @Yisaer in #3073
- docs: add connection doc by @Yisaer in #3072
- feat: fix batch op by @Yisaer in #3081
- chore: build android only in release by @ngjaying in #3088
- feat(state): clearer state transit by @ngjaying in #3083
- feat: unify schedule rule in checker by @Yisaer in #3089
- fix: fix trial test by @Yisaer in #3090
- fix: remove replace passwd by @Yisaer in #3082
- fix(node): distribute hang when close rule by @ngjaying in #3093
- feat: support tracing framework by @Yisaer in #3094
- chore: merge v2alpha changes by @ngjaying in #3095
- chore: update contract version by @ngjaying in #3099
- feat: support export trace to collector by @Yisaer in #3097
- fix(rule): status metrics format by @ngjaying in #3101
- fix(rule): rule status fixes by @ngjaying in #3103
- feat: support trace operator by @Yisaer in #3098
- fix(rule): should close after receive eof by @ngjaying in #3105
- fix: use prepared stmt in sql by @Yisaer in #3100
- feat: support trace window operator by @Yisaer in #3096
- test(fvt): add code based fvt by @ngjaying in #3104
- test(portable): happy path fvt by @ngjaying in #3107
- fix: revise contentType by @Yisaer in #3112
- chore: add fvt to coverage by @ngjaying in #3111
- feat: revise trace and record data by @Yisaer in #3110
- chore: ignore test pkg in codecov by @ngjaying in #3115
- chore: remove android support by @ngjaying in #3119
- chore: update docker pull badge by @ngjaying in #3122
- fix(source): fix memory source tuple list by @ngjaying in #3124
- fix: fix load configuration by @Yisaer in #3125
- feat: support trace sink operator by @Yisaer in #3116
- feat: restore plugin import/export by @ngjaying in #3123
- test: restore jmeter tests by @ngjaying in #3126
- fix(import): return error message by @ngjaying in #3128
- fix: fix parse dburl by @Yisaer in #3131
- fix(native): fix plugin config install by @ngjaying in #3127
- fix(portable): fix source decode by @ngjaying in #3129
- fix(test): update sql prop to dburl by @ngjaying in #3132
- chore(ci): update actions by @ngjaying in #3133
- feat(meta): return plugin type for list by @ngjaying in #3135
- fix(sink): support template for tupleCollector by @ngjaying in #3136
- refactor: organize rule init and state by @ngjaying in #3092
- fix: fix /metadata/resource api by @Yisaer in #3137
- fix: fix metrics for batch operator by @Yisaer in #3144
- fix(rule): load rule json without id by @ngjaying in #3148
- fix(codecov): path fixing for v2 by @ngjaying in #3150
- fix: fix mqtt client panic by @Yisaer in #3149
- feat: support local trace by @Yisaer in #3143
- fix(window): accommodate time shift back by @ngjaying in #3151
- fix(state): escape metrics message by @ngjaying in #3153
- fix(encode): csv supports fields prop by @ngjaying in #3152
- fix(test): plugin result comparison by @ngjaying in #3157
- chore: more logs for rule state and error by @ngjaying in #3158
- fix(portable): clean up sink by @ngjaying in #3156
- feat(portable): long running instance by @ngjaying in #3154
- docs(portable): add arch by @ngjaying in #3160
- test(portable): plugin status test and doc by @ngjaying in #3161
- fix: revise connection api by @Yisaer in #3159
- ci: print coverage by @ngjaying in #3162
- fix: fix connection api content type header by @Yisaer in #3169
- feat: support trace rule recent traceid by @Yisaer in #3155
- fix: fix mqtt sink conf validate by @Yisaer in #3168
- feat: support update tracer by @Yisaer in #3166
- feat(api): support connection status by @ngjaying in #3170
- feat(connection): support connection status change by @ngjaying in #3171
- refactor(connection): remove detachSub by @ngjaying in #3172
- feat: prometheus view rule cpu usage by @Rookiecom in #3063
- feat(connection): conn metric for rule by @ngjaying in #3173
- docs(plugin): rewrite native plugin docs by @ngjaying in #3164
- build: update base image go version 1.23 by @ngjaying in #3175
- build: upgrade to go 1.23 by @ngjaying in #3174
- chore: update mods by @ngjaying in #3178
- docs: add trace doc by @Yisaer in #3165
- chore: restore plugin build by @ngjaying in #3177
- feat(connection): nng as stateful dialer by @ngjaying in #3180
- feat(conn): adapt all source/sink by @ngjaying in #3181
- feat: support local span storage by @Yisaer in #3176
- feat: support neuron trace by @Yisaer in #3179
- docs: fix trace doc by @Yisaer in #3187
- fix: fix trace manager by @Yisaer in #3189
- docs: fix service name config by @Yisaer in #3190
- docs(conn): connection guide by @ngjaying in #3186
- feat(file): support decorator by @ngjaying in #3188
- fix(conf): all use cast duration conf by @ngjaying in #3191
- fix(mqtt): publish random fail at startup by @ngjaying in #3195
- fix(import): print static error message by @ngjaying in #3194
- feat: restore edgex openziti by @ngjaying in #3192
- feat: revise rule trace api by @Yisaer in #3193
- feat: support query rule trace by @Yisaer in #3196
- feat: support trace tag by @Yisaer in #3198
- fix(mqtt): resume subscription in reconnect by @ngjaying in #3199
- test: add test for sql/kafka by @Yisaer in #3203
- feat: change trace api by @Yisaer in #3206
- fix: fix sql source test by @Yisaer in #3208
- fix: fix sql sink test by @Yisaer in #3209
- feat: support trace rest api by @Yisaer in #3167
- ci: cache jmeter package by @Rory-Z in #3212
- docs: add data trace example doc by @Yisaer in #3204
- docs(io): source/sink split by @ngjaying in #3207
- refactor(zmq): add timeout for receive by @ngjaying in #3210
- feat(tool): restore plugin test server by @ngjaying in #3211
- fix: fix trace rest api propagation by @Yisaer in #3214
- chore(io): clean up io binder and logs by @ngjaying in #3215
- fix: fix source ctx tracer propagate by @Yisaer in #3217
- fix: fix trace propagator by source by @Yisaer in #3218
- fix: sql source scan value by database type by @Yisaer in #3219
- fix: fix connection pool get unexisted named conn by @Yisaer in #3222
- fix: restore sink ping by @Yisaer in #3220
- fix: warning when config not in connection.yaml by @Yisaer in #3221
- refactor(conn): save connection status in meta by @ngjaying in #3225
- fix: restore driver by @Yisaer in #3226
- fix: cache raw config not to load duplicated by @Yisaer in #3227
- fix(simulator): interval config problem by @ngjaying in #3230
- fix(conn): connection status for shared stream by @ngjaying in #3231
- fix: fix load cfgkey from storage panic by @Yisaer in #3232
- fix: topo no changed before stop during update by @Yisaer in #3233
- fix: support kafka password param by @Yisaer in #3234
- fix(metric): escape metric messages by @ngjaying in #3235
- feat: support update connection by @Yisaer in #3236
- fix: fix sort log file by @Yisaer in #3239
- fix(portable): install error cleanup by @ngjaying in #3237
- fix(file): rolling interval not obeyed problem by @ngjaying in #3238
- chore: update sqlite driver mod by @ngjaying in #3240
- fix(rest): error message escape by @ngjaying in #3241
- feat: update connection api and doc by @Yisaer in #3242
- feat: General pytorch function by @578223592 in #3062
- fix: fix driver import by @Yisaer in #3253
- fix(conn): trigger status handler when init by @ngjaying in #3252
- fix: sql prepare and html response escape by @Yisaer in #3245
- fix: validate filepath in request by @Yisaer in #3248
- fix(trial): do not close control ws by @ngjaying in #3254
- fix: replace ruleJson's password/url by @Yisaer in #3251
- fix: fix omit option by @Yisaer in #3256
- fix(onnx): type check problems by @ngjaying in #3257
- fix(transform): fix trans datafield for list by @ngjaying in #3244
- feat(prom): support connection status by @ngjaying in #3250
- fix: fix cast security issue by @Yisaer in #3243
- ci: CI pipeline for onnx by @578223592 in #3258
- docs: fix resource path by @ngjaying in #3259
- fix: fix tracer function by @Yisaer in #3260
- chore: downgrade go-ora by @ngjaying in #3261
- chore: enable x509negativeserial by @ngjaying in #3265
- fix: load connection props for stream by @Yisaer in #3266
- fix: replace props when update rule by @Yisaer in #3268
- fix(io): clean up io ping by @ngjaying in #3267
- fix: fix websocket wg by @Yisaer in #3272
- fix: fix conneciton drop by @Yisaer in #3264
- refactor: revise project operator field name by @Yisaer in #3274
- fix(conn): ping fixes by @ngjaying in #3273
- build: Dockerfile-alpine-python and Makefile build by @vkaramanis in #3271
- refactor(rest): convert to byte collector by @ngjaying in #3275
- feat(format): support urlencoded format by @ngjaying in #3276
- docs: add doc for yaml import/export by @Yisaer in #3278
- fix(docs): remove duplicate entry by @ngjaying in #3277
- feat: support trace strategy by @Yisaer in #3284
- feat: support trace projectset by @Yisaer in #3286
- chore: fix sql query by @ngjaying in #3282
- docs(cookbook): add over clause examples by @ngjaying in #3280
- fix: batch/window op support dynamic trace by @Yisaer in #3287
- test: add onnx ut by @ngjaying in #3281
- refactor(node): extract process start/end hook by @ngjaying in #3285
- refactor(trace): move trace into common func by @ngjaying in #3288
- feat: support cpu profile api by @Yisaer in #3279
- feat(trace): support trace source by @ngjaying in #3289
- refactor(trace): unify trace context init by @ngjaying in #3290
- feat(trace): cache op and tests by @ngjaying in #3292
- feat: write panic stack in log by @Yisaer in #3295
- feat: revise plan explain info by @Yisaer in #3294
- feat(trace): support more nodes by @ngjaying in #3296
- fix: replace props when import data by @Yisaer in #3297
- feat: support use bypass to rewrite sql by @Yisaer in #3299
- fix(trace): local trace wrong content by @ngjaying in #3300
- fix(mqtt): should set client id by @ngjaying in #3303
- fix(state): clean topo when stop by EOF by @ngjaying in #3304
- fix(portable): remove nng recv size limit by @Yisaer in #3306
- fix: fix import connection configuration by @Yisaer in #3308
- fix(conn): allow to exit wait by @ngjaying in #3307
- feat(portable): plugin error message for func by @ngjaying in #3305
- fix: fix decode schema by @Yisaer in #3314
- fix(io): fix http endpoint by @Yisaer in #3319
- fix(test): fix trace fvt by @Yisaer in #3316
- fix(sql): dial return ping status by @Yisaer in #3318
- fix(video): fix format conf conflict by @ngjaying in #3320
- fix(neuron): remove ping by @ngjaying in #3321
- fix(planner): decode for pull byte source by @ngjaying in #3323
- fix: fix connections export by @Yisaer in #3324
- fix: fix connection export format by @Yisaer in #3325
- feat(http): support binary bodyType by @ngjaying in #3326
- fix: fix bump3 read sql configuration by @Yisaer in #3327
- fix(encrypt): sequential encryption problem by @ngjaying in #3328
- fix(rest): dynamic props by @ngjaying in #3329
- chore: update contract ver by @ngjaying in #3331
- fix(neuron): no error for recv timeout by @ngjaying in #3332
- fix(node): avoid error loop by @ngjaying in #3333
- fix: fix connection notify by @Yisaer in #3335
New Contributors
- @InventiveCoder made their first contribution in #2718
- @dovholuknf made their first contribution in #2603
- @Rookiecom made their first contribution in #2978
- @vkaramanis made their first contribution in #3271
Full Changelog: 1.13.0...v2.0.0