FluidFramework

Library for building distributed, real-time collaborative web applications

MIT License

Downloads
1.4M
Stars
4.7K
Committers
246

Bot releases are hidden (Show)

FluidFramework - Fluid Framework v2.0.0

Published by tylerbutler 4 months ago

Fluid Framework 2 is now generally available and ready for production deployments! 🎉

New Features

🌳 SharedTree DDS

In Fluid Framework 2, we're introducing a new DDS called SharedTree, a powerful and flexible DDS designed to keep hierarchical data synchronized between clients. We encourage you to move all new development and containers to SharedTree. We believe SharedTree is the best option for building with Fluid Framework 2. To learn more, visit the SharedTree docs

Note: As a result of the new DDS, we have marked most pre-existing DDSes as Legacy (not deprecated yet), so you will have to update your import paths. Learn more about API support levels and our goal for a graceful DDS deprecation
in future.

📁 SharePoint Embedded Support

We are also introducing support for a new relay option in Fluid Framework 2, called SharePoint Embedded. This is a Microsoft 365 hosted service that keeps your collaborative Fluid data saved in a partition on SharePoint, allowing you to harness the power of Microsoft 365 file and document storage platform for you apps. You can integrate with SharePoint Embedded using the @fluidframework/odsp-client package. To learn more, visit the SharePoint Embedded docs.

🩺 Fluid DevTools

Fluid Developer Tools is a browser extension that improves the developer experience when writing and debugging Fluid apps. It allows you to peek inside your application's Fluid container and diagnose issues. You can learn more about it in the DevTools docs.

🛠️ Start Building Today!

And many more updates! Please continue to engage with us on GitHub Discussion and Issue pages as you adopt Fluid Framework 2!

FluidFramework - Fluid Framework v2.0.0-rc.5.0.1

Published by tylerbutler 4 months ago

What's Changed

Other changes

Full Changelog: https://github.com/microsoft/FluidFramework/compare/client_v2.0.0-rc.5.0.0...client_v2.0.0-rc.5.0.1

FluidFramework - Fluid Framework v2.0.0-rc.5.0.0 (major)

Published by tylerbutler 4 months ago

New Features

tree: Added support for optional schema validation on newly inserted content in SharedTree

When defining how to view a SharedTree, an application can now specify that new content inserted into the tree should be subject to schema validation at the time it is inserted, so if it's not valid according to the stored schema in the tree an error is thrown immediately.

This can be accomplished by passing an ITreeConfigurationOptions argument with enableSchemaValidation set to true when creating a TreeConfiguration to use with the SharedTree.

Since this feature requires additional compute when inserting new content into the tree, it is not enabled by default.

fluid-framework: Type Erase ISharedObjectKind

A new type, SharedObjectKind is added as a type erased version of ISharedObjectKind and DataObjectClass.

This type fills the role of both ISharedObjectKind and DataObjectClass in the @public "declarative API" exposed in the fluid-framework package.

This allows several types referenced by ISharedObjectKind to be made @alpha as they should only need to be used by legacy code and users of the unstable/alpha/legacy "encapsulated API".

Access to these now less public types should not be required for users of the @public "declarative API" exposed in the fluid-framework package, but can still be accessed for those who need them under the /legacy import paths. The full list of such types is:

  • SharedTree as exported from @fluidframwork/tree: It is still exported as @public from fluid-framework as SharedObjectKind.
  • ISharedObjectKind: See new SharedObjectKind type for use in @public APIs. ISharedObject
  • IChannel
  • IChannelAttributes
  • IChannelFactory
  • IExperimentalIncrementalSummaryContext
  • IGarbageCollectionData
  • ISummaryStats
  • ISummaryTreeWithStats
  • ITelemetryContext
  • IDeltaManagerErased
  • IFluidDataStoreRuntimeEvents
  • IFluidHandleContext
  • IProvideFluidHandleContext

Removed APIs:

  • DataObjectClass: Usages replaced with SharedObjectKind.
  • LoadableObjectClass: Replaced with SharedObjectKind.
  • LoadableObjectClassRecord: Replaced with Record<string, SharedObjectKind>.

tree: A new tree status has been added for SharedTree nodes.

TreeStatus.New indicates that a SharedTree node has been constructed but not yet inserted into the tree. Constraints passed to the runTransaction API are now marked as readonly.

Breaking Changes

odsp-client: Move odsp-client out of experimental

The scope of the odsp-client package is changed from @fluid-experimental/odsp-client to @fluidframework/odsp-client.

fluid-framework: Remove some types from @public that are not needed

Mark the following APIs @alpha instead of @public:

  • IBranchOrigin
  • ISequencedDocumentMessage
  • ISignalMessage
  • ISignalMessageBase
  • ITrace

fluid-framework: Remove several types from @public scope

The following types have been moved from @public to @alpha:

  • IFluidSerializer
  • ISharedObjectEvents
  • IChannelServices
  • IChannelStorageService
  • IDeltaConnection
  • IDeltaHandler

These should not be needed by users of the declarative API, which is what @public is targeting.

tree: Event types have been renamed

  • ISubscribable is renamed to Listenable.
  • IsEvent type helper is renamed to IsListener.
  • Events is renamed to Listeners.

tree: Breaking change: Removed the "afterBatch" event from Treeview

This event is no longer necessary. In the past, it provided a means for waiting for a batch of changes to finish applying to the tree before taking some action. However, the tree change events exposed via Tree.on wait for a batch to complete before firing, so the "afterBatch" event provides no additional guarantees. Listeners of this event who wish to respond to changes to the tree view can use "rootChanged" instead.

tree: Move several types into InternalTypes

The stable public API surface for Tree has been reduced.
Several types have been moved into InternalTypes, indicating that they are not fully stable nor intended to be referenced by users of Tree.

  • NodeBuilderData
  • FieldHasDefault
  • TreeNodeSchemaNonClass
  • TreeArrayNodeBase
  • ScopedSchemaName
  • DefaultProvider
  • typeNameSymbol
  • InsertableObjectFromSchemaRecord
  • ObjectFromSchemaRecord
  • FieldHasDefaultUnsafe
  • ObjectFromSchemaRecordUnsafe
  • TreeObjectNodeUnsafe
  • TreeFieldFromImplicitFieldUnsafe
  • TreeNodeFromImplicitAllowedTypesUnsafe
  • InsertableTreeNodeFromImplicitAllowedTypesUnsafe
  • TreeArrayNodeUnsafe
  • TreeMapNodeUnsafe
  • InsertableObjectFromSchemaRecordUnsafe
  • InsertableTreeFieldFromImplicitFieldUnsafe
  • InsertableTypedNodeUnsafe
  • NodeBuilderDataUnsafe
  • NodeFromSchemaUnsafe
  • FlexList
  • TreeApi

Additionally a few more types which could not be moved due to technically limitations have been documented that they should be treated similarly.

  • TreeNodeApi
  • TreeNodeSchemaCore
  • All *Unsafe type (use for construction of recursive schema).
  • WithType
  • AllowedTypes
  • FieldSchemaUnsafe

Also to reduce confusion type was renamed to typeNameSymbol, and is now only type exported. Tree.is should be used to get type information from TreeNodes instead.

ITree.schematize removal

ITree.schematize (and its argument TreeConfiguration) has been removed. Instead, call ITree.viewWith and provide it a TreeViewConfiguration. Unlike schematize, viewWith does not implicitly initialize the document. As such, it doesn't take an initialTree property. Instead, applications should initialize their trees in document creation codepaths using the added TreeView.initialize API.

Old

As an example, something like the following code may have been used before for both the document create and document load codepaths:

// -- fluid-framework API for statically defined objects in container schema --
const tree = container.initialObjects.myTree;
const view = tree.schematize(
  new TreeConfiguration(Point, () => new Point({ x: 0, y: 0 })),
);

// -- fluid-framework API for dynamically created objects --
const tree = await container.create(SharedTree);
const view = tree.schematize(
  new TreeConfiguration(Point, () => new Point({ x: 0, y: 0 })),
);

When using the encapsulated API, creating a tree looks a bit different but the call to schematize is the same:

// -- encapsulated API --
const tree = SharedTree.create(runtime, "foo");
const view = tree.schematize(
  new TreeConfiguration(Point, () => new Point({ x: 0, y: 0 })),
);

New

After migrating this code away from schematize and onto viewWith, it would look like this on the create codepath:

const treeConfig = new TreeViewConfiguration({ schema: Point });

// The following line reflects the first-party API (e.g. @fluidframework/aqueduct). If using the third-party API, obtaining
// a SharedTree is unaffected by this changeset.
const tree = SharedTree.create(runtime, "foo");
const view = tree.viewWith(treeConfig);
view.initialize(new Point({ x: 0, y: 0 }));

and this on the load codepath:

// 'tree' would typically be obtained by retrieving it from a well-known location, e.g. within a `DataObject`'s
// root directory or in `IFluidContainer.initialObjects`
const view = tree.viewWith(treeConfig);

Besides only making the initial tree required to specify in places that actually perform document initialization, this is beneficial for mutation semantics: tree.viewWith never modifies the state of the underlying tree. This means applications are free to attempt to view a document using multiple schemas (e.g. legacy versions of their document format) without worrying about altering the document state.

If existing code used schematize in a context where it wasn't known whether the document needed to be initialized, you can leverage TreeView.compatibility like so:

const view = tree.viewWith(config);
if (view.compatibility.canInitialize) {
  view.initialize(initialTree);
}

core-interfaces, tree: Unify IDisposable interfaces

Public APIs in @fluidframework/tree now use IDisposable from @fluidframework/core-interfaces replacing disposeSymbol with "dispose".

IDisposable in @fluidframework/core-interfaces is now @sealed indicating that third parties should not implement it to reserve the ability for Fluid Framework to extend it to include Symbol.dispose as a future non-breaking change.

telemetry-utils: Breaking Change: Update MockLogger's events property is no longer externally mutable

If you depended on this mutability to implement some behavior, you should create your own mock logger implementation.

If you depended on this mutability to work around the logger's self-clearing behavior after running a match check, you can now override this behavior via the clearEventsAfterCheck parameter.

telemetry-utils: Deprecate MockLogger for external use.

No replacement API is given. This type was never intended for use outside of the fluid-framework repository.
If you were depending on this class for testing purposes, we recommend creating your own mock logger implementation,
or copy and adapt the code from fluid-framework as needed.

Notable Updates

Update to TypeScript 5.4

Update package implementations to use TypeScript 5.4.5.

Update to ES 2022

Update tsconfig to target ES 2022.

azure-client, tinylicious-client: compatibilityMode parameter added to createContainer and getContainer on AzureClient and TinyliciousClient

To support migration from 1.x to 2.0, a compatibility mode parameter has been added to these methods on AzureClient and TinyliciousClient. When set to "1", this allows interop between the 2.0 clients and 1.x clients. When set to "2", interop with 1.x clients is disallowed but new 2.0 features may be used.

tree: Adjusted Listenable multi-event subscription policy.

Listenable.on() no longer supports the same listener function object being registered twice for the same event. The deregister function returned by Listenable.on() may now be called multiple times with no effect.

tinylicious-client: Types are now beta

TinyliciousClient and related types have been promoted to @beta.

tree: object node fields with statically known default values are now optional

Makes object node fields with statically known default values (i.e., optional and identifier fields) optional when creating trees, where they were previously required.

Example:

class Foo extends schemaFactory.object("Foo", {
  name: schemaFactory.string,
  id: schemaFactory.identifier,
  nickname: schemaFactory.optional(schemaFactory.string),
}) {}

// Before
const foo = new Foo({
  name: "Bar",
  id: undefined, // Had to explicitly specify `undefined` to opt into default behavior
  nickname: undefined, // Had to explicitly specify `undefined` for optional field
});

// After
const foo = new Foo({
  name: "Bar",
  // Can omit `id` and `nickname` fields, as both have statically known defaults!
});

tree: Fix AfterBatch event

TreeViewEvents.afterBatch is now triggered when appropriate instead of never firing.

tree: Implement compatibility-based schema evolution API

This change adjusts some top-level APIs for using SharedTree to better accommodate applications that need to change their schema. These changes enable forwards compatibility with future work to relax SharedTree's restrictions around view schema and stored schema compatibility. That future work will enable more flexible policies around how applications can update their documents' schemas over time.

Application authors are encouraged to develop a compatibility policy which they are comfortable with using the guidance in the "Schema Evolvability" section of @fluidframework/tree's readme.

To make the details of schema compatibilities that SharedTree supports more clear, TreeView.error has been functionally replaced with the compatibility property. Users desiring the previous strict behavior should use view.compatibility.isEquivalent at appropriate places in application logic.

Deprecations

container-loader: IDetachedBlobStorage is deprecated and replaced with a default in memory store for detached blobs

IDetachedBlobStorage will be removed in a future release without a replacement.

When applications load a container without specifying ILoaderServices.detachedBlobStorage, an implementation which stores the blobs in memory will be injected by Fluid.

IDetachedBlobStorage as well as application-defined implementations of it are deprecated and support will be removed for them in a future update. Applications are recommended to stop providing this property on ILoaderServices.

Further Updates

sequence: Stop ISharedString extending SharedObject

ISharedString no longer extends SharedSegmentSequence and instead extends the new ISharedSegmentSequence, which may be missing some APIs.

Attempt to migrate off the missing APIs, but if that is not practical, request they be added to ISharedSegmentSequence and cast to SharedSegmentSequence as a workaround temporally.

runtime-definitions: Remove deprecated 'get' and 'serialize' members on the ITelemetryContext interface

The ITelemetryContext interface was not intended to allow getting properties that had been added to it, so it is now "write-only". Internal usage within FluidFramework should use the new ITelemetryContextExt.

Separate schemaChanged event on TreeView

The previous rootChanged event was called whenever the root was invalidated, which happens on changes to the document schema as well as changes to the root field (i.e. usage of TreeView.root's setter on a local client, or acking such a change made by a remote client).

There was no distinct schemaChanged event, meaning that any time the root changed, clients would have needed to check the error state on TreeView to see if the document's underlying schema had been changed.

Now, the latter case of the document's underlying schema changing has been split off into a schemaChanged event, which will fire before rootChanged. This should allow applications to run slightly less compatibility logic to routine changes to the root field.

tree: Fix bug where reading tree during events could cause issues

Reading the tree inside of NodeChange and TreeChange events could corrupt internal memory structures leading to invalid data in subsequence reads as well as internal errors being thrown. This bug has been fixed.

fluid-framework: Cleanup fluid-framework legacy exports

Cleanup fluid-framework legacy exports to remove no longer required types.

data-objects: Fix using Signaler in ContainerSchema

Signaler now implements SharedObjectKind<ISignaler>, allowing its use in ContainerSchema which was broken when ContainerSchema was made more strict. Additionally fewer encapsulated APIs are exposed on Signaler and the instance type must now be ISignaler (instead of Signaler), which has been extended to have an "error" event which was previously missing.

runtime-definitions: Make IInboundSignalMessage alpha and readonly

Users of IInboundSignalMessage will need to import it from the /legacy scope and should not mutate it. Only users of existing @alpha APIs like IFluidDataStoreRuntime should be able to use this type, so it should not introduce new /legacy usage.

Updated server dependencies

The following Fluid server dependencies have been updated to the latest version, 5.0.0. See the full changelog.

  • @fluidframework/gitresources
  • @fluidframework/server-kafka-orderer
  • @fluidframework/server-lambdas
  • @fluidframework/server-lambdas-driver
  • @fluidframework/server-local-server
  • @fluidframework/server-memory-orderer
  • @fluidframework/protocol-base
  • @fluidframework/server-routerlicious
  • @fluidframework/server-routerlicious-base
  • @fluidframework/server-services
  • @fluidframework/server-services-client
  • @fluidframework/server-services-core
  • @fluidframework/server-services-ordering-kafkanode
  • @fluidframework/server-services-ordering-rdkafka
  • @fluidframework/server-services-ordering-zookeeper
  • @fluidframework/server-services-shared
  • @fluidframework/server-services-telemetry
  • @fluidframework/server-services-utils
  • @fluidframework/server-test-utils
  • tinylicious
FluidFramework - Routerlicious v5.0.0

Published by tylerbutler 4 months ago

server-services-core: New configuration setting for ephemeral container soft delete

IDeliServerConfiguration defines a new optional property, ephemeralContainerSoftDeleteTimeInMs, that controls when ephemeral containers are soft-deleted.

You can find more details in pull request #20731.

server-services-core: New optional dispose method

Adds optional dispose method to IWebSocket for disposing event listeners on disconnect in Nexus lambda.

You can find more details in pull request #21211.

server-services-core: Reduce session grace period for ephemeral containers to 2 minutes (was 10 minutes)

For ephermeral container, the session grace period is reduced from 10 minutes to 2 minutes when cluster is draining. This ensures the ephemeral container gets cleaned after disconnection sooner. Clients will not find old EH containers and will need to create new containers. This logic only takes effect when forcing draining.

You can find more details in pull request #21010.

server-lambdas: Nexus client connections can now disconnect in batches

Added the option to make Nexus client connections disconnect in batches. The new options are within socketIo element of the Nexus config:

  • gracefulShutdownEnabled (true or false)
  • gracefulShutdownDrainTimeMs (overall time for disconnection)
  • gracefulShutdownDrainIntervalMs (how long each batch has to disconnect)

Additionally, the DrainTimeMs setting should be set to a value greater than the setting shared:runnerServerCloseTimeoutMs which governs how long Alfred and Nexus have to shutdown.

You can find more details in pull request #19938.

server-lambdas: Performance: Keep pending checkpoint message for future summaries

During a session there may be multiple client/service summary calls, and independently, multiple checkpoints. Checkpoint will clear messages storage in pendingCheckpointMessages, which is also used for writing summaries. Because of this cleanup, when we write new summaries, it often needs to request the ops from Alfred again, which is not quite efficient.

Now the pending messages are cached for improved performance.

You can find more details in pull request #20029.

server-services-core: Fix: Limit max length of validParentSummaries in checkpoints

Limits maximum number of tracked valid parent (service) summaries to 10 by default. Configurable via IScribeServerConfiguration in scribe property of IServiceConfiguration.

You can find more details in pull request #20850.

server-lambdas: Fix: send correct connection scopes for client

When a client joins in "write" mode with only "read" scopes in their token, the connection message from server will reflect a "read" client mode.

You can find more details in pull request #20312.

protocol-base: Fix: ensure immutability of quorum snapshot

Creates a deeper clone of the quorum members when snapshotting to make sure the snapshot is immutable.

You can find more details in pull request #20329.

server-lambdas: Fix: cover edge cases for scrubbed checkpoint users

Overhauled how the Scribe lambda handles invalid, missing, or outdated checkpoint data via fallbacks.

Before:

if (no global checkpoint)
  use Default checkpoint
elsif (global checkpoint was cleared or  global checkpoint quorum was scrubbed)
  use Summary checkpoint
else
  use latest DB checkpoint (local or global)

After:

if (no global and no local checkpoint and no summary checkpoint)
  use Default checkpoint
elsif (
	global checkpoint was cleared and summary checkpoint ahead of local db checkpoint
	or latest DB checkpoint quorum was scrubbed
	or summary checkpoint ahead of latest DB checkpoint
)
  use Summary checkpoint
else
  use latest DB checkpoint (local or  global)

Also: Updated CheckpointService with additional fallback logic for loading a checkpoint from local or global DB depending on whether the quorum information in the checkpoint is valid (i.e. does not contain scrubbed users).

You can find more details in pull request #20259.

server-routerlicious-base: Add support for custom tenant key generators

Added support to add a custom tenant key generator instead of using just the default 128-bit sha256 key.

You can find more details in pull request #20844.

server-routerlicious-base: Remove Riddler HTTP request for performance

The getOrderer workflow no longer calls getTenant when globalDb is enabled. This saves two HTTP calls to Riddler and will improve performance.

You can find more details in pull request #20773.

protocol-base: Fix: configure user data scrubbing in checkpoints and summaries

Note: This change is primarily internal to routerlicious.

  • When scribe boots from a checkpoint, it fails over to the latest summary checkpoint if the quorum is corrupted (i.e. user data is scrubbed).

  • When scribe writes a checkpoint to DB or a summary, it respects new IScribeServerConfiguration options (scrubUserDataInSummaries, scrubUserDataInLocalCheckpoints, and scrubUserDataInGlobalCheckpoints) when determining whether to scrub user data in the quorum.

  • Added optional param, scrubUserData, to ProtocolOpHandler.getProtocolState(). When true, user data in the quorum is replaced with { id: "" }. Defaults to false. Previously was always scrubbed.

  • Added the following configuration options for IScribeServerConfiguration:

    • scrubUserDataInSummaries
    • scrubUserDataInLocalCheckpoints
    • scrubUserDataInGlobalCheckpoints

    All default to false.

You can find more details in pull request #20150.

server-services-utils: Add support for custom authentication with Redis

Added support for custom authentication with Redis instead of only password based authentication. This includes support for Microsoft Entra-ID based authentication for Redis.

You can find more details in pull request #20214.

server-services-client: Add optional internalErrorCode property to NetworkError and INetworkErrorDetails

NetworkErrors now include an optional property, internalErrorCode, which can contain additional information about the internal error.

You can find more details in pull request #21429.

server-services-shared: Fixed the ordering in Nexus shutdown

Before, the Redis Pub/Sub would be disposed before the socket connections were closed. Now we first close socket connections then do Redis disposal.

You can find more details in pull request #20429.

server-lambdas, server-services-core: SessionStartMetric removed from Scribe and Deli microservices

This change removes the SessionStartMetric from Scribe and Deli. The metric is a source of bugs and has been superseded by the restoreFromCheckpoint and RunService metrics.

You can find more details about the reasons for this change in pull request #21125.

FluidFramework - Fluid Framework v2.0.0-internal.7.4.4 (patch)

Published by daesunp 8 months ago

What's Changed

Other changes

Full Changelog: https://github.com/microsoft/FluidFramework/compare/client_v2.0.0-internal.7.4.3...client_v2.0.0-internal.7.4.4

FluidFramework - Fluid Framework 2.0 Beta 1 (v2.0.0-rc.1.0.0)

Published by tylerbutler 9 months ago

Fluid Framework 2.0 contains two major updates: SharedTree DDS and support for SharePoint Embedded.

We listened to your feedback and have made it even easier to use Fluid by introducing a new programming model based on the new SharedTree DDS. Now you can specify the data model schema for your app, and we'll represent it with a SharedTree. Like other DDSs, you can continue to use these data objects like local objects and we'll keep them in sync.

We have also added support for SharePoint Embedded, which is an M365 hosted service offering. You can access it by using the @fluidframework/odsp-client package.

New features

SharedTree DDS

Our new DDS offering that allows you to represent any hierarchichal data model for you app.

odsp-client

New service API that allows you to access SharePoint Embedded service.

Breaking Changes

sequence: Remove the findTile API

The findTile API that was previously deprecated is now being removed. The new searchForMarker function provides similar functionality, and can be called with the start position, the client ID, the desired marker label to find, and the search direction, where a value of true indicates a forward search.

sequence: Unify the change and changeProperties methods

Instead of having two separate APIs to modify an interval's endpoints and properties, combine both into the same method, IntervalCollection.change. Change is called with a string id value as the first parameter, and an object containing the start value, the end value, and/or the properties, depending on the desired modifications to the interval. Start and end must both be either defined or undefined.

The old functionality and signatures were deprecated in the internal.7.4.0 minor release.

telemetry-utils: Remove deprecated config types from telemetry-utils

The types ConfigTypes and IConfigProviderBase were deprecated and are now removed from @fluidframework/telemetry-utils. They continue to exist in @fluidframework/core-interfaces. Please update your reference to use these types from @fluidframework/core-interfaces.

Deprecations

garbage collection: Deprecate addedGCOutboundReference

The addedGCOutboundReference property on IDeltaConnection, IFluidDataStoreContext, and MockFluidDataStoreRuntime is now deprecated.

The responsibility of adding outbound references (for Garbage Collection tracking) is moving up to the ContainerRuntime. Previously, DDSes themselves were responsible to detect and report added outbound references (via a handle being stored), so these interfaces (and corresponding mock) needed to plumb that information up to the ContainerRuntime layer where GC sits. This is no longer necessary so they're being removed in an upcoming release.

Updates to Alpha APIs

shared-object-base: SharedObject processGCDataCore now takes IFluidSerializer rather than SummarySerializer

This change should be a no-op for consumers, and SummarySerializer and IFluidSerializer expose the same consumer facing APIs. This change just makes our APIs more consistent by only using interfaces, rather than a mix of interfaces and concrete implementations.

datastore-definitions: Remove unused IFluidDataStoreRegistry from IFluidDataStoreRuntime

IFluidDataStoreRuntime optionally extended IFluidDataStoreRegistry. This is never used, so is removed. As with all provider interfaces, consumers can continue to extend the interface if they have a use, and use FluidObject to inspect for it existing.

id-compressor: Cluster allocation strategy updated

This change adjusts the cluster allocation strategy for ghost sessions to exactly fill the cluster instead of needlessly allocating a large cluster. It will also not make a cluster at all if IDs are not allocated. This change adjusts a computation performed at a consensus point, and thus breaks any sessions collaborating across version numbers. The version for the serialized format has been bumped to 2.0, and 1.0 documents will fail to load with the following error: IdCompressor version 1.0 is no longer supported.

Further updates

sequence: Remove the signature of IntervalCollection.add that takes a type parameter

The previously deprecated signature of IntervalCollection.add that takes an IntervalType as a parameter is now being removed. The new signature is called without the type parameter and takes the start, end, and properties parameters as a single object.

Updated server dependencies

The following Fluid server dependencies have been updated to the latest version, 3.0.0.
See the full changelog.

  • @fluidframework/gitresources
  • @fluidframework/server-kafka-orderer
  • @fluidframework/server-lambdas
  • @fluidframework/server-lambdas-driver
  • @fluidframework/server-local-server
  • @fluidframework/server-memory-orderer
  • @fluidframework/protocol-base
  • @fluidframework/server-routerlicious
  • @fluidframework/server-routerlicious-base
  • @fluidframework/server-services
  • @fluidframework/server-services-client
  • @fluidframework/server-services-core
  • @fluidframework/server-services-ordering-kafkanode
  • @fluidframework/server-services-ordering-rdkafka
  • @fluidframework/server-services-ordering-zookeeper
  • @fluidframework/server-services-shared
  • @fluidframework/server-services-telemetry
  • @fluidframework/server-services-utils
  • @fluidframework/server-test-utils
  • tinylicious

Updated @fluidframework/protocol-definitions

The @fluidframework/protocol-definitions dependency has been upgraded to v3.1.0.
See the full changelog.

FluidFramework - Fluid Framework 2.0.0-internal.7.2.2 (patch)

Published by tylerbutler 12 months ago

What's Changed

Full Changelog: https://github.com/microsoft/FluidFramework/compare/client_v2.0.0-internal.7.2.1...client_v2.0.0-internal.7.2.2

FluidFramework - Fluid Framework 2.0.0-internal.7.2.1 (patch)

Published by tylerbutler 12 months ago

What's Changed

Full Changelog: https://github.com/microsoft/FluidFramework/compare/client_v2.0.0-internal.7.2.0...client_v2.0.0-internal.7.2.1

FluidFramework - Fluid Framework v2.0.0-internal.7.2.0 (minor)

Published by tylerbutler 12 months ago

sequence: SharedString.findTile is now deprecated

findTile was previously deprecated on client and mergeTree, but was not on SharedString. Usage is mostly the same, with the exception that the parameter 'startPos' must be a number and cannot be undefined.

tree2: Rename DocumentSchema and toDocumentSchema

The following APIs have been renamed:

  • DocumentSchema is now TreeSchema
  • toDocumentSchema is now intoSchema

tree2: Rename SchemaData, FieldSchema, and FieldStoredSchema

The following APIs have been renamed:

  • SchemaData is now TreeStoredSchema
  • FieldSchema is now TreeFieldSchema
  • FieldStoredSchema is now TreeFieldStoredSchema

tree2: Rename TreeSchema

The following APIs have been renamed:

  • TreeSchema is now TreeNodeSchema

tree2: Add null to allowed leaf types

Replaced the jsonNull schema with a new null leaf schema, and added support for leaf values which are null.

tree2: Rename Struct

The following APIs have been renamed:

  • Struct is now ObjectNode
FluidFramework - common-utils v2.0.0 (major)

Published by tylerbutler about 1 year ago

This is a major release.

Deprecated classes and functions

The following classes, functions, and types are deprecated in this release. In some cases, the implementations have been
moved to other packages.

Moved to @fluidframework/core-utils

  • class Lazy
  • class LazyPromise
  • class PromiseCache<TKey, TResult>
  • interface PromiseCacheOptions
  • type PromiseCacheExpiry
  • class Deferred
  • class Heap
  • class PromiseTimer
  • class Timer
  • const delay
  • const NumberComparer
  • function assert
  • function safelyParseJSON
  • function setLongTimeout
  • function unreachableCase
  • interface IComparer
  • interface IHeapNode
  • interface IPromiseTimer
  • interface IPromiseTimerResult
  • interface ITimer

Moved to @fluid-internal/client-utils

  • class Buffer
  • class EventForwarder
  • class Trace
  • class TypedEventEmitter
  • class TypedEventTransform
  • function bufferToString
  • function fromBase64ToUtf8
  • function fromUtf8ToBase64
  • function gitHashFile
  • function hashFile
  • function stringToBuffer
  • function toUtf8
  • function Uint8ArrayToArrayBuffer
  • function Uint8ArrayToString
  • interface ITraceEvent
  • type EventEmitterEventType
  • type IsoBuffer
  • type IsomorphicPerformance

Deprecated with no replacement

  • function doIfNotDisposed
  • class RateLimiter
  • class RangeTracker
  • interface IRange
  • interface IRangeTrackerSnapshot
FluidFramework - common-definitions v1.0.0 (major)

Published by tylerbutler about 1 year ago

This is a major release.

Deprecated interfaces and types

The following interfaces and types are deprecated in this release. They can now be found in @fluidframework/core-interfaces.

These deprecated APIs will be removed in version 2.0.0.

Moved to @fluidframework/core-interfaces

  • interface IDisposable
  • interface IErrorEvent
  • interface IErrorEvent
  • interface IEvent
  • interface IEventProvider
  • interface ILoggingError
  • interface ITaggedTelemetryPropertyType
  • interface ITelemetryBaseEvent
  • interface ITelemetryBaseLogger
  • interface ITelemetryErrorEvent
  • interface ITelemetryGenericEvent
  • interface ITelemetryLogger
  • interface ITelemetryPerformanceEvent
  • interface ITelemetryProperties
  • type ExtendEventProvider
  • type IEventThisPlaceHolder
  • type IEventTransformer
  • type ReplaceIEventThisPlaceHolder
  • type ReplaceIEventThisPlaceHolder
  • type TelemetryEventCategory
  • type TelemetryEventPropertyType
FluidFramework - Fluid Framework v2.0.0-internal.4.3.0 (minor)

Published by jatgarg over 1 year ago

This is a minor release.

It contains bug fixes and other internal improvements.

What's Changed

💥 Breaking changes

  • bigBlobs request handling removed from DataObject

    bigBlobs request handling removed from DataObject

    Previously, DataObject would perform undocumented special handling for requests to it starting with bigBlobs/ to pull objects out of its
    root directory. This special handling has been removed.

2.0.0-internal.4.3.0 Upcoming changes

PureDataObject.getFluidObjectFromDirectory deprecated

`PureDataObject.getFluidObjectFromDirectory` has been deprecated and will be removed in an upcoming release. Instead prefer to 
interface directly with the directory and handles.
FluidFramework - patch release client_v2.0.0-internal.3.4.5

Published by chentong7 over 1 year ago

What's Changed

Full Changelog: https://github.com/microsoft/FluidFramework/compare/client_v2.0.0-internal.3.4.4...client_v2.0.0-internal.3.4.5

FluidFramework - client_v2.0.0-internal.4.1.2

Published by chentong7 over 1 year ago

What's Changed

Other changes

Full Changelog: https://github.com/microsoft/FluidFramework/compare/client_v2.0.0-internal.4.1.1...client_v2.0.0-internal.4.1.2

FluidFramework - Fluid Framework v2.0.0-internal.4.1.1 (patch)

Published by markfields over 1 year ago

What's Changed

Full Changelog: https://github.com/microsoft/FluidFramework/compare/client_v2.0.0-internal.4.1.0...client_v2.0.0-internal.4.1.1

FluidFramework - Fluid Framework v2.0.0-internal.4.1.0 (minor)

Published by tylerbutler over 1 year ago

This is a minor release that includes deprecations that will take effect in a future major release as well as new features.

Deprecations

@fluidframework/garbage-collector deprecated

The @fluidframework/garbage-collector package is deprecated with the following functions, interfaces, and types in it. These are internal implementation details and have been deprecated for public use. They will be removed in an upcoming release.

  • runGarbageCollection
  • trimLeadingAndTrailingSlashes
  • trimLeadingSlashes
  • trimTrailingSlashes
  • cloneGCData
  • unpackChildNodesGCDetails
  • unpackChildNodesUsedRoutes
  • removeRouteFromAllNodes
  • concatGarbageCollectionStates
  • concatGarbageCollectionData
  • GCDataBuilder
  • getGCDataFromSnapshot
  • IGCResult

GC interfaces removed from runtime-definitions

The following interfaces available in @fluidframework/runtime-definitions are internal implementation details and have been deprecated for public use. They will be removed in an upcoming release.

  • IGarbageCollectionNodeData
  • IGarbageCollectionState
  • IGarbageCollectionSnapshotData
  • IGarbageCollectionSummaryDetailsLegacy

Some test packages no longer published

These packages were previously published under the @fluidframework scope:

  • @fluidframework/test-end-to-end-tests

ensureSynchronizedWithTimeout deprecated in LoaderContainerTracker

LoaderContainerTracker.ensureSynchronizedWithTimeout is deprecated as it is equivalent to LoaderContainerTracker.ensureSynchronized and will be removed in an upcoming release. The timeoutDuration parameter from TestObjectProvider.ensureSynchronized will also be removed. Please configure the timeout for the test instead.

Container-loader deprecations

The following types in the @fluidframework/container-loader package are not used by, or necessary to use our public api, so will be removed from export in the next major release:

  • IContainerLoadOptions
  • IContainerConfig
  • IPendingContainerState
  • ISerializableBlobContents

Op compression is enabled by default

If the size of a batch is larger than 614kb, the ops will be compressed. After upgrading to this version, if batches exceed the size threshold, the runtime will produce a new type of op with the compression properties. To open a document which contains this type of op, the client's runtime version needs to be at least client_v2.0.0-internal.2.3.0. Older clients will close with assert 0x3ce ("Runtime message of unknown type") and will not be able to open the documents until they upgrade. To minimize the risk, it is recommended to audit existing session and ensure that at least 99.9% of them are using a runtime version equal or greater than client_v2.0.0-internal.2.3.0, before upgrading to 2.0.0-internal.4.1.0.

More information about op compression can be found here.

IntervalConflictResolver deprecation

In SharedString, interval conflict resolvers have been unused since this change, which added support for multiple intervals at the same position. As such, any existing usages can be removed. Related APIs have been deprecated and will be removed in an upcoming release.

Features

Ability to enable grouped batching

The IContainerRuntimeOptions.enableGroupedBatching option has been added to the container runtime layer and is off by default. This option will group all batch messages under a new "grouped" message to be sent to the service. Upon receiving this new "grouped" message, the batch messages will be extracted and given the sequence number of the parent "grouped" message.

Upon enabling this option, if any issues arise, use the Fluid.ContainerRuntime.DisableGroupedBatching feature flag to disable at runtime. This option should ONLY be enabled after observing that 99.9% of your application sessions contains these changes (version "2.0.0-internal.4.1.0" or later). This option is experimental and should not be enabled yet in production. Containers created with this option may not open in future versions of the framework.

This option will change a couple of expectations around message structure and runtime layer expectations. Only enable this option after testing
and verifying that the following expectation changes won't have any effects:

  • batch messages observed at the runtime layer will not match messages seen at the loader layer
  • messages within the same batch will have the same sequence number
  • client sequence numbers on batch messages can only be used to order messages with the same sequenceNumber
  • requires all ops to be processed by runtime layer (version "2.0.0-internal.1.2.0" or later https://github.com/microsoft/FluidFramework/pull/11832)
FluidFramework - client_v2.0.0-internal.4.0.6

Published by markfields over 1 year ago

FluidFramework - benchmark v0.47.0

Published by tylerbutler over 1 year ago

This is a minor release.

FluidFramework - @fluidframework/protocol-definitions v1.2.0

Published by tylerbutler over 1 year ago

This is a minor release.

Deprecations

Deprecate term member from IDocumentAttributes and ISequencedDocumentMessage

This member was related to an experimental feature that did not ship. As a result it is unused/ignored by all consumers.
This change deprecates it, to be removed in a later release.

Deprecate RemoteHelp from MessageType

The RemoteHelp MessageType is no longer used by the server side so it is safe to deprecate this op type.
This change deprecates it, to be removed in a later release.

FluidFramework - server v0.1040.1000 (major)

Published by tylerbutler over 1 year ago

This is a major release.