@@ -30,7 +30,7 @@ public class JsonStorageAreaObserver : IJsonStorageAreaObserver
30
30
31
31
public string AreaName => StorageArea . Name ;
32
32
public IInfoStream InfoStream => infoStream ;
33
- public IObservable < IJsonDocumentChange > DocumentChanges => observable ;
33
+ public IObservable < IJsonDocumentSourceEvent > DocumentChanges => observable ;
34
34
public IObservableValue < bool > Initialized { get ; } = new ObservableValue < bool > ( ) ;
35
35
36
36
public JsonStorageAreaObserver ( IStorageArea storageArea , IWebTaskScheduler scheduler , string pollInterval = "10s" )
@@ -69,6 +69,8 @@ public void UpdateGeneration(string area, long value)
69
69
public async Task ResetAsync ( )
70
70
{
71
71
UpdateGeneration ( AreaName , initialGeneration ) ;
72
+ observable . Publish ( new JsonDocumentSourceReset ( AreaName ) ) ;
73
+ task . Signal ( ) ;
72
74
}
73
75
74
76
public void RunUpdateCheck ( )
@@ -81,7 +83,7 @@ public void RunUpdateCheck()
81
83
BeforeInitialize ( ) ;
82
84
infoStream . WriteJsonSourceEvent ( JsonSourceEventType . Initializing , StorageArea . Name , $ "Initializing for storageArea '{ StorageArea . Name } '.") ;
83
85
using IStorageAreaLogReader changes = log . OpenLogReader ( generation , Initialized . Value ) ;
84
- PublishChanges ( changes , _ => JsonChangeType . Create ) ;
86
+ PublishChanges ( changes , row => new JsonDocumentCreated ( row . Area , row . CreateEntity ( ) , row . Size , new GenerationInfo ( row . Generation , latestGeneration ) ) ) ;
85
87
Initialized . Value = true ;
86
88
infoStream . WriteJsonSourceEvent ( JsonSourceEventType . Initialized , StorageArea . Name , $ "Initialization complete for storageArea '{ StorageArea . Name } ' in { timer . Elapsed } .") ;
87
89
AfterInitialize ( ) ;
@@ -92,42 +94,37 @@ public void RunUpdateCheck()
92
94
BeforeUpdate ( ) ;
93
95
infoStream . WriteJsonSourceEvent ( JsonSourceEventType . Updating , StorageArea . Name , $ "Checking updates for storageArea '{ StorageArea . Name } '.") ;
94
96
using IStorageAreaLogReader changes = log . OpenLogReader ( generation , Initialized . Value ) ;
95
- PublishChanges ( changes , row => MapChange ( row . Type ) ) ;
97
+ PublishChanges ( changes , MapRow ) ;
96
98
infoStream . WriteJsonSourceEvent ( JsonSourceEventType . Updated , StorageArea . Name , $ "Done checking updates for storageArea '{ StorageArea . Name } ' in { timer . Elapsed } .") ;
97
99
AfterUpdate ( ) ;
98
100
}
99
101
PublishCommitSignal ( ) ;
100
102
101
- JsonChangeType MapChange ( ChangeType type )
103
+ IJsonDocumentSourceEvent MapRow ( IChangeLogRow row )
102
104
{
103
- return type switch
105
+ return row . Type switch
104
106
{
105
- ChangeType . Create => JsonChangeType . Create ,
106
- ChangeType . Update => JsonChangeType . Update ,
107
- ChangeType . Delete => JsonChangeType . Delete ,
108
- _ => throw new ArgumentOutOfRangeException ( nameof ( type ) , type , null )
107
+ ChangeType . Create => new JsonDocumentCreated ( row . Area , row . CreateEntity ( ) , row . Size , new GenerationInfo ( row . Generation , latestGeneration ) ) ,
108
+ ChangeType . Update => new JsonDocumentUpdated ( row . Area , row . CreateEntity ( ) , row . Size , new GenerationInfo ( row . Generation , latestGeneration ) ) ,
109
+ ChangeType . Delete => new JsonDocumentDeleted ( row . Area , row . CreateEntity ( ) , row . Size , new GenerationInfo ( row . Generation , latestGeneration ) ) ,
110
+ _ => throw new NotSupportedException ( )
109
111
} ;
110
112
}
111
113
112
114
void PublishCommitSignal ( )
113
115
{
114
- observable . Publish ( new CommitSignal ( AreaName ) ) ;
116
+ observable . Publish ( new JsonDocumentSourceDigestCompleted ( AreaName ) ) ;
115
117
}
116
118
117
- void PublishChanges ( IStorageAreaLogReader changes , Func < IChangeLogRow , JsonChangeType > changeTypeGetter )
119
+ void PublishChanges ( IStorageAreaLogReader changes , Func < IChangeLogRow , IJsonDocumentSourceEvent > rowMapper )
118
120
{
119
121
foreach ( IChangeLogRow change in changes )
120
122
{
121
123
generation = change . Generation ;
122
124
if ( change . Type == ChangeType . Faulty )
123
125
continue ;
124
-
125
- observable . Publish ( new JsonDocumentChange (
126
- change . Area ,
127
- changeTypeGetter ( change ) ,
128
- change . CreateEntity ( ) ,
129
- change . Size ,
130
- new GenerationInfo ( change . Generation , latestGeneration ) ) ) ;
126
+
127
+ observable . Publish ( rowMapper ( change ) ) ;
131
128
}
132
129
}
133
130
}
0 commit comments