private Task <bool> DirectApplyIndexUpdate(IIndexableGrain g, IMemberUpdate updt, bool isUniqueIndex, IndexMetaData idxMetaData, SiloAddress siloAddress) { V updatedGrain = g; HashIndexBucketUtils.UpdateBucket(updatedGrain, updt, state, isUniqueIndex, idxMetaData); return(Task.FromResult(true)); }
private async Task DirectApplyIndexUpdateNonPersistent(IIndexableGrain g, IMemberUpdate updt, bool isUniqueIndex, IndexMetaData idxMetaData, SiloAddress siloAddress) { //this variable determines whether index was still unavailable //when we received a delete operation bool fixIndexUnavailableOnDelete = false; //the target grain that is updated V updatedGrain = g.AsReference <V>(GrainFactory); K befImg; HashIndexSingleBucketEntry <V> befEntry; //Updates the index bucket synchronously //(note that no other thread can run concurrently //before we reach an await operation, so no concurrency //control mechanism (e.g., locking) is required) if (!HashIndexBucketUtils.UpdateBucket(updatedGrain, updt, State, isUniqueIndex, idxMetaData, out befImg, out befEntry, out fixIndexUnavailableOnDelete)) { await(await GetNextBucketAndPersist()).DirectApplyIndexUpdate(g, updt.AsImmutable(), isUniqueIndex, idxMetaData, siloAddress); } //if the index was still unavailable //when we received a delete operation //if (fixIndexUnavailableOnDelete) //{ // //create tombstone //} }