Task <bool> IMembershipTable.UpdateRow(MembershipEntry entry, string etag, TableVersion tableVersion)
        {
            if (logger.IsVerbose3)
            {
                logger.Verbose3(string.Format("IMembershipTable.UpdateRow called with entry {0}, etag {1} and tableVersion {2}.", entry, etag, tableVersion));
            }

            //The "tableVersion" parameter should always exist when updating a row as Init should
            //have been called and membership version created and read. This is an optimization to
            //not to go through all the way to database to fail a conditional check (which does
            //exist for the sake of robustness) as mandated by Orleans membership protocol.
            //Likewise, no update can be done without membership entry or an etag.
            if (entry == null)
            {
                if (logger.IsVerbose)
                {
                    logger.Verbose("SqlMembershipTable.UpdateRow aborted due to null check. MembershipEntry is null.");
                }
                throw new ArgumentNullException("entry");
            }
            if (etag == null)
            {
                if (logger.IsVerbose)
                {
                    logger.Verbose("SqlMembershipTable.UpdateRow aborted due to null check. etag is null.");
                }
                throw new ArgumentNullException("etag");
            }
            if (tableVersion == null)
            {
                if (logger.IsVerbose)
                {
                    logger.Verbose("SqlMembershipTable.UpdateRow aborted due to null check. TableVersion is null ");
                }
                throw new ArgumentNullException("tableVersion");
            }

            try
            {
                var query = queryConstants.GetConstant(database.InvariantName, QueryKeys.UpdateMembershipKey);
                return(database.UpdateMembershipRowAsync(query, deploymentId, etag, entry, tableVersion));
            }
            catch (Exception ex)
            {
                if (logger.IsVerbose)
                {
                    logger.Verbose("SqlMembershipTable.UpdateRow failed: {0}", ex);
                }
                throw;
            }
        }