internal Status Consume(out ValueEnvelope output) { output = Value; Value = default; var status = Status; Status = Status.NOTFOUND; return(status); }
private Status ExecuteGet(ref KeyEnvelope keyEnvelope, ref ValueEnvelope inputEnvelope, ref ValueEnvelope outputEnvelope) { Status status = KVSession.Read(ref keyEnvelope, ref inputEnvelope, ref outputEnvelope, UnsafeContext, GetSerialNum()); if (status == Status.PENDING) { KVSession.CompletePending(true, true); status = UnsafeContext.Consume(out outputEnvelope); } return(status); }
private void ServeUpsert(Job job) { KeyEnvelope keyEnvelope = new KeyEnvelope(job.Key); ValueEnvelope valueEnvelope = new ValueEnvelope(job.Input); try { KVSession.Upsert(ref keyEnvelope, ref valueEnvelope, Context.Empty, GetSerialNum()); } catch (Exception e) { job.Complete(e); } finally { job.Complete(true, job.Input); } }
private void ServeGetContent(Job job) { KeyEnvelope keyEnvelope = new KeyEnvelope(job.Key); ValueEnvelope inputEnvelope = default; ValueEnvelope outputEnvelope = default; Status status = Status.ERROR; try { status = ExecuteGet(ref keyEnvelope, ref inputEnvelope, ref outputEnvelope); switch (status) { case Status.ERROR: job.Complete(new Exception($"read error => {JsonSerializer.Serialize(job.Key)}")); break; case Status.NOTFOUND: job.Complete(false); break; case Status.OK: job.Complete(true, outputEnvelope.Content); break; default: job.Complete(new Exception($"Read WTF => {status} - {JsonSerializer.Serialize(job.Key)}")); break; } } catch (Exception e) { job.Complete(e); } }
private void ServeRemove(Job job) { KeyEnvelope keyEnvelope = new KeyEnvelope(job.Key); ValueEnvelope outputEnvelope = default; Status status = Status.ERROR; try { status = KVSession.Delete(ref keyEnvelope, UnsafeContext, GetSerialNum()); if (status == Status.PENDING) { KVSession.CompletePending(true, true); status = UnsafeContext.Consume(out outputEnvelope); } } catch (Exception e) { job.Complete(e); } switch (status) { case Status.ERROR: job.Complete(new Exception($"read error => {JsonSerializer.Serialize(job.Key)}")); break; case Status.NOTFOUND: job.Complete(false); break; case Status.OK: job.Complete(true, default); break; } }
internal void CompleteRead(ref Status status, ref ValueEnvelope output) { Status = status; Value = output; }