Changes API: How to Subscribe to Operation Changes
The following methods allow you to subscribe to operation changes:
ForOperationId
Operation changes for one operation can be observed using the ForOperationId
method.
Please note that from RavenDB 6.2 on, operation changes can be tracked only on a specific node.
The purpose of this change is to improve results consistency, as an operation may behave very differently
on different nodes and cross-cluster tracking of an operation may become confusing and ineffective if
the operation fails over from one node to another.
Tracking operations will therefore be possible only if the Changes
API was
opened using a method that limits
tracking to a single node: store.Changes(dbName, nodeTag)
Syntax
IChangesObservable<OperationStatusChange> ForOperationId(long operationId);
Parameters | ||
---|---|---|
operationId | long | ID of an operation for which notifications will be processed. |
Return value | |
---|---|
IChangesObservable<OperationStatusChange> | Observable that allows you to add subscriptions to notifications for an operation with a given ID. |
Example
IDisposable subscription = store
.Changes(dbName, nodeTag)
.ForOperationId(operationId)
.Subscribe(
change =>
{
switch (change.State.Status)
{
case OperationStatus.InProgress:
//Do Something
break;
case OperationStatus.Completed:
//Do Something
break;
case OperationStatus.Faulted:
//Do Something
break;
case OperationStatus.Canceled:
//Do Something
break;
default:
throw new ArgumentOutOfRangeException();
}
});
ForAllOperations
Operations changes for all Operations can be observed using the ForAllOperations
method.
Please note that from RavenDB 6.2 on, operation changes can be tracked only on a specific node.
The purpose of this change is to improve results consistency, as an operation may behave very differently
on different nodes and cross-cluster tracking of an operation may become confusing and ineffective if
the operation fails over from one node to another.
Tracking operations will therefore be possible only if the Changes
API was
opened using a method that limits
tracking to a single node: store.Changes(dbName, nodeTag)
Return Value | |
---|---|
IChangesObservable<OperationStatusChange> | Observable that allows to add subscriptions to notifications for all operations. |
Syntax
IChangesObservable<OperationStatusChange> ForAllOperations();
Example
IDisposable subscription = store
.Changes(dbName, nodeTag)
.ForAllOperations()
.Subscribe(change => Console.WriteLine("Operation #{1} reports progress: {0}", change.State.Progress.ToJson(), change.OperationId));
OperationChange
OperationState
Members
Name | Type | Description |
---|---|---|
Result | IOperationResult | Operation result |
Progress | IOperationProgress | Instance of IOperationProgress (json representation of the progress) |
Status | OperationStatus | Operation status |
OperationResult
Members
Name | Type | Description |
---|---|---|
Message | string | Operation message |
ShouldPersist | bool | determine whether or not the result should be saved in the storage |
OperationStatus
OperationStatus (enum)
Name | Description |
---|---|
InProgress | Indicates that the operation made progress |
Completed | Indicates that the operation has completed |
Faulted | Indicates that the operation is faulted |
Canceled | Indicates that the operation has been Canceled |
Remarks
To get more method overloads, especially ones supporting delegates, please add the
System.Reactive.Core package to your project.