Dependency updates only.
-
The inbound and outbound properties have been removed from IDeltaManager (#22282) 45a57693f2
The inbound and outbound properties were deprecated in version 2.0.0-rc.2.0.0 and have been removed from
IDeltaManager
.IDeltaManager.inbound
contained functionality that could break core runtime features such as summarization and processing batches if used improperly. Data loss or corruption could occur whenIDeltaManger.inbound.pause()
orIDeltaManager.inbound.resume()
were called.Similarly,
IDeltaManager.outbound
contained functionality that could break core runtime features such as generation of batches and chunking. Data loss or corruption could occur whenIDeltaManger.inbound.pause()
orIDeltaManager.inbound.resume()
were called.- Alternatives to
IDeltaManager.inbound.on("op", ...)
areIDeltaManager.on("op", ...)
- Alternatives to calling
IDeltaManager.inbound.pause
,IDeltaManager.outbound.pause
forIContainer
disconnect useIContainer.disconnect
. - Alternatives to calling
IDeltaManager.inbound.resume
,IDeltaManager.outbound.resume
forIContainer
reconnect useIContainer.connect
.
- Alternatives to
Dependency updates only.
Dependency updates only.
Dependency updates only.
-
container-loader: summarizeProtocolTree and its corresponding duplicate ILoaderOptions definition is deprecated (#21999) 11ccda1597
The
summarizeProtocolTree
property in ILoaderOptions was added to test single-commit summaries during the initial implementation phase. The flag is no longer required and should no longer be used, and is now marked deprecated. If a driver needs to enable or disable single-commit summaries, it can do so viaIDocumentServicePolicies
.
Dependency updates only.
-
Update to TypeScript 5.4 (#21214) 0e6256c722
Update package implementations to use TypeScript 5.4.5.
-
container-loader: IDetachedBlobStorage is deprecated and replaced with a default in memory store for detached blobs (#21144) 2eebaa1775
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.
-
Update to ES 2022 (#21292) 68921502f7
Update tsconfig to target ES 2022.
-
Audience & connection sequencing improvements 96872186d0
Here are breaking changes in Audience behavior:
- IAudience no longer implements EventEmmiter. If you used addListener() or removeListener(), please replace with on() & off() respectively.
- IAudience interface implements getSelf() method and "selfChanged" event.
- IContainerContext.audience is no longer optional
- "connected" events are now raised (various API surfaces - IContainer, IContainerRuntime, IFluidDataStoreRuntime, etc.) a bit later in reconnection sequence for "read" connections - only after client receives its own "join" signal and caught up on ops, which makes it symmetrical with "write" connections.
- If this change in behavior breaks some scenario, please let us know immediately, but you can revert that behavior using the following feature gates:
- "Fluid.Container.DisableCatchUpBeforeDeclaringConnected"
- "Fluid.Container.DisableJoinSignalWait"
-
container-definitions: IContainerContext.getSpecifiedCodeDetails() removed 97d68aa06b
IContainerContext.getSpecifiedCodeDetails() was deprecated in 0.42 and has now been removed.
-
Packages now use package.json "exports" and require modern module resolution 97d68aa06b
Fluid Framework packages have been updated to use the package.json "exports" field to define explicit entry points for both TypeScript types and implementation code.
This means that using Fluid Framework packages require the following TypeScript settings in tsconfig.json:
"moduleResolution": "Node16"
with"module": "Node16"
"moduleResolution": "Bundler"
with"module": "ESNext"
We recommend using Node16/Node16 unless absolutely necessary. That will produce transpiled JavaScript that is suitable for use with modern versions of Node.js and Bundlers. See the TypeScript documentation for more information regarding the module and moduleResolution options.
Node10 moduleResolution is not supported; it does not support Fluid Framework's API structuring pattern that is used to distinguish stable APIs from those that are in development.
-
driver-definitions: update submitSignal content type to string 97d68aa06b
Change IDocumentDeltaConnection.submitSignal's content argument type to string which represents actual/known use.
-
container-loader: Behavior change: IContainer.attach will be made retriable in the next release (#19246) 3d5dfb28d4
The
attach
function on IContainer has been modified such that the container stay open on non-fatal errors. On failure of attach the developer should inspect IContainer.closed to see if the container has been closed. If not closed, the developer can retry calling attach.The functionality is currently behind a configuration
Fluid.Container.RetryOnAttachFailure
which can be set totrue
to enable the new functionality.In the next release we will default to the new behavior, and it will be possible to disable this behavior by setting
Fluid.Container.RetryOnAttachFailure
tofalse
-
driver-definitions: Deprecate
ISnapshotContents
(#19314) fc731b69deISnapshotContents
is deprecated. It has been replaced withISnapshot
. -
driver-definitions: repositoryUrl removed from IDocumentStorageService (#19522) 90eb3c9d33
The
repositoryUrl
member ofIDocumentStorageService
was unused and always equal to the empty string. It has been removed. -
container-loader: IParsedUrl does not accept null version (#19854) ba6012a927
IParsedUrl
previously claimed to acceptnull
version to indicate that we should not load from a snapshot, but this was internally converted intoundefined
(thereby loading from latest snapshot). The typing has been updated to reflect this reality. -
Deprecated error-related enums have been removed (#19067) 59793302e5
Error-related enums
ContainerErrorType
,DriverErrorType
,OdspErrorType
andRouterliciousErrorType
were previously deprecated and are now removed. There are replacement object-based enumerations ofContainerErrorTypes
,DriverErrorTypes
,OdspErrorTypes
andRouterliciousErrorTypes
. Refer to the release notes of Fluid Framework version 2.0.0-internal.7.0.0 for details on the replacements. -
container-loader: Internal format of the string returned by container.serialize has changed. (#18829) a10cfd54f5
serialize
is being changed to align format with similar APIs. There are no changes in external behaviour. -
container-definitions: ILoaderOptions no longer accepts arbitrary key/value pairs (#19306) 741926e225
ILoaderOptions has been narrowed to the specific set of supported loader options, and may no longer be used to pass arbitrary key/value pairs through to the runtime.
-
container-definitions: Added containerMetadata prop on IContainer interface (#19142) d0d77f3516
Added
containerMetadata
prop on IContainer interface. -
runtime-definitions: Moved ISignalEnvelope interface to core-interfaces (#19142) d0d77f3516
The
ISignalEnvelope
interface has been moved to the @fluidframework/core-interfaces package.
-
Updated server dependencies (#19122) 25366b4229
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 (#19122) 25366b4229
The @fluidframework/protocol-definitions dependency has been upgraded to v3.1.0. See the full changelog.
-
container-loader: Removed request(...) and IFluidRouter from ILoader and Loader 9a451d4946
The
request(...)
method andIFluidRouter
property have been removed fromILoader
andLoader
. Instead, after callingILoader.resolve(...)
, call thegetEntryPoint()
method on the returnedIContainer
.See Removing-IFluidRouter.md for more details.
-
container-definitions: Fix ISnapshotTreeWithBlobContents and mark internal 9a451d4946
ISnapshotTreeWithBlobContents
is an internal type that should not be used externally. Additionally, the type didn't match the usage, specifically in runtime-utils where anany
cast was used to work around undefined blobContents. The type has been updated to reflect that blobContents can be undefined. -
container-loader: Removed requestResolvedObjectFromContainer 9a451d4946
The helper function
requestResolvedObjectFromContainer
has been removed. Please remove all calls to it and instead use the newentryPoint
pattern. See Removing-IFluidRouter.md for more details.
Dependency updates only.
Dependency updates only.
Dependency updates only.
-
Move
location-redirection-utils
APIs tocontainer-loader
(#17554) 17acf10a71Moves the 2 package exports of
location-redirection-utils
to thecontainer-loader
package.Exports from
location-redirection-utils
are now deprecated, and the package itself will be removed in an upcoming release.
-
odsp-driver: Load container in readonly mode when driver throws DriverErrorType.outOfStorage 871b3493dd
Handle DriverErrorType.outOfStorage error from driver and load the container in readonly mode. Currently there is no handling and when the join session throws this error, the container will get closed. With this we use NoDeltaStream object as connection and load the container in read mode, so that it loads properly. We also notify the that the container is "readonly" through the event on delta manager so that apps can listen to this and show any UX etc. The app can listen to the event like this:
container.deltaManager.on( "readonly", (readonly?: boolean, readonlyConnectionReason?: { text: string; error?: IErrorBase }) => { // error?.errorType will be equal to DriverErrorType.outOfStorage in this case // App logic }, );
-
Dependencies on @fluidframework/protocol-definitions package updated to 3.0.0 871b3493dd
This included the following changes from the protocol-definitions release:
- Updating signal interfaces for some planned improvements. The intention is split the interface between signals
submitted by clients to the server and the resulting signals sent from the server to clients.
- A new optional type member is available on the ISignalMessage interface and a new ISentSignalMessage interface has been added, which will be the typing for signals sent from the client to the server. Both extend a new ISignalMessageBase interface that contains common members.
- The @fluidframework/common-definitions package dependency has been updated to version 1.0.0.
- Updating signal interfaces for some planned improvements. The intention is split the interface between signals
submitted by clients to the server and the resulting signals sent from the server to clients.
-
DEPRECATED: container-loader: Various request related APIs have been deprecated 871b3493dd
Please remove all calls to the following functions and instead use the new
entryPoint
pattern:requestFluidObject
requestResolvedObjectFromContainer
getDefaultObjectFromContainer
getObjectWithIdFromContainer
getObjectFromContainer
See Removing-IFluidRouter.md for more details.
-
container-definitions: IContainer's and IDataStore's IFluidRouter capabilities are deprecated 871b3493dd
IFluidRouter
andrequest({ url: "/" })
onIContainer
andIDataStore
are deprecated and will be removed in a future major release. Please migrate all usage to the appropriategetEntryPoint()
orentryPoint
APIs.See Removing-IFluidRouter.md for more details.
-
routerlicious-driver: remove dead blob aggregation concepts and code 871b3493dd
Dead concepts blob aggregation like
aggregateBlobsSmallerThanBytes
andminBlobSize
have been removed. -
Server upgrade: dependencies on Fluid server packages updated to 2.0.1 871b3493dd
Dependencies on the following Fluid server package have been updated to version 2.0.1:
- @fluidframework/gitresources: 2.0.1
- @fluidframework/server-kafka-orderer: 2.0.1
- @fluidframework/server-lambdas: 2.0.1
- @fluidframework/server-lambdas-driver: 2.0.1
- @fluidframework/server-local-server: 2.0.1
- @fluidframework/server-memory-orderer: 2.0.1
- @fluidframework/protocol-base: 2.0.1
- @fluidframework/server-routerlicious: 2.0.1
- @fluidframework/server-routerlicious-base: 2.0.1
- @fluidframework/server-services: 2.0.1
- @fluidframework/server-services-client: 2.0.1
- @fluidframework/server-services-core: 2.0.1
- @fluidframework/server-services-ordering-kafkanode: 2.0.1
- @fluidframework/server-services-ordering-rdkafka: 2.0.1
- @fluidframework/server-services-ordering-zookeeper: 2.0.1
- @fluidframework/server-services-shared: 2.0.1
- @fluidframework/server-services-telemetry: 2.0.1
- @fluidframework/server-services-utils: 2.0.1
- @fluidframework/server-test-utils: 2.0.1
- tinylicious: 2.0.1
-
test-utils: provideEntryPoint is required 871b3493dd
The optional
provideEntryPoint
method has become required on a number of constructors. A value will need to be provided to the following classes:BaseContainerRuntimeFactory
RuntimeFactory
ContainerRuntime
(constructor andloadRuntime
)FluidDataStoreRuntime
See testContainerRuntimeFactoryWithDefaultDataStore.ts for an example implemtation of
provideEntryPoint
for ContainerRuntime. See pureDataObjectFactory.ts for an example implementation ofprovideEntryPoint
for DataStoreRuntime.Subsequently, various
entryPoint
andgetEntryPoint()
endpoints have become required. Please see containerRuntime.ts for example implementations of these APIs.For more details, see Removing-IFluidRouter.md
-
Minimum TypeScript version now 5.1.6 871b3493dd
The minimum supported TypeScript version for Fluid 2.0 clients is now 5.1.6.
-
container-loader: Containers will connect in read-mode by default 871b3493dd
When a container is loaded, it will connect in read-mode unless it is loaded with a pending state containing stashed ops.
-
container-loader: Container caching in the Loader is removed 871b3493dd
Container caching in the Loader has been removed. Do not to rely on caching and inform the FluidFramework team ASAP if you cannot do so.
Dependency updates only.
Dependency updates only.
-
Temporarily restore id property on IContainerContext (#16846) 9825a692dd
The
id
property onIContainerContext
has been temporarily restored to ease the transition to2.0.0-internal.6.x
. It will be removed again in2.0.0-internal.7.0.0
.The original deprecation announcement can be found here.
-
Remove use of @fluidframework/common-definitions (#16638) a8c81509c9
The @fluidframework/common-definitions package is being deprecated, so the following interfaces and types are now imported from the @fluidframework/core-interfaces package:
- 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
Dependency updates only.
-
Removed IContainerContext.existing 8abce8cdb4
The recommended means of checking for existing changed to the instantiateRuntime param in 2021, and the IContainerContext.existing member was formally deprecated in 2.0.0-internal.2.0.0. This member is now removed.
-
Remove closeAndGetPendingLocalState from IContainer 8abce8cdb4
This change removes the deprecated and experimental method closeAndGetPendingLocalState from IContainer. It continues to exist on IContainerExperimental.
IContainerExperimental is an interface that is easily casted to, which enables partners to access experimental features for testing and evaluation. Moving the experimental method off IContainer will reduce exposure and churn on that production interface as we iterate on and finalize our experimental features.
Experimental features should not be used in production environments.
-
Loader container caching off by default 8abce8cdb4
Loader container caching will now be off by default and the ability to control it is deprecated. Loader caching is deprecated and will be removed in a future release, as well as all caching functionality of containers. Please try not to rely on caching and inform us if you cannot do so.
If you run into trouble with this behavior, please report it ASAP to the FluidFramework team and use the following options (available in this release only) to unblock you:
- set
ILoaderProps.options.cache
totrue
when constructing aLoader
object (see theILoaderOptions
interface) - set
[LoaderHeader.cache]
header totrue
when requesting a container
- set
-
getPendingLocalState and closeAndGetPendingLocalState are now async 8abce8cdb4
getPendingLocalState and closeAndGetPendingLocalState are now async to allow uploading blobs to attach to a DDS (in closing scenario). There is a new parameter in those methods at the container/runtime layer "notifyImminentClosure" which is true only when closing and ensures uploading blobs fast resolve and get attached. Once we apply stashed ops to new container, blob will try to reupload and we will know where to place its references.
-
Upgraded typescript transpilation target to ES2020 8abce8cdb4
Upgraded typescript transpilation target to ES2020. This is done in order to decrease the bundle sizes of Fluid Framework packages. This has provided size improvements across the board for ex. Loader, Driver, Runtime etc. Reduced bundle sizes helps to load lesser code in apps and hence also helps to improve the perf.If any app wants to target any older versions of browsers with which this target version is not compatible, then they can use packages like babel to transpile to a older target.
-
Loader.resolve()
throws ifLoaderHeader.sequenceNumber
andIContainerLoadMode.opsBeforeReturn
do not match 8abce8cdb4Calling
Loader.resolve()
will now throw an error ifLoaderHeader.sequenceNumber
is defined butIContainerLoadMode.opsBeforeReturn
is not set to "sequenceNumber". Vice versa,Loader.resolve()
will also throw an error ifIContainerLoadMode.opsBeforeReturn
is set to "sequenceNumber" butLoaderHeader.sequenceNumber
is not defined. -
IDeltaManager members disposed and dispose() removed 8abce8cdb4
IDeltaManager members disposed and dispose() were deprecated in 2.0.0-internal.5.3.0 and have now been removed.
-
Request APIs deprecated on ILoader 8abce8cdb4
The
request
API (associated with theIFluidRouter
interface) has been deprecated onILoader
andLoader
. Please migrate all usage to using theIContainer.request(...)
method if using a dynamic request URL, or to theIContainer.getEntryPoint()
method if trying to obtain the application-specified root object.Note: The
IContainer.request(...)
method will be deprecated in an upcoming release, so do not rely on this method for a long-term solution (the APIs aroundentryPoint
andgetEntryPoint()
will become required and available for usage in its place).After calling
ILoader.resolve(...)
, call therequest(...)
method on the returnedIContainer
with a corresponding request URL. For converting a request URL fromLoader
toContainer
, use theIUrlResolver
passed into theLoader
's constructor. The following is an example of what this change may look like:// OLD const request: IRequest; const urlResolver = new YourUrlResolver(); const loader = new Loader({ urlResolver, ... }); await loader.resolve(request); const response = loader.request(request);
// NEW const request: IRequest; const urlResolver = new YourUrlResolver(); const loader = new Loader({ urlResolver, ... }); const container = await loader.resolve(request); const resolvedUrl: IRequest = urlResolver.resolve(request); // Parse the `resolvedUrl.url` property as necessary before passing to `container.request(...)` // For an example, see the `Loader.resolveCore(...)` method const parsedResolvedUrl = // implement parse logic here const response = container.request(parsedResolvedUrl);
Status on removal of the request pattern is tracked in Removing-IFluidRouter.md
Dependency updates only.
-
Move closeAndGetPendingLocalState to IContainerExperimental (#16302) 93151af787
This change deprecates the experimental method closeAndGetPendingLocalState on IContainer and moves it to IContainerExperimental. IContainerExperimental is an interface that is easily casted to, which enables partners to access experimental features for testing and evaluation. Moving the experimental method off IContainer will reduce exposure and churn on that production interface as we iterate on and finalize our experimental features. Experimental features should not be used in production environments.
-
IContainerContext members deprecated (#16180) bf6a26cfe6
IContainerContext members disposed, dispose(), serviceConfiguration, and id have been deprecated and will be removed in an upcoming release.
disposed - The disposed state on the IContainerContext is not meaningful to the runtime.
dispose() - The runtime is not permitted to dispose the IContainerContext, this results in an inconsistent system state.
serviceConfiguration - This property is redundant, and is unused by the runtime. The same information can be found via
deltaManager.serviceConfiguration
on this object if it is necessary.id - The docId is already logged by the IContainerContext.taggedLogger for telemetry purposes, so this is generally unnecessary for telemetry. If the id is needed for other purposes it should be passed to the consumer explicitly.
Dependency updates only.
-
IContainer.dispose is now required 96484ac6c2
IContainer.dispose
is now a required method. This method should dispose any resources and switch the container to a permanently disconnected state.See the Closure section of Loader README.md for more details.
-
Calling
IContainer.close(...)
will no longer dispose the container runtime, document service, or document storage service. 8b242fdc79If the container is not expected to be used after the
close(...)
call, replace it instead with aIContainer.dispose(...)
call (this should be the most common case). UsingIContainer.dispose(...)
will no longer switch the container to "readonly" mode and relevant code should instead listen to the Container's "disposed" event.If you intend to pass your own critical error to the container, use
IContainer.close(...)
. Once you are done using the container, callIContainer.dispose(...)
.See the Closure section of Loader README.md for more details.
Dependency updates only.
-
Container-loader deprecations (#14891) 961e96f3c9
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