forked from netidx/netidx
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathCHANGELOG
1309 lines (934 loc) · 46.7 KB
/
CHANGELOG
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
* 0.24.2
- switch to workspace dependencies and update dependencies
- trim pools in the entire tree
* 0.24.1
- prune over large recorder pools after experiance in production
* 0.24.0
- rpc client constructor is no longer async
- implement a configurable subscription timeout in the rpc client
* 0.22.24
- don't spam the keychain with requests for cert passwords we've
already asked for
- add a mechanism to populate passwords for certs without consulting
the keychain or calling askpass
* 0.23.4
- add extensive anyhow context information to the recorder
* 0.23.3
- fix a bug in the way netidx-archive was interpreting index
lengths. It could cause suprious log errors, as well as false
positive index hits that would later need to be filtered at
additional expense.
* 0.22.23
- implement pack for arbitrary sized arrays
* 0.22.22
- fix a bug in pack that would cause decoding an empty length wrapped struct to fail
* 0.22.21
- fix multiple bugs unpacking ArrayString
* 0.23.2
- add *channel::*::Batch::len method
* 0.23.1
- simplify the accept api. Sorry semantic versioning.
* 0.23.0
- channel::Listener::accept and channel::Singleton::wait_connected
were not cancel safe. This is now fixed but it required a small api
change, hence 0.23.
* 0.22.20
- implement convert Chars from CompactString
* 0.22.19
- implement pack for ArrayString and ArrayVec
* 0.22.18
- eliminate block_in_place from the netidx crate so that netidx can
be used on the current_thread tokio runtime. This also applies to
netidx-protocols, but not netidx-archive or netidx-container
- fix a memory leak that effects long running publishers that serve a
lot of different clients. The hashconsing of connected clients was
not removing unused sets
* 0.22.17
- implement pack for NaiveDateTime and NaiveDate
* 0.22.16
- remove unecessary Sync requirement from pool
* 0.22.15
- implement pack for CompactString
* 0.22.14
- implement pack for btreemap and btreeset
* 0.22.13
- add extended auth hook to publisher, allowing the registration of a
function that can make a final decision on authorization after the
traditional netidx authentication and authorization steps have been
completed
* 0.22.12
- improve error message when a recorder timestamp fails to parse (include the failing timestamp)
* 0.22.11
- reduce lock contention on large recorders
* 0.22.10
- add Dval::strong_count
* 0.22.9
- add Subscriber::is_subscribed_or_pending
* 0.22.8
- more flexible substitution in recorder script args
* 0.22.7
- subscribe_interal shouldn't have been public. Sorry!
* 0.22.6
- fix a race condition in channel registration in subscriber
* 0.22.4
- add Subscriber::subscribe_updates, subscribe_nondurable_updates,
subscribe_nondurable_one_updates. These methods allow registering
for updates as part of the subscription process to avoid any race
in receiving values.
* 0.22.3
- add Publisher::events_for_id, that does the same thing as events,
but only for a specific id.
* 0.22.1
- fix a memory leak in subscriber that was triggered by lots of
resubscriptions.
- implement pack and poolable for indexmap and indexset
* 0.22.0 netidx
- start using cargo workspaces to manage versions hence the big bump
to harmonize everything
- fix a performance regression in tls due to a broken read_buf
operation in tokio. This was slowing reads down 50x over the
baseline.
- optimize packed buffer decoding with a custom buffer
implementation vs BytesMut
- optimize varint decoding
- aside from the regression, which was crushing performance,
throughput is now 20% better
- fix a bug in resolver_client::write_client that caused it to
always write the first publish operation twice.
- handle additional rare republish cases in
resolver_client::write_client
* 0.20.3 netidx-tools
- port the container server to windows
* 0.18.1 netidx-archive
- fix a date overflow when seeking backwards with an empty current file
* 0.18.2 netidx-derive
- Check in the proc macro that no tag is used more than once
* 0.18.1 netidx-derive
- add an attribute #[pack(tag(n))] that allows explicitly specifying
the on the wire tag of an enum variant. If tag is specified on one
variant case then it must be specified on all of them.
* 0.19.18 netidx
- reduce the wait time between resubscription attempts
* 0.20.1 browser, protocols
- fix borrow error in the browser
- reduce log verbosity in rpc
* 0.19.17 netidx
- fix a bug where a dead resolver server could cause publishing to
take a long time (even if at least 1 resolver in the cluster is
still alive)
* 0.20.1 protocols and deps
- remove the lock around rpc procedure calls, it is no longer
necessary with the new calling convention
* 0.20.0 protocols and deps
- change the rpc calling convention to fix a race condition where
the publisher is still publishing arguments when the subscriber is
created. Now only one published value is required to call an
rpc. The arguments are sent as a list of pairs to procedure
instead of as individual argument sets. The rpc server still
supports the old calling convention.
- RPC CLIENTS >0.20 CAN'T CALL RPC SERVERS <0.20. Older clients can
still call newer servers.
* 0.19.22 tools archive
- the resolver server now runs on windows in a limited capacity, basically
tls or kerberos mod only
- fix building netidx-archive on windows
* 0.19.21 tools
- pull in new archive
* 0.19.15 archive
- make channel slack configurable
* 0.19.20 tools
- fix daemonizeing the resolver server (again)
* 0.19.16 netidx
- resolver server config fixes for tools
* 0.19.15 netidx
- change the way we use certificates in tls mode
- the cn is still the string passed to id map for permissions
- subjectAltName is expected to be a dns name with exactly 1
entry, this is used as the server name
- this should be backwards compatible with what we were doing
before, because rustls always required subjectAltName to be
specified. So the main change is the CommonName can be anything
now.
- implement additional id mappers, specify id_map_type in the config
- DoNotMap: don't map ids at all, just use the raw string. In the
case of kerberos this will be the user principal name of the
user. In the case of tls this will be the common name on the
certificate. In the case of local this will be the uidnumber of
the user.
- Command: The previous behavior, id_map_command will be called
to translate the raw user into a set of users/groups. This is
the default
- Socket: The id_map_command string must be specified and should
be the path to a listening unix domain socket. The resolver
will connect to the socket and write the user name followed by
a newline. It will expect the server to write the response in
the same format as /usr/bin/id and then close the socket.
- implement id_map_timeout in the config which is the number of
seconds to cache id map entries before they must be done
again. The default is 1 hour.
* 0.19.14 netidx
- public tls function to precache key passwords in the keychain
- trim cr and lf from passwords read from askpass
* 0.19.13 netidx
- more config file path exposure
* 0.19.12 netidx
- make some more functions public
* 0.19.11 netidx
- make the tls module public
* 0.19.10 netidx
- move a bunch of path related functions into file::Config from
Config.
* 0.19.9 netidx
- make the client config file types public
* 0.19.19 tools
- fix bug that caused daemonized resolver server and activation
server to fail.
* 0.19.5 protocols 0.19.8 netidx
- add more context to channel errors
- fix a race in connect_singleton
- add publish_with_flags_and_writes to eliminate a race between
publishing and registering a write channel.
* 0.19.14 archive
- don't call get if the file exists
- don't hold the lock while opening the archive file in LogfileCollection
* 0.19.13 archive
- further minor optimizations
- reimage should also take a filter
* 0.19.12 archive
- cache open archive files for some time
- only reindex a shard's directory when it is necessary
- faster index reading and writing
* 0.19.11 archive
- derive debug and clone on the recorder_client::Client struct.
* 0.19.10 archive
- fix a bug in the oneshot rpc. It now returns results by shard with
a pathmap to interpret the results by shard.
- implement disjointness checking for globset. Use it to not start
oneshot or publisher tasks that can never match the user's filter
* 0.19.9 archive
- don't compress the index for an additional 2x and a reduction in
complexity.
* 0.19.8 archive
- introduce index headers to batches. the index header contains a
list of all the ids in the batch. now you can read_deltas with a
filter hashset of ids you are interested in and it will
automatically skip decoding batches that didn't contain any of
them. Factor of 3.5x faster when looking for a specific thing that
isn't that common in a large compressed archive.
- fix an O(n^2) length check in oneshot for an 80x improvement on
reading a 150 MB compressed archive. oops.
* 0.19.7 archive
- big netidx-archive refactor. now shards can be represented
internally as well as across processes. There are a lot more
reasons to shard than record performance (e.g. playback latency is
a big one), so it makes sense that the recorder should be able to
shard using internal tasks on a single machine. The cluster
mechanism is still available, but is meant to be used when you are
sharding across multiple machines.
* 0.19.6 archive protocols
- lots of fixes for timing and clustering
- cluster moved over to pack. technically this broke semantic
versioning.
- add a pack implementation for Bound
* 0.19.5 archive
- fix bug in load_file_header
* 0.19.4 archive
- allow tuning of the parallel window size
* 0.19.3 archive
- The container server lost the ability to compress it's
database. This is because sled hasn't been updated in ages and
depends on an ancient version of zstd. If it gets updated I will
readd that functionality.
- Add transparent zstd decompression to the recorder. The archive
files can now be compressed with netidx record-client compress and
it will decompress the data as needed.
- Add a bunch of command line tools for working with archive files
- netidx record-client dump
- netidx record-client verify
- netidx record-client compressed
- netidx record-client compress
- Fix a number of bugs in the recorders
* 0.19.6
- don't spam info messages when republish fails
- pool the republish Vec
- the browser should take the configured default_auth into account
- properly check the exit status of commands in the recorder
* 0.19.5
- fix a bug in subscriber that could cause the last messages from
a disconnected publisher to be lost
- browser force new netidx version
- add a command line tool to query the recorder's oneshot facility
* 0.19.4
- fix a bug in subscriber that caused voluntary shutdowns
to add the ip to the recently failed list.
* 0.19.3
- fix a bug in PREFER_LOCAL that could prevent subscribing
* 0.19.2
- implement new publish flag FORCE_LOCAL, which overrides USE_EXISTING
but is otherwise the same as PREFER_LOCAL.
* 0.19.1
- fix a bug in PREFER_LOCAL
- introduce a new replay mode in the recorder "oneshot" that lets
you just call an rpc with a time range and get data.
* 0.19.0
- fix PublisherBuilder to be more ergonomic, sorry for the churn
- add a parameter `slack` that together with the flush timeout can
be used to properly manage the slow client problem.
* 0.18.3
- add new publish flag PREFER_LOCAL, which will cause subscribers to
try addresses in the following order.
- 1st addresses that are on the local computer
- 2nd addresses that are on the same subnet as the local computer
- 3rd all other addresses
- swap out get_if_addrs crate for the maintained if-addrs crate
* 0.18.1-2
- add features to BindCfg for NAT traversal. You can now run publishers
and resolver servers behind a NAT and DNAT forward the port.
- Fix a bug in TLS, sometimes (rarely) it is required to call flush on
tls wrapped sockets, because they are after all buffer io. Oops. Thank
you weird aws nat thing for helping to find this bug :-)
- 0.18.2 just removes some dbg statements I left in. Sorry!
- browser sort table rows and columns by their numeric value if they parse
as integers.
- recorder, stop polling dead subscriptions after trying for a while, increase
the batch buffer size in case the recorder thread is temporarially delayed.
* 0.18.0
- Change pre allocated packed data structures to avoid TooBig errors
and still allocate safe quantities of memory.
- change move the core of the recorder to netidx-archive
- the recorder can now rotate it's log file periodically, and can
serve a directory of log files transparently to clients. There are
optional shell hooks the archiver can call out to announce new log
files, list log files, and get log files from some kind of long
term archive.
- the recorder now uses a config file instead of command line
arguments, it was just getting too complex to manage the
arguments. running with --example will print an example
config. Sorry for the breakage.
- the recorder archive format is unchanged, but the file layout is
different. The recorder uses a directory, which it will create if
it doesn't exist. The current log file is always called
"current". Historical log files are called the rfc3339 timestamp
when they ended. Again sorry for the breakage.
- update to biflags 2.0.
- implement serialize and deserialize for pooled
- change the websocket proxy protocol to expose batching
- implement poolable for triomphe::Arc
- fix overflow in pack decoding found in fuzz testing
* 0.17.4
- ignore pings in netidx-wsproxy
- add serialize/deserialize to netidx-netproto::value::Typ
* 0.17.3
- add a pack implementation for HashSet
- don't put empty objects back in pools
* 0.17.2
- implement debug on Publisher
- change the websocket proxy protocol a bit to make it possible to
have multiple in flight rpcs.
- Allow rpcs to complete out of order, and don't wait for them to
move on
- Fix trait requirements for Packing HashMap
- implement a new toplevel Pack directive #[pack(unwrapped)]
which prevents length wrapping the type it is applied to.
Also the Pack macro now validates attributes.
- websocket-proxy; expose the warp filter that runs the proxy so
it can be combined into a bigger warp api if desired.
- change netidx-archive to use the better maintained memmap2 crate
instead of mapr
* 0.17.1
- permissions now allow dynamic params. e.g. { "/foo/bar/$[user]":
{ "$[user]": swlpd } } would give user 'eric' swlpd in
/foo/bar/eric. { "/foo/bar/$[group]": { "$[group]-admin": swlpd,
"$[group]": sl } } would give members of group 'users' sl in
/foo/bar/users, and members of group 'users-admin' swlpd in
/foo/bar/users.
- add a new tool and library, netidx-wsproxy, a websocket proxy to
publisher, subscriber and rpcs. Including an example javascript
interface.
* 0.17.0
- netidx_derive::Pack implement #[pack(other)] attribute for
enums. Does the same thing as #[serde(other)], if the enum tag
isn't know will decode as the enum #[pack(other)] is placed on.
- fully propagate user and group info from the resolver through to
the publisher. Now for all authentication mechanisms, the
publisher will be able to return a UserInfo struct that contains
the name, primary group, and groups of a connected user. This will
only work if all components are running 0.17 or later, previous
versions will work, but won't provide user info.
- implement pack for three tuples, and four tuples.
- update the browser to the latest version of gtk-rs, and make use
of the finally upstreamed gktsourceview4 subclassing
* 0.16.0-9
- Fix a bug in subscriber that could cause pushback not to work at
very high message rates
- implement better batching in channel recv. Pack channels are now
capable of sending 1 GB/s of u64s locally on a 1260P, and the
latency of sending 1000 u64s to and from a receiver on the same
host is 39us in the 90th percentile.
- implement try_recv, try_recv_one in both kinds of channel
- add a pack implementation for usize, Result, Arc, Box,
anyhow::Error, atomic_id, smallvec, and enumflags2
- introducing netidx-derive, a crate for netidx derive macros. The
first of which is #[derive(Pack)]. Pack is netidx's native binary
encoding format. Initially it was implemented by hand, but now it
can also be implemented using the derive macro. Happy packing!
- most existing protocols in netidx-netproto changed to use the proc
macro. With the exception of Value, which does some custom stuff.
- a couple of convenience methods in value and rpc
- change publisher::{publish, publish_with_flags, update,
update_subscriber} take Into<Value> instead of a direct
value. Implement try_ variants of update and update_subscriber
that take TryInto<Value>.
- call_rpc can now take any TryInto type as an argument
- I may have slighly broken semantic versioning here, but 0.16 just
released, so I don't think it's a huge deal.
* 0.16.1 and 2
- improve the safety of len_wrapped_decode
- add a pack implementation for UUID
- remove krb5_iov as a default feature
- make clientparams cloneable, and make load take a reference
instead of an owned value.
* 0.16 all
- rename Subscriber::durable_subscribe -> Subscriber::subscribe
- rename Subscriber::subscribe -> Subscriber::subscribe_nondurable
- rename Subscriber::subscribe_one -> Subscriber::subscribe_nondurable_one
- protocol version 3 changes the wire format to introduce additional
extensibility. Unfortunatly version 3 isn't backwards compatibile
with version 2. I decided to do this now, as it may be the last
chance.
- Introducing netidx channels. Bidirectional message channels that
function like tcp sockets, except the address is a netidx path
- Major refactor of publisher and subscriber to completely eliminate
blocking awaits from their respective message handling loops.
* 0.15.1 core netidx
- expose the inner u64 in atomic_id for ffi bindings
- make DesiredAuth Serializable/Deserializable for ffi bindings
* 0.15.1 browser
- fix a crash when creating progress bars. sorry ...
* 0.15 all
- skipping ahead to 0.15 because tls is a big step forward.
- add a new authentication mechanism TLS, for using transport layer
security for authentication and encryption.
- using rustls
- full mutual authentication is REQUIRED. Later I may add PublicTls
for server -> client only authentication. We'll see.
- The protocol changes are backwards compatible, but obviously old
publishers, resolvers, and subscribers will not understand tls.
- At the moment it's all or nothing at the resolver level. You can't
do kerberos AND tls on the same resolver. There's no reason this
couldn't be done, however I don't need it right now, and I wanted
to release the MVP.
- The book is updated for tls in all the relevant places
- RPCs are reworked on the server side and a bit on the client side.
The new api is a significant improvement IMHO, but it will break all
rpc servers *sorry*. However the protocol did not change significantly,
so existing rpc clients can call new rpc servers, and new rpc clients can
call old rpc servers.
The only thing that did change about the rpc protocol is that there is now
only one way to get a reply to your procedure call, by using write_with_recipt.
That is what the rpc client always did, so it will continue to work, however if
you were manually calling rpcs and depending on the procedure value to update it
won't do that anymore.
* 0.12.7 browser
- Use the new bscript functionality to greatly improve tracing. Load
existing traces when opening the expression inspector. Use the
bscript vm's timestamps.
- Make tracing a menu toggle per window, which is on by
default. Tracing is fairly light weight, but if you have a
debugged view that you want to run a little bit faster you can
turn it off.
* 0.14.0 bscript
- record initialization events
- add a bunch of new functions to the debug context api
- change the types given to watches
- timestamp events when they happen
* 0.12.5 tools
- Fix a bug in the archiver that would cause it to hang on to idle
sessions if any client was using any session. Now it will drop
sessions that no client is using after 1 minute, as was the
original intention.
* 0.12.6 browser
- Fix paned widget is jumpy when moving the mouse until manually
moving the boundry under some gtk themes
* 0.12.4 netidx
- Fix an issue with the resolver server that could result in
leftover paths from a dead publisher being associated with a new
publisher when using local authentication.
* 0.12.5 browser
- Fix crash that could occurr due to trying to get the adjustment of
a destroyed scrolled window.
* 0.12.4 browser
- put the breadcrumbs in a scrolled window so that they don't force
the browser window size to increase when viewing a deeply nested
path.
* 0.12.3 netidx
- add a helper to publisher required by netidx-dbus
* 0.12.3 browser
- Greatly increase the utility of the event log window in the
expression inspector. It now shows only actual events. It shows
the event that happend, the expression the received the event, and
the value emitted by the expression.
- Fix some cases where degenerate bscript code could hang the
browser. It's still possible, but it's much harder now.
- Improve the performance of normal bscript execution by only
recording debug events when the editor window is open.
* 0.12.2 browser netidx
- Fix some borrow error crashes that could occurr when a publisher
is hung while accepting a write generated by a view save and the
user tries to navigate away.
- Fix a bug that could cause rpc calls to silently fail in the
background.
- Don't hang the entire async back-end if waiting for a file save, a
save to netidx, or a table resolution.
- change the sematics of many bscript operations such that now they
do not produce a result until all of their arguments have been
resolved. This prevents spamming partial results, and is probably
what everyone expectes to happen when they write sum, product,
divide, etc. With the exception of any, all bscript primitives
should now function this way.
- Eliminate all the unsafe code in bscript stdfn. It was safe IMHO,
but the minor performance win was just not worth the risk.
- minor improvement to the error messages produced by subscriber
when it fails to subscribe because the connection to the publisher
died.
* 0.12.2 tools
- separate the tools lib from tools so external users don't need to
pull in all of tools deps in order to use the common command line
arguments
* 0.12.1 netidx
- add support for aliases in publisher and subscriber. Aliases allow
publisher to publish the same data under multiple names without
the overhead of publishing the data twice. The only overhead is an
extra name in the resolver, and the publisher. Subscriber needed
to be aware of this, so if you plan to use aliases you must
upgrade your subscribers first.
Subscribing to an alias pointing to an existing subscription is
functionally the same as subscribing to the same path twice, you
just get a clone of the existing subscription.
* 0.12.0 all components
- fix a resolver client bug that prevented local publishers from
republishing after the local resolver was restarted.
- work around some gtk themes (breeze) causing data not to update in
the browser unless the user forces events to happen. Breeze still
does strange things to gtk treeview, but at least it displays
updates properly now. I guess libadwaita can't come soon enough.
- add the ability to publish aliases. Aliases are very lightweight
as they do not duplicate any of the internal data structures in
either the publisher or the subscriber. Subscribers older than
0.12.0 may behave strangely if they subscribe to the same value
twice through an alias, therefore if you plan to deploy aliases
you should upgrade all subscribers to 0.12 or later first.
* 0.11.1 tools
- fix building the tools on windows
* 0.11.0 all components now go to 11
- introduce protocol version 2, not backwards compatible with
version 1. Sorry
- vastly compressed resolves, resolving a lot of things should use
much less bandwidth now
- fix GSSAPI negotiation. This is why v2 is incompatible with v1,
the change was just too large to work around
- Add local authentication mechanism, and make authentication
mechanisms extensible so we can add more in the future without
another protocol version
- local machine resolver servers with local authentication
mechanism. For dev workstations. For desktop apps using the
browser
- container server is now a library (as well as a server), it's a
good basis for some kinds of applications
- various long standing resolver server bugs fixed (removing default
publishers, and a list bug)
- major browser improvements, new widgets, bug fixes, new bscript
builtins
- resolver server and client configuration files separated
- updated book
- all browser widgets documented
- updated administration and quick start sections for 0.11
- reorganized examples
* 0.10.5 browser, netidx, netidx-tools, bscript, protocols
- bump dependencies for all modules
- implement context sensitive completion in the browser expression
inspector windows. It is able to suggest completions for built in
functions as well as variables that are in scope. Use CRTL+Space
to trigger it.
* 0.10.4 netidx, netidx-tools, bscript, protocols
- use cross-krb5 instead of gssapi and winapi directly
- fix build on mac os
* 0.10.3 netidx-tools
- fix building on windows, which has been broken for some time due to
new tools that require unix, sorry!
* 0.10.0-0.10.2
- Add arrays to the value datatype. This has some pretty big
implications,
- Values are now compound structures, and could be used to
represent many different kinds of data. e.g. records, matrices,
trees, maps, just to name a few. It's still recommended that
users publish additional simple values instead of making
everything a compound value, however there are cases where
arrays really make things a lot clearer.
- The shell tools and bscript now share a parser/pretty printer,
and as such the shell tools can now parse and print arrays just
like any other value. The syntax for an array value is [ v0, v1,
... vn ], where each value is type prefixed.
- bscript can now handle arrays, and the view definition has been
updated to use them where they make sense.
- old publishers can talk to new subscribers, and new publishers
can talk to old subscribers as long as they don't use arrays. In
case they do, the old subscriber should not crash, however it
won't be able to read the array data.
* 0.9.1 bscript, tools, browser
- fix the "do" bscript function which was broken, and fix it's
semantics to match documentation (return the value of the last
expression instead of nothing)
- fix a bug in the container that could have resulted in subtrees
being erroniously deleted. If the user deleted a nested root, the
container might not have recognized that the subtree had a parent
root, and would then have deleted it. This has been corrected.
* 0.9.0 netidx, netidx-tools, netidx-browser:
- Subscriber uses much less memory, a durable subscription now costs
about 2x a publish of the same value, which is a lot better than
it has been in the past.
- Subscriber durable resubscriptions reworked, now we will
resubscribe in batches of up to 100K instead of just unleashing a
horde of resubscriptions if the publishers get
behind. Resubscribing to large numbers of things (e.g. 10 million)
is now much smoother.
- Subscriber message rates are about 24% faster unencrypted, and
about 12% faster encrypted on x86_64 (Skylake). 18% faster
encrypted on OpenPOWER.
- Publisher API reworked unfortunatly these are BREAKING
changes. The rework is meant to solve three problems with the
previous api.
- most serious, you had to remember to call flush after updating
values, if you forgot, nothing would be sent. Now there is a
structure marked with must_use so you can't accidentially forget
to flush updates.
- It wasn't possible with the old api to have concurrent tasks
using the same publisher but retaining control of their own
batching. This meant that it was sometimes necessary to create
separate publishers within the same process just to get control
of the grouping of updates (e.g. in the recorder).
- The use of SocketAddr as a unique id for a client was dangerous,
it has been replaced everywhere with a unique id.
- The API change had the unintended, but welcome, consequence of
reorganizing the code and improving performance by a fair bit
- 32% faster message rates on OpenPower (POWER 9), I think due
to decreased use of atomic data structures that are not well
optimized for the platform. Now POWER 9 performance lines up
much better with other benchmarks vs x86_64 and ARM64.
- 17% faster message rates on ARM (A72) and x86_64 (Skylake)
- 20% less memory per published value
- Publisher advertisements, a middle way between a sparse namespace
and a fully published one. Uses less memory than a full publish
but looks identical to subscribers.
- Paths are now based by ArcStr instead of Arc<str>, this saves 1
word per path, and makes Path::clone slightly cheaper. This can
add up to a significant memory savings in the resolver server or a
large publisher/subscriber (e.g. 10 million paths costs 800 MiB
less after this change).
- Documented the rpc module.
- the rpc protocol now allows procedure arguments to be specified
multiple times. The server side will receive a list of all values
specified for each key.
- the rpc client now includes internal synchronization to prevent
errors when the same procedure is called concurrently from the
same subscriber instance.
- fix: in bscript multiple concurrent rpc calls to the same function
could result in return values getting mixed up or duplicated.
- added CALL command to call an RPC from the subscriber command line
tool.
- new tool, container, a persistant, bscript enabled, value
store. Kinda like a distributed spreadsheet. Kinda like a nosql
database server. Kinda just it's own thing. Using sled for
persistant storage.
- the bscript call function now takes a trigger argument. The rpc
will only be called when the trigger argument updates, or once
initially if the trigger has a current value. This allows much
easier use of the call function in event handlers.
- Fix additional resolver server bugs related to removal of default
publishers. Due to protocol changes 0.9 publishers require a 0.9
resolver server if they use the default publisher feature. Old
publishers will still work with the 0.9 resolver server, however
if they use default publishers it is recommended to recompile
against 0.9.
* 0.8.1 netidx, netidx-tools:
- fix a bug in the resolver server which would cause it to hang on
to default publishers until the process is restarted even if the
publisher itself timed out or explicitly sent clear. This bug was
caused by the sharding implementation, and would effect the