public void Restore() { var restoreEnumerator = persistentStorage.Restore().GetEnumerator(); if (!restoreEnumerator.MoveNext()) { persistedMessageId = lastMessageId = -1; data = new InfiniteArray <Message>(0, dataArrayOptions); RestoreSubscriptions(); return; } data = new InfiniteArray <Message>(restoreEnumerator.Current.ID, dataArrayOptions); data.Add(restoreEnumerator.Current); while (restoreEnumerator.MoveNext()) { data.Add(restoreEnumerator.Current); } currentData = new DataSnapshot() { StartMessageId = data.GetFirstItemIndex(), Data = data.GetDataBlocks() }; persistedMessageId = lastMessageId = currentData.Data[^ 1].Span[^ 1].ID;
private long FindSequenceNumberToAck(long persistedId) { lock (sync) { if (disposed) { // do not throw exception here return(-1); } var blocks = idMap.GetDataBlocks(); var ind = idMap.GetLastItemIndex(); for (int i = blocks.Length - 1; i >= 0; i--) { var m = blocks[i].Span; for (int j = m.Length - 1; j >= 0; j--) { if (m[j].ID <= persistedId) { var idToAck = m[j].WriterID; idMap.FreeTo(ind + 1); return(idToAck); } ind--; } } } return(-1); }