CHANGELOG
Michael MacFadden edited this page Jul 23, 2021
·
29 revisions
This page outlines the changes made with each Convergence Release.
- 1.0.0-rc.12 (Jul 23, 2021)
- 1.0.0-rc.11 (Jul 13, 2021)
- 1.0.0-rc.10 (Jul 12, 2021)
- 1.0.0-rc.9 (Jun 30, 2021)
- 1.0.0-rc.8 (May 23, 2021)
- 1.0.0-rc.7 (Jul 07, 2020)
- 1.0.0-rc.6 (May 16, 2020)
- 1.0.0-rc.5 (Jan 19, 2020)
- 1.0.0-rc.4 (Jan 03, 2020)
- Logging documentation (#233): A section for client and server logging was added to the Developer Guide.
- Run containers as non root (#252): The Convergence containers have been updated to run as non-root users to support docker container platforms that don't run as root.
- Settings link for offline / maintenance mode (#250): The banner indicating a domain is offline or in maintenance mode has been enhanced with a link to the settings where the domain can be put back on line.
- Unable to play back StringSpliceOperations (#253): A string constant in the StringSpliceOperation was fixed allowing playback to function.
- HistoricalModel.playToTime doesn't work for first version (#249): Playback to the time a model was created (before the first operation) is now possible.
- ConvergenceDatabaseInitializer connection logic (#251): The initial connection retry logic for connecting to OrientDB on server initialization was fixed to avoid a spurious exception.
- SideNav Background Improvement (#254): The CSS for the SideNavigation menu background was fixed in the production build.
- Model playback of noOped string splice fails (#248): Playback of noOp'ed String Splice operations will null deletedVal's no longer causes an exception.
- Model data fields not shown in query screen (#246): The admin console now properly render data columns in the Model screen.
- Domain Database Upgrade Links fixed (#247): The links for upgrading and completing domain database upgrades now take the context root into account.
- RealTimeString.splice() (#237): A splice method was added to RealTimeString to allow atomic replacement of characters.
- HistoricalModel.playToTime() (#240): Developers can not play to a time, in addition to a version, in the historical model.
- ConvergenceDomain.serverTime() (#241): A method was added to the ConvergenceDomain class to get the servers current time.
- Collection Rest API User Encoding (#235): The Collection REST API was updated to use the new DomainUserId encoding.
-
IConvergenceOptions.handshakeTimeout renamed (#239)
(BREAKING)
: IConvergenceOptions.handshakeTimeout was renamed toconnectionRequestTimeout
.
- Render user type for model / collection permissions (#236): The admin console now indicates if users are anonymous or admin users in collection and model permissions.
- Domains now in maintenance mode after upgrade (#242): Online domains are not put in maintenance mode after a schema upgrade.
- Incorrect reference transformation (#244): The server was improperly transforming reference values against unnecessary operations.
- AlterProperty Schema Delta fails (#232): Schema deltas altering a database property with a linked class now work correctly.
- Domain not ready after upgrade (#243): If clients were continually connecting to the server during an upgrade, the server would not come back online.
- Admin console does not properly decode model permissions (#234): The admin console now properly decodes and renders model permissions.
- ModelPermissionManager.setAllUserPermissions doesn't set permissions (#238): The setAllUserPermissions method once again properly sets permissions.
- Open Source the Dev Guide (#68): The Convergence Developer Guide has been open sourced.
- Migrate Dev Guide to MkDocs (#45): The Convergence Developer Guide was ported from GitBook to MkDocs.
- Migrate Dev Guide to MkDocs (#163): A section on Docker was added to the Developer Guide.
- Server configuration documentation (#162): The server's configuration was documented and added to the Dev Guide.
-
Activity types (#228)
(BREAKING)
: Activities now have a user defined type that can be used to categorize them. -
Activity Permissions (#161)
(BREAKING)
: Activities now have permissions to control who can join them, remove them, etc. - Activity lurking (#229): Users can now join activities without showing up as a participant.
- Simplify connection protocol (#219): The handshake and authentication messages were consolidated to make connecting more efficient and less complex.
-
Make collection auto creation configurable (#139)
(BREAKING)
: The auto creation of collections when creating models can now be enabled/disabled. - Make reconnect token valid time configurable (#138): The time a session token for the REST API remains valid is now configurable.
- Offline and Maintenance modes (#205): Domains can now be put in maintenance mode or offline such that users can not connect.
- Domain id is now editable (#214): A domain's id can now be changed when it is in offline mode.
- Model resource id is now an integer (#64): The protocol was updated to use an integer instead of a string for efficiency.
- Resource id approach for Activities (#65): Activities now use a resource id concept similar to models to make the protocol more efficient.
- Call credential callbacks on demand (#222): The callbacks in the connect methods that get credentials are now called as needed instead of only once.
- Better ConnectionFailed info (#221): The ConnectionFailed event was enhanced with an error message describing why the connection failed.
- Ability to not reconnect on first connection (#178): The client can be configured to not reconnect if the very first connection fails.
- Handle undefined values in model API (#179): The Realtime Model API now has several options for dealing with undefined values.
- Auto focus login screen (#231): The username field in the Admin Console's login form is now auto focused.
- Add Activities to Console (#227): Activities are now a first class citizen in the Admin Console along side the other features.
- Offline indication (#223): The admin console now lets the user know when the server is offline.
- AntD 4.x (#206): The admin console was upgraded to AntD 4.x.
- Domain Database Upgrade initiation (#171): Domain databases can now be upgraded from within the Admin Console.
- Properly close WebSocket (#218): The Convergence Server now properly closes the WebSocket when the client disconnects.
- Clean up orphan sessions(#213): The server now cleans up the sessions of orphan clients.
- Missing DataValue index(#199): A missing index (by model) for the DataValue class was added to increase model deletion speed.
-
Namespace REST API ignores filter(#211): The
/namespace
API now properly obeys the filter query parameter. - User namespace not deleted (#212): The users private namespace is now properly deleted when the user is removed.
- Disconnect clients on auth failure (#140): The server now aggressively disconnects a client whose authentication failed to release resources.
- Handle client not responding with model auto create data (#181): The server now properly handles a client that doesn't respond with auto create data when opening a model.
- Invalid setTimeout for session check (#216): The console now obeys the maximum value for setTimeout when checking session validity.
- Activity.Events.STATE_DELTA fixed (#230): The constant value of Activity.Events.STATE_DELTA was corrected.
- Historical model playback timestamp fixed (#220): When playing a historical model backwards, the timestamp is now correct.
- Initial Model Fingerprint (#70): The protocol was updated to support model fingerprinting to allow better resumption of offline syncing.
- Indicate anonymous auth is disabled (#177): The server and client will now indicate that anonymous authentication has failed because it is disabled.
- Auto upgrade convergence schema (#170): The convergence schema will be automatically updated when the server starts.
- Semantic version schema manager (#58): The schema management and migration module has been upgraded to work with a semantic versioning strategy.
- Updated rollup version (#156): Upgraded rollup to remove deprecation warnings.
- Display convergence schema version (#168): The admin console now shows the convergence database schema version.
- Display domain schema version (#169): The admin console now shows the domain database schema versions.
- Remove distribution designation (#173): Remove the deprecated distribution label in the homepage.
- Properly clean up deleted users (#194): When domain users are deleted, references to them in groups, permissions, chats, etc. are now removed.
- Model Query Projection for models without field (#196): When using a query projection, models that don't contain the field are now handled.
-
ConvergenceDevSever startup timeout (#195): The startup timeout for the dev server now obeys the
convergence.server-startup-timeout
config. - Fix model error code on force close. (#180): The error code when a model closes after an error now is model_closing_after_error
- Handle invalid JSON when creating models (#197): The admin console now properly handles invalid JSON in the model creation dialog.
- Edit Collection title (#202): The title of the edit collection dialog has been corrected.
- Disallow empty model ids (#198): Models can no longer be created with an undefined id.
- Properly color domain status icon (#160): The domain status icon is now properly colored on the domains page.
- Domain User auto select disallows invalid users (#207): The control used to select domain users no longer allows the entry of an invalid username.
- Namespace auto select disallows invalid namespace (#208): The control used to select namespaces no longer allows the entry of an invalid namespaces.
- Convergence user auto select disallows invalid user (#209): The control used to select convergence users no longer allows the entry of an invalid users.
- Presence for non-existent user (#204): Fixed subscribing for presence for a user that does exist.
- LocalIndexReference not exported (#203): The LocalIndexReference class has been exported in the typings.
- Fix playback for no-op'ed operations (#200):Playback for operations that were no-op'ed has been fixed.
-
Fix inconsistency in permissions API. (#187):
(BREAKING)
The API for the permissions map was updated. -
Fixed model permissions lookup. (#185):
(BREAKING)
The client was updated to properly return a permissions object in all cases. - Model worldPermissions API fixed. (#183): The API for the ModelPermissions was updated to allow more natural parameter passing.
- Historical model operation error message correction. (#186): An error message was misspelled when getting the history from models.
- Upgrade to Scala 2.13 (#130): Scala was upgraded from 2.12.x to 2.13.x.
-
Align Cluster Seed Version with the rest of Convergence (#155):
(BREAKING)
The cluster seed was misaligned to the rest of Convergence. -
Move the ConvergenceDevServer into the "dev" page (#143):
(BREAKING)
Moving the ConvergenceDevServer package for clarity.
-
Migrate to standard Akka Artery ports (#142):
(BREAKING)
The default Akka ports were adjusted to match the standard remoting ports for Akka Artery. - Silence nashorn warnings (#133): The warnings from nashorn deprecation were silenced.
- Add comments to the reference.conf file (#148): Comments to document the base configuration were added.
- Implement production cluster downing (#78): The new Akka 2.6.6 Split Brain Resolved in now used for cluster downing.
- Make all timeouts configurable (#141): Remove hard coded time outs.
- Improve Akka Message Serialization (#77): The server migrated from Java Serialization to Jackson CBOR.
- Updated to Typed Actor (#131): The actor system was refactored to use the new Typed Actors.
-
New offline model synchronization events (#152):
(BREAKING)
Several events we added to allow for better monitoring of offline model synchronization. -
Remove ChatMessageEvent.sessionId (#136):
(BREAKING)
The ChatMessageEvent.sessionId was removed since messages are scoped to users not sessions. - Emit offline model status on creation (#158): A OfflineModelStatusChangedEvent is now emitted when a model is created.
- New offline model download status event (#153): A OfflineModelsDownloadStatusChangedEvent is now emitted when models are downloading.
- New offline model sync progress event (#151): A OfflineModelsSyncProgressEvent is now emitted when models are synchronizing.
- IndexDB Maximum IPC exceeded (#135): A IndexDB Maximum IPC message size exceeded error was coming form the model offline subsystem.
- Omnibus container sets Admin email as password (#144): The Omnibus Container was incorrectly using the CONVERGENCE_ADMIN_EMAIL to set the admin password.
- User roles not removed when deleting a user (#167): User roles are now removed from Convergence users when the user is deleted.
- Reference not set when shared (#149): When a model reference was shared with an initial value, that value was not set.
- REST calls return 404 (#76): Some REST calls were returning 404 when the result set is empty.
- HTTP 400 when creating a domain in an non-existent namespace (#146): When creating a domain in a namespace that doesn't exist a 400 was returned.
- Race condition creating resource ids (#147): Conflicting model resource ids could be created due to a threading issue.
- Opening model could mis-order messages (#129): If a model was opened while it was being edited, operation messages could come before the open reply.
- Can't change Convergence user's role (#132): The server was effectively ignoring calls to change a users role.
- No permissions on /config REST endpoint (#134): Any user could post to /config.
- AntD Table Key warning in Domain Members (#166): AntD was showing a console error when viewing domain members.
- Incorrect toaster when saving JWT Auth Key (#165): The toaster message was wrong when updating a JWT Auth Key.
- Incorrect toaster when saving User Group (#164): The toaster message was wrong when updating a User Group.
- Model version off by one in editor (#145): When editing a model, the version number was off by one.
- Deleting model offline throws error (#157): An error was being thrown when deleting a model offline.
- Deleting model while synchronizing throws error (#154): An error was being thrown when deleting a model that was actively synchronizing.
- Uncommitted in OfflineModelStatusChangedEvent always false (#150): The Uncommitted flag of the OfflineModelStatusChangedEvent was aways false.
- Activity.leave() should return a promise (#137): The Activity.leave() method was updated to return a promise.
- Allow searching for chats (#106): The client and server were updated to allow searching for chats.
- Upgrade Akka to 2.6.x (#91): Akka was upgraded from 2.5.x to 2.6.x.
-
Add HTTP health check endpoints (#99): A
/health
endpoint was added to the REST and Realtime APIs to facilitate cloud health checks. -
Move the /apiKey under the
/user/
path (#92):(BREAKING)
The 'apiKeys' rest endpoint was relocated under/user/
for consistency.
-
Support getting multiple chats at once (#112): The ChatService
get
,exists
, anddirect
methods have ben enhanced to allow for multiple chats. -
Rename
ReferenceChangedEvent
toReferenceSetEvent
(#120):(BREAKING)
The ModelReferenceReferenceChangedEvent
was renamed toReferenceSetEvent
. -
Chat.send()
should return meta data (#110): TheChat.send()
method now returns the event number and timestamp. -
Add joined to IChatInfo (#107): A
joined
field was added to the IChatInfo interface. -
Rename
ChannelCreatedHistoryEntry
toCreatedChatHistoryEntry
(#108):(BREAKING)
The ChatChannelCreatedHistoryEntry
was renamed toCreatedChatHistoryEntry
.
- Allow viewing chat info and events (#85): A new screen was added to allow viewing of chat info and events from the Admin Console.
- Prevent sharing / unsharing reference multiple times (#121): Both the client and server allowed a reference to be shared / unshared multiple times which lead to errors on the receiving clients.
- Convergence User Permissions ignored (#87): Both the client and server were not enforcing Convergence User Permissions.
- User should not be able to edit their own server role (#97): A user could remove their own server role which could leave a server with no admin.
- User should not be able to edit their own domain permissions (#97): A user could remove their own domain permissions which could leave a domain with no owner.
- Serialization error during model reconnect (#126): When multiple clients were reconnecting a model a Java Serialization error in Akka could occur.
- Chat Room shutdown can cause Database error (#122): The ChatActor releases the persistence provider before removing members in chat room during shutdown.
- Exception thrown on Chat mark seen (#117): The server would throw an exception when chat events were marked seen by a client.
- Server incorrectly responds to chat join request (#113): The server was responding to the GetJoinedChatsRequestMessage with a GetChatsResponse.
- Database error in UserSessionTokenStore (#104): In a distributed database, optimistic locking errors would arise when validating session tokens.
- User roles not deleted with domain (#101): When deleting a domain the corresponding user roles were not deleted, causing issues with future login.
- CORS headers left off rejected HTTP requests (#100): When an HTTP request was rejected (e.g. 404) the CORS headers were not added.
- User not set as domain owner (#96): The user that creates a domain should be set as the owner of that domain.
- Namespace permissions ignored in REST API (#95): The REST API was not authorizing users based on their namespace permissions, preventing users from seeing domains in their namespace.
-
Domain
Developer
role ignored (#93): A user that hadDeveloper
permissions on a Domain could not see that domain. - Non admins could make REST calls for UserRoles (#94): The REST endpoint for UserRoles would allow any authenticated user, instead of only admins.
- Clustered database initialization (#89): Multiple instances in a clustered environment might try to concurrently bootstrap the convergence database.
- Toasters for user operations incorrect (#88): The toasters for user operations mentioned "namespaces" instead of "users".
- Dispose of detached model references (#125): Model references are now properly disposed when their corresponding model element is detached.
- LogLevel.SILENT results in tracing (#124): Setting the log level to LogLevel.SILENT behaved as if the level was LogLevel.TRACE.
- LocalModelReference always calls unshare on dispose (#123): A local reference should only unshare on dispose if it is shared.
- Missing event for chat events marked seen (#115): No event was being emitted when the client received notification that a remote user had marked messages as seen.
- Exception in ChatService.joined() when not joined (#114): An exception was thrown when calling ChatService.joined() if the user was not joined to any chats.
- Incorrect callbacks for Object / Array iteration methods (#119): The iteration methods in RealTimeObject / RealTimeArray incorrectly had the index / key parameter as optional
- Activity participants not updated before joined event emitted (#118): Activity participants were being updated AFTER the ActivitySessionJoinedEvent was emitted.
- ConvergenceSocket error when reconnecting (#116): Due to a non-cleared timeout, an innocuous socket error was being thrown on reconnect.
- Getting info for chat with no members throws Error (#103): When getting the info of a Chat with no current members, an Error as thrown due to a undefined protobuf field.
- Calling removeListeners on a ConvergenceEventEmitter throws an error (#84): This class now checks to see if there are actually listeners before trying to remove them.
- Convergence Omnibus Container Open Sourced (#49): The Convergence Omnibus Container is no open source.
- Convergence Server Distribution Improvements(#29): A License, ReadMe, and configuration files were added.
- Query models by Id (#31): Models can now be queried from the client by model id.
- Convergence Protocol published to Maven Central (#38): The Convergence Protocol Scala implementation is now available in Maven Central.
- Convergence Server Published to Maven Central (#39): The Convergence Server is now available on Maven Central.
- Convergence Server Distribution Improvements(#29): A License, ReadMe, and configuration files were added.
- Cluster seed nodes handles ports (#41): When specifying the CONVERGENCE_SEED_NODES environment variable, ports can now be specified.
- Resync would fail due to out of order messages (#63): When offline models resynchronized, occasionally operation acknowledgments were coming after the resync completion message.
- Chat REST call properly returns Paged Data (#74): The REST call for getting CHAT info now properly returns a paged data structure.
- Chat Room errors when client disconnects (#59): The process for handling a client that disconnected from a Chat Room without leaving has been improved.
- Session timeout can't be set via REST (#57): The exception when trying to set the session timeout via rest has been fixed.
- Same client can't resubscribe to a model (#54): A client that subscribes and deletes a model, can now resubscribe to that model.
- Default config file is now correct (#48): The default value of the config file was pointing to the wrong place.
- Scallop Help not displayed (#51): Command line help was not being displayed.
- CLI application name was wrong (#50): When launching the server, the name was wrong.
- Collection pagination is fixed (#75): Pagination in the collection screen is now working.
- Chat pagination is fixed (#73): Pagination in the chat screen is now working.
- Domain card chat link is fixed (#71): The chat link on the domain card in the dashboard now works.
- Sorting Chats by id throws an exception (#72): Sorting by id on the chats screen no longer throws an exception.
- Admin console doesn't log you out when session expires (#10): The Admin Console now logs the user out when their session expires.
- Edit state is now maintained when editing model source (#44): When editing the source of a model, after the user saves the source the tree view will still be in edit mode.
- A newly added node in a model is now selected (#43): When adding a model element, that element is now properly selected.
- Open models not purged from offline store. (#60): If a user unloaded the page without disconnecting, any open models would be stuck in the offline store.
- Not all operations deleted when model deleted. (#61): When deleting a model, only the first operation was deleted.
- OfflineModelDownloadCompletedEvent not fired. (#46): This event is now properly fired when synchronization completes.
- Exception if model query returns no results. (#42): When a model query returned no models, an exception was thrown.
- Model created during resync process doesn't sync to the server. (#47): If model creation overlapped reconnection, then that model may not sync to the server.
- ModelService does not subscribe on first connection. (#55): If the user started offline, and then went online, the ModelService would not subscribe to offline models.
- Model not removed from offline storage. (#52): In certain cases a model stored offline was still stored locally after it was deleted.
- Disconnect event not fired on auth failure. (#53): The ConvergenceDomain was not firing a DISCONNECTED event after an authentication failure.
- Experimental offline support (#6): Initial API to support offline editing of real time models.
- Setting model permissions when creating models via REST (#25): Model permissions can now be set when creating a model through the REST API.
- User API key support (#8): Users can now create API keys that allow them to programmatically access the REST API.
- Domain User Last Login Time (#11): The last login time of the domain users is now shown in the admin console.
- Automatic reconnection (#5): The Convergence client will now automatically reconnect when disconnected and the user operations will not be disrupted.
- Protocol options configuration (#28): The web socket protocol can now be configured in the options.
- Model Query doesn't honor user model permissions (#32): If world permissions were not set, but a user had permissions to a model, the model was not being returned in a query.
- Model REST PUT wipes out data (#27): Performing a PUT on a model would create empty data in the model.
- Clients not removed from model when permissions change (#25): When a users permissions were revoked from a model, the changes would not take effect until they closed and reopened it.
- Model permissions are not properly resolved (#24): The override flag was not properly handled.
- JWT Auth sets last name as display name (#23): When connecting with JWT, the last name was being put into the display name field.
- Editing a convergence user mixes up fields (#13): When editing a Convergence user the server was putting the data in the wrong fields.
- Invalid pong timeout message on the server (#14): The server was erroneously giving an error when a client timeout occurred.
- Model table context menu fixes (#30): Clicking on the model context menu in the Models screen was unreliable.
- Collection breadcrumbs are incorrect (#22): The bread crumbs on the collection page were incorrect.
- Collection pagination does not work (#21): Collection pagination would show up, but did not work.
- User profile screen incorrect breadcrumbs (#20): The bread crumbs on the user profile page were incorrect.
- Setting domain user password does not work (#15): Attempting to set a domain user's password threw an error.
- Cannot create a convergence user without a first name (#12): The admin console would not allow the creation of a Convergence user without a first name.
- Clicking browse on models pages does not refresh models (#3): Clicking browse a second time would not refresh the results.
- Error when collection filter doesn't match any collections (#2): An error from the collection autocomplete was thrown when no collections matched.
- RealTimeModel never emits a deleted event. (#19): The RealTimeModel class was not emitting the "deleted" event.
- Presence state messages are not sent (#18): Presence state setting messages were not sent to the server.
- Model permissions changed event not emitted (#17): When model permissions were changed an event was not emitted.
- Model version not updated before commit status change event (#16): The model version was incorrect when a commit state changed event was emitted.
- ModelDeletedEvent fired by ModelService (#9): The model "deleted" event was being fired by the ModelService instead of the RealTimeModel.
- Deleting and open model throws errors (#7): If a model was open when it was deleted, several errors were thrown.