Repository navigation
Expand file tree
/
Copy pathSearchCommands.cs
More file actions
32 lines (29 loc) · 1.65 KB
/
Copy pathSearchCommands.cs
File metadata and controls
32 lines (29 loc) · 1.65 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
using KeyLoad.Core.Search;
using KeyLoad.Storage;
using ManagedCode.Communication.Commands;
namespace KeyLoad.Core;
/// <summary>Executes SearchCommands operations against the caller's database context.</summary>
public static class SearchCommands
{
internal static CommitReceipt ExecuteBm25CorpusPublication(this DatabaseEngine engine, IAtomicTransaction transaction, PrincipalRecord administrator, Command<DatabaseCommand> operation, long position)
{
var phase = OperationProtocol.Payload<Bm25CorpusPublicationPhaseCommand>(operation);
OperationProtocol.RequireEnvelopeId(operation, phase.CommandId);
var principal = engine.RequireBm25Subject(transaction, administrator, phase, operation.Timestamp);
var current = phase.Current;
var resource = engine.Resource(transaction, current.Partition, current.Collection, ResourceKind.Collection);
var placement = engine.ReadPlacementWitness(transaction, current.Partition);
if (!Bm25CorpusDependencies.Matches(engine, transaction, principal, resource, current, placement))
{
throw Errors.Fail(ErrorCode.Conflict, Bm25CorpusProtocol.Changed);
}
var key = Bm25CorpusKeys.Current(current);
var previous = transaction.GetRecord<Bm25CorpusCurrent>(key);
if (previous?.Generation != phase.ExpectedGeneration)
{
throw Errors.Fail(ErrorCode.Conflict, Bm25CorpusProtocol.Changed);
}
transaction.PutRecord(key, current);
return new CommitReceipt(operation.CommandId, engine.Token(transaction, current.Partition, position), [], engine.Durability, engine.AcknowledgedPersistedCopies);
}
}