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

            //The "tableVersion" parameter should always exist when inserting 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 on etag (which does
            //exist for the sake of robustness) as mandated by Orleans membership protocol.
            //Likewise, no update can be done without membership entry.
            if (entry == null)
            {
                if (logger.IsVerbose)
                {
                    logger.Verbose("SqlMembershipTable.InsertRow aborted due to null check. MembershipEntry is null.");
                }
                throw new ArgumentNullException("entry");
            }
            if (tableVersion == null)
            {
                if (logger.IsVerbose)
                {
                    logger.Verbose("SqlMembershipTable.InsertRow aborted due to null check. TableVersion is null ");
                }
                throw new ArgumentNullException("tableVersion");
            }

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