public async Task <Boolean> UpdateRow(MembershipEntry entry, String etag, TableVersion tableVersion) { //Update Silo Liveness try { var siloRegistration = ConsulSiloRegistrationAssembler.FromMembershipEntry(_deploymentId, entry, etag); var updateKV = ConsulSiloRegistrationAssembler.ToKVPair(siloRegistration); //If the KV.CAS() call returns false then the update failed var tryUpdate = await _consulClient.KV.CAS(updateKV); if (!tryUpdate.Response) { _logger.Debug("ConsulMembershipProvider failed the CAS check when updating the registration for silo {0}.", entry.SiloAddress); return(false); } return(true); } catch (Exception ex) { _logger.Info("ConsulMembershipProvider failed to update the registration for silo {0}: {1}.", entry.SiloAddress, ex); throw; } }
public async Task <Boolean> InsertRow(MembershipEntry entry, TableVersion tableVersion) { try { //Use "0" as the eTag then Consul KV CAS will treat the operation as an insert and return false if the KV already exiats. var consulSiloRegistration = ConsulSiloRegistrationAssembler.FromMembershipEntry(_deploymentId, entry, "0"); var insertKV = ConsulSiloRegistrationAssembler.ToKVPair(consulSiloRegistration); var tryUpdate = await _consulClient.KV.CAS(insertKV); if (!tryUpdate.Response) { _logger.Debug("ConsulMembershipProvider failed to insert the row because a registration already exists for silo {0}.", entry.SiloAddress); return(false); } return(true); } catch (Exception ex) { _logger.Info("ConsulMembershipProvider failed to insert registration for silo {0}; {1}.", entry.SiloAddress, ex); throw; } }