澄清:这个问题是关于 Greg Young 的 Event Store。
我试图软删除包含 2 个事件的流:
var slice = con.ReadStreamEventsBackwardAsync(streamName, 0, 1, resolveLinkTos: true).Result;
es.DeleteStreamAsync(streamName, slice.LastEventNumber, hardDelete: false).Wait();
这个电话是成功的,调查商店发现了一个新的元数据事件。此事件的类型$metadata
和包含:
{
"$tb": 9223372036854775807
}
$tb
代表“之前截断”,在删除流和事件中进行了描述。文档说:
删除流时,其 TruncateBefore 或 $tb 设置为流当前最后一个事件编号。
哪个(如您在上面的 json 中所见)并非如此。截断之前设置为long.MaxVaue
。尽管这似乎是不好的行为,但它并不是真正的问题。问题是我不能再写入流了。调用以下片段成功完成,但不会将任何事件附加到流中:
await es.AppendToStreamAsync(persistenceId, expectedVersion < 0 ? ExpectedVersion.NoStream : expectedVersion, events);
在上面的片段中,expectedVersion
设置为-1
. 软删除流的元数据说:
Stream is deleted: False
Meta Stream version: 0
Truncate before: 9223372036854775807
Max count:
Max age:
从流的最后一个事件中读取切片显示:
Last Event number: 1
Next Event number: -1
Status: StreamNotFound
有没有人遇到过同样的问题,并且可能已经找到了允许继续将事件附加到已删除流的解决方案?