github.com/mattermost/mattermost-server/v5@v5.39.3/store/retrylayer/retrylayer.go (about)

     1  // Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.
     2  // See LICENSE.txt for license information.
     3  
     4  // Code generated by "make store-layers"
     5  // DO NOT EDIT
     6  
     7  package retrylayer
     8  
     9  import (
    10  	"context"
    11  
    12  	"github.com/go-sql-driver/mysql"
    13  	"github.com/lib/pq"
    14  	"github.com/mattermost/mattermost-server/v5/model"
    15  	"github.com/mattermost/mattermost-server/v5/store"
    16  	"github.com/pkg/errors"
    17  )
    18  
    19  const mySQLDeadlockCode = uint16(1213)
    20  
    21  type RetryLayer struct {
    22  	store.Store
    23  	AuditStore                store.AuditStore
    24  	BotStore                  store.BotStore
    25  	ChannelStore              store.ChannelStore
    26  	ChannelMemberHistoryStore store.ChannelMemberHistoryStore
    27  	ClusterDiscoveryStore     store.ClusterDiscoveryStore
    28  	CommandStore              store.CommandStore
    29  	CommandWebhookStore       store.CommandWebhookStore
    30  	ComplianceStore           store.ComplianceStore
    31  	EmojiStore                store.EmojiStore
    32  	FileInfoStore             store.FileInfoStore
    33  	GroupStore                store.GroupStore
    34  	JobStore                  store.JobStore
    35  	LicenseStore              store.LicenseStore
    36  	LinkMetadataStore         store.LinkMetadataStore
    37  	OAuthStore                store.OAuthStore
    38  	PluginStore               store.PluginStore
    39  	PostStore                 store.PostStore
    40  	PreferenceStore           store.PreferenceStore
    41  	ProductNoticesStore       store.ProductNoticesStore
    42  	ReactionStore             store.ReactionStore
    43  	RemoteClusterStore        store.RemoteClusterStore
    44  	RetentionPolicyStore      store.RetentionPolicyStore
    45  	RoleStore                 store.RoleStore
    46  	SchemeStore               store.SchemeStore
    47  	SessionStore              store.SessionStore
    48  	SharedChannelStore        store.SharedChannelStore
    49  	StatusStore               store.StatusStore
    50  	SystemStore               store.SystemStore
    51  	TeamStore                 store.TeamStore
    52  	TermsOfServiceStore       store.TermsOfServiceStore
    53  	ThreadStore               store.ThreadStore
    54  	TokenStore                store.TokenStore
    55  	UploadSessionStore        store.UploadSessionStore
    56  	UserStore                 store.UserStore
    57  	UserAccessTokenStore      store.UserAccessTokenStore
    58  	UserTermsOfServiceStore   store.UserTermsOfServiceStore
    59  	WebhookStore              store.WebhookStore
    60  }
    61  
    62  func (s *RetryLayer) Audit() store.AuditStore {
    63  	return s.AuditStore
    64  }
    65  
    66  func (s *RetryLayer) Bot() store.BotStore {
    67  	return s.BotStore
    68  }
    69  
    70  func (s *RetryLayer) Channel() store.ChannelStore {
    71  	return s.ChannelStore
    72  }
    73  
    74  func (s *RetryLayer) ChannelMemberHistory() store.ChannelMemberHistoryStore {
    75  	return s.ChannelMemberHistoryStore
    76  }
    77  
    78  func (s *RetryLayer) ClusterDiscovery() store.ClusterDiscoveryStore {
    79  	return s.ClusterDiscoveryStore
    80  }
    81  
    82  func (s *RetryLayer) Command() store.CommandStore {
    83  	return s.CommandStore
    84  }
    85  
    86  func (s *RetryLayer) CommandWebhook() store.CommandWebhookStore {
    87  	return s.CommandWebhookStore
    88  }
    89  
    90  func (s *RetryLayer) Compliance() store.ComplianceStore {
    91  	return s.ComplianceStore
    92  }
    93  
    94  func (s *RetryLayer) Emoji() store.EmojiStore {
    95  	return s.EmojiStore
    96  }
    97  
    98  func (s *RetryLayer) FileInfo() store.FileInfoStore {
    99  	return s.FileInfoStore
   100  }
   101  
   102  func (s *RetryLayer) Group() store.GroupStore {
   103  	return s.GroupStore
   104  }
   105  
   106  func (s *RetryLayer) Job() store.JobStore {
   107  	return s.JobStore
   108  }
   109  
   110  func (s *RetryLayer) License() store.LicenseStore {
   111  	return s.LicenseStore
   112  }
   113  
   114  func (s *RetryLayer) LinkMetadata() store.LinkMetadataStore {
   115  	return s.LinkMetadataStore
   116  }
   117  
   118  func (s *RetryLayer) OAuth() store.OAuthStore {
   119  	return s.OAuthStore
   120  }
   121  
   122  func (s *RetryLayer) Plugin() store.PluginStore {
   123  	return s.PluginStore
   124  }
   125  
   126  func (s *RetryLayer) Post() store.PostStore {
   127  	return s.PostStore
   128  }
   129  
   130  func (s *RetryLayer) Preference() store.PreferenceStore {
   131  	return s.PreferenceStore
   132  }
   133  
   134  func (s *RetryLayer) ProductNotices() store.ProductNoticesStore {
   135  	return s.ProductNoticesStore
   136  }
   137  
   138  func (s *RetryLayer) Reaction() store.ReactionStore {
   139  	return s.ReactionStore
   140  }
   141  
   142  func (s *RetryLayer) RemoteCluster() store.RemoteClusterStore {
   143  	return s.RemoteClusterStore
   144  }
   145  
   146  func (s *RetryLayer) RetentionPolicy() store.RetentionPolicyStore {
   147  	return s.RetentionPolicyStore
   148  }
   149  
   150  func (s *RetryLayer) Role() store.RoleStore {
   151  	return s.RoleStore
   152  }
   153  
   154  func (s *RetryLayer) Scheme() store.SchemeStore {
   155  	return s.SchemeStore
   156  }
   157  
   158  func (s *RetryLayer) Session() store.SessionStore {
   159  	return s.SessionStore
   160  }
   161  
   162  func (s *RetryLayer) SharedChannel() store.SharedChannelStore {
   163  	return s.SharedChannelStore
   164  }
   165  
   166  func (s *RetryLayer) Status() store.StatusStore {
   167  	return s.StatusStore
   168  }
   169  
   170  func (s *RetryLayer) System() store.SystemStore {
   171  	return s.SystemStore
   172  }
   173  
   174  func (s *RetryLayer) Team() store.TeamStore {
   175  	return s.TeamStore
   176  }
   177  
   178  func (s *RetryLayer) TermsOfService() store.TermsOfServiceStore {
   179  	return s.TermsOfServiceStore
   180  }
   181  
   182  func (s *RetryLayer) Thread() store.ThreadStore {
   183  	return s.ThreadStore
   184  }
   185  
   186  func (s *RetryLayer) Token() store.TokenStore {
   187  	return s.TokenStore
   188  }
   189  
   190  func (s *RetryLayer) UploadSession() store.UploadSessionStore {
   191  	return s.UploadSessionStore
   192  }
   193  
   194  func (s *RetryLayer) User() store.UserStore {
   195  	return s.UserStore
   196  }
   197  
   198  func (s *RetryLayer) UserAccessToken() store.UserAccessTokenStore {
   199  	return s.UserAccessTokenStore
   200  }
   201  
   202  func (s *RetryLayer) UserTermsOfService() store.UserTermsOfServiceStore {
   203  	return s.UserTermsOfServiceStore
   204  }
   205  
   206  func (s *RetryLayer) Webhook() store.WebhookStore {
   207  	return s.WebhookStore
   208  }
   209  
   210  type RetryLayerAuditStore struct {
   211  	store.AuditStore
   212  	Root *RetryLayer
   213  }
   214  
   215  type RetryLayerBotStore struct {
   216  	store.BotStore
   217  	Root *RetryLayer
   218  }
   219  
   220  type RetryLayerChannelStore struct {
   221  	store.ChannelStore
   222  	Root *RetryLayer
   223  }
   224  
   225  type RetryLayerChannelMemberHistoryStore struct {
   226  	store.ChannelMemberHistoryStore
   227  	Root *RetryLayer
   228  }
   229  
   230  type RetryLayerClusterDiscoveryStore struct {
   231  	store.ClusterDiscoveryStore
   232  	Root *RetryLayer
   233  }
   234  
   235  type RetryLayerCommandStore struct {
   236  	store.CommandStore
   237  	Root *RetryLayer
   238  }
   239  
   240  type RetryLayerCommandWebhookStore struct {
   241  	store.CommandWebhookStore
   242  	Root *RetryLayer
   243  }
   244  
   245  type RetryLayerComplianceStore struct {
   246  	store.ComplianceStore
   247  	Root *RetryLayer
   248  }
   249  
   250  type RetryLayerEmojiStore struct {
   251  	store.EmojiStore
   252  	Root *RetryLayer
   253  }
   254  
   255  type RetryLayerFileInfoStore struct {
   256  	store.FileInfoStore
   257  	Root *RetryLayer
   258  }
   259  
   260  type RetryLayerGroupStore struct {
   261  	store.GroupStore
   262  	Root *RetryLayer
   263  }
   264  
   265  type RetryLayerJobStore struct {
   266  	store.JobStore
   267  	Root *RetryLayer
   268  }
   269  
   270  type RetryLayerLicenseStore struct {
   271  	store.LicenseStore
   272  	Root *RetryLayer
   273  }
   274  
   275  type RetryLayerLinkMetadataStore struct {
   276  	store.LinkMetadataStore
   277  	Root *RetryLayer
   278  }
   279  
   280  type RetryLayerOAuthStore struct {
   281  	store.OAuthStore
   282  	Root *RetryLayer
   283  }
   284  
   285  type RetryLayerPluginStore struct {
   286  	store.PluginStore
   287  	Root *RetryLayer
   288  }
   289  
   290  type RetryLayerPostStore struct {
   291  	store.PostStore
   292  	Root *RetryLayer
   293  }
   294  
   295  type RetryLayerPreferenceStore struct {
   296  	store.PreferenceStore
   297  	Root *RetryLayer
   298  }
   299  
   300  type RetryLayerProductNoticesStore struct {
   301  	store.ProductNoticesStore
   302  	Root *RetryLayer
   303  }
   304  
   305  type RetryLayerReactionStore struct {
   306  	store.ReactionStore
   307  	Root *RetryLayer
   308  }
   309  
   310  type RetryLayerRemoteClusterStore struct {
   311  	store.RemoteClusterStore
   312  	Root *RetryLayer
   313  }
   314  
   315  type RetryLayerRetentionPolicyStore struct {
   316  	store.RetentionPolicyStore
   317  	Root *RetryLayer
   318  }
   319  
   320  type RetryLayerRoleStore struct {
   321  	store.RoleStore
   322  	Root *RetryLayer
   323  }
   324  
   325  type RetryLayerSchemeStore struct {
   326  	store.SchemeStore
   327  	Root *RetryLayer
   328  }
   329  
   330  type RetryLayerSessionStore struct {
   331  	store.SessionStore
   332  	Root *RetryLayer
   333  }
   334  
   335  type RetryLayerSharedChannelStore struct {
   336  	store.SharedChannelStore
   337  	Root *RetryLayer
   338  }
   339  
   340  type RetryLayerStatusStore struct {
   341  	store.StatusStore
   342  	Root *RetryLayer
   343  }
   344  
   345  type RetryLayerSystemStore struct {
   346  	store.SystemStore
   347  	Root *RetryLayer
   348  }
   349  
   350  type RetryLayerTeamStore struct {
   351  	store.TeamStore
   352  	Root *RetryLayer
   353  }
   354  
   355  type RetryLayerTermsOfServiceStore struct {
   356  	store.TermsOfServiceStore
   357  	Root *RetryLayer
   358  }
   359  
   360  type RetryLayerThreadStore struct {
   361  	store.ThreadStore
   362  	Root *RetryLayer
   363  }
   364  
   365  type RetryLayerTokenStore struct {
   366  	store.TokenStore
   367  	Root *RetryLayer
   368  }
   369  
   370  type RetryLayerUploadSessionStore struct {
   371  	store.UploadSessionStore
   372  	Root *RetryLayer
   373  }
   374  
   375  type RetryLayerUserStore struct {
   376  	store.UserStore
   377  	Root *RetryLayer
   378  }
   379  
   380  type RetryLayerUserAccessTokenStore struct {
   381  	store.UserAccessTokenStore
   382  	Root *RetryLayer
   383  }
   384  
   385  type RetryLayerUserTermsOfServiceStore struct {
   386  	store.UserTermsOfServiceStore
   387  	Root *RetryLayer
   388  }
   389  
   390  type RetryLayerWebhookStore struct {
   391  	store.WebhookStore
   392  	Root *RetryLayer
   393  }
   394  
   395  func isRepeatableError(err error) bool {
   396  	var pqErr *pq.Error
   397  	var mysqlErr *mysql.MySQLError
   398  	switch {
   399  	case errors.As(errors.Cause(err), &pqErr):
   400  		if pqErr.Code == "40001" || pqErr.Code == "40P01" {
   401  			return true
   402  		}
   403  	case errors.As(errors.Cause(err), &mysqlErr):
   404  		if mysqlErr.Number == mySQLDeadlockCode {
   405  			return true
   406  		}
   407  	}
   408  	return false
   409  }
   410  
   411  func (s *RetryLayerAuditStore) Get(user_id string, offset int, limit int) (model.Audits, error) {
   412  
   413  	tries := 0
   414  	for {
   415  		result, err := s.AuditStore.Get(user_id, offset, limit)
   416  		if err == nil {
   417  			return result, nil
   418  		}
   419  		if !isRepeatableError(err) {
   420  			return result, err
   421  		}
   422  		tries++
   423  		if tries >= 3 {
   424  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
   425  			return result, err
   426  		}
   427  	}
   428  
   429  }
   430  
   431  func (s *RetryLayerAuditStore) PermanentDeleteByUser(userID string) error {
   432  
   433  	tries := 0
   434  	for {
   435  		err := s.AuditStore.PermanentDeleteByUser(userID)
   436  		if err == nil {
   437  			return nil
   438  		}
   439  		if !isRepeatableError(err) {
   440  			return err
   441  		}
   442  		tries++
   443  		if tries >= 3 {
   444  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
   445  			return err
   446  		}
   447  	}
   448  
   449  }
   450  
   451  func (s *RetryLayerAuditStore) Save(audit *model.Audit) error {
   452  
   453  	tries := 0
   454  	for {
   455  		err := s.AuditStore.Save(audit)
   456  		if err == nil {
   457  			return nil
   458  		}
   459  		if !isRepeatableError(err) {
   460  			return err
   461  		}
   462  		tries++
   463  		if tries >= 3 {
   464  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
   465  			return err
   466  		}
   467  	}
   468  
   469  }
   470  
   471  func (s *RetryLayerBotStore) Get(userID string, includeDeleted bool) (*model.Bot, error) {
   472  
   473  	tries := 0
   474  	for {
   475  		result, err := s.BotStore.Get(userID, includeDeleted)
   476  		if err == nil {
   477  			return result, nil
   478  		}
   479  		if !isRepeatableError(err) {
   480  			return result, err
   481  		}
   482  		tries++
   483  		if tries >= 3 {
   484  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
   485  			return result, err
   486  		}
   487  	}
   488  
   489  }
   490  
   491  func (s *RetryLayerBotStore) GetAll(options *model.BotGetOptions) ([]*model.Bot, error) {
   492  
   493  	tries := 0
   494  	for {
   495  		result, err := s.BotStore.GetAll(options)
   496  		if err == nil {
   497  			return result, nil
   498  		}
   499  		if !isRepeatableError(err) {
   500  			return result, err
   501  		}
   502  		tries++
   503  		if tries >= 3 {
   504  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
   505  			return result, err
   506  		}
   507  	}
   508  
   509  }
   510  
   511  func (s *RetryLayerBotStore) PermanentDelete(userID string) error {
   512  
   513  	tries := 0
   514  	for {
   515  		err := s.BotStore.PermanentDelete(userID)
   516  		if err == nil {
   517  			return nil
   518  		}
   519  		if !isRepeatableError(err) {
   520  			return err
   521  		}
   522  		tries++
   523  		if tries >= 3 {
   524  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
   525  			return err
   526  		}
   527  	}
   528  
   529  }
   530  
   531  func (s *RetryLayerBotStore) Save(bot *model.Bot) (*model.Bot, error) {
   532  
   533  	tries := 0
   534  	for {
   535  		result, err := s.BotStore.Save(bot)
   536  		if err == nil {
   537  			return result, nil
   538  		}
   539  		if !isRepeatableError(err) {
   540  			return result, err
   541  		}
   542  		tries++
   543  		if tries >= 3 {
   544  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
   545  			return result, err
   546  		}
   547  	}
   548  
   549  }
   550  
   551  func (s *RetryLayerBotStore) Update(bot *model.Bot) (*model.Bot, error) {
   552  
   553  	tries := 0
   554  	for {
   555  		result, err := s.BotStore.Update(bot)
   556  		if err == nil {
   557  			return result, nil
   558  		}
   559  		if !isRepeatableError(err) {
   560  			return result, err
   561  		}
   562  		tries++
   563  		if tries >= 3 {
   564  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
   565  			return result, err
   566  		}
   567  	}
   568  
   569  }
   570  
   571  func (s *RetryLayerChannelStore) AnalyticsDeletedTypeCount(teamID string, channelType string) (int64, error) {
   572  
   573  	tries := 0
   574  	for {
   575  		result, err := s.ChannelStore.AnalyticsDeletedTypeCount(teamID, channelType)
   576  		if err == nil {
   577  			return result, nil
   578  		}
   579  		if !isRepeatableError(err) {
   580  			return result, err
   581  		}
   582  		tries++
   583  		if tries >= 3 {
   584  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
   585  			return result, err
   586  		}
   587  	}
   588  
   589  }
   590  
   591  func (s *RetryLayerChannelStore) AnalyticsTypeCount(teamID string, channelType string) (int64, error) {
   592  
   593  	tries := 0
   594  	for {
   595  		result, err := s.ChannelStore.AnalyticsTypeCount(teamID, channelType)
   596  		if err == nil {
   597  			return result, nil
   598  		}
   599  		if !isRepeatableError(err) {
   600  			return result, err
   601  		}
   602  		tries++
   603  		if tries >= 3 {
   604  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
   605  			return result, err
   606  		}
   607  	}
   608  
   609  }
   610  
   611  func (s *RetryLayerChannelStore) AutocompleteInTeam(teamID string, term string, includeDeleted bool) (*model.ChannelList, error) {
   612  
   613  	tries := 0
   614  	for {
   615  		result, err := s.ChannelStore.AutocompleteInTeam(teamID, term, includeDeleted)
   616  		if err == nil {
   617  			return result, nil
   618  		}
   619  		if !isRepeatableError(err) {
   620  			return result, err
   621  		}
   622  		tries++
   623  		if tries >= 3 {
   624  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
   625  			return result, err
   626  		}
   627  	}
   628  
   629  }
   630  
   631  func (s *RetryLayerChannelStore) AutocompleteInTeamForSearch(teamID string, userID string, term string, includeDeleted bool) (*model.ChannelList, error) {
   632  
   633  	tries := 0
   634  	for {
   635  		result, err := s.ChannelStore.AutocompleteInTeamForSearch(teamID, userID, term, includeDeleted)
   636  		if err == nil {
   637  			return result, nil
   638  		}
   639  		if !isRepeatableError(err) {
   640  			return result, err
   641  		}
   642  		tries++
   643  		if tries >= 3 {
   644  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
   645  			return result, err
   646  		}
   647  	}
   648  
   649  }
   650  
   651  func (s *RetryLayerChannelStore) ClearAllCustomRoleAssignments() error {
   652  
   653  	tries := 0
   654  	for {
   655  		err := s.ChannelStore.ClearAllCustomRoleAssignments()
   656  		if err == nil {
   657  			return nil
   658  		}
   659  		if !isRepeatableError(err) {
   660  			return err
   661  		}
   662  		tries++
   663  		if tries >= 3 {
   664  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
   665  			return err
   666  		}
   667  	}
   668  
   669  }
   670  
   671  func (s *RetryLayerChannelStore) ClearCaches() {
   672  
   673  	s.ChannelStore.ClearCaches()
   674  
   675  }
   676  
   677  func (s *RetryLayerChannelStore) ClearSidebarOnTeamLeave(userID string, teamID string) error {
   678  
   679  	tries := 0
   680  	for {
   681  		err := s.ChannelStore.ClearSidebarOnTeamLeave(userID, teamID)
   682  		if err == nil {
   683  			return nil
   684  		}
   685  		if !isRepeatableError(err) {
   686  			return err
   687  		}
   688  		tries++
   689  		if tries >= 3 {
   690  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
   691  			return err
   692  		}
   693  	}
   694  
   695  }
   696  
   697  func (s *RetryLayerChannelStore) CountPostsAfter(channelID string, timestamp int64, userID string) (int, int, error) {
   698  
   699  	tries := 0
   700  	for {
   701  		result, resultVar1, err := s.ChannelStore.CountPostsAfter(channelID, timestamp, userID)
   702  		if err == nil {
   703  			return result, resultVar1, nil
   704  		}
   705  		if !isRepeatableError(err) {
   706  			return result, resultVar1, err
   707  		}
   708  		tries++
   709  		if tries >= 3 {
   710  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
   711  			return result, resultVar1, err
   712  		}
   713  	}
   714  
   715  }
   716  
   717  func (s *RetryLayerChannelStore) CreateDirectChannel(userID *model.User, otherUserID *model.User, channelOptions ...model.ChannelOption) (*model.Channel, error) {
   718  
   719  	tries := 0
   720  	for {
   721  		result, err := s.ChannelStore.CreateDirectChannel(userID, otherUserID, channelOptions...)
   722  		if err == nil {
   723  			return result, nil
   724  		}
   725  		if !isRepeatableError(err) {
   726  			return result, err
   727  		}
   728  		tries++
   729  		if tries >= 3 {
   730  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
   731  			return result, err
   732  		}
   733  	}
   734  
   735  }
   736  
   737  func (s *RetryLayerChannelStore) CreateInitialSidebarCategories(userID string, teamID string) (*model.OrderedSidebarCategories, error) {
   738  
   739  	tries := 0
   740  	for {
   741  		result, err := s.ChannelStore.CreateInitialSidebarCategories(userID, teamID)
   742  		if err == nil {
   743  			return result, nil
   744  		}
   745  		if !isRepeatableError(err) {
   746  			return result, err
   747  		}
   748  		tries++
   749  		if tries >= 3 {
   750  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
   751  			return result, err
   752  		}
   753  	}
   754  
   755  }
   756  
   757  func (s *RetryLayerChannelStore) CreateSidebarCategory(userID string, teamID string, newCategory *model.SidebarCategoryWithChannels) (*model.SidebarCategoryWithChannels, error) {
   758  
   759  	tries := 0
   760  	for {
   761  		result, err := s.ChannelStore.CreateSidebarCategory(userID, teamID, newCategory)
   762  		if err == nil {
   763  			return result, nil
   764  		}
   765  		if !isRepeatableError(err) {
   766  			return result, err
   767  		}
   768  		tries++
   769  		if tries >= 3 {
   770  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
   771  			return result, err
   772  		}
   773  	}
   774  
   775  }
   776  
   777  func (s *RetryLayerChannelStore) Delete(channelID string, time int64) error {
   778  
   779  	tries := 0
   780  	for {
   781  		err := s.ChannelStore.Delete(channelID, time)
   782  		if err == nil {
   783  			return nil
   784  		}
   785  		if !isRepeatableError(err) {
   786  			return err
   787  		}
   788  		tries++
   789  		if tries >= 3 {
   790  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
   791  			return err
   792  		}
   793  	}
   794  
   795  }
   796  
   797  func (s *RetryLayerChannelStore) DeleteSidebarCategory(categoryID string) error {
   798  
   799  	tries := 0
   800  	for {
   801  		err := s.ChannelStore.DeleteSidebarCategory(categoryID)
   802  		if err == nil {
   803  			return nil
   804  		}
   805  		if !isRepeatableError(err) {
   806  			return err
   807  		}
   808  		tries++
   809  		if tries >= 3 {
   810  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
   811  			return err
   812  		}
   813  	}
   814  
   815  }
   816  
   817  func (s *RetryLayerChannelStore) DeleteSidebarChannelsByPreferences(preferences *model.Preferences) error {
   818  
   819  	tries := 0
   820  	for {
   821  		err := s.ChannelStore.DeleteSidebarChannelsByPreferences(preferences)
   822  		if err == nil {
   823  			return nil
   824  		}
   825  		if !isRepeatableError(err) {
   826  			return err
   827  		}
   828  		tries++
   829  		if tries >= 3 {
   830  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
   831  			return err
   832  		}
   833  	}
   834  
   835  }
   836  
   837  func (s *RetryLayerChannelStore) Get(id string, allowFromCache bool) (*model.Channel, error) {
   838  
   839  	tries := 0
   840  	for {
   841  		result, err := s.ChannelStore.Get(id, allowFromCache)
   842  		if err == nil {
   843  			return result, nil
   844  		}
   845  		if !isRepeatableError(err) {
   846  			return result, err
   847  		}
   848  		tries++
   849  		if tries >= 3 {
   850  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
   851  			return result, err
   852  		}
   853  	}
   854  
   855  }
   856  
   857  func (s *RetryLayerChannelStore) GetAll(teamID string) ([]*model.Channel, error) {
   858  
   859  	tries := 0
   860  	for {
   861  		result, err := s.ChannelStore.GetAll(teamID)
   862  		if err == nil {
   863  			return result, nil
   864  		}
   865  		if !isRepeatableError(err) {
   866  			return result, err
   867  		}
   868  		tries++
   869  		if tries >= 3 {
   870  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
   871  			return result, err
   872  		}
   873  	}
   874  
   875  }
   876  
   877  func (s *RetryLayerChannelStore) GetAllChannelMembersForUser(userID string, allowFromCache bool, includeDeleted bool) (map[string]string, error) {
   878  
   879  	tries := 0
   880  	for {
   881  		result, err := s.ChannelStore.GetAllChannelMembersForUser(userID, allowFromCache, includeDeleted)
   882  		if err == nil {
   883  			return result, nil
   884  		}
   885  		if !isRepeatableError(err) {
   886  			return result, err
   887  		}
   888  		tries++
   889  		if tries >= 3 {
   890  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
   891  			return result, err
   892  		}
   893  	}
   894  
   895  }
   896  
   897  func (s *RetryLayerChannelStore) GetAllChannelMembersNotifyPropsForChannel(channelID string, allowFromCache bool) (map[string]model.StringMap, error) {
   898  
   899  	tries := 0
   900  	for {
   901  		result, err := s.ChannelStore.GetAllChannelMembersNotifyPropsForChannel(channelID, allowFromCache)
   902  		if err == nil {
   903  			return result, nil
   904  		}
   905  		if !isRepeatableError(err) {
   906  			return result, err
   907  		}
   908  		tries++
   909  		if tries >= 3 {
   910  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
   911  			return result, err
   912  		}
   913  	}
   914  
   915  }
   916  
   917  func (s *RetryLayerChannelStore) GetAllChannels(page int, perPage int, opts store.ChannelSearchOpts) (*model.ChannelListWithTeamData, error) {
   918  
   919  	tries := 0
   920  	for {
   921  		result, err := s.ChannelStore.GetAllChannels(page, perPage, opts)
   922  		if err == nil {
   923  			return result, nil
   924  		}
   925  		if !isRepeatableError(err) {
   926  			return result, err
   927  		}
   928  		tries++
   929  		if tries >= 3 {
   930  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
   931  			return result, err
   932  		}
   933  	}
   934  
   935  }
   936  
   937  func (s *RetryLayerChannelStore) GetAllChannelsCount(opts store.ChannelSearchOpts) (int64, error) {
   938  
   939  	tries := 0
   940  	for {
   941  		result, err := s.ChannelStore.GetAllChannelsCount(opts)
   942  		if err == nil {
   943  			return result, nil
   944  		}
   945  		if !isRepeatableError(err) {
   946  			return result, err
   947  		}
   948  		tries++
   949  		if tries >= 3 {
   950  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
   951  			return result, err
   952  		}
   953  	}
   954  
   955  }
   956  
   957  func (s *RetryLayerChannelStore) GetAllChannelsForExportAfter(limit int, afterID string) ([]*model.ChannelForExport, error) {
   958  
   959  	tries := 0
   960  	for {
   961  		result, err := s.ChannelStore.GetAllChannelsForExportAfter(limit, afterID)
   962  		if err == nil {
   963  			return result, nil
   964  		}
   965  		if !isRepeatableError(err) {
   966  			return result, err
   967  		}
   968  		tries++
   969  		if tries >= 3 {
   970  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
   971  			return result, err
   972  		}
   973  	}
   974  
   975  }
   976  
   977  func (s *RetryLayerChannelStore) GetAllDirectChannelsForExportAfter(limit int, afterID string) ([]*model.DirectChannelForExport, error) {
   978  
   979  	tries := 0
   980  	for {
   981  		result, err := s.ChannelStore.GetAllDirectChannelsForExportAfter(limit, afterID)
   982  		if err == nil {
   983  			return result, nil
   984  		}
   985  		if !isRepeatableError(err) {
   986  			return result, err
   987  		}
   988  		tries++
   989  		if tries >= 3 {
   990  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
   991  			return result, err
   992  		}
   993  	}
   994  
   995  }
   996  
   997  func (s *RetryLayerChannelStore) GetByName(team_id string, name string, allowFromCache bool) (*model.Channel, error) {
   998  
   999  	tries := 0
  1000  	for {
  1001  		result, err := s.ChannelStore.GetByName(team_id, name, allowFromCache)
  1002  		if err == nil {
  1003  			return result, nil
  1004  		}
  1005  		if !isRepeatableError(err) {
  1006  			return result, err
  1007  		}
  1008  		tries++
  1009  		if tries >= 3 {
  1010  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  1011  			return result, err
  1012  		}
  1013  	}
  1014  
  1015  }
  1016  
  1017  func (s *RetryLayerChannelStore) GetByNameIncludeDeleted(team_id string, name string, allowFromCache bool) (*model.Channel, error) {
  1018  
  1019  	tries := 0
  1020  	for {
  1021  		result, err := s.ChannelStore.GetByNameIncludeDeleted(team_id, name, allowFromCache)
  1022  		if err == nil {
  1023  			return result, nil
  1024  		}
  1025  		if !isRepeatableError(err) {
  1026  			return result, err
  1027  		}
  1028  		tries++
  1029  		if tries >= 3 {
  1030  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  1031  			return result, err
  1032  		}
  1033  	}
  1034  
  1035  }
  1036  
  1037  func (s *RetryLayerChannelStore) GetByNames(team_id string, names []string, allowFromCache bool) ([]*model.Channel, error) {
  1038  
  1039  	tries := 0
  1040  	for {
  1041  		result, err := s.ChannelStore.GetByNames(team_id, names, allowFromCache)
  1042  		if err == nil {
  1043  			return result, nil
  1044  		}
  1045  		if !isRepeatableError(err) {
  1046  			return result, err
  1047  		}
  1048  		tries++
  1049  		if tries >= 3 {
  1050  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  1051  			return result, err
  1052  		}
  1053  	}
  1054  
  1055  }
  1056  
  1057  func (s *RetryLayerChannelStore) GetChannelCounts(teamID string, userID string) (*model.ChannelCounts, error) {
  1058  
  1059  	tries := 0
  1060  	for {
  1061  		result, err := s.ChannelStore.GetChannelCounts(teamID, userID)
  1062  		if err == nil {
  1063  			return result, nil
  1064  		}
  1065  		if !isRepeatableError(err) {
  1066  			return result, err
  1067  		}
  1068  		tries++
  1069  		if tries >= 3 {
  1070  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  1071  			return result, err
  1072  		}
  1073  	}
  1074  
  1075  }
  1076  
  1077  func (s *RetryLayerChannelStore) GetChannelMembersForExport(userID string, teamID string) ([]*model.ChannelMemberForExport, error) {
  1078  
  1079  	tries := 0
  1080  	for {
  1081  		result, err := s.ChannelStore.GetChannelMembersForExport(userID, teamID)
  1082  		if err == nil {
  1083  			return result, nil
  1084  		}
  1085  		if !isRepeatableError(err) {
  1086  			return result, err
  1087  		}
  1088  		tries++
  1089  		if tries >= 3 {
  1090  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  1091  			return result, err
  1092  		}
  1093  	}
  1094  
  1095  }
  1096  
  1097  func (s *RetryLayerChannelStore) GetChannelMembersTimezones(channelID string) ([]model.StringMap, error) {
  1098  
  1099  	tries := 0
  1100  	for {
  1101  		result, err := s.ChannelStore.GetChannelMembersTimezones(channelID)
  1102  		if err == nil {
  1103  			return result, nil
  1104  		}
  1105  		if !isRepeatableError(err) {
  1106  			return result, err
  1107  		}
  1108  		tries++
  1109  		if tries >= 3 {
  1110  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  1111  			return result, err
  1112  		}
  1113  	}
  1114  
  1115  }
  1116  
  1117  func (s *RetryLayerChannelStore) GetChannelUnread(channelID string, userID string) (*model.ChannelUnread, error) {
  1118  
  1119  	tries := 0
  1120  	for {
  1121  		result, err := s.ChannelStore.GetChannelUnread(channelID, userID)
  1122  		if err == nil {
  1123  			return result, nil
  1124  		}
  1125  		if !isRepeatableError(err) {
  1126  			return result, err
  1127  		}
  1128  		tries++
  1129  		if tries >= 3 {
  1130  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  1131  			return result, err
  1132  		}
  1133  	}
  1134  
  1135  }
  1136  
  1137  func (s *RetryLayerChannelStore) GetChannels(teamID string, userID string, includeDeleted bool, lastDeleteAt int) (*model.ChannelList, error) {
  1138  
  1139  	tries := 0
  1140  	for {
  1141  		result, err := s.ChannelStore.GetChannels(teamID, userID, includeDeleted, lastDeleteAt)
  1142  		if err == nil {
  1143  			return result, nil
  1144  		}
  1145  		if !isRepeatableError(err) {
  1146  			return result, err
  1147  		}
  1148  		tries++
  1149  		if tries >= 3 {
  1150  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  1151  			return result, err
  1152  		}
  1153  	}
  1154  
  1155  }
  1156  
  1157  func (s *RetryLayerChannelStore) GetChannelsBatchForIndexing(startTime int64, endTime int64, limit int) ([]*model.Channel, error) {
  1158  
  1159  	tries := 0
  1160  	for {
  1161  		result, err := s.ChannelStore.GetChannelsBatchForIndexing(startTime, endTime, limit)
  1162  		if err == nil {
  1163  			return result, nil
  1164  		}
  1165  		if !isRepeatableError(err) {
  1166  			return result, err
  1167  		}
  1168  		tries++
  1169  		if tries >= 3 {
  1170  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  1171  			return result, err
  1172  		}
  1173  	}
  1174  
  1175  }
  1176  
  1177  func (s *RetryLayerChannelStore) GetChannelsByIds(channelIds []string, includeDeleted bool) ([]*model.Channel, error) {
  1178  
  1179  	tries := 0
  1180  	for {
  1181  		result, err := s.ChannelStore.GetChannelsByIds(channelIds, includeDeleted)
  1182  		if err == nil {
  1183  			return result, nil
  1184  		}
  1185  		if !isRepeatableError(err) {
  1186  			return result, err
  1187  		}
  1188  		tries++
  1189  		if tries >= 3 {
  1190  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  1191  			return result, err
  1192  		}
  1193  	}
  1194  
  1195  }
  1196  
  1197  func (s *RetryLayerChannelStore) GetChannelsByScheme(schemeID string, offset int, limit int) (model.ChannelList, error) {
  1198  
  1199  	tries := 0
  1200  	for {
  1201  		result, err := s.ChannelStore.GetChannelsByScheme(schemeID, offset, limit)
  1202  		if err == nil {
  1203  			return result, nil
  1204  		}
  1205  		if !isRepeatableError(err) {
  1206  			return result, err
  1207  		}
  1208  		tries++
  1209  		if tries >= 3 {
  1210  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  1211  			return result, err
  1212  		}
  1213  	}
  1214  
  1215  }
  1216  
  1217  func (s *RetryLayerChannelStore) GetDeleted(team_id string, offset int, limit int, userID string) (*model.ChannelList, error) {
  1218  
  1219  	tries := 0
  1220  	for {
  1221  		result, err := s.ChannelStore.GetDeleted(team_id, offset, limit, userID)
  1222  		if err == nil {
  1223  			return result, nil
  1224  		}
  1225  		if !isRepeatableError(err) {
  1226  			return result, err
  1227  		}
  1228  		tries++
  1229  		if tries >= 3 {
  1230  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  1231  			return result, err
  1232  		}
  1233  	}
  1234  
  1235  }
  1236  
  1237  func (s *RetryLayerChannelStore) GetDeletedByName(team_id string, name string) (*model.Channel, error) {
  1238  
  1239  	tries := 0
  1240  	for {
  1241  		result, err := s.ChannelStore.GetDeletedByName(team_id, name)
  1242  		if err == nil {
  1243  			return result, nil
  1244  		}
  1245  		if !isRepeatableError(err) {
  1246  			return result, err
  1247  		}
  1248  		tries++
  1249  		if tries >= 3 {
  1250  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  1251  			return result, err
  1252  		}
  1253  	}
  1254  
  1255  }
  1256  
  1257  func (s *RetryLayerChannelStore) GetForPost(postID string) (*model.Channel, error) {
  1258  
  1259  	tries := 0
  1260  	for {
  1261  		result, err := s.ChannelStore.GetForPost(postID)
  1262  		if err == nil {
  1263  			return result, nil
  1264  		}
  1265  		if !isRepeatableError(err) {
  1266  			return result, err
  1267  		}
  1268  		tries++
  1269  		if tries >= 3 {
  1270  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  1271  			return result, err
  1272  		}
  1273  	}
  1274  
  1275  }
  1276  
  1277  func (s *RetryLayerChannelStore) GetFromMaster(id string) (*model.Channel, error) {
  1278  
  1279  	tries := 0
  1280  	for {
  1281  		result, err := s.ChannelStore.GetFromMaster(id)
  1282  		if err == nil {
  1283  			return result, nil
  1284  		}
  1285  		if !isRepeatableError(err) {
  1286  			return result, err
  1287  		}
  1288  		tries++
  1289  		if tries >= 3 {
  1290  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  1291  			return result, err
  1292  		}
  1293  	}
  1294  
  1295  }
  1296  
  1297  func (s *RetryLayerChannelStore) GetGuestCount(channelID string, allowFromCache bool) (int64, error) {
  1298  
  1299  	tries := 0
  1300  	for {
  1301  		result, err := s.ChannelStore.GetGuestCount(channelID, allowFromCache)
  1302  		if err == nil {
  1303  			return result, nil
  1304  		}
  1305  		if !isRepeatableError(err) {
  1306  			return result, err
  1307  		}
  1308  		tries++
  1309  		if tries >= 3 {
  1310  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  1311  			return result, err
  1312  		}
  1313  	}
  1314  
  1315  }
  1316  
  1317  func (s *RetryLayerChannelStore) GetMember(ctx context.Context, channelID string, userID string) (*model.ChannelMember, error) {
  1318  
  1319  	tries := 0
  1320  	for {
  1321  		result, err := s.ChannelStore.GetMember(ctx, channelID, userID)
  1322  		if err == nil {
  1323  			return result, nil
  1324  		}
  1325  		if !isRepeatableError(err) {
  1326  			return result, err
  1327  		}
  1328  		tries++
  1329  		if tries >= 3 {
  1330  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  1331  			return result, err
  1332  		}
  1333  	}
  1334  
  1335  }
  1336  
  1337  func (s *RetryLayerChannelStore) GetMemberCount(channelID string, allowFromCache bool) (int64, error) {
  1338  
  1339  	tries := 0
  1340  	for {
  1341  		result, err := s.ChannelStore.GetMemberCount(channelID, allowFromCache)
  1342  		if err == nil {
  1343  			return result, nil
  1344  		}
  1345  		if !isRepeatableError(err) {
  1346  			return result, err
  1347  		}
  1348  		tries++
  1349  		if tries >= 3 {
  1350  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  1351  			return result, err
  1352  		}
  1353  	}
  1354  
  1355  }
  1356  
  1357  func (s *RetryLayerChannelStore) GetMemberCountFromCache(channelID string) int64 {
  1358  
  1359  	return s.ChannelStore.GetMemberCountFromCache(channelID)
  1360  
  1361  }
  1362  
  1363  func (s *RetryLayerChannelStore) GetMemberCountsByGroup(ctx context.Context, channelID string, includeTimezones bool) ([]*model.ChannelMemberCountByGroup, error) {
  1364  
  1365  	tries := 0
  1366  	for {
  1367  		result, err := s.ChannelStore.GetMemberCountsByGroup(ctx, channelID, includeTimezones)
  1368  		if err == nil {
  1369  			return result, nil
  1370  		}
  1371  		if !isRepeatableError(err) {
  1372  			return result, err
  1373  		}
  1374  		tries++
  1375  		if tries >= 3 {
  1376  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  1377  			return result, err
  1378  		}
  1379  	}
  1380  
  1381  }
  1382  
  1383  func (s *RetryLayerChannelStore) GetMemberForPost(postID string, userID string) (*model.ChannelMember, error) {
  1384  
  1385  	tries := 0
  1386  	for {
  1387  		result, err := s.ChannelStore.GetMemberForPost(postID, userID)
  1388  		if err == nil {
  1389  			return result, nil
  1390  		}
  1391  		if !isRepeatableError(err) {
  1392  			return result, err
  1393  		}
  1394  		tries++
  1395  		if tries >= 3 {
  1396  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  1397  			return result, err
  1398  		}
  1399  	}
  1400  
  1401  }
  1402  
  1403  func (s *RetryLayerChannelStore) GetMembers(channelID string, offset int, limit int) (*model.ChannelMembers, error) {
  1404  
  1405  	tries := 0
  1406  	for {
  1407  		result, err := s.ChannelStore.GetMembers(channelID, offset, limit)
  1408  		if err == nil {
  1409  			return result, nil
  1410  		}
  1411  		if !isRepeatableError(err) {
  1412  			return result, err
  1413  		}
  1414  		tries++
  1415  		if tries >= 3 {
  1416  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  1417  			return result, err
  1418  		}
  1419  	}
  1420  
  1421  }
  1422  
  1423  func (s *RetryLayerChannelStore) GetMembersByChannelIds(channelIds []string, userID string) (*model.ChannelMembers, error) {
  1424  
  1425  	tries := 0
  1426  	for {
  1427  		result, err := s.ChannelStore.GetMembersByChannelIds(channelIds, userID)
  1428  		if err == nil {
  1429  			return result, nil
  1430  		}
  1431  		if !isRepeatableError(err) {
  1432  			return result, err
  1433  		}
  1434  		tries++
  1435  		if tries >= 3 {
  1436  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  1437  			return result, err
  1438  		}
  1439  	}
  1440  
  1441  }
  1442  
  1443  func (s *RetryLayerChannelStore) GetMembersByIds(channelID string, userIds []string) (*model.ChannelMembers, error) {
  1444  
  1445  	tries := 0
  1446  	for {
  1447  		result, err := s.ChannelStore.GetMembersByIds(channelID, userIds)
  1448  		if err == nil {
  1449  			return result, nil
  1450  		}
  1451  		if !isRepeatableError(err) {
  1452  			return result, err
  1453  		}
  1454  		tries++
  1455  		if tries >= 3 {
  1456  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  1457  			return result, err
  1458  		}
  1459  	}
  1460  
  1461  }
  1462  
  1463  func (s *RetryLayerChannelStore) GetMembersForUser(teamID string, userID string) (*model.ChannelMembers, error) {
  1464  
  1465  	tries := 0
  1466  	for {
  1467  		result, err := s.ChannelStore.GetMembersForUser(teamID, userID)
  1468  		if err == nil {
  1469  			return result, nil
  1470  		}
  1471  		if !isRepeatableError(err) {
  1472  			return result, err
  1473  		}
  1474  		tries++
  1475  		if tries >= 3 {
  1476  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  1477  			return result, err
  1478  		}
  1479  	}
  1480  
  1481  }
  1482  
  1483  func (s *RetryLayerChannelStore) GetMembersForUserWithPagination(teamID string, userID string, page int, perPage int) (*model.ChannelMembers, error) {
  1484  
  1485  	tries := 0
  1486  	for {
  1487  		result, err := s.ChannelStore.GetMembersForUserWithPagination(teamID, userID, page, perPage)
  1488  		if err == nil {
  1489  			return result, nil
  1490  		}
  1491  		if !isRepeatableError(err) {
  1492  			return result, err
  1493  		}
  1494  		tries++
  1495  		if tries >= 3 {
  1496  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  1497  			return result, err
  1498  		}
  1499  	}
  1500  
  1501  }
  1502  
  1503  func (s *RetryLayerChannelStore) GetMoreChannels(teamID string, userID string, offset int, limit int) (*model.ChannelList, error) {
  1504  
  1505  	tries := 0
  1506  	for {
  1507  		result, err := s.ChannelStore.GetMoreChannels(teamID, userID, offset, limit)
  1508  		if err == nil {
  1509  			return result, nil
  1510  		}
  1511  		if !isRepeatableError(err) {
  1512  			return result, err
  1513  		}
  1514  		tries++
  1515  		if tries >= 3 {
  1516  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  1517  			return result, err
  1518  		}
  1519  	}
  1520  
  1521  }
  1522  
  1523  func (s *RetryLayerChannelStore) GetPinnedPostCount(channelID string, allowFromCache bool) (int64, error) {
  1524  
  1525  	tries := 0
  1526  	for {
  1527  		result, err := s.ChannelStore.GetPinnedPostCount(channelID, allowFromCache)
  1528  		if err == nil {
  1529  			return result, nil
  1530  		}
  1531  		if !isRepeatableError(err) {
  1532  			return result, err
  1533  		}
  1534  		tries++
  1535  		if tries >= 3 {
  1536  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  1537  			return result, err
  1538  		}
  1539  	}
  1540  
  1541  }
  1542  
  1543  func (s *RetryLayerChannelStore) GetPinnedPosts(channelID string) (*model.PostList, error) {
  1544  
  1545  	tries := 0
  1546  	for {
  1547  		result, err := s.ChannelStore.GetPinnedPosts(channelID)
  1548  		if err == nil {
  1549  			return result, nil
  1550  		}
  1551  		if !isRepeatableError(err) {
  1552  			return result, err
  1553  		}
  1554  		tries++
  1555  		if tries >= 3 {
  1556  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  1557  			return result, err
  1558  		}
  1559  	}
  1560  
  1561  }
  1562  
  1563  func (s *RetryLayerChannelStore) GetPrivateChannelsForTeam(teamID string, offset int, limit int) (*model.ChannelList, error) {
  1564  
  1565  	tries := 0
  1566  	for {
  1567  		result, err := s.ChannelStore.GetPrivateChannelsForTeam(teamID, offset, limit)
  1568  		if err == nil {
  1569  			return result, nil
  1570  		}
  1571  		if !isRepeatableError(err) {
  1572  			return result, err
  1573  		}
  1574  		tries++
  1575  		if tries >= 3 {
  1576  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  1577  			return result, err
  1578  		}
  1579  	}
  1580  
  1581  }
  1582  
  1583  func (s *RetryLayerChannelStore) GetPublicChannelsByIdsForTeam(teamID string, channelIds []string) (*model.ChannelList, error) {
  1584  
  1585  	tries := 0
  1586  	for {
  1587  		result, err := s.ChannelStore.GetPublicChannelsByIdsForTeam(teamID, channelIds)
  1588  		if err == nil {
  1589  			return result, nil
  1590  		}
  1591  		if !isRepeatableError(err) {
  1592  			return result, err
  1593  		}
  1594  		tries++
  1595  		if tries >= 3 {
  1596  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  1597  			return result, err
  1598  		}
  1599  	}
  1600  
  1601  }
  1602  
  1603  func (s *RetryLayerChannelStore) GetPublicChannelsForTeam(teamID string, offset int, limit int) (*model.ChannelList, error) {
  1604  
  1605  	tries := 0
  1606  	for {
  1607  		result, err := s.ChannelStore.GetPublicChannelsForTeam(teamID, offset, limit)
  1608  		if err == nil {
  1609  			return result, nil
  1610  		}
  1611  		if !isRepeatableError(err) {
  1612  			return result, err
  1613  		}
  1614  		tries++
  1615  		if tries >= 3 {
  1616  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  1617  			return result, err
  1618  		}
  1619  	}
  1620  
  1621  }
  1622  
  1623  func (s *RetryLayerChannelStore) GetSidebarCategories(userID string, teamID string) (*model.OrderedSidebarCategories, error) {
  1624  
  1625  	tries := 0
  1626  	for {
  1627  		result, err := s.ChannelStore.GetSidebarCategories(userID, teamID)
  1628  		if err == nil {
  1629  			return result, nil
  1630  		}
  1631  		if !isRepeatableError(err) {
  1632  			return result, err
  1633  		}
  1634  		tries++
  1635  		if tries >= 3 {
  1636  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  1637  			return result, err
  1638  		}
  1639  	}
  1640  
  1641  }
  1642  
  1643  func (s *RetryLayerChannelStore) GetSidebarCategory(categoryID string) (*model.SidebarCategoryWithChannels, error) {
  1644  
  1645  	tries := 0
  1646  	for {
  1647  		result, err := s.ChannelStore.GetSidebarCategory(categoryID)
  1648  		if err == nil {
  1649  			return result, nil
  1650  		}
  1651  		if !isRepeatableError(err) {
  1652  			return result, err
  1653  		}
  1654  		tries++
  1655  		if tries >= 3 {
  1656  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  1657  			return result, err
  1658  		}
  1659  	}
  1660  
  1661  }
  1662  
  1663  func (s *RetryLayerChannelStore) GetSidebarCategoryOrder(userID string, teamID string) ([]string, error) {
  1664  
  1665  	tries := 0
  1666  	for {
  1667  		result, err := s.ChannelStore.GetSidebarCategoryOrder(userID, teamID)
  1668  		if err == nil {
  1669  			return result, nil
  1670  		}
  1671  		if !isRepeatableError(err) {
  1672  			return result, err
  1673  		}
  1674  		tries++
  1675  		if tries >= 3 {
  1676  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  1677  			return result, err
  1678  		}
  1679  	}
  1680  
  1681  }
  1682  
  1683  func (s *RetryLayerChannelStore) GetTeamChannels(teamID string) (*model.ChannelList, error) {
  1684  
  1685  	tries := 0
  1686  	for {
  1687  		result, err := s.ChannelStore.GetTeamChannels(teamID)
  1688  		if err == nil {
  1689  			return result, nil
  1690  		}
  1691  		if !isRepeatableError(err) {
  1692  			return result, err
  1693  		}
  1694  		tries++
  1695  		if tries >= 3 {
  1696  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  1697  			return result, err
  1698  		}
  1699  	}
  1700  
  1701  }
  1702  
  1703  func (s *RetryLayerChannelStore) GetTeamForChannel(channelID string) (*model.Team, error) {
  1704  
  1705  	tries := 0
  1706  	for {
  1707  		result, err := s.ChannelStore.GetTeamForChannel(channelID)
  1708  		if err == nil {
  1709  			return result, nil
  1710  		}
  1711  		if !isRepeatableError(err) {
  1712  			return result, err
  1713  		}
  1714  		tries++
  1715  		if tries >= 3 {
  1716  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  1717  			return result, err
  1718  		}
  1719  	}
  1720  
  1721  }
  1722  
  1723  func (s *RetryLayerChannelStore) GroupSyncedChannelCount() (int64, error) {
  1724  
  1725  	tries := 0
  1726  	for {
  1727  		result, err := s.ChannelStore.GroupSyncedChannelCount()
  1728  		if err == nil {
  1729  			return result, nil
  1730  		}
  1731  		if !isRepeatableError(err) {
  1732  			return result, err
  1733  		}
  1734  		tries++
  1735  		if tries >= 3 {
  1736  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  1737  			return result, err
  1738  		}
  1739  	}
  1740  
  1741  }
  1742  
  1743  func (s *RetryLayerChannelStore) IncrementMentionCount(channelID string, userID string, updateThreads bool, isRoot bool) error {
  1744  
  1745  	tries := 0
  1746  	for {
  1747  		err := s.ChannelStore.IncrementMentionCount(channelID, userID, updateThreads, isRoot)
  1748  		if err == nil {
  1749  			return nil
  1750  		}
  1751  		if !isRepeatableError(err) {
  1752  			return err
  1753  		}
  1754  		tries++
  1755  		if tries >= 3 {
  1756  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  1757  			return err
  1758  		}
  1759  	}
  1760  
  1761  }
  1762  
  1763  func (s *RetryLayerChannelStore) InvalidateAllChannelMembersForUser(userID string) {
  1764  
  1765  	s.ChannelStore.InvalidateAllChannelMembersForUser(userID)
  1766  
  1767  }
  1768  
  1769  func (s *RetryLayerChannelStore) InvalidateCacheForChannelMembersNotifyProps(channelID string) {
  1770  
  1771  	s.ChannelStore.InvalidateCacheForChannelMembersNotifyProps(channelID)
  1772  
  1773  }
  1774  
  1775  func (s *RetryLayerChannelStore) InvalidateChannel(id string) {
  1776  
  1777  	s.ChannelStore.InvalidateChannel(id)
  1778  
  1779  }
  1780  
  1781  func (s *RetryLayerChannelStore) InvalidateChannelByName(teamID string, name string) {
  1782  
  1783  	s.ChannelStore.InvalidateChannelByName(teamID, name)
  1784  
  1785  }
  1786  
  1787  func (s *RetryLayerChannelStore) InvalidateGuestCount(channelID string) {
  1788  
  1789  	s.ChannelStore.InvalidateGuestCount(channelID)
  1790  
  1791  }
  1792  
  1793  func (s *RetryLayerChannelStore) InvalidateMemberCount(channelID string) {
  1794  
  1795  	s.ChannelStore.InvalidateMemberCount(channelID)
  1796  
  1797  }
  1798  
  1799  func (s *RetryLayerChannelStore) InvalidatePinnedPostCount(channelID string) {
  1800  
  1801  	s.ChannelStore.InvalidatePinnedPostCount(channelID)
  1802  
  1803  }
  1804  
  1805  func (s *RetryLayerChannelStore) IsUserInChannelUseCache(userID string, channelID string) bool {
  1806  
  1807  	return s.ChannelStore.IsUserInChannelUseCache(userID, channelID)
  1808  
  1809  }
  1810  
  1811  func (s *RetryLayerChannelStore) MigrateChannelMembers(fromChannelID string, fromUserID string) (map[string]string, error) {
  1812  
  1813  	tries := 0
  1814  	for {
  1815  		result, err := s.ChannelStore.MigrateChannelMembers(fromChannelID, fromUserID)
  1816  		if err == nil {
  1817  			return result, nil
  1818  		}
  1819  		if !isRepeatableError(err) {
  1820  			return result, err
  1821  		}
  1822  		tries++
  1823  		if tries >= 3 {
  1824  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  1825  			return result, err
  1826  		}
  1827  	}
  1828  
  1829  }
  1830  
  1831  func (s *RetryLayerChannelStore) MigratePublicChannels() error {
  1832  
  1833  	tries := 0
  1834  	for {
  1835  		err := s.ChannelStore.MigratePublicChannels()
  1836  		if err == nil {
  1837  			return nil
  1838  		}
  1839  		if !isRepeatableError(err) {
  1840  			return err
  1841  		}
  1842  		tries++
  1843  		if tries >= 3 {
  1844  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  1845  			return err
  1846  		}
  1847  	}
  1848  
  1849  }
  1850  
  1851  func (s *RetryLayerChannelStore) PermanentDelete(channelID string) error {
  1852  
  1853  	tries := 0
  1854  	for {
  1855  		err := s.ChannelStore.PermanentDelete(channelID)
  1856  		if err == nil {
  1857  			return nil
  1858  		}
  1859  		if !isRepeatableError(err) {
  1860  			return err
  1861  		}
  1862  		tries++
  1863  		if tries >= 3 {
  1864  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  1865  			return err
  1866  		}
  1867  	}
  1868  
  1869  }
  1870  
  1871  func (s *RetryLayerChannelStore) PermanentDeleteByTeam(teamID string) error {
  1872  
  1873  	tries := 0
  1874  	for {
  1875  		err := s.ChannelStore.PermanentDeleteByTeam(teamID)
  1876  		if err == nil {
  1877  			return nil
  1878  		}
  1879  		if !isRepeatableError(err) {
  1880  			return err
  1881  		}
  1882  		tries++
  1883  		if tries >= 3 {
  1884  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  1885  			return err
  1886  		}
  1887  	}
  1888  
  1889  }
  1890  
  1891  func (s *RetryLayerChannelStore) PermanentDeleteMembersByChannel(channelID string) error {
  1892  
  1893  	tries := 0
  1894  	for {
  1895  		err := s.ChannelStore.PermanentDeleteMembersByChannel(channelID)
  1896  		if err == nil {
  1897  			return nil
  1898  		}
  1899  		if !isRepeatableError(err) {
  1900  			return err
  1901  		}
  1902  		tries++
  1903  		if tries >= 3 {
  1904  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  1905  			return err
  1906  		}
  1907  	}
  1908  
  1909  }
  1910  
  1911  func (s *RetryLayerChannelStore) PermanentDeleteMembersByUser(userID string) error {
  1912  
  1913  	tries := 0
  1914  	for {
  1915  		err := s.ChannelStore.PermanentDeleteMembersByUser(userID)
  1916  		if err == nil {
  1917  			return nil
  1918  		}
  1919  		if !isRepeatableError(err) {
  1920  			return err
  1921  		}
  1922  		tries++
  1923  		if tries >= 3 {
  1924  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  1925  			return err
  1926  		}
  1927  	}
  1928  
  1929  }
  1930  
  1931  func (s *RetryLayerChannelStore) RemoveAllDeactivatedMembers(channelID string) error {
  1932  
  1933  	tries := 0
  1934  	for {
  1935  		err := s.ChannelStore.RemoveAllDeactivatedMembers(channelID)
  1936  		if err == nil {
  1937  			return nil
  1938  		}
  1939  		if !isRepeatableError(err) {
  1940  			return err
  1941  		}
  1942  		tries++
  1943  		if tries >= 3 {
  1944  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  1945  			return err
  1946  		}
  1947  	}
  1948  
  1949  }
  1950  
  1951  func (s *RetryLayerChannelStore) RemoveMember(channelID string, userID string) error {
  1952  
  1953  	tries := 0
  1954  	for {
  1955  		err := s.ChannelStore.RemoveMember(channelID, userID)
  1956  		if err == nil {
  1957  			return nil
  1958  		}
  1959  		if !isRepeatableError(err) {
  1960  			return err
  1961  		}
  1962  		tries++
  1963  		if tries >= 3 {
  1964  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  1965  			return err
  1966  		}
  1967  	}
  1968  
  1969  }
  1970  
  1971  func (s *RetryLayerChannelStore) RemoveMembers(channelID string, userIds []string) error {
  1972  
  1973  	tries := 0
  1974  	for {
  1975  		err := s.ChannelStore.RemoveMembers(channelID, userIds)
  1976  		if err == nil {
  1977  			return nil
  1978  		}
  1979  		if !isRepeatableError(err) {
  1980  			return err
  1981  		}
  1982  		tries++
  1983  		if tries >= 3 {
  1984  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  1985  			return err
  1986  		}
  1987  	}
  1988  
  1989  }
  1990  
  1991  func (s *RetryLayerChannelStore) ResetAllChannelSchemes() error {
  1992  
  1993  	tries := 0
  1994  	for {
  1995  		err := s.ChannelStore.ResetAllChannelSchemes()
  1996  		if err == nil {
  1997  			return nil
  1998  		}
  1999  		if !isRepeatableError(err) {
  2000  			return err
  2001  		}
  2002  		tries++
  2003  		if tries >= 3 {
  2004  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  2005  			return err
  2006  		}
  2007  	}
  2008  
  2009  }
  2010  
  2011  func (s *RetryLayerChannelStore) Restore(channelID string, time int64) error {
  2012  
  2013  	tries := 0
  2014  	for {
  2015  		err := s.ChannelStore.Restore(channelID, time)
  2016  		if err == nil {
  2017  			return nil
  2018  		}
  2019  		if !isRepeatableError(err) {
  2020  			return err
  2021  		}
  2022  		tries++
  2023  		if tries >= 3 {
  2024  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  2025  			return err
  2026  		}
  2027  	}
  2028  
  2029  }
  2030  
  2031  func (s *RetryLayerChannelStore) Save(channel *model.Channel, maxChannelsPerTeam int64) (*model.Channel, error) {
  2032  
  2033  	tries := 0
  2034  	for {
  2035  		result, err := s.ChannelStore.Save(channel, maxChannelsPerTeam)
  2036  		if err == nil {
  2037  			return result, nil
  2038  		}
  2039  		if !isRepeatableError(err) {
  2040  			return result, err
  2041  		}
  2042  		tries++
  2043  		if tries >= 3 {
  2044  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  2045  			return result, err
  2046  		}
  2047  	}
  2048  
  2049  }
  2050  
  2051  func (s *RetryLayerChannelStore) SaveDirectChannel(channel *model.Channel, member1 *model.ChannelMember, member2 *model.ChannelMember) (*model.Channel, error) {
  2052  
  2053  	tries := 0
  2054  	for {
  2055  		result, err := s.ChannelStore.SaveDirectChannel(channel, member1, member2)
  2056  		if err == nil {
  2057  			return result, nil
  2058  		}
  2059  		if !isRepeatableError(err) {
  2060  			return result, err
  2061  		}
  2062  		tries++
  2063  		if tries >= 3 {
  2064  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  2065  			return result, err
  2066  		}
  2067  	}
  2068  
  2069  }
  2070  
  2071  func (s *RetryLayerChannelStore) SaveMember(member *model.ChannelMember) (*model.ChannelMember, error) {
  2072  
  2073  	tries := 0
  2074  	for {
  2075  		result, err := s.ChannelStore.SaveMember(member)
  2076  		if err == nil {
  2077  			return result, nil
  2078  		}
  2079  		if !isRepeatableError(err) {
  2080  			return result, err
  2081  		}
  2082  		tries++
  2083  		if tries >= 3 {
  2084  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  2085  			return result, err
  2086  		}
  2087  	}
  2088  
  2089  }
  2090  
  2091  func (s *RetryLayerChannelStore) SaveMultipleMembers(members []*model.ChannelMember) ([]*model.ChannelMember, error) {
  2092  
  2093  	tries := 0
  2094  	for {
  2095  		result, err := s.ChannelStore.SaveMultipleMembers(members)
  2096  		if err == nil {
  2097  			return result, nil
  2098  		}
  2099  		if !isRepeatableError(err) {
  2100  			return result, err
  2101  		}
  2102  		tries++
  2103  		if tries >= 3 {
  2104  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  2105  			return result, err
  2106  		}
  2107  	}
  2108  
  2109  }
  2110  
  2111  func (s *RetryLayerChannelStore) SearchAllChannels(term string, opts store.ChannelSearchOpts) (*model.ChannelListWithTeamData, int64, error) {
  2112  
  2113  	tries := 0
  2114  	for {
  2115  		result, resultVar1, err := s.ChannelStore.SearchAllChannels(term, opts)
  2116  		if err == nil {
  2117  			return result, resultVar1, nil
  2118  		}
  2119  		if !isRepeatableError(err) {
  2120  			return result, resultVar1, err
  2121  		}
  2122  		tries++
  2123  		if tries >= 3 {
  2124  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  2125  			return result, resultVar1, err
  2126  		}
  2127  	}
  2128  
  2129  }
  2130  
  2131  func (s *RetryLayerChannelStore) SearchArchivedInTeam(teamID string, term string, userID string) (*model.ChannelList, error) {
  2132  
  2133  	tries := 0
  2134  	for {
  2135  		result, err := s.ChannelStore.SearchArchivedInTeam(teamID, term, userID)
  2136  		if err == nil {
  2137  			return result, nil
  2138  		}
  2139  		if !isRepeatableError(err) {
  2140  			return result, err
  2141  		}
  2142  		tries++
  2143  		if tries >= 3 {
  2144  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  2145  			return result, err
  2146  		}
  2147  	}
  2148  
  2149  }
  2150  
  2151  func (s *RetryLayerChannelStore) SearchForUserInTeam(userID string, teamID string, term string, includeDeleted bool) (*model.ChannelList, error) {
  2152  
  2153  	tries := 0
  2154  	for {
  2155  		result, err := s.ChannelStore.SearchForUserInTeam(userID, teamID, term, includeDeleted)
  2156  		if err == nil {
  2157  			return result, nil
  2158  		}
  2159  		if !isRepeatableError(err) {
  2160  			return result, err
  2161  		}
  2162  		tries++
  2163  		if tries >= 3 {
  2164  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  2165  			return result, err
  2166  		}
  2167  	}
  2168  
  2169  }
  2170  
  2171  func (s *RetryLayerChannelStore) SearchGroupChannels(userID string, term string) (*model.ChannelList, error) {
  2172  
  2173  	tries := 0
  2174  	for {
  2175  		result, err := s.ChannelStore.SearchGroupChannels(userID, term)
  2176  		if err == nil {
  2177  			return result, nil
  2178  		}
  2179  		if !isRepeatableError(err) {
  2180  			return result, err
  2181  		}
  2182  		tries++
  2183  		if tries >= 3 {
  2184  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  2185  			return result, err
  2186  		}
  2187  	}
  2188  
  2189  }
  2190  
  2191  func (s *RetryLayerChannelStore) SearchInTeam(teamID string, term string, includeDeleted bool) (*model.ChannelList, error) {
  2192  
  2193  	tries := 0
  2194  	for {
  2195  		result, err := s.ChannelStore.SearchInTeam(teamID, term, includeDeleted)
  2196  		if err == nil {
  2197  			return result, nil
  2198  		}
  2199  		if !isRepeatableError(err) {
  2200  			return result, err
  2201  		}
  2202  		tries++
  2203  		if tries >= 3 {
  2204  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  2205  			return result, err
  2206  		}
  2207  	}
  2208  
  2209  }
  2210  
  2211  func (s *RetryLayerChannelStore) SearchMore(userID string, teamID string, term string) (*model.ChannelList, error) {
  2212  
  2213  	tries := 0
  2214  	for {
  2215  		result, err := s.ChannelStore.SearchMore(userID, teamID, term)
  2216  		if err == nil {
  2217  			return result, nil
  2218  		}
  2219  		if !isRepeatableError(err) {
  2220  			return result, err
  2221  		}
  2222  		tries++
  2223  		if tries >= 3 {
  2224  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  2225  			return result, err
  2226  		}
  2227  	}
  2228  
  2229  }
  2230  
  2231  func (s *RetryLayerChannelStore) SetDeleteAt(channelID string, deleteAt int64, updateAt int64) error {
  2232  
  2233  	tries := 0
  2234  	for {
  2235  		err := s.ChannelStore.SetDeleteAt(channelID, deleteAt, updateAt)
  2236  		if err == nil {
  2237  			return nil
  2238  		}
  2239  		if !isRepeatableError(err) {
  2240  			return err
  2241  		}
  2242  		tries++
  2243  		if tries >= 3 {
  2244  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  2245  			return err
  2246  		}
  2247  	}
  2248  
  2249  }
  2250  
  2251  func (s *RetryLayerChannelStore) SetShared(channelId string, shared bool) error {
  2252  
  2253  	tries := 0
  2254  	for {
  2255  		err := s.ChannelStore.SetShared(channelId, shared)
  2256  		if err == nil {
  2257  			return nil
  2258  		}
  2259  		if !isRepeatableError(err) {
  2260  			return err
  2261  		}
  2262  		tries++
  2263  		if tries >= 3 {
  2264  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  2265  			return err
  2266  		}
  2267  	}
  2268  
  2269  }
  2270  
  2271  func (s *RetryLayerChannelStore) Update(channel *model.Channel) (*model.Channel, error) {
  2272  
  2273  	tries := 0
  2274  	for {
  2275  		result, err := s.ChannelStore.Update(channel)
  2276  		if err == nil {
  2277  			return result, nil
  2278  		}
  2279  		if !isRepeatableError(err) {
  2280  			return result, err
  2281  		}
  2282  		tries++
  2283  		if tries >= 3 {
  2284  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  2285  			return result, err
  2286  		}
  2287  	}
  2288  
  2289  }
  2290  
  2291  func (s *RetryLayerChannelStore) UpdateLastViewedAt(channelIds []string, userID string, updateThreads bool) (map[string]int64, error) {
  2292  
  2293  	tries := 0
  2294  	for {
  2295  		result, err := s.ChannelStore.UpdateLastViewedAt(channelIds, userID, updateThreads)
  2296  		if err == nil {
  2297  			return result, nil
  2298  		}
  2299  		if !isRepeatableError(err) {
  2300  			return result, err
  2301  		}
  2302  		tries++
  2303  		if tries >= 3 {
  2304  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  2305  			return result, err
  2306  		}
  2307  	}
  2308  
  2309  }
  2310  
  2311  func (s *RetryLayerChannelStore) UpdateLastViewedAtPost(unreadPost *model.Post, userID string, mentionCount int, mentionCountRoot int, updateThreads bool, setUnreadCountRoot bool) (*model.ChannelUnreadAt, error) {
  2312  
  2313  	tries := 0
  2314  	for {
  2315  		result, err := s.ChannelStore.UpdateLastViewedAtPost(unreadPost, userID, mentionCount, mentionCountRoot, updateThreads, setUnreadCountRoot)
  2316  		if err == nil {
  2317  			return result, nil
  2318  		}
  2319  		if !isRepeatableError(err) {
  2320  			return result, err
  2321  		}
  2322  		tries++
  2323  		if tries >= 3 {
  2324  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  2325  			return result, err
  2326  		}
  2327  	}
  2328  
  2329  }
  2330  
  2331  func (s *RetryLayerChannelStore) UpdateMember(member *model.ChannelMember) (*model.ChannelMember, error) {
  2332  
  2333  	tries := 0
  2334  	for {
  2335  		result, err := s.ChannelStore.UpdateMember(member)
  2336  		if err == nil {
  2337  			return result, nil
  2338  		}
  2339  		if !isRepeatableError(err) {
  2340  			return result, err
  2341  		}
  2342  		tries++
  2343  		if tries >= 3 {
  2344  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  2345  			return result, err
  2346  		}
  2347  	}
  2348  
  2349  }
  2350  
  2351  func (s *RetryLayerChannelStore) UpdateMembersRole(channelID string, userIDs []string) error {
  2352  
  2353  	tries := 0
  2354  	for {
  2355  		err := s.ChannelStore.UpdateMembersRole(channelID, userIDs)
  2356  		if err == nil {
  2357  			return nil
  2358  		}
  2359  		if !isRepeatableError(err) {
  2360  			return err
  2361  		}
  2362  		tries++
  2363  		if tries >= 3 {
  2364  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  2365  			return err
  2366  		}
  2367  	}
  2368  
  2369  }
  2370  
  2371  func (s *RetryLayerChannelStore) UpdateMultipleMembers(members []*model.ChannelMember) ([]*model.ChannelMember, error) {
  2372  
  2373  	tries := 0
  2374  	for {
  2375  		result, err := s.ChannelStore.UpdateMultipleMembers(members)
  2376  		if err == nil {
  2377  			return result, nil
  2378  		}
  2379  		if !isRepeatableError(err) {
  2380  			return result, err
  2381  		}
  2382  		tries++
  2383  		if tries >= 3 {
  2384  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  2385  			return result, err
  2386  		}
  2387  	}
  2388  
  2389  }
  2390  
  2391  func (s *RetryLayerChannelStore) UpdateSidebarCategories(userID string, teamID string, categories []*model.SidebarCategoryWithChannels) ([]*model.SidebarCategoryWithChannels, []*model.SidebarCategoryWithChannels, error) {
  2392  
  2393  	tries := 0
  2394  	for {
  2395  		result, resultVar1, err := s.ChannelStore.UpdateSidebarCategories(userID, teamID, categories)
  2396  		if err == nil {
  2397  			return result, resultVar1, nil
  2398  		}
  2399  		if !isRepeatableError(err) {
  2400  			return result, resultVar1, err
  2401  		}
  2402  		tries++
  2403  		if tries >= 3 {
  2404  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  2405  			return result, resultVar1, err
  2406  		}
  2407  	}
  2408  
  2409  }
  2410  
  2411  func (s *RetryLayerChannelStore) UpdateSidebarCategoryOrder(userID string, teamID string, categoryOrder []string) error {
  2412  
  2413  	tries := 0
  2414  	for {
  2415  		err := s.ChannelStore.UpdateSidebarCategoryOrder(userID, teamID, categoryOrder)
  2416  		if err == nil {
  2417  			return nil
  2418  		}
  2419  		if !isRepeatableError(err) {
  2420  			return err
  2421  		}
  2422  		tries++
  2423  		if tries >= 3 {
  2424  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  2425  			return err
  2426  		}
  2427  	}
  2428  
  2429  }
  2430  
  2431  func (s *RetryLayerChannelStore) UpdateSidebarChannelCategoryOnMove(channel *model.Channel, newTeamID string) error {
  2432  
  2433  	tries := 0
  2434  	for {
  2435  		err := s.ChannelStore.UpdateSidebarChannelCategoryOnMove(channel, newTeamID)
  2436  		if err == nil {
  2437  			return nil
  2438  		}
  2439  		if !isRepeatableError(err) {
  2440  			return err
  2441  		}
  2442  		tries++
  2443  		if tries >= 3 {
  2444  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  2445  			return err
  2446  		}
  2447  	}
  2448  
  2449  }
  2450  
  2451  func (s *RetryLayerChannelStore) UpdateSidebarChannelsByPreferences(preferences *model.Preferences) error {
  2452  
  2453  	tries := 0
  2454  	for {
  2455  		err := s.ChannelStore.UpdateSidebarChannelsByPreferences(preferences)
  2456  		if err == nil {
  2457  			return nil
  2458  		}
  2459  		if !isRepeatableError(err) {
  2460  			return err
  2461  		}
  2462  		tries++
  2463  		if tries >= 3 {
  2464  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  2465  			return err
  2466  		}
  2467  	}
  2468  
  2469  }
  2470  
  2471  func (s *RetryLayerChannelStore) UserBelongsToChannels(userID string, channelIds []string) (bool, error) {
  2472  
  2473  	tries := 0
  2474  	for {
  2475  		result, err := s.ChannelStore.UserBelongsToChannels(userID, channelIds)
  2476  		if err == nil {
  2477  			return result, nil
  2478  		}
  2479  		if !isRepeatableError(err) {
  2480  			return result, err
  2481  		}
  2482  		tries++
  2483  		if tries >= 3 {
  2484  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  2485  			return result, err
  2486  		}
  2487  	}
  2488  
  2489  }
  2490  
  2491  func (s *RetryLayerChannelMemberHistoryStore) DeleteOrphanedRows(limit int) (int64, error) {
  2492  
  2493  	tries := 0
  2494  	for {
  2495  		result, err := s.ChannelMemberHistoryStore.DeleteOrphanedRows(limit)
  2496  		if err == nil {
  2497  			return result, nil
  2498  		}
  2499  		if !isRepeatableError(err) {
  2500  			return result, err
  2501  		}
  2502  		tries++
  2503  		if tries >= 3 {
  2504  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  2505  			return result, err
  2506  		}
  2507  	}
  2508  
  2509  }
  2510  
  2511  func (s *RetryLayerChannelMemberHistoryStore) GetUsersInChannelDuring(startTime int64, endTime int64, channelID string) ([]*model.ChannelMemberHistoryResult, error) {
  2512  
  2513  	tries := 0
  2514  	for {
  2515  		result, err := s.ChannelMemberHistoryStore.GetUsersInChannelDuring(startTime, endTime, channelID)
  2516  		if err == nil {
  2517  			return result, nil
  2518  		}
  2519  		if !isRepeatableError(err) {
  2520  			return result, err
  2521  		}
  2522  		tries++
  2523  		if tries >= 3 {
  2524  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  2525  			return result, err
  2526  		}
  2527  	}
  2528  
  2529  }
  2530  
  2531  func (s *RetryLayerChannelMemberHistoryStore) LogJoinEvent(userID string, channelID string, joinTime int64) error {
  2532  
  2533  	tries := 0
  2534  	for {
  2535  		err := s.ChannelMemberHistoryStore.LogJoinEvent(userID, channelID, joinTime)
  2536  		if err == nil {
  2537  			return nil
  2538  		}
  2539  		if !isRepeatableError(err) {
  2540  			return err
  2541  		}
  2542  		tries++
  2543  		if tries >= 3 {
  2544  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  2545  			return err
  2546  		}
  2547  	}
  2548  
  2549  }
  2550  
  2551  func (s *RetryLayerChannelMemberHistoryStore) LogLeaveEvent(userID string, channelID string, leaveTime int64) error {
  2552  
  2553  	tries := 0
  2554  	for {
  2555  		err := s.ChannelMemberHistoryStore.LogLeaveEvent(userID, channelID, leaveTime)
  2556  		if err == nil {
  2557  			return nil
  2558  		}
  2559  		if !isRepeatableError(err) {
  2560  			return err
  2561  		}
  2562  		tries++
  2563  		if tries >= 3 {
  2564  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  2565  			return err
  2566  		}
  2567  	}
  2568  
  2569  }
  2570  
  2571  func (s *RetryLayerChannelMemberHistoryStore) PermanentDeleteBatch(endTime int64, limit int64) (int64, error) {
  2572  
  2573  	tries := 0
  2574  	for {
  2575  		result, err := s.ChannelMemberHistoryStore.PermanentDeleteBatch(endTime, limit)
  2576  		if err == nil {
  2577  			return result, nil
  2578  		}
  2579  		if !isRepeatableError(err) {
  2580  			return result, err
  2581  		}
  2582  		tries++
  2583  		if tries >= 3 {
  2584  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  2585  			return result, err
  2586  		}
  2587  	}
  2588  
  2589  }
  2590  
  2591  func (s *RetryLayerChannelMemberHistoryStore) PermanentDeleteBatchForRetentionPolicies(now int64, globalPolicyEndTime int64, limit int64, cursor model.RetentionPolicyCursor) (int64, model.RetentionPolicyCursor, error) {
  2592  
  2593  	tries := 0
  2594  	for {
  2595  		result, resultVar1, err := s.ChannelMemberHistoryStore.PermanentDeleteBatchForRetentionPolicies(now, globalPolicyEndTime, limit, cursor)
  2596  		if err == nil {
  2597  			return result, resultVar1, nil
  2598  		}
  2599  		if !isRepeatableError(err) {
  2600  			return result, resultVar1, err
  2601  		}
  2602  		tries++
  2603  		if tries >= 3 {
  2604  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  2605  			return result, resultVar1, err
  2606  		}
  2607  	}
  2608  
  2609  }
  2610  
  2611  func (s *RetryLayerClusterDiscoveryStore) Cleanup() error {
  2612  
  2613  	tries := 0
  2614  	for {
  2615  		err := s.ClusterDiscoveryStore.Cleanup()
  2616  		if err == nil {
  2617  			return nil
  2618  		}
  2619  		if !isRepeatableError(err) {
  2620  			return err
  2621  		}
  2622  		tries++
  2623  		if tries >= 3 {
  2624  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  2625  			return err
  2626  		}
  2627  	}
  2628  
  2629  }
  2630  
  2631  func (s *RetryLayerClusterDiscoveryStore) Delete(discovery *model.ClusterDiscovery) (bool, error) {
  2632  
  2633  	tries := 0
  2634  	for {
  2635  		result, err := s.ClusterDiscoveryStore.Delete(discovery)
  2636  		if err == nil {
  2637  			return result, nil
  2638  		}
  2639  		if !isRepeatableError(err) {
  2640  			return result, err
  2641  		}
  2642  		tries++
  2643  		if tries >= 3 {
  2644  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  2645  			return result, err
  2646  		}
  2647  	}
  2648  
  2649  }
  2650  
  2651  func (s *RetryLayerClusterDiscoveryStore) Exists(discovery *model.ClusterDiscovery) (bool, error) {
  2652  
  2653  	tries := 0
  2654  	for {
  2655  		result, err := s.ClusterDiscoveryStore.Exists(discovery)
  2656  		if err == nil {
  2657  			return result, nil
  2658  		}
  2659  		if !isRepeatableError(err) {
  2660  			return result, err
  2661  		}
  2662  		tries++
  2663  		if tries >= 3 {
  2664  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  2665  			return result, err
  2666  		}
  2667  	}
  2668  
  2669  }
  2670  
  2671  func (s *RetryLayerClusterDiscoveryStore) GetAll(discoveryType string, clusterName string) ([]*model.ClusterDiscovery, error) {
  2672  
  2673  	tries := 0
  2674  	for {
  2675  		result, err := s.ClusterDiscoveryStore.GetAll(discoveryType, clusterName)
  2676  		if err == nil {
  2677  			return result, nil
  2678  		}
  2679  		if !isRepeatableError(err) {
  2680  			return result, err
  2681  		}
  2682  		tries++
  2683  		if tries >= 3 {
  2684  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  2685  			return result, err
  2686  		}
  2687  	}
  2688  
  2689  }
  2690  
  2691  func (s *RetryLayerClusterDiscoveryStore) Save(discovery *model.ClusterDiscovery) error {
  2692  
  2693  	tries := 0
  2694  	for {
  2695  		err := s.ClusterDiscoveryStore.Save(discovery)
  2696  		if err == nil {
  2697  			return nil
  2698  		}
  2699  		if !isRepeatableError(err) {
  2700  			return err
  2701  		}
  2702  		tries++
  2703  		if tries >= 3 {
  2704  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  2705  			return err
  2706  		}
  2707  	}
  2708  
  2709  }
  2710  
  2711  func (s *RetryLayerClusterDiscoveryStore) SetLastPingAt(discovery *model.ClusterDiscovery) error {
  2712  
  2713  	tries := 0
  2714  	for {
  2715  		err := s.ClusterDiscoveryStore.SetLastPingAt(discovery)
  2716  		if err == nil {
  2717  			return nil
  2718  		}
  2719  		if !isRepeatableError(err) {
  2720  			return err
  2721  		}
  2722  		tries++
  2723  		if tries >= 3 {
  2724  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  2725  			return err
  2726  		}
  2727  	}
  2728  
  2729  }
  2730  
  2731  func (s *RetryLayerCommandStore) AnalyticsCommandCount(teamID string) (int64, error) {
  2732  
  2733  	tries := 0
  2734  	for {
  2735  		result, err := s.CommandStore.AnalyticsCommandCount(teamID)
  2736  		if err == nil {
  2737  			return result, nil
  2738  		}
  2739  		if !isRepeatableError(err) {
  2740  			return result, err
  2741  		}
  2742  		tries++
  2743  		if tries >= 3 {
  2744  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  2745  			return result, err
  2746  		}
  2747  	}
  2748  
  2749  }
  2750  
  2751  func (s *RetryLayerCommandStore) Delete(commandID string, time int64) error {
  2752  
  2753  	tries := 0
  2754  	for {
  2755  		err := s.CommandStore.Delete(commandID, time)
  2756  		if err == nil {
  2757  			return nil
  2758  		}
  2759  		if !isRepeatableError(err) {
  2760  			return err
  2761  		}
  2762  		tries++
  2763  		if tries >= 3 {
  2764  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  2765  			return err
  2766  		}
  2767  	}
  2768  
  2769  }
  2770  
  2771  func (s *RetryLayerCommandStore) Get(id string) (*model.Command, error) {
  2772  
  2773  	tries := 0
  2774  	for {
  2775  		result, err := s.CommandStore.Get(id)
  2776  		if err == nil {
  2777  			return result, nil
  2778  		}
  2779  		if !isRepeatableError(err) {
  2780  			return result, err
  2781  		}
  2782  		tries++
  2783  		if tries >= 3 {
  2784  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  2785  			return result, err
  2786  		}
  2787  	}
  2788  
  2789  }
  2790  
  2791  func (s *RetryLayerCommandStore) GetByTeam(teamID string) ([]*model.Command, error) {
  2792  
  2793  	tries := 0
  2794  	for {
  2795  		result, err := s.CommandStore.GetByTeam(teamID)
  2796  		if err == nil {
  2797  			return result, nil
  2798  		}
  2799  		if !isRepeatableError(err) {
  2800  			return result, err
  2801  		}
  2802  		tries++
  2803  		if tries >= 3 {
  2804  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  2805  			return result, err
  2806  		}
  2807  	}
  2808  
  2809  }
  2810  
  2811  func (s *RetryLayerCommandStore) GetByTrigger(teamID string, trigger string) (*model.Command, error) {
  2812  
  2813  	tries := 0
  2814  	for {
  2815  		result, err := s.CommandStore.GetByTrigger(teamID, trigger)
  2816  		if err == nil {
  2817  			return result, nil
  2818  		}
  2819  		if !isRepeatableError(err) {
  2820  			return result, err
  2821  		}
  2822  		tries++
  2823  		if tries >= 3 {
  2824  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  2825  			return result, err
  2826  		}
  2827  	}
  2828  
  2829  }
  2830  
  2831  func (s *RetryLayerCommandStore) PermanentDeleteByTeam(teamID string) error {
  2832  
  2833  	tries := 0
  2834  	for {
  2835  		err := s.CommandStore.PermanentDeleteByTeam(teamID)
  2836  		if err == nil {
  2837  			return nil
  2838  		}
  2839  		if !isRepeatableError(err) {
  2840  			return err
  2841  		}
  2842  		tries++
  2843  		if tries >= 3 {
  2844  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  2845  			return err
  2846  		}
  2847  	}
  2848  
  2849  }
  2850  
  2851  func (s *RetryLayerCommandStore) PermanentDeleteByUser(userID string) error {
  2852  
  2853  	tries := 0
  2854  	for {
  2855  		err := s.CommandStore.PermanentDeleteByUser(userID)
  2856  		if err == nil {
  2857  			return nil
  2858  		}
  2859  		if !isRepeatableError(err) {
  2860  			return err
  2861  		}
  2862  		tries++
  2863  		if tries >= 3 {
  2864  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  2865  			return err
  2866  		}
  2867  	}
  2868  
  2869  }
  2870  
  2871  func (s *RetryLayerCommandStore) Save(webhook *model.Command) (*model.Command, error) {
  2872  
  2873  	tries := 0
  2874  	for {
  2875  		result, err := s.CommandStore.Save(webhook)
  2876  		if err == nil {
  2877  			return result, nil
  2878  		}
  2879  		if !isRepeatableError(err) {
  2880  			return result, err
  2881  		}
  2882  		tries++
  2883  		if tries >= 3 {
  2884  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  2885  			return result, err
  2886  		}
  2887  	}
  2888  
  2889  }
  2890  
  2891  func (s *RetryLayerCommandStore) Update(hook *model.Command) (*model.Command, error) {
  2892  
  2893  	tries := 0
  2894  	for {
  2895  		result, err := s.CommandStore.Update(hook)
  2896  		if err == nil {
  2897  			return result, nil
  2898  		}
  2899  		if !isRepeatableError(err) {
  2900  			return result, err
  2901  		}
  2902  		tries++
  2903  		if tries >= 3 {
  2904  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  2905  			return result, err
  2906  		}
  2907  	}
  2908  
  2909  }
  2910  
  2911  func (s *RetryLayerCommandWebhookStore) Cleanup() {
  2912  
  2913  	s.CommandWebhookStore.Cleanup()
  2914  
  2915  }
  2916  
  2917  func (s *RetryLayerCommandWebhookStore) Get(id string) (*model.CommandWebhook, error) {
  2918  
  2919  	tries := 0
  2920  	for {
  2921  		result, err := s.CommandWebhookStore.Get(id)
  2922  		if err == nil {
  2923  			return result, nil
  2924  		}
  2925  		if !isRepeatableError(err) {
  2926  			return result, err
  2927  		}
  2928  		tries++
  2929  		if tries >= 3 {
  2930  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  2931  			return result, err
  2932  		}
  2933  	}
  2934  
  2935  }
  2936  
  2937  func (s *RetryLayerCommandWebhookStore) Save(webhook *model.CommandWebhook) (*model.CommandWebhook, error) {
  2938  
  2939  	tries := 0
  2940  	for {
  2941  		result, err := s.CommandWebhookStore.Save(webhook)
  2942  		if err == nil {
  2943  			return result, nil
  2944  		}
  2945  		if !isRepeatableError(err) {
  2946  			return result, err
  2947  		}
  2948  		tries++
  2949  		if tries >= 3 {
  2950  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  2951  			return result, err
  2952  		}
  2953  	}
  2954  
  2955  }
  2956  
  2957  func (s *RetryLayerCommandWebhookStore) TryUse(id string, limit int) error {
  2958  
  2959  	tries := 0
  2960  	for {
  2961  		err := s.CommandWebhookStore.TryUse(id, limit)
  2962  		if err == nil {
  2963  			return nil
  2964  		}
  2965  		if !isRepeatableError(err) {
  2966  			return err
  2967  		}
  2968  		tries++
  2969  		if tries >= 3 {
  2970  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  2971  			return err
  2972  		}
  2973  	}
  2974  
  2975  }
  2976  
  2977  func (s *RetryLayerComplianceStore) ComplianceExport(compliance *model.Compliance, cursor model.ComplianceExportCursor, limit int) ([]*model.CompliancePost, model.ComplianceExportCursor, error) {
  2978  
  2979  	tries := 0
  2980  	for {
  2981  		result, resultVar1, err := s.ComplianceStore.ComplianceExport(compliance, cursor, limit)
  2982  		if err == nil {
  2983  			return result, resultVar1, nil
  2984  		}
  2985  		if !isRepeatableError(err) {
  2986  			return result, resultVar1, err
  2987  		}
  2988  		tries++
  2989  		if tries >= 3 {
  2990  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  2991  			return result, resultVar1, err
  2992  		}
  2993  	}
  2994  
  2995  }
  2996  
  2997  func (s *RetryLayerComplianceStore) Get(id string) (*model.Compliance, error) {
  2998  
  2999  	tries := 0
  3000  	for {
  3001  		result, err := s.ComplianceStore.Get(id)
  3002  		if err == nil {
  3003  			return result, nil
  3004  		}
  3005  		if !isRepeatableError(err) {
  3006  			return result, err
  3007  		}
  3008  		tries++
  3009  		if tries >= 3 {
  3010  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  3011  			return result, err
  3012  		}
  3013  	}
  3014  
  3015  }
  3016  
  3017  func (s *RetryLayerComplianceStore) GetAll(offset int, limit int) (model.Compliances, error) {
  3018  
  3019  	tries := 0
  3020  	for {
  3021  		result, err := s.ComplianceStore.GetAll(offset, limit)
  3022  		if err == nil {
  3023  			return result, nil
  3024  		}
  3025  		if !isRepeatableError(err) {
  3026  			return result, err
  3027  		}
  3028  		tries++
  3029  		if tries >= 3 {
  3030  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  3031  			return result, err
  3032  		}
  3033  	}
  3034  
  3035  }
  3036  
  3037  func (s *RetryLayerComplianceStore) MessageExport(cursor model.MessageExportCursor, limit int) ([]*model.MessageExport, model.MessageExportCursor, error) {
  3038  
  3039  	tries := 0
  3040  	for {
  3041  		result, resultVar1, err := s.ComplianceStore.MessageExport(cursor, limit)
  3042  		if err == nil {
  3043  			return result, resultVar1, nil
  3044  		}
  3045  		if !isRepeatableError(err) {
  3046  			return result, resultVar1, err
  3047  		}
  3048  		tries++
  3049  		if tries >= 3 {
  3050  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  3051  			return result, resultVar1, err
  3052  		}
  3053  	}
  3054  
  3055  }
  3056  
  3057  func (s *RetryLayerComplianceStore) Save(compliance *model.Compliance) (*model.Compliance, error) {
  3058  
  3059  	tries := 0
  3060  	for {
  3061  		result, err := s.ComplianceStore.Save(compliance)
  3062  		if err == nil {
  3063  			return result, nil
  3064  		}
  3065  		if !isRepeatableError(err) {
  3066  			return result, err
  3067  		}
  3068  		tries++
  3069  		if tries >= 3 {
  3070  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  3071  			return result, err
  3072  		}
  3073  	}
  3074  
  3075  }
  3076  
  3077  func (s *RetryLayerComplianceStore) Update(compliance *model.Compliance) (*model.Compliance, error) {
  3078  
  3079  	tries := 0
  3080  	for {
  3081  		result, err := s.ComplianceStore.Update(compliance)
  3082  		if err == nil {
  3083  			return result, nil
  3084  		}
  3085  		if !isRepeatableError(err) {
  3086  			return result, err
  3087  		}
  3088  		tries++
  3089  		if tries >= 3 {
  3090  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  3091  			return result, err
  3092  		}
  3093  	}
  3094  
  3095  }
  3096  
  3097  func (s *RetryLayerEmojiStore) Delete(emoji *model.Emoji, time int64) error {
  3098  
  3099  	tries := 0
  3100  	for {
  3101  		err := s.EmojiStore.Delete(emoji, time)
  3102  		if err == nil {
  3103  			return nil
  3104  		}
  3105  		if !isRepeatableError(err) {
  3106  			return err
  3107  		}
  3108  		tries++
  3109  		if tries >= 3 {
  3110  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  3111  			return err
  3112  		}
  3113  	}
  3114  
  3115  }
  3116  
  3117  func (s *RetryLayerEmojiStore) Get(ctx context.Context, id string, allowFromCache bool) (*model.Emoji, error) {
  3118  
  3119  	tries := 0
  3120  	for {
  3121  		result, err := s.EmojiStore.Get(ctx, id, allowFromCache)
  3122  		if err == nil {
  3123  			return result, nil
  3124  		}
  3125  		if !isRepeatableError(err) {
  3126  			return result, err
  3127  		}
  3128  		tries++
  3129  		if tries >= 3 {
  3130  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  3131  			return result, err
  3132  		}
  3133  	}
  3134  
  3135  }
  3136  
  3137  func (s *RetryLayerEmojiStore) GetByName(ctx context.Context, name string, allowFromCache bool) (*model.Emoji, error) {
  3138  
  3139  	tries := 0
  3140  	for {
  3141  		result, err := s.EmojiStore.GetByName(ctx, name, allowFromCache)
  3142  		if err == nil {
  3143  			return result, nil
  3144  		}
  3145  		if !isRepeatableError(err) {
  3146  			return result, err
  3147  		}
  3148  		tries++
  3149  		if tries >= 3 {
  3150  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  3151  			return result, err
  3152  		}
  3153  	}
  3154  
  3155  }
  3156  
  3157  func (s *RetryLayerEmojiStore) GetList(offset int, limit int, sort string) ([]*model.Emoji, error) {
  3158  
  3159  	tries := 0
  3160  	for {
  3161  		result, err := s.EmojiStore.GetList(offset, limit, sort)
  3162  		if err == nil {
  3163  			return result, nil
  3164  		}
  3165  		if !isRepeatableError(err) {
  3166  			return result, err
  3167  		}
  3168  		tries++
  3169  		if tries >= 3 {
  3170  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  3171  			return result, err
  3172  		}
  3173  	}
  3174  
  3175  }
  3176  
  3177  func (s *RetryLayerEmojiStore) GetMultipleByName(names []string) ([]*model.Emoji, error) {
  3178  
  3179  	tries := 0
  3180  	for {
  3181  		result, err := s.EmojiStore.GetMultipleByName(names)
  3182  		if err == nil {
  3183  			return result, nil
  3184  		}
  3185  		if !isRepeatableError(err) {
  3186  			return result, err
  3187  		}
  3188  		tries++
  3189  		if tries >= 3 {
  3190  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  3191  			return result, err
  3192  		}
  3193  	}
  3194  
  3195  }
  3196  
  3197  func (s *RetryLayerEmojiStore) Save(emoji *model.Emoji) (*model.Emoji, error) {
  3198  
  3199  	tries := 0
  3200  	for {
  3201  		result, err := s.EmojiStore.Save(emoji)
  3202  		if err == nil {
  3203  			return result, nil
  3204  		}
  3205  		if !isRepeatableError(err) {
  3206  			return result, err
  3207  		}
  3208  		tries++
  3209  		if tries >= 3 {
  3210  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  3211  			return result, err
  3212  		}
  3213  	}
  3214  
  3215  }
  3216  
  3217  func (s *RetryLayerEmojiStore) Search(name string, prefixOnly bool, limit int) ([]*model.Emoji, error) {
  3218  
  3219  	tries := 0
  3220  	for {
  3221  		result, err := s.EmojiStore.Search(name, prefixOnly, limit)
  3222  		if err == nil {
  3223  			return result, nil
  3224  		}
  3225  		if !isRepeatableError(err) {
  3226  			return result, err
  3227  		}
  3228  		tries++
  3229  		if tries >= 3 {
  3230  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  3231  			return result, err
  3232  		}
  3233  	}
  3234  
  3235  }
  3236  
  3237  func (s *RetryLayerFileInfoStore) AttachToPost(fileID string, postID string, creatorID string) error {
  3238  
  3239  	tries := 0
  3240  	for {
  3241  		err := s.FileInfoStore.AttachToPost(fileID, postID, creatorID)
  3242  		if err == nil {
  3243  			return nil
  3244  		}
  3245  		if !isRepeatableError(err) {
  3246  			return err
  3247  		}
  3248  		tries++
  3249  		if tries >= 3 {
  3250  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  3251  			return err
  3252  		}
  3253  	}
  3254  
  3255  }
  3256  
  3257  func (s *RetryLayerFileInfoStore) ClearCaches() {
  3258  
  3259  	s.FileInfoStore.ClearCaches()
  3260  
  3261  }
  3262  
  3263  func (s *RetryLayerFileInfoStore) CountAll() (int64, error) {
  3264  
  3265  	tries := 0
  3266  	for {
  3267  		result, err := s.FileInfoStore.CountAll()
  3268  		if err == nil {
  3269  			return result, nil
  3270  		}
  3271  		if !isRepeatableError(err) {
  3272  			return result, err
  3273  		}
  3274  		tries++
  3275  		if tries >= 3 {
  3276  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  3277  			return result, err
  3278  		}
  3279  	}
  3280  
  3281  }
  3282  
  3283  func (s *RetryLayerFileInfoStore) DeleteForPost(postID string) (string, error) {
  3284  
  3285  	tries := 0
  3286  	for {
  3287  		result, err := s.FileInfoStore.DeleteForPost(postID)
  3288  		if err == nil {
  3289  			return result, nil
  3290  		}
  3291  		if !isRepeatableError(err) {
  3292  			return result, err
  3293  		}
  3294  		tries++
  3295  		if tries >= 3 {
  3296  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  3297  			return result, err
  3298  		}
  3299  	}
  3300  
  3301  }
  3302  
  3303  func (s *RetryLayerFileInfoStore) Get(id string) (*model.FileInfo, error) {
  3304  
  3305  	tries := 0
  3306  	for {
  3307  		result, err := s.FileInfoStore.Get(id)
  3308  		if err == nil {
  3309  			return result, nil
  3310  		}
  3311  		if !isRepeatableError(err) {
  3312  			return result, err
  3313  		}
  3314  		tries++
  3315  		if tries >= 3 {
  3316  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  3317  			return result, err
  3318  		}
  3319  	}
  3320  
  3321  }
  3322  
  3323  func (s *RetryLayerFileInfoStore) GetByIds(ids []string) ([]*model.FileInfo, error) {
  3324  
  3325  	tries := 0
  3326  	for {
  3327  		result, err := s.FileInfoStore.GetByIds(ids)
  3328  		if err == nil {
  3329  			return result, nil
  3330  		}
  3331  		if !isRepeatableError(err) {
  3332  			return result, err
  3333  		}
  3334  		tries++
  3335  		if tries >= 3 {
  3336  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  3337  			return result, err
  3338  		}
  3339  	}
  3340  
  3341  }
  3342  
  3343  func (s *RetryLayerFileInfoStore) GetByPath(path string) (*model.FileInfo, error) {
  3344  
  3345  	tries := 0
  3346  	for {
  3347  		result, err := s.FileInfoStore.GetByPath(path)
  3348  		if err == nil {
  3349  			return result, nil
  3350  		}
  3351  		if !isRepeatableError(err) {
  3352  			return result, err
  3353  		}
  3354  		tries++
  3355  		if tries >= 3 {
  3356  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  3357  			return result, err
  3358  		}
  3359  	}
  3360  
  3361  }
  3362  
  3363  func (s *RetryLayerFileInfoStore) GetFilesBatchForIndexing(startTime int64, endTime int64, limit int) ([]*model.FileForIndexing, error) {
  3364  
  3365  	tries := 0
  3366  	for {
  3367  		result, err := s.FileInfoStore.GetFilesBatchForIndexing(startTime, endTime, limit)
  3368  		if err == nil {
  3369  			return result, nil
  3370  		}
  3371  		if !isRepeatableError(err) {
  3372  			return result, err
  3373  		}
  3374  		tries++
  3375  		if tries >= 3 {
  3376  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  3377  			return result, err
  3378  		}
  3379  	}
  3380  
  3381  }
  3382  
  3383  func (s *RetryLayerFileInfoStore) GetForPost(postID string, readFromMaster bool, includeDeleted bool, allowFromCache bool) ([]*model.FileInfo, error) {
  3384  
  3385  	tries := 0
  3386  	for {
  3387  		result, err := s.FileInfoStore.GetForPost(postID, readFromMaster, includeDeleted, allowFromCache)
  3388  		if err == nil {
  3389  			return result, nil
  3390  		}
  3391  		if !isRepeatableError(err) {
  3392  			return result, err
  3393  		}
  3394  		tries++
  3395  		if tries >= 3 {
  3396  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  3397  			return result, err
  3398  		}
  3399  	}
  3400  
  3401  }
  3402  
  3403  func (s *RetryLayerFileInfoStore) GetForUser(userID string) ([]*model.FileInfo, error) {
  3404  
  3405  	tries := 0
  3406  	for {
  3407  		result, err := s.FileInfoStore.GetForUser(userID)
  3408  		if err == nil {
  3409  			return result, nil
  3410  		}
  3411  		if !isRepeatableError(err) {
  3412  			return result, err
  3413  		}
  3414  		tries++
  3415  		if tries >= 3 {
  3416  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  3417  			return result, err
  3418  		}
  3419  	}
  3420  
  3421  }
  3422  
  3423  func (s *RetryLayerFileInfoStore) GetFromMaster(id string) (*model.FileInfo, error) {
  3424  
  3425  	tries := 0
  3426  	for {
  3427  		result, err := s.FileInfoStore.GetFromMaster(id)
  3428  		if err == nil {
  3429  			return result, nil
  3430  		}
  3431  		if !isRepeatableError(err) {
  3432  			return result, err
  3433  		}
  3434  		tries++
  3435  		if tries >= 3 {
  3436  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  3437  			return result, err
  3438  		}
  3439  	}
  3440  
  3441  }
  3442  
  3443  func (s *RetryLayerFileInfoStore) GetWithOptions(page int, perPage int, opt *model.GetFileInfosOptions) ([]*model.FileInfo, error) {
  3444  
  3445  	tries := 0
  3446  	for {
  3447  		result, err := s.FileInfoStore.GetWithOptions(page, perPage, opt)
  3448  		if err == nil {
  3449  			return result, nil
  3450  		}
  3451  		if !isRepeatableError(err) {
  3452  			return result, err
  3453  		}
  3454  		tries++
  3455  		if tries >= 3 {
  3456  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  3457  			return result, err
  3458  		}
  3459  	}
  3460  
  3461  }
  3462  
  3463  func (s *RetryLayerFileInfoStore) InvalidateFileInfosForPostCache(postID string, deleted bool) {
  3464  
  3465  	s.FileInfoStore.InvalidateFileInfosForPostCache(postID, deleted)
  3466  
  3467  }
  3468  
  3469  func (s *RetryLayerFileInfoStore) PermanentDelete(fileID string) error {
  3470  
  3471  	tries := 0
  3472  	for {
  3473  		err := s.FileInfoStore.PermanentDelete(fileID)
  3474  		if err == nil {
  3475  			return nil
  3476  		}
  3477  		if !isRepeatableError(err) {
  3478  			return err
  3479  		}
  3480  		tries++
  3481  		if tries >= 3 {
  3482  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  3483  			return err
  3484  		}
  3485  	}
  3486  
  3487  }
  3488  
  3489  func (s *RetryLayerFileInfoStore) PermanentDeleteBatch(endTime int64, limit int64) (int64, error) {
  3490  
  3491  	tries := 0
  3492  	for {
  3493  		result, err := s.FileInfoStore.PermanentDeleteBatch(endTime, limit)
  3494  		if err == nil {
  3495  			return result, nil
  3496  		}
  3497  		if !isRepeatableError(err) {
  3498  			return result, err
  3499  		}
  3500  		tries++
  3501  		if tries >= 3 {
  3502  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  3503  			return result, err
  3504  		}
  3505  	}
  3506  
  3507  }
  3508  
  3509  func (s *RetryLayerFileInfoStore) PermanentDeleteByUser(userID string) (int64, error) {
  3510  
  3511  	tries := 0
  3512  	for {
  3513  		result, err := s.FileInfoStore.PermanentDeleteByUser(userID)
  3514  		if err == nil {
  3515  			return result, nil
  3516  		}
  3517  		if !isRepeatableError(err) {
  3518  			return result, err
  3519  		}
  3520  		tries++
  3521  		if tries >= 3 {
  3522  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  3523  			return result, err
  3524  		}
  3525  	}
  3526  
  3527  }
  3528  
  3529  func (s *RetryLayerFileInfoStore) Save(info *model.FileInfo) (*model.FileInfo, error) {
  3530  
  3531  	tries := 0
  3532  	for {
  3533  		result, err := s.FileInfoStore.Save(info)
  3534  		if err == nil {
  3535  			return result, nil
  3536  		}
  3537  		if !isRepeatableError(err) {
  3538  			return result, err
  3539  		}
  3540  		tries++
  3541  		if tries >= 3 {
  3542  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  3543  			return result, err
  3544  		}
  3545  	}
  3546  
  3547  }
  3548  
  3549  func (s *RetryLayerFileInfoStore) Search(paramsList []*model.SearchParams, userID string, teamID string, page int, perPage int) (*model.FileInfoList, error) {
  3550  
  3551  	tries := 0
  3552  	for {
  3553  		result, err := s.FileInfoStore.Search(paramsList, userID, teamID, page, perPage)
  3554  		if err == nil {
  3555  			return result, nil
  3556  		}
  3557  		if !isRepeatableError(err) {
  3558  			return result, err
  3559  		}
  3560  		tries++
  3561  		if tries >= 3 {
  3562  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  3563  			return result, err
  3564  		}
  3565  	}
  3566  
  3567  }
  3568  
  3569  func (s *RetryLayerFileInfoStore) SetContent(fileID string, content string) error {
  3570  
  3571  	tries := 0
  3572  	for {
  3573  		err := s.FileInfoStore.SetContent(fileID, content)
  3574  		if err == nil {
  3575  			return nil
  3576  		}
  3577  		if !isRepeatableError(err) {
  3578  			return err
  3579  		}
  3580  		tries++
  3581  		if tries >= 3 {
  3582  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  3583  			return err
  3584  		}
  3585  	}
  3586  
  3587  }
  3588  
  3589  func (s *RetryLayerFileInfoStore) Upsert(info *model.FileInfo) (*model.FileInfo, error) {
  3590  
  3591  	tries := 0
  3592  	for {
  3593  		result, err := s.FileInfoStore.Upsert(info)
  3594  		if err == nil {
  3595  			return result, nil
  3596  		}
  3597  		if !isRepeatableError(err) {
  3598  			return result, err
  3599  		}
  3600  		tries++
  3601  		if tries >= 3 {
  3602  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  3603  			return result, err
  3604  		}
  3605  	}
  3606  
  3607  }
  3608  
  3609  func (s *RetryLayerGroupStore) AdminRoleGroupsForSyncableMember(userID string, syncableID string, syncableType model.GroupSyncableType) ([]string, error) {
  3610  
  3611  	tries := 0
  3612  	for {
  3613  		result, err := s.GroupStore.AdminRoleGroupsForSyncableMember(userID, syncableID, syncableType)
  3614  		if err == nil {
  3615  			return result, nil
  3616  		}
  3617  		if !isRepeatableError(err) {
  3618  			return result, err
  3619  		}
  3620  		tries++
  3621  		if tries >= 3 {
  3622  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  3623  			return result, err
  3624  		}
  3625  	}
  3626  
  3627  }
  3628  
  3629  func (s *RetryLayerGroupStore) ChannelMembersMinusGroupMembers(channelID string, groupIDs []string, page int, perPage int) ([]*model.UserWithGroups, error) {
  3630  
  3631  	tries := 0
  3632  	for {
  3633  		result, err := s.GroupStore.ChannelMembersMinusGroupMembers(channelID, groupIDs, page, perPage)
  3634  		if err == nil {
  3635  			return result, nil
  3636  		}
  3637  		if !isRepeatableError(err) {
  3638  			return result, err
  3639  		}
  3640  		tries++
  3641  		if tries >= 3 {
  3642  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  3643  			return result, err
  3644  		}
  3645  	}
  3646  
  3647  }
  3648  
  3649  func (s *RetryLayerGroupStore) ChannelMembersToAdd(since int64, channelID *string, includeRemovedMembers bool) ([]*model.UserChannelIDPair, error) {
  3650  
  3651  	tries := 0
  3652  	for {
  3653  		result, err := s.GroupStore.ChannelMembersToAdd(since, channelID, includeRemovedMembers)
  3654  		if err == nil {
  3655  			return result, nil
  3656  		}
  3657  		if !isRepeatableError(err) {
  3658  			return result, err
  3659  		}
  3660  		tries++
  3661  		if tries >= 3 {
  3662  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  3663  			return result, err
  3664  		}
  3665  	}
  3666  
  3667  }
  3668  
  3669  func (s *RetryLayerGroupStore) ChannelMembersToRemove(channelID *string) ([]*model.ChannelMember, error) {
  3670  
  3671  	tries := 0
  3672  	for {
  3673  		result, err := s.GroupStore.ChannelMembersToRemove(channelID)
  3674  		if err == nil {
  3675  			return result, nil
  3676  		}
  3677  		if !isRepeatableError(err) {
  3678  			return result, err
  3679  		}
  3680  		tries++
  3681  		if tries >= 3 {
  3682  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  3683  			return result, err
  3684  		}
  3685  	}
  3686  
  3687  }
  3688  
  3689  func (s *RetryLayerGroupStore) CountChannelMembersMinusGroupMembers(channelID string, groupIDs []string) (int64, error) {
  3690  
  3691  	tries := 0
  3692  	for {
  3693  		result, err := s.GroupStore.CountChannelMembersMinusGroupMembers(channelID, groupIDs)
  3694  		if err == nil {
  3695  			return result, nil
  3696  		}
  3697  		if !isRepeatableError(err) {
  3698  			return result, err
  3699  		}
  3700  		tries++
  3701  		if tries >= 3 {
  3702  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  3703  			return result, err
  3704  		}
  3705  	}
  3706  
  3707  }
  3708  
  3709  func (s *RetryLayerGroupStore) CountGroupsByChannel(channelID string, opts model.GroupSearchOpts) (int64, error) {
  3710  
  3711  	tries := 0
  3712  	for {
  3713  		result, err := s.GroupStore.CountGroupsByChannel(channelID, opts)
  3714  		if err == nil {
  3715  			return result, nil
  3716  		}
  3717  		if !isRepeatableError(err) {
  3718  			return result, err
  3719  		}
  3720  		tries++
  3721  		if tries >= 3 {
  3722  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  3723  			return result, err
  3724  		}
  3725  	}
  3726  
  3727  }
  3728  
  3729  func (s *RetryLayerGroupStore) CountGroupsByTeam(teamID string, opts model.GroupSearchOpts) (int64, error) {
  3730  
  3731  	tries := 0
  3732  	for {
  3733  		result, err := s.GroupStore.CountGroupsByTeam(teamID, opts)
  3734  		if err == nil {
  3735  			return result, nil
  3736  		}
  3737  		if !isRepeatableError(err) {
  3738  			return result, err
  3739  		}
  3740  		tries++
  3741  		if tries >= 3 {
  3742  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  3743  			return result, err
  3744  		}
  3745  	}
  3746  
  3747  }
  3748  
  3749  func (s *RetryLayerGroupStore) CountTeamMembersMinusGroupMembers(teamID string, groupIDs []string) (int64, error) {
  3750  
  3751  	tries := 0
  3752  	for {
  3753  		result, err := s.GroupStore.CountTeamMembersMinusGroupMembers(teamID, groupIDs)
  3754  		if err == nil {
  3755  			return result, nil
  3756  		}
  3757  		if !isRepeatableError(err) {
  3758  			return result, err
  3759  		}
  3760  		tries++
  3761  		if tries >= 3 {
  3762  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  3763  			return result, err
  3764  		}
  3765  	}
  3766  
  3767  }
  3768  
  3769  func (s *RetryLayerGroupStore) Create(group *model.Group) (*model.Group, error) {
  3770  
  3771  	tries := 0
  3772  	for {
  3773  		result, err := s.GroupStore.Create(group)
  3774  		if err == nil {
  3775  			return result, nil
  3776  		}
  3777  		if !isRepeatableError(err) {
  3778  			return result, err
  3779  		}
  3780  		tries++
  3781  		if tries >= 3 {
  3782  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  3783  			return result, err
  3784  		}
  3785  	}
  3786  
  3787  }
  3788  
  3789  func (s *RetryLayerGroupStore) CreateGroupSyncable(groupSyncable *model.GroupSyncable) (*model.GroupSyncable, error) {
  3790  
  3791  	tries := 0
  3792  	for {
  3793  		result, err := s.GroupStore.CreateGroupSyncable(groupSyncable)
  3794  		if err == nil {
  3795  			return result, nil
  3796  		}
  3797  		if !isRepeatableError(err) {
  3798  			return result, err
  3799  		}
  3800  		tries++
  3801  		if tries >= 3 {
  3802  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  3803  			return result, err
  3804  		}
  3805  	}
  3806  
  3807  }
  3808  
  3809  func (s *RetryLayerGroupStore) Delete(groupID string) (*model.Group, error) {
  3810  
  3811  	tries := 0
  3812  	for {
  3813  		result, err := s.GroupStore.Delete(groupID)
  3814  		if err == nil {
  3815  			return result, nil
  3816  		}
  3817  		if !isRepeatableError(err) {
  3818  			return result, err
  3819  		}
  3820  		tries++
  3821  		if tries >= 3 {
  3822  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  3823  			return result, err
  3824  		}
  3825  	}
  3826  
  3827  }
  3828  
  3829  func (s *RetryLayerGroupStore) DeleteGroupSyncable(groupID string, syncableID string, syncableType model.GroupSyncableType) (*model.GroupSyncable, error) {
  3830  
  3831  	tries := 0
  3832  	for {
  3833  		result, err := s.GroupStore.DeleteGroupSyncable(groupID, syncableID, syncableType)
  3834  		if err == nil {
  3835  			return result, nil
  3836  		}
  3837  		if !isRepeatableError(err) {
  3838  			return result, err
  3839  		}
  3840  		tries++
  3841  		if tries >= 3 {
  3842  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  3843  			return result, err
  3844  		}
  3845  	}
  3846  
  3847  }
  3848  
  3849  func (s *RetryLayerGroupStore) DeleteMember(groupID string, userID string) (*model.GroupMember, error) {
  3850  
  3851  	tries := 0
  3852  	for {
  3853  		result, err := s.GroupStore.DeleteMember(groupID, userID)
  3854  		if err == nil {
  3855  			return result, nil
  3856  		}
  3857  		if !isRepeatableError(err) {
  3858  			return result, err
  3859  		}
  3860  		tries++
  3861  		if tries >= 3 {
  3862  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  3863  			return result, err
  3864  		}
  3865  	}
  3866  
  3867  }
  3868  
  3869  func (s *RetryLayerGroupStore) DistinctGroupMemberCount() (int64, error) {
  3870  
  3871  	tries := 0
  3872  	for {
  3873  		result, err := s.GroupStore.DistinctGroupMemberCount()
  3874  		if err == nil {
  3875  			return result, nil
  3876  		}
  3877  		if !isRepeatableError(err) {
  3878  			return result, err
  3879  		}
  3880  		tries++
  3881  		if tries >= 3 {
  3882  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  3883  			return result, err
  3884  		}
  3885  	}
  3886  
  3887  }
  3888  
  3889  func (s *RetryLayerGroupStore) Get(groupID string) (*model.Group, error) {
  3890  
  3891  	tries := 0
  3892  	for {
  3893  		result, err := s.GroupStore.Get(groupID)
  3894  		if err == nil {
  3895  			return result, nil
  3896  		}
  3897  		if !isRepeatableError(err) {
  3898  			return result, err
  3899  		}
  3900  		tries++
  3901  		if tries >= 3 {
  3902  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  3903  			return result, err
  3904  		}
  3905  	}
  3906  
  3907  }
  3908  
  3909  func (s *RetryLayerGroupStore) GetAllBySource(groupSource model.GroupSource) ([]*model.Group, error) {
  3910  
  3911  	tries := 0
  3912  	for {
  3913  		result, err := s.GroupStore.GetAllBySource(groupSource)
  3914  		if err == nil {
  3915  			return result, nil
  3916  		}
  3917  		if !isRepeatableError(err) {
  3918  			return result, err
  3919  		}
  3920  		tries++
  3921  		if tries >= 3 {
  3922  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  3923  			return result, err
  3924  		}
  3925  	}
  3926  
  3927  }
  3928  
  3929  func (s *RetryLayerGroupStore) GetAllGroupSyncablesByGroupId(groupID string, syncableType model.GroupSyncableType) ([]*model.GroupSyncable, error) {
  3930  
  3931  	tries := 0
  3932  	for {
  3933  		result, err := s.GroupStore.GetAllGroupSyncablesByGroupId(groupID, syncableType)
  3934  		if err == nil {
  3935  			return result, nil
  3936  		}
  3937  		if !isRepeatableError(err) {
  3938  			return result, err
  3939  		}
  3940  		tries++
  3941  		if tries >= 3 {
  3942  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  3943  			return result, err
  3944  		}
  3945  	}
  3946  
  3947  }
  3948  
  3949  func (s *RetryLayerGroupStore) GetByIDs(groupIDs []string) ([]*model.Group, error) {
  3950  
  3951  	tries := 0
  3952  	for {
  3953  		result, err := s.GroupStore.GetByIDs(groupIDs)
  3954  		if err == nil {
  3955  			return result, nil
  3956  		}
  3957  		if !isRepeatableError(err) {
  3958  			return result, err
  3959  		}
  3960  		tries++
  3961  		if tries >= 3 {
  3962  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  3963  			return result, err
  3964  		}
  3965  	}
  3966  
  3967  }
  3968  
  3969  func (s *RetryLayerGroupStore) GetByName(name string, opts model.GroupSearchOpts) (*model.Group, error) {
  3970  
  3971  	tries := 0
  3972  	for {
  3973  		result, err := s.GroupStore.GetByName(name, opts)
  3974  		if err == nil {
  3975  			return result, nil
  3976  		}
  3977  		if !isRepeatableError(err) {
  3978  			return result, err
  3979  		}
  3980  		tries++
  3981  		if tries >= 3 {
  3982  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  3983  			return result, err
  3984  		}
  3985  	}
  3986  
  3987  }
  3988  
  3989  func (s *RetryLayerGroupStore) GetByRemoteID(remoteID string, groupSource model.GroupSource) (*model.Group, error) {
  3990  
  3991  	tries := 0
  3992  	for {
  3993  		result, err := s.GroupStore.GetByRemoteID(remoteID, groupSource)
  3994  		if err == nil {
  3995  			return result, nil
  3996  		}
  3997  		if !isRepeatableError(err) {
  3998  			return result, err
  3999  		}
  4000  		tries++
  4001  		if tries >= 3 {
  4002  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  4003  			return result, err
  4004  		}
  4005  	}
  4006  
  4007  }
  4008  
  4009  func (s *RetryLayerGroupStore) GetByUser(userID string) ([]*model.Group, error) {
  4010  
  4011  	tries := 0
  4012  	for {
  4013  		result, err := s.GroupStore.GetByUser(userID)
  4014  		if err == nil {
  4015  			return result, nil
  4016  		}
  4017  		if !isRepeatableError(err) {
  4018  			return result, err
  4019  		}
  4020  		tries++
  4021  		if tries >= 3 {
  4022  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  4023  			return result, err
  4024  		}
  4025  	}
  4026  
  4027  }
  4028  
  4029  func (s *RetryLayerGroupStore) GetGroupSyncable(groupID string, syncableID string, syncableType model.GroupSyncableType) (*model.GroupSyncable, error) {
  4030  
  4031  	tries := 0
  4032  	for {
  4033  		result, err := s.GroupStore.GetGroupSyncable(groupID, syncableID, syncableType)
  4034  		if err == nil {
  4035  			return result, nil
  4036  		}
  4037  		if !isRepeatableError(err) {
  4038  			return result, err
  4039  		}
  4040  		tries++
  4041  		if tries >= 3 {
  4042  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  4043  			return result, err
  4044  		}
  4045  	}
  4046  
  4047  }
  4048  
  4049  func (s *RetryLayerGroupStore) GetGroups(page int, perPage int, opts model.GroupSearchOpts) ([]*model.Group, error) {
  4050  
  4051  	tries := 0
  4052  	for {
  4053  		result, err := s.GroupStore.GetGroups(page, perPage, opts)
  4054  		if err == nil {
  4055  			return result, nil
  4056  		}
  4057  		if !isRepeatableError(err) {
  4058  			return result, err
  4059  		}
  4060  		tries++
  4061  		if tries >= 3 {
  4062  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  4063  			return result, err
  4064  		}
  4065  	}
  4066  
  4067  }
  4068  
  4069  func (s *RetryLayerGroupStore) GetGroupsAssociatedToChannelsByTeam(teamID string, opts model.GroupSearchOpts) (map[string][]*model.GroupWithSchemeAdmin, error) {
  4070  
  4071  	tries := 0
  4072  	for {
  4073  		result, err := s.GroupStore.GetGroupsAssociatedToChannelsByTeam(teamID, opts)
  4074  		if err == nil {
  4075  			return result, nil
  4076  		}
  4077  		if !isRepeatableError(err) {
  4078  			return result, err
  4079  		}
  4080  		tries++
  4081  		if tries >= 3 {
  4082  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  4083  			return result, err
  4084  		}
  4085  	}
  4086  
  4087  }
  4088  
  4089  func (s *RetryLayerGroupStore) GetGroupsByChannel(channelID string, opts model.GroupSearchOpts) ([]*model.GroupWithSchemeAdmin, error) {
  4090  
  4091  	tries := 0
  4092  	for {
  4093  		result, err := s.GroupStore.GetGroupsByChannel(channelID, opts)
  4094  		if err == nil {
  4095  			return result, nil
  4096  		}
  4097  		if !isRepeatableError(err) {
  4098  			return result, err
  4099  		}
  4100  		tries++
  4101  		if tries >= 3 {
  4102  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  4103  			return result, err
  4104  		}
  4105  	}
  4106  
  4107  }
  4108  
  4109  func (s *RetryLayerGroupStore) GetGroupsByTeam(teamID string, opts model.GroupSearchOpts) ([]*model.GroupWithSchemeAdmin, error) {
  4110  
  4111  	tries := 0
  4112  	for {
  4113  		result, err := s.GroupStore.GetGroupsByTeam(teamID, opts)
  4114  		if err == nil {
  4115  			return result, nil
  4116  		}
  4117  		if !isRepeatableError(err) {
  4118  			return result, err
  4119  		}
  4120  		tries++
  4121  		if tries >= 3 {
  4122  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  4123  			return result, err
  4124  		}
  4125  	}
  4126  
  4127  }
  4128  
  4129  func (s *RetryLayerGroupStore) GetMemberCount(groupID string) (int64, error) {
  4130  
  4131  	tries := 0
  4132  	for {
  4133  		result, err := s.GroupStore.GetMemberCount(groupID)
  4134  		if err == nil {
  4135  			return result, nil
  4136  		}
  4137  		if !isRepeatableError(err) {
  4138  			return result, err
  4139  		}
  4140  		tries++
  4141  		if tries >= 3 {
  4142  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  4143  			return result, err
  4144  		}
  4145  	}
  4146  
  4147  }
  4148  
  4149  func (s *RetryLayerGroupStore) GetMemberUsers(groupID string) ([]*model.User, error) {
  4150  
  4151  	tries := 0
  4152  	for {
  4153  		result, err := s.GroupStore.GetMemberUsers(groupID)
  4154  		if err == nil {
  4155  			return result, nil
  4156  		}
  4157  		if !isRepeatableError(err) {
  4158  			return result, err
  4159  		}
  4160  		tries++
  4161  		if tries >= 3 {
  4162  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  4163  			return result, err
  4164  		}
  4165  	}
  4166  
  4167  }
  4168  
  4169  func (s *RetryLayerGroupStore) GetMemberUsersInTeam(groupID string, teamID string) ([]*model.User, error) {
  4170  
  4171  	tries := 0
  4172  	for {
  4173  		result, err := s.GroupStore.GetMemberUsersInTeam(groupID, teamID)
  4174  		if err == nil {
  4175  			return result, nil
  4176  		}
  4177  		if !isRepeatableError(err) {
  4178  			return result, err
  4179  		}
  4180  		tries++
  4181  		if tries >= 3 {
  4182  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  4183  			return result, err
  4184  		}
  4185  	}
  4186  
  4187  }
  4188  
  4189  func (s *RetryLayerGroupStore) GetMemberUsersNotInChannel(groupID string, channelID string) ([]*model.User, error) {
  4190  
  4191  	tries := 0
  4192  	for {
  4193  		result, err := s.GroupStore.GetMemberUsersNotInChannel(groupID, channelID)
  4194  		if err == nil {
  4195  			return result, nil
  4196  		}
  4197  		if !isRepeatableError(err) {
  4198  			return result, err
  4199  		}
  4200  		tries++
  4201  		if tries >= 3 {
  4202  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  4203  			return result, err
  4204  		}
  4205  	}
  4206  
  4207  }
  4208  
  4209  func (s *RetryLayerGroupStore) GetMemberUsersPage(groupID string, page int, perPage int) ([]*model.User, error) {
  4210  
  4211  	tries := 0
  4212  	for {
  4213  		result, err := s.GroupStore.GetMemberUsersPage(groupID, page, perPage)
  4214  		if err == nil {
  4215  			return result, nil
  4216  		}
  4217  		if !isRepeatableError(err) {
  4218  			return result, err
  4219  		}
  4220  		tries++
  4221  		if tries >= 3 {
  4222  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  4223  			return result, err
  4224  		}
  4225  	}
  4226  
  4227  }
  4228  
  4229  func (s *RetryLayerGroupStore) GroupChannelCount() (int64, error) {
  4230  
  4231  	tries := 0
  4232  	for {
  4233  		result, err := s.GroupStore.GroupChannelCount()
  4234  		if err == nil {
  4235  			return result, nil
  4236  		}
  4237  		if !isRepeatableError(err) {
  4238  			return result, err
  4239  		}
  4240  		tries++
  4241  		if tries >= 3 {
  4242  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  4243  			return result, err
  4244  		}
  4245  	}
  4246  
  4247  }
  4248  
  4249  func (s *RetryLayerGroupStore) GroupCount() (int64, error) {
  4250  
  4251  	tries := 0
  4252  	for {
  4253  		result, err := s.GroupStore.GroupCount()
  4254  		if err == nil {
  4255  			return result, nil
  4256  		}
  4257  		if !isRepeatableError(err) {
  4258  			return result, err
  4259  		}
  4260  		tries++
  4261  		if tries >= 3 {
  4262  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  4263  			return result, err
  4264  		}
  4265  	}
  4266  
  4267  }
  4268  
  4269  func (s *RetryLayerGroupStore) GroupCountWithAllowReference() (int64, error) {
  4270  
  4271  	tries := 0
  4272  	for {
  4273  		result, err := s.GroupStore.GroupCountWithAllowReference()
  4274  		if err == nil {
  4275  			return result, nil
  4276  		}
  4277  		if !isRepeatableError(err) {
  4278  			return result, err
  4279  		}
  4280  		tries++
  4281  		if tries >= 3 {
  4282  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  4283  			return result, err
  4284  		}
  4285  	}
  4286  
  4287  }
  4288  
  4289  func (s *RetryLayerGroupStore) GroupMemberCount() (int64, error) {
  4290  
  4291  	tries := 0
  4292  	for {
  4293  		result, err := s.GroupStore.GroupMemberCount()
  4294  		if err == nil {
  4295  			return result, nil
  4296  		}
  4297  		if !isRepeatableError(err) {
  4298  			return result, err
  4299  		}
  4300  		tries++
  4301  		if tries >= 3 {
  4302  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  4303  			return result, err
  4304  		}
  4305  	}
  4306  
  4307  }
  4308  
  4309  func (s *RetryLayerGroupStore) GroupTeamCount() (int64, error) {
  4310  
  4311  	tries := 0
  4312  	for {
  4313  		result, err := s.GroupStore.GroupTeamCount()
  4314  		if err == nil {
  4315  			return result, nil
  4316  		}
  4317  		if !isRepeatableError(err) {
  4318  			return result, err
  4319  		}
  4320  		tries++
  4321  		if tries >= 3 {
  4322  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  4323  			return result, err
  4324  		}
  4325  	}
  4326  
  4327  }
  4328  
  4329  func (s *RetryLayerGroupStore) PermanentDeleteMembersByUser(userID string) error {
  4330  
  4331  	tries := 0
  4332  	for {
  4333  		err := s.GroupStore.PermanentDeleteMembersByUser(userID)
  4334  		if err == nil {
  4335  			return nil
  4336  		}
  4337  		if !isRepeatableError(err) {
  4338  			return err
  4339  		}
  4340  		tries++
  4341  		if tries >= 3 {
  4342  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  4343  			return err
  4344  		}
  4345  	}
  4346  
  4347  }
  4348  
  4349  func (s *RetryLayerGroupStore) PermittedSyncableAdmins(syncableID string, syncableType model.GroupSyncableType) ([]string, error) {
  4350  
  4351  	tries := 0
  4352  	for {
  4353  		result, err := s.GroupStore.PermittedSyncableAdmins(syncableID, syncableType)
  4354  		if err == nil {
  4355  			return result, nil
  4356  		}
  4357  		if !isRepeatableError(err) {
  4358  			return result, err
  4359  		}
  4360  		tries++
  4361  		if tries >= 3 {
  4362  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  4363  			return result, err
  4364  		}
  4365  	}
  4366  
  4367  }
  4368  
  4369  func (s *RetryLayerGroupStore) TeamMembersMinusGroupMembers(teamID string, groupIDs []string, page int, perPage int) ([]*model.UserWithGroups, error) {
  4370  
  4371  	tries := 0
  4372  	for {
  4373  		result, err := s.GroupStore.TeamMembersMinusGroupMembers(teamID, groupIDs, page, perPage)
  4374  		if err == nil {
  4375  			return result, nil
  4376  		}
  4377  		if !isRepeatableError(err) {
  4378  			return result, err
  4379  		}
  4380  		tries++
  4381  		if tries >= 3 {
  4382  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  4383  			return result, err
  4384  		}
  4385  	}
  4386  
  4387  }
  4388  
  4389  func (s *RetryLayerGroupStore) TeamMembersToAdd(since int64, teamID *string, includeRemovedMembers bool) ([]*model.UserTeamIDPair, error) {
  4390  
  4391  	tries := 0
  4392  	for {
  4393  		result, err := s.GroupStore.TeamMembersToAdd(since, teamID, includeRemovedMembers)
  4394  		if err == nil {
  4395  			return result, nil
  4396  		}
  4397  		if !isRepeatableError(err) {
  4398  			return result, err
  4399  		}
  4400  		tries++
  4401  		if tries >= 3 {
  4402  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  4403  			return result, err
  4404  		}
  4405  	}
  4406  
  4407  }
  4408  
  4409  func (s *RetryLayerGroupStore) TeamMembersToRemove(teamID *string) ([]*model.TeamMember, error) {
  4410  
  4411  	tries := 0
  4412  	for {
  4413  		result, err := s.GroupStore.TeamMembersToRemove(teamID)
  4414  		if err == nil {
  4415  			return result, nil
  4416  		}
  4417  		if !isRepeatableError(err) {
  4418  			return result, err
  4419  		}
  4420  		tries++
  4421  		if tries >= 3 {
  4422  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  4423  			return result, err
  4424  		}
  4425  	}
  4426  
  4427  }
  4428  
  4429  func (s *RetryLayerGroupStore) Update(group *model.Group) (*model.Group, error) {
  4430  
  4431  	tries := 0
  4432  	for {
  4433  		result, err := s.GroupStore.Update(group)
  4434  		if err == nil {
  4435  			return result, nil
  4436  		}
  4437  		if !isRepeatableError(err) {
  4438  			return result, err
  4439  		}
  4440  		tries++
  4441  		if tries >= 3 {
  4442  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  4443  			return result, err
  4444  		}
  4445  	}
  4446  
  4447  }
  4448  
  4449  func (s *RetryLayerGroupStore) UpdateGroupSyncable(groupSyncable *model.GroupSyncable) (*model.GroupSyncable, error) {
  4450  
  4451  	tries := 0
  4452  	for {
  4453  		result, err := s.GroupStore.UpdateGroupSyncable(groupSyncable)
  4454  		if err == nil {
  4455  			return result, nil
  4456  		}
  4457  		if !isRepeatableError(err) {
  4458  			return result, err
  4459  		}
  4460  		tries++
  4461  		if tries >= 3 {
  4462  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  4463  			return result, err
  4464  		}
  4465  	}
  4466  
  4467  }
  4468  
  4469  func (s *RetryLayerGroupStore) UpsertMember(groupID string, userID string) (*model.GroupMember, error) {
  4470  
  4471  	tries := 0
  4472  	for {
  4473  		result, err := s.GroupStore.UpsertMember(groupID, userID)
  4474  		if err == nil {
  4475  			return result, nil
  4476  		}
  4477  		if !isRepeatableError(err) {
  4478  			return result, err
  4479  		}
  4480  		tries++
  4481  		if tries >= 3 {
  4482  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  4483  			return result, err
  4484  		}
  4485  	}
  4486  
  4487  }
  4488  
  4489  func (s *RetryLayerJobStore) Delete(id string) (string, error) {
  4490  
  4491  	tries := 0
  4492  	for {
  4493  		result, err := s.JobStore.Delete(id)
  4494  		if err == nil {
  4495  			return result, nil
  4496  		}
  4497  		if !isRepeatableError(err) {
  4498  			return result, err
  4499  		}
  4500  		tries++
  4501  		if tries >= 3 {
  4502  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  4503  			return result, err
  4504  		}
  4505  	}
  4506  
  4507  }
  4508  
  4509  func (s *RetryLayerJobStore) Get(id string) (*model.Job, error) {
  4510  
  4511  	tries := 0
  4512  	for {
  4513  		result, err := s.JobStore.Get(id)
  4514  		if err == nil {
  4515  			return result, nil
  4516  		}
  4517  		if !isRepeatableError(err) {
  4518  			return result, err
  4519  		}
  4520  		tries++
  4521  		if tries >= 3 {
  4522  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  4523  			return result, err
  4524  		}
  4525  	}
  4526  
  4527  }
  4528  
  4529  func (s *RetryLayerJobStore) GetAllByStatus(status string) ([]*model.Job, error) {
  4530  
  4531  	tries := 0
  4532  	for {
  4533  		result, err := s.JobStore.GetAllByStatus(status)
  4534  		if err == nil {
  4535  			return result, nil
  4536  		}
  4537  		if !isRepeatableError(err) {
  4538  			return result, err
  4539  		}
  4540  		tries++
  4541  		if tries >= 3 {
  4542  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  4543  			return result, err
  4544  		}
  4545  	}
  4546  
  4547  }
  4548  
  4549  func (s *RetryLayerJobStore) GetAllByType(jobType string) ([]*model.Job, error) {
  4550  
  4551  	tries := 0
  4552  	for {
  4553  		result, err := s.JobStore.GetAllByType(jobType)
  4554  		if err == nil {
  4555  			return result, nil
  4556  		}
  4557  		if !isRepeatableError(err) {
  4558  			return result, err
  4559  		}
  4560  		tries++
  4561  		if tries >= 3 {
  4562  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  4563  			return result, err
  4564  		}
  4565  	}
  4566  
  4567  }
  4568  
  4569  func (s *RetryLayerJobStore) GetAllByTypePage(jobType string, offset int, limit int) ([]*model.Job, error) {
  4570  
  4571  	tries := 0
  4572  	for {
  4573  		result, err := s.JobStore.GetAllByTypePage(jobType, offset, limit)
  4574  		if err == nil {
  4575  			return result, nil
  4576  		}
  4577  		if !isRepeatableError(err) {
  4578  			return result, err
  4579  		}
  4580  		tries++
  4581  		if tries >= 3 {
  4582  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  4583  			return result, err
  4584  		}
  4585  	}
  4586  
  4587  }
  4588  
  4589  func (s *RetryLayerJobStore) GetAllByTypesPage(jobTypes []string, offset int, limit int) ([]*model.Job, error) {
  4590  
  4591  	tries := 0
  4592  	for {
  4593  		result, err := s.JobStore.GetAllByTypesPage(jobTypes, offset, limit)
  4594  		if err == nil {
  4595  			return result, nil
  4596  		}
  4597  		if !isRepeatableError(err) {
  4598  			return result, err
  4599  		}
  4600  		tries++
  4601  		if tries >= 3 {
  4602  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  4603  			return result, err
  4604  		}
  4605  	}
  4606  
  4607  }
  4608  
  4609  func (s *RetryLayerJobStore) GetAllPage(offset int, limit int) ([]*model.Job, error) {
  4610  
  4611  	tries := 0
  4612  	for {
  4613  		result, err := s.JobStore.GetAllPage(offset, limit)
  4614  		if err == nil {
  4615  			return result, nil
  4616  		}
  4617  		if !isRepeatableError(err) {
  4618  			return result, err
  4619  		}
  4620  		tries++
  4621  		if tries >= 3 {
  4622  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  4623  			return result, err
  4624  		}
  4625  	}
  4626  
  4627  }
  4628  
  4629  func (s *RetryLayerJobStore) GetCountByStatusAndType(status string, jobType string) (int64, error) {
  4630  
  4631  	tries := 0
  4632  	for {
  4633  		result, err := s.JobStore.GetCountByStatusAndType(status, jobType)
  4634  		if err == nil {
  4635  			return result, nil
  4636  		}
  4637  		if !isRepeatableError(err) {
  4638  			return result, err
  4639  		}
  4640  		tries++
  4641  		if tries >= 3 {
  4642  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  4643  			return result, err
  4644  		}
  4645  	}
  4646  
  4647  }
  4648  
  4649  func (s *RetryLayerJobStore) GetNewestJobByStatusAndType(status string, jobType string) (*model.Job, error) {
  4650  
  4651  	tries := 0
  4652  	for {
  4653  		result, err := s.JobStore.GetNewestJobByStatusAndType(status, jobType)
  4654  		if err == nil {
  4655  			return result, nil
  4656  		}
  4657  		if !isRepeatableError(err) {
  4658  			return result, err
  4659  		}
  4660  		tries++
  4661  		if tries >= 3 {
  4662  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  4663  			return result, err
  4664  		}
  4665  	}
  4666  
  4667  }
  4668  
  4669  func (s *RetryLayerJobStore) GetNewestJobByStatusesAndType(statuses []string, jobType string) (*model.Job, error) {
  4670  
  4671  	tries := 0
  4672  	for {
  4673  		result, err := s.JobStore.GetNewestJobByStatusesAndType(statuses, jobType)
  4674  		if err == nil {
  4675  			return result, nil
  4676  		}
  4677  		if !isRepeatableError(err) {
  4678  			return result, err
  4679  		}
  4680  		tries++
  4681  		if tries >= 3 {
  4682  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  4683  			return result, err
  4684  		}
  4685  	}
  4686  
  4687  }
  4688  
  4689  func (s *RetryLayerJobStore) Save(job *model.Job) (*model.Job, error) {
  4690  
  4691  	tries := 0
  4692  	for {
  4693  		result, err := s.JobStore.Save(job)
  4694  		if err == nil {
  4695  			return result, nil
  4696  		}
  4697  		if !isRepeatableError(err) {
  4698  			return result, err
  4699  		}
  4700  		tries++
  4701  		if tries >= 3 {
  4702  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  4703  			return result, err
  4704  		}
  4705  	}
  4706  
  4707  }
  4708  
  4709  func (s *RetryLayerJobStore) UpdateOptimistically(job *model.Job, currentStatus string) (bool, error) {
  4710  
  4711  	tries := 0
  4712  	for {
  4713  		result, err := s.JobStore.UpdateOptimistically(job, currentStatus)
  4714  		if err == nil {
  4715  			return result, nil
  4716  		}
  4717  		if !isRepeatableError(err) {
  4718  			return result, err
  4719  		}
  4720  		tries++
  4721  		if tries >= 3 {
  4722  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  4723  			return result, err
  4724  		}
  4725  	}
  4726  
  4727  }
  4728  
  4729  func (s *RetryLayerJobStore) UpdateStatus(id string, status string) (*model.Job, error) {
  4730  
  4731  	tries := 0
  4732  	for {
  4733  		result, err := s.JobStore.UpdateStatus(id, status)
  4734  		if err == nil {
  4735  			return result, nil
  4736  		}
  4737  		if !isRepeatableError(err) {
  4738  			return result, err
  4739  		}
  4740  		tries++
  4741  		if tries >= 3 {
  4742  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  4743  			return result, err
  4744  		}
  4745  	}
  4746  
  4747  }
  4748  
  4749  func (s *RetryLayerJobStore) UpdateStatusOptimistically(id string, currentStatus string, newStatus string) (bool, error) {
  4750  
  4751  	tries := 0
  4752  	for {
  4753  		result, err := s.JobStore.UpdateStatusOptimistically(id, currentStatus, newStatus)
  4754  		if err == nil {
  4755  			return result, nil
  4756  		}
  4757  		if !isRepeatableError(err) {
  4758  			return result, err
  4759  		}
  4760  		tries++
  4761  		if tries >= 3 {
  4762  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  4763  			return result, err
  4764  		}
  4765  	}
  4766  
  4767  }
  4768  
  4769  func (s *RetryLayerLicenseStore) Get(id string) (*model.LicenseRecord, error) {
  4770  
  4771  	tries := 0
  4772  	for {
  4773  		result, err := s.LicenseStore.Get(id)
  4774  		if err == nil {
  4775  			return result, nil
  4776  		}
  4777  		if !isRepeatableError(err) {
  4778  			return result, err
  4779  		}
  4780  		tries++
  4781  		if tries >= 3 {
  4782  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  4783  			return result, err
  4784  		}
  4785  	}
  4786  
  4787  }
  4788  
  4789  func (s *RetryLayerLicenseStore) GetAll() ([]*model.LicenseRecord, error) {
  4790  
  4791  	tries := 0
  4792  	for {
  4793  		result, err := s.LicenseStore.GetAll()
  4794  		if err == nil {
  4795  			return result, nil
  4796  		}
  4797  		if !isRepeatableError(err) {
  4798  			return result, err
  4799  		}
  4800  		tries++
  4801  		if tries >= 3 {
  4802  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  4803  			return result, err
  4804  		}
  4805  	}
  4806  
  4807  }
  4808  
  4809  func (s *RetryLayerLicenseStore) Save(license *model.LicenseRecord) (*model.LicenseRecord, error) {
  4810  
  4811  	tries := 0
  4812  	for {
  4813  		result, err := s.LicenseStore.Save(license)
  4814  		if err == nil {
  4815  			return result, nil
  4816  		}
  4817  		if !isRepeatableError(err) {
  4818  			return result, err
  4819  		}
  4820  		tries++
  4821  		if tries >= 3 {
  4822  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  4823  			return result, err
  4824  		}
  4825  	}
  4826  
  4827  }
  4828  
  4829  func (s *RetryLayerLinkMetadataStore) Get(url string, timestamp int64) (*model.LinkMetadata, error) {
  4830  
  4831  	tries := 0
  4832  	for {
  4833  		result, err := s.LinkMetadataStore.Get(url, timestamp)
  4834  		if err == nil {
  4835  			return result, nil
  4836  		}
  4837  		if !isRepeatableError(err) {
  4838  			return result, err
  4839  		}
  4840  		tries++
  4841  		if tries >= 3 {
  4842  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  4843  			return result, err
  4844  		}
  4845  	}
  4846  
  4847  }
  4848  
  4849  func (s *RetryLayerLinkMetadataStore) Save(linkMetadata *model.LinkMetadata) (*model.LinkMetadata, error) {
  4850  
  4851  	tries := 0
  4852  	for {
  4853  		result, err := s.LinkMetadataStore.Save(linkMetadata)
  4854  		if err == nil {
  4855  			return result, nil
  4856  		}
  4857  		if !isRepeatableError(err) {
  4858  			return result, err
  4859  		}
  4860  		tries++
  4861  		if tries >= 3 {
  4862  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  4863  			return result, err
  4864  		}
  4865  	}
  4866  
  4867  }
  4868  
  4869  func (s *RetryLayerOAuthStore) DeleteApp(id string) error {
  4870  
  4871  	tries := 0
  4872  	for {
  4873  		err := s.OAuthStore.DeleteApp(id)
  4874  		if err == nil {
  4875  			return nil
  4876  		}
  4877  		if !isRepeatableError(err) {
  4878  			return err
  4879  		}
  4880  		tries++
  4881  		if tries >= 3 {
  4882  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  4883  			return err
  4884  		}
  4885  	}
  4886  
  4887  }
  4888  
  4889  func (s *RetryLayerOAuthStore) GetAccessData(token string) (*model.AccessData, error) {
  4890  
  4891  	tries := 0
  4892  	for {
  4893  		result, err := s.OAuthStore.GetAccessData(token)
  4894  		if err == nil {
  4895  			return result, nil
  4896  		}
  4897  		if !isRepeatableError(err) {
  4898  			return result, err
  4899  		}
  4900  		tries++
  4901  		if tries >= 3 {
  4902  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  4903  			return result, err
  4904  		}
  4905  	}
  4906  
  4907  }
  4908  
  4909  func (s *RetryLayerOAuthStore) GetAccessDataByRefreshToken(token string) (*model.AccessData, error) {
  4910  
  4911  	tries := 0
  4912  	for {
  4913  		result, err := s.OAuthStore.GetAccessDataByRefreshToken(token)
  4914  		if err == nil {
  4915  			return result, nil
  4916  		}
  4917  		if !isRepeatableError(err) {
  4918  			return result, err
  4919  		}
  4920  		tries++
  4921  		if tries >= 3 {
  4922  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  4923  			return result, err
  4924  		}
  4925  	}
  4926  
  4927  }
  4928  
  4929  func (s *RetryLayerOAuthStore) GetAccessDataByUserForApp(userID string, clientId string) ([]*model.AccessData, error) {
  4930  
  4931  	tries := 0
  4932  	for {
  4933  		result, err := s.OAuthStore.GetAccessDataByUserForApp(userID, clientId)
  4934  		if err == nil {
  4935  			return result, nil
  4936  		}
  4937  		if !isRepeatableError(err) {
  4938  			return result, err
  4939  		}
  4940  		tries++
  4941  		if tries >= 3 {
  4942  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  4943  			return result, err
  4944  		}
  4945  	}
  4946  
  4947  }
  4948  
  4949  func (s *RetryLayerOAuthStore) GetApp(id string) (*model.OAuthApp, error) {
  4950  
  4951  	tries := 0
  4952  	for {
  4953  		result, err := s.OAuthStore.GetApp(id)
  4954  		if err == nil {
  4955  			return result, nil
  4956  		}
  4957  		if !isRepeatableError(err) {
  4958  			return result, err
  4959  		}
  4960  		tries++
  4961  		if tries >= 3 {
  4962  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  4963  			return result, err
  4964  		}
  4965  	}
  4966  
  4967  }
  4968  
  4969  func (s *RetryLayerOAuthStore) GetAppByUser(userID string, offset int, limit int) ([]*model.OAuthApp, error) {
  4970  
  4971  	tries := 0
  4972  	for {
  4973  		result, err := s.OAuthStore.GetAppByUser(userID, offset, limit)
  4974  		if err == nil {
  4975  			return result, nil
  4976  		}
  4977  		if !isRepeatableError(err) {
  4978  			return result, err
  4979  		}
  4980  		tries++
  4981  		if tries >= 3 {
  4982  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  4983  			return result, err
  4984  		}
  4985  	}
  4986  
  4987  }
  4988  
  4989  func (s *RetryLayerOAuthStore) GetApps(offset int, limit int) ([]*model.OAuthApp, error) {
  4990  
  4991  	tries := 0
  4992  	for {
  4993  		result, err := s.OAuthStore.GetApps(offset, limit)
  4994  		if err == nil {
  4995  			return result, nil
  4996  		}
  4997  		if !isRepeatableError(err) {
  4998  			return result, err
  4999  		}
  5000  		tries++
  5001  		if tries >= 3 {
  5002  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  5003  			return result, err
  5004  		}
  5005  	}
  5006  
  5007  }
  5008  
  5009  func (s *RetryLayerOAuthStore) GetAuthData(code string) (*model.AuthData, error) {
  5010  
  5011  	tries := 0
  5012  	for {
  5013  		result, err := s.OAuthStore.GetAuthData(code)
  5014  		if err == nil {
  5015  			return result, nil
  5016  		}
  5017  		if !isRepeatableError(err) {
  5018  			return result, err
  5019  		}
  5020  		tries++
  5021  		if tries >= 3 {
  5022  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  5023  			return result, err
  5024  		}
  5025  	}
  5026  
  5027  }
  5028  
  5029  func (s *RetryLayerOAuthStore) GetAuthorizedApps(userID string, offset int, limit int) ([]*model.OAuthApp, error) {
  5030  
  5031  	tries := 0
  5032  	for {
  5033  		result, err := s.OAuthStore.GetAuthorizedApps(userID, offset, limit)
  5034  		if err == nil {
  5035  			return result, nil
  5036  		}
  5037  		if !isRepeatableError(err) {
  5038  			return result, err
  5039  		}
  5040  		tries++
  5041  		if tries >= 3 {
  5042  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  5043  			return result, err
  5044  		}
  5045  	}
  5046  
  5047  }
  5048  
  5049  func (s *RetryLayerOAuthStore) GetPreviousAccessData(userID string, clientId string) (*model.AccessData, error) {
  5050  
  5051  	tries := 0
  5052  	for {
  5053  		result, err := s.OAuthStore.GetPreviousAccessData(userID, clientId)
  5054  		if err == nil {
  5055  			return result, nil
  5056  		}
  5057  		if !isRepeatableError(err) {
  5058  			return result, err
  5059  		}
  5060  		tries++
  5061  		if tries >= 3 {
  5062  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  5063  			return result, err
  5064  		}
  5065  	}
  5066  
  5067  }
  5068  
  5069  func (s *RetryLayerOAuthStore) PermanentDeleteAuthDataByUser(userID string) error {
  5070  
  5071  	tries := 0
  5072  	for {
  5073  		err := s.OAuthStore.PermanentDeleteAuthDataByUser(userID)
  5074  		if err == nil {
  5075  			return nil
  5076  		}
  5077  		if !isRepeatableError(err) {
  5078  			return err
  5079  		}
  5080  		tries++
  5081  		if tries >= 3 {
  5082  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  5083  			return err
  5084  		}
  5085  	}
  5086  
  5087  }
  5088  
  5089  func (s *RetryLayerOAuthStore) RemoveAccessData(token string) error {
  5090  
  5091  	tries := 0
  5092  	for {
  5093  		err := s.OAuthStore.RemoveAccessData(token)
  5094  		if err == nil {
  5095  			return nil
  5096  		}
  5097  		if !isRepeatableError(err) {
  5098  			return err
  5099  		}
  5100  		tries++
  5101  		if tries >= 3 {
  5102  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  5103  			return err
  5104  		}
  5105  	}
  5106  
  5107  }
  5108  
  5109  func (s *RetryLayerOAuthStore) RemoveAllAccessData() error {
  5110  
  5111  	tries := 0
  5112  	for {
  5113  		err := s.OAuthStore.RemoveAllAccessData()
  5114  		if err == nil {
  5115  			return nil
  5116  		}
  5117  		if !isRepeatableError(err) {
  5118  			return err
  5119  		}
  5120  		tries++
  5121  		if tries >= 3 {
  5122  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  5123  			return err
  5124  		}
  5125  	}
  5126  
  5127  }
  5128  
  5129  func (s *RetryLayerOAuthStore) RemoveAuthData(code string) error {
  5130  
  5131  	tries := 0
  5132  	for {
  5133  		err := s.OAuthStore.RemoveAuthData(code)
  5134  		if err == nil {
  5135  			return nil
  5136  		}
  5137  		if !isRepeatableError(err) {
  5138  			return err
  5139  		}
  5140  		tries++
  5141  		if tries >= 3 {
  5142  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  5143  			return err
  5144  		}
  5145  	}
  5146  
  5147  }
  5148  
  5149  func (s *RetryLayerOAuthStore) SaveAccessData(accessData *model.AccessData) (*model.AccessData, error) {
  5150  
  5151  	tries := 0
  5152  	for {
  5153  		result, err := s.OAuthStore.SaveAccessData(accessData)
  5154  		if err == nil {
  5155  			return result, nil
  5156  		}
  5157  		if !isRepeatableError(err) {
  5158  			return result, err
  5159  		}
  5160  		tries++
  5161  		if tries >= 3 {
  5162  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  5163  			return result, err
  5164  		}
  5165  	}
  5166  
  5167  }
  5168  
  5169  func (s *RetryLayerOAuthStore) SaveApp(app *model.OAuthApp) (*model.OAuthApp, error) {
  5170  
  5171  	tries := 0
  5172  	for {
  5173  		result, err := s.OAuthStore.SaveApp(app)
  5174  		if err == nil {
  5175  			return result, nil
  5176  		}
  5177  		if !isRepeatableError(err) {
  5178  			return result, err
  5179  		}
  5180  		tries++
  5181  		if tries >= 3 {
  5182  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  5183  			return result, err
  5184  		}
  5185  	}
  5186  
  5187  }
  5188  
  5189  func (s *RetryLayerOAuthStore) SaveAuthData(authData *model.AuthData) (*model.AuthData, error) {
  5190  
  5191  	tries := 0
  5192  	for {
  5193  		result, err := s.OAuthStore.SaveAuthData(authData)
  5194  		if err == nil {
  5195  			return result, nil
  5196  		}
  5197  		if !isRepeatableError(err) {
  5198  			return result, err
  5199  		}
  5200  		tries++
  5201  		if tries >= 3 {
  5202  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  5203  			return result, err
  5204  		}
  5205  	}
  5206  
  5207  }
  5208  
  5209  func (s *RetryLayerOAuthStore) UpdateAccessData(accessData *model.AccessData) (*model.AccessData, error) {
  5210  
  5211  	tries := 0
  5212  	for {
  5213  		result, err := s.OAuthStore.UpdateAccessData(accessData)
  5214  		if err == nil {
  5215  			return result, nil
  5216  		}
  5217  		if !isRepeatableError(err) {
  5218  			return result, err
  5219  		}
  5220  		tries++
  5221  		if tries >= 3 {
  5222  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  5223  			return result, err
  5224  		}
  5225  	}
  5226  
  5227  }
  5228  
  5229  func (s *RetryLayerOAuthStore) UpdateApp(app *model.OAuthApp) (*model.OAuthApp, error) {
  5230  
  5231  	tries := 0
  5232  	for {
  5233  		result, err := s.OAuthStore.UpdateApp(app)
  5234  		if err == nil {
  5235  			return result, nil
  5236  		}
  5237  		if !isRepeatableError(err) {
  5238  			return result, err
  5239  		}
  5240  		tries++
  5241  		if tries >= 3 {
  5242  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  5243  			return result, err
  5244  		}
  5245  	}
  5246  
  5247  }
  5248  
  5249  func (s *RetryLayerPluginStore) CompareAndDelete(keyVal *model.PluginKeyValue, oldValue []byte) (bool, error) {
  5250  
  5251  	tries := 0
  5252  	for {
  5253  		result, err := s.PluginStore.CompareAndDelete(keyVal, oldValue)
  5254  		if err == nil {
  5255  			return result, nil
  5256  		}
  5257  		if !isRepeatableError(err) {
  5258  			return result, err
  5259  		}
  5260  		tries++
  5261  		if tries >= 3 {
  5262  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  5263  			return result, err
  5264  		}
  5265  	}
  5266  
  5267  }
  5268  
  5269  func (s *RetryLayerPluginStore) CompareAndSet(keyVal *model.PluginKeyValue, oldValue []byte) (bool, error) {
  5270  
  5271  	tries := 0
  5272  	for {
  5273  		result, err := s.PluginStore.CompareAndSet(keyVal, oldValue)
  5274  		if err == nil {
  5275  			return result, nil
  5276  		}
  5277  		if !isRepeatableError(err) {
  5278  			return result, err
  5279  		}
  5280  		tries++
  5281  		if tries >= 3 {
  5282  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  5283  			return result, err
  5284  		}
  5285  	}
  5286  
  5287  }
  5288  
  5289  func (s *RetryLayerPluginStore) Delete(pluginID string, key string) error {
  5290  
  5291  	tries := 0
  5292  	for {
  5293  		err := s.PluginStore.Delete(pluginID, key)
  5294  		if err == nil {
  5295  			return nil
  5296  		}
  5297  		if !isRepeatableError(err) {
  5298  			return err
  5299  		}
  5300  		tries++
  5301  		if tries >= 3 {
  5302  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  5303  			return err
  5304  		}
  5305  	}
  5306  
  5307  }
  5308  
  5309  func (s *RetryLayerPluginStore) DeleteAllExpired() error {
  5310  
  5311  	tries := 0
  5312  	for {
  5313  		err := s.PluginStore.DeleteAllExpired()
  5314  		if err == nil {
  5315  			return nil
  5316  		}
  5317  		if !isRepeatableError(err) {
  5318  			return err
  5319  		}
  5320  		tries++
  5321  		if tries >= 3 {
  5322  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  5323  			return err
  5324  		}
  5325  	}
  5326  
  5327  }
  5328  
  5329  func (s *RetryLayerPluginStore) DeleteAllForPlugin(PluginID string) error {
  5330  
  5331  	tries := 0
  5332  	for {
  5333  		err := s.PluginStore.DeleteAllForPlugin(PluginID)
  5334  		if err == nil {
  5335  			return nil
  5336  		}
  5337  		if !isRepeatableError(err) {
  5338  			return err
  5339  		}
  5340  		tries++
  5341  		if tries >= 3 {
  5342  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  5343  			return err
  5344  		}
  5345  	}
  5346  
  5347  }
  5348  
  5349  func (s *RetryLayerPluginStore) Get(pluginID string, key string) (*model.PluginKeyValue, error) {
  5350  
  5351  	tries := 0
  5352  	for {
  5353  		result, err := s.PluginStore.Get(pluginID, key)
  5354  		if err == nil {
  5355  			return result, nil
  5356  		}
  5357  		if !isRepeatableError(err) {
  5358  			return result, err
  5359  		}
  5360  		tries++
  5361  		if tries >= 3 {
  5362  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  5363  			return result, err
  5364  		}
  5365  	}
  5366  
  5367  }
  5368  
  5369  func (s *RetryLayerPluginStore) List(pluginID string, page int, perPage int) ([]string, error) {
  5370  
  5371  	tries := 0
  5372  	for {
  5373  		result, err := s.PluginStore.List(pluginID, page, perPage)
  5374  		if err == nil {
  5375  			return result, nil
  5376  		}
  5377  		if !isRepeatableError(err) {
  5378  			return result, err
  5379  		}
  5380  		tries++
  5381  		if tries >= 3 {
  5382  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  5383  			return result, err
  5384  		}
  5385  	}
  5386  
  5387  }
  5388  
  5389  func (s *RetryLayerPluginStore) SaveOrUpdate(keyVal *model.PluginKeyValue) (*model.PluginKeyValue, error) {
  5390  
  5391  	tries := 0
  5392  	for {
  5393  		result, err := s.PluginStore.SaveOrUpdate(keyVal)
  5394  		if err == nil {
  5395  			return result, nil
  5396  		}
  5397  		if !isRepeatableError(err) {
  5398  			return result, err
  5399  		}
  5400  		tries++
  5401  		if tries >= 3 {
  5402  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  5403  			return result, err
  5404  		}
  5405  	}
  5406  
  5407  }
  5408  
  5409  func (s *RetryLayerPluginStore) SetWithOptions(pluginID string, key string, value []byte, options model.PluginKVSetOptions) (bool, error) {
  5410  
  5411  	tries := 0
  5412  	for {
  5413  		result, err := s.PluginStore.SetWithOptions(pluginID, key, value, options)
  5414  		if err == nil {
  5415  			return result, nil
  5416  		}
  5417  		if !isRepeatableError(err) {
  5418  			return result, err
  5419  		}
  5420  		tries++
  5421  		if tries >= 3 {
  5422  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  5423  			return result, err
  5424  		}
  5425  	}
  5426  
  5427  }
  5428  
  5429  func (s *RetryLayerPostStore) AnalyticsPostCount(teamID string, mustHaveFile bool, mustHaveHashtag bool) (int64, error) {
  5430  
  5431  	tries := 0
  5432  	for {
  5433  		result, err := s.PostStore.AnalyticsPostCount(teamID, mustHaveFile, mustHaveHashtag)
  5434  		if err == nil {
  5435  			return result, nil
  5436  		}
  5437  		if !isRepeatableError(err) {
  5438  			return result, err
  5439  		}
  5440  		tries++
  5441  		if tries >= 3 {
  5442  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  5443  			return result, err
  5444  		}
  5445  	}
  5446  
  5447  }
  5448  
  5449  func (s *RetryLayerPostStore) AnalyticsPostCountsByDay(options *model.AnalyticsPostCountsOptions) (model.AnalyticsRows, error) {
  5450  
  5451  	tries := 0
  5452  	for {
  5453  		result, err := s.PostStore.AnalyticsPostCountsByDay(options)
  5454  		if err == nil {
  5455  			return result, nil
  5456  		}
  5457  		if !isRepeatableError(err) {
  5458  			return result, err
  5459  		}
  5460  		tries++
  5461  		if tries >= 3 {
  5462  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  5463  			return result, err
  5464  		}
  5465  	}
  5466  
  5467  }
  5468  
  5469  func (s *RetryLayerPostStore) AnalyticsUserCountsWithPostsByDay(teamID string) (model.AnalyticsRows, error) {
  5470  
  5471  	tries := 0
  5472  	for {
  5473  		result, err := s.PostStore.AnalyticsUserCountsWithPostsByDay(teamID)
  5474  		if err == nil {
  5475  			return result, nil
  5476  		}
  5477  		if !isRepeatableError(err) {
  5478  			return result, err
  5479  		}
  5480  		tries++
  5481  		if tries >= 3 {
  5482  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  5483  			return result, err
  5484  		}
  5485  	}
  5486  
  5487  }
  5488  
  5489  func (s *RetryLayerPostStore) ClearCaches() {
  5490  
  5491  	s.PostStore.ClearCaches()
  5492  
  5493  }
  5494  
  5495  func (s *RetryLayerPostStore) Delete(postID string, time int64, deleteByID string) error {
  5496  
  5497  	tries := 0
  5498  	for {
  5499  		err := s.PostStore.Delete(postID, time, deleteByID)
  5500  		if err == nil {
  5501  			return nil
  5502  		}
  5503  		if !isRepeatableError(err) {
  5504  			return err
  5505  		}
  5506  		tries++
  5507  		if tries >= 3 {
  5508  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  5509  			return err
  5510  		}
  5511  	}
  5512  
  5513  }
  5514  
  5515  func (s *RetryLayerPostStore) DeleteOrphanedRows(limit int) (int64, error) {
  5516  
  5517  	tries := 0
  5518  	for {
  5519  		result, err := s.PostStore.DeleteOrphanedRows(limit)
  5520  		if err == nil {
  5521  			return result, nil
  5522  		}
  5523  		if !isRepeatableError(err) {
  5524  			return result, err
  5525  		}
  5526  		tries++
  5527  		if tries >= 3 {
  5528  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  5529  			return result, err
  5530  		}
  5531  	}
  5532  
  5533  }
  5534  
  5535  func (s *RetryLayerPostStore) Get(ctx context.Context, id string, skipFetchThreads bool, collapsedThreads bool, collapsedThreadsExtended bool, userID string) (*model.PostList, error) {
  5536  
  5537  	tries := 0
  5538  	for {
  5539  		result, err := s.PostStore.Get(ctx, id, skipFetchThreads, collapsedThreads, collapsedThreadsExtended, userID)
  5540  		if err == nil {
  5541  			return result, nil
  5542  		}
  5543  		if !isRepeatableError(err) {
  5544  			return result, err
  5545  		}
  5546  		tries++
  5547  		if tries >= 3 {
  5548  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  5549  			return result, err
  5550  		}
  5551  	}
  5552  
  5553  }
  5554  
  5555  func (s *RetryLayerPostStore) GetDirectPostParentsForExportAfter(limit int, afterID string) ([]*model.DirectPostForExport, error) {
  5556  
  5557  	tries := 0
  5558  	for {
  5559  		result, err := s.PostStore.GetDirectPostParentsForExportAfter(limit, afterID)
  5560  		if err == nil {
  5561  			return result, nil
  5562  		}
  5563  		if !isRepeatableError(err) {
  5564  			return result, err
  5565  		}
  5566  		tries++
  5567  		if tries >= 3 {
  5568  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  5569  			return result, err
  5570  		}
  5571  	}
  5572  
  5573  }
  5574  
  5575  func (s *RetryLayerPostStore) GetEtag(channelID string, allowFromCache bool, collapsedThreads bool) string {
  5576  
  5577  	return s.PostStore.GetEtag(channelID, allowFromCache, collapsedThreads)
  5578  
  5579  }
  5580  
  5581  func (s *RetryLayerPostStore) GetFlaggedPosts(userID string, offset int, limit int) (*model.PostList, error) {
  5582  
  5583  	tries := 0
  5584  	for {
  5585  		result, err := s.PostStore.GetFlaggedPosts(userID, offset, limit)
  5586  		if err == nil {
  5587  			return result, nil
  5588  		}
  5589  		if !isRepeatableError(err) {
  5590  			return result, err
  5591  		}
  5592  		tries++
  5593  		if tries >= 3 {
  5594  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  5595  			return result, err
  5596  		}
  5597  	}
  5598  
  5599  }
  5600  
  5601  func (s *RetryLayerPostStore) GetFlaggedPostsForChannel(userID string, channelID string, offset int, limit int) (*model.PostList, error) {
  5602  
  5603  	tries := 0
  5604  	for {
  5605  		result, err := s.PostStore.GetFlaggedPostsForChannel(userID, channelID, offset, limit)
  5606  		if err == nil {
  5607  			return result, nil
  5608  		}
  5609  		if !isRepeatableError(err) {
  5610  			return result, err
  5611  		}
  5612  		tries++
  5613  		if tries >= 3 {
  5614  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  5615  			return result, err
  5616  		}
  5617  	}
  5618  
  5619  }
  5620  
  5621  func (s *RetryLayerPostStore) GetFlaggedPostsForTeam(userID string, teamID string, offset int, limit int) (*model.PostList, error) {
  5622  
  5623  	tries := 0
  5624  	for {
  5625  		result, err := s.PostStore.GetFlaggedPostsForTeam(userID, teamID, offset, limit)
  5626  		if err == nil {
  5627  			return result, nil
  5628  		}
  5629  		if !isRepeatableError(err) {
  5630  			return result, err
  5631  		}
  5632  		tries++
  5633  		if tries >= 3 {
  5634  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  5635  			return result, err
  5636  		}
  5637  	}
  5638  
  5639  }
  5640  
  5641  func (s *RetryLayerPostStore) GetMaxPostSize() int {
  5642  
  5643  	return s.PostStore.GetMaxPostSize()
  5644  
  5645  }
  5646  
  5647  func (s *RetryLayerPostStore) GetOldest() (*model.Post, error) {
  5648  
  5649  	tries := 0
  5650  	for {
  5651  		result, err := s.PostStore.GetOldest()
  5652  		if err == nil {
  5653  			return result, nil
  5654  		}
  5655  		if !isRepeatableError(err) {
  5656  			return result, err
  5657  		}
  5658  		tries++
  5659  		if tries >= 3 {
  5660  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  5661  			return result, err
  5662  		}
  5663  	}
  5664  
  5665  }
  5666  
  5667  func (s *RetryLayerPostStore) GetOldestEntityCreationTime() (int64, error) {
  5668  
  5669  	tries := 0
  5670  	for {
  5671  		result, err := s.PostStore.GetOldestEntityCreationTime()
  5672  		if err == nil {
  5673  			return result, nil
  5674  		}
  5675  		if !isRepeatableError(err) {
  5676  			return result, err
  5677  		}
  5678  		tries++
  5679  		if tries >= 3 {
  5680  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  5681  			return result, err
  5682  		}
  5683  	}
  5684  
  5685  }
  5686  
  5687  func (s *RetryLayerPostStore) GetParentsForExportAfter(limit int, afterID string) ([]*model.PostForExport, error) {
  5688  
  5689  	tries := 0
  5690  	for {
  5691  		result, err := s.PostStore.GetParentsForExportAfter(limit, afterID)
  5692  		if err == nil {
  5693  			return result, nil
  5694  		}
  5695  		if !isRepeatableError(err) {
  5696  			return result, err
  5697  		}
  5698  		tries++
  5699  		if tries >= 3 {
  5700  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  5701  			return result, err
  5702  		}
  5703  	}
  5704  
  5705  }
  5706  
  5707  func (s *RetryLayerPostStore) GetPostAfterTime(channelID string, time int64, collapsedThreads bool) (*model.Post, error) {
  5708  
  5709  	tries := 0
  5710  	for {
  5711  		result, err := s.PostStore.GetPostAfterTime(channelID, time, collapsedThreads)
  5712  		if err == nil {
  5713  			return result, nil
  5714  		}
  5715  		if !isRepeatableError(err) {
  5716  			return result, err
  5717  		}
  5718  		tries++
  5719  		if tries >= 3 {
  5720  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  5721  			return result, err
  5722  		}
  5723  	}
  5724  
  5725  }
  5726  
  5727  func (s *RetryLayerPostStore) GetPostIdAfterTime(channelID string, time int64, collapsedThreads bool) (string, error) {
  5728  
  5729  	tries := 0
  5730  	for {
  5731  		result, err := s.PostStore.GetPostIdAfterTime(channelID, time, collapsedThreads)
  5732  		if err == nil {
  5733  			return result, nil
  5734  		}
  5735  		if !isRepeatableError(err) {
  5736  			return result, err
  5737  		}
  5738  		tries++
  5739  		if tries >= 3 {
  5740  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  5741  			return result, err
  5742  		}
  5743  	}
  5744  
  5745  }
  5746  
  5747  func (s *RetryLayerPostStore) GetPostIdBeforeTime(channelID string, time int64, collapsedThreads bool) (string, error) {
  5748  
  5749  	tries := 0
  5750  	for {
  5751  		result, err := s.PostStore.GetPostIdBeforeTime(channelID, time, collapsedThreads)
  5752  		if err == nil {
  5753  			return result, nil
  5754  		}
  5755  		if !isRepeatableError(err) {
  5756  			return result, err
  5757  		}
  5758  		tries++
  5759  		if tries >= 3 {
  5760  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  5761  			return result, err
  5762  		}
  5763  	}
  5764  
  5765  }
  5766  
  5767  func (s *RetryLayerPostStore) GetPosts(options model.GetPostsOptions, allowFromCache bool) (*model.PostList, error) {
  5768  
  5769  	tries := 0
  5770  	for {
  5771  		result, err := s.PostStore.GetPosts(options, allowFromCache)
  5772  		if err == nil {
  5773  			return result, nil
  5774  		}
  5775  		if !isRepeatableError(err) {
  5776  			return result, err
  5777  		}
  5778  		tries++
  5779  		if tries >= 3 {
  5780  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  5781  			return result, err
  5782  		}
  5783  	}
  5784  
  5785  }
  5786  
  5787  func (s *RetryLayerPostStore) GetPostsAfter(options model.GetPostsOptions) (*model.PostList, error) {
  5788  
  5789  	tries := 0
  5790  	for {
  5791  		result, err := s.PostStore.GetPostsAfter(options)
  5792  		if err == nil {
  5793  			return result, nil
  5794  		}
  5795  		if !isRepeatableError(err) {
  5796  			return result, err
  5797  		}
  5798  		tries++
  5799  		if tries >= 3 {
  5800  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  5801  			return result, err
  5802  		}
  5803  	}
  5804  
  5805  }
  5806  
  5807  func (s *RetryLayerPostStore) GetPostsBatchForIndexing(startTime int64, endTime int64, limit int) ([]*model.PostForIndexing, error) {
  5808  
  5809  	tries := 0
  5810  	for {
  5811  		result, err := s.PostStore.GetPostsBatchForIndexing(startTime, endTime, limit)
  5812  		if err == nil {
  5813  			return result, nil
  5814  		}
  5815  		if !isRepeatableError(err) {
  5816  			return result, err
  5817  		}
  5818  		tries++
  5819  		if tries >= 3 {
  5820  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  5821  			return result, err
  5822  		}
  5823  	}
  5824  
  5825  }
  5826  
  5827  func (s *RetryLayerPostStore) GetPostsBefore(options model.GetPostsOptions) (*model.PostList, error) {
  5828  
  5829  	tries := 0
  5830  	for {
  5831  		result, err := s.PostStore.GetPostsBefore(options)
  5832  		if err == nil {
  5833  			return result, nil
  5834  		}
  5835  		if !isRepeatableError(err) {
  5836  			return result, err
  5837  		}
  5838  		tries++
  5839  		if tries >= 3 {
  5840  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  5841  			return result, err
  5842  		}
  5843  	}
  5844  
  5845  }
  5846  
  5847  func (s *RetryLayerPostStore) GetPostsByIds(postIds []string) ([]*model.Post, error) {
  5848  
  5849  	tries := 0
  5850  	for {
  5851  		result, err := s.PostStore.GetPostsByIds(postIds)
  5852  		if err == nil {
  5853  			return result, nil
  5854  		}
  5855  		if !isRepeatableError(err) {
  5856  			return result, err
  5857  		}
  5858  		tries++
  5859  		if tries >= 3 {
  5860  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  5861  			return result, err
  5862  		}
  5863  	}
  5864  
  5865  }
  5866  
  5867  func (s *RetryLayerPostStore) GetPostsCreatedAt(channelID string, time int64) ([]*model.Post, error) {
  5868  
  5869  	tries := 0
  5870  	for {
  5871  		result, err := s.PostStore.GetPostsCreatedAt(channelID, time)
  5872  		if err == nil {
  5873  			return result, nil
  5874  		}
  5875  		if !isRepeatableError(err) {
  5876  			return result, err
  5877  		}
  5878  		tries++
  5879  		if tries >= 3 {
  5880  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  5881  			return result, err
  5882  		}
  5883  	}
  5884  
  5885  }
  5886  
  5887  func (s *RetryLayerPostStore) GetPostsSince(options model.GetPostsSinceOptions, allowFromCache bool) (*model.PostList, error) {
  5888  
  5889  	tries := 0
  5890  	for {
  5891  		result, err := s.PostStore.GetPostsSince(options, allowFromCache)
  5892  		if err == nil {
  5893  			return result, nil
  5894  		}
  5895  		if !isRepeatableError(err) {
  5896  			return result, err
  5897  		}
  5898  		tries++
  5899  		if tries >= 3 {
  5900  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  5901  			return result, err
  5902  		}
  5903  	}
  5904  
  5905  }
  5906  
  5907  func (s *RetryLayerPostStore) GetPostsSinceForSync(options model.GetPostsSinceForSyncOptions, cursor model.GetPostsSinceForSyncCursor, limit int) ([]*model.Post, model.GetPostsSinceForSyncCursor, error) {
  5908  
  5909  	tries := 0
  5910  	for {
  5911  		result, resultVar1, err := s.PostStore.GetPostsSinceForSync(options, cursor, limit)
  5912  		if err == nil {
  5913  			return result, resultVar1, nil
  5914  		}
  5915  		if !isRepeatableError(err) {
  5916  			return result, resultVar1, err
  5917  		}
  5918  		tries++
  5919  		if tries >= 3 {
  5920  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  5921  			return result, resultVar1, err
  5922  		}
  5923  	}
  5924  
  5925  }
  5926  
  5927  func (s *RetryLayerPostStore) GetRepliesForExport(parentID string) ([]*model.ReplyForExport, error) {
  5928  
  5929  	tries := 0
  5930  	for {
  5931  		result, err := s.PostStore.GetRepliesForExport(parentID)
  5932  		if err == nil {
  5933  			return result, nil
  5934  		}
  5935  		if !isRepeatableError(err) {
  5936  			return result, err
  5937  		}
  5938  		tries++
  5939  		if tries >= 3 {
  5940  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  5941  			return result, err
  5942  		}
  5943  	}
  5944  
  5945  }
  5946  
  5947  func (s *RetryLayerPostStore) GetSingle(id string, inclDeleted bool) (*model.Post, error) {
  5948  
  5949  	tries := 0
  5950  	for {
  5951  		result, err := s.PostStore.GetSingle(id, inclDeleted)
  5952  		if err == nil {
  5953  			return result, nil
  5954  		}
  5955  		if !isRepeatableError(err) {
  5956  			return result, err
  5957  		}
  5958  		tries++
  5959  		if tries >= 3 {
  5960  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  5961  			return result, err
  5962  		}
  5963  	}
  5964  
  5965  }
  5966  
  5967  func (s *RetryLayerPostStore) HasAutoResponsePostByUserSince(options model.GetPostsSinceOptions, userId string) (bool, error) {
  5968  
  5969  	tries := 0
  5970  	for {
  5971  		result, err := s.PostStore.HasAutoResponsePostByUserSince(options, userId)
  5972  		if err == nil {
  5973  			return result, nil
  5974  		}
  5975  		if !isRepeatableError(err) {
  5976  			return result, err
  5977  		}
  5978  		tries++
  5979  		if tries >= 3 {
  5980  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  5981  			return result, err
  5982  		}
  5983  	}
  5984  
  5985  }
  5986  
  5987  func (s *RetryLayerPostStore) InvalidateLastPostTimeCache(channelID string) {
  5988  
  5989  	s.PostStore.InvalidateLastPostTimeCache(channelID)
  5990  
  5991  }
  5992  
  5993  func (s *RetryLayerPostStore) Overwrite(post *model.Post) (*model.Post, error) {
  5994  
  5995  	tries := 0
  5996  	for {
  5997  		result, err := s.PostStore.Overwrite(post)
  5998  		if err == nil {
  5999  			return result, nil
  6000  		}
  6001  		if !isRepeatableError(err) {
  6002  			return result, err
  6003  		}
  6004  		tries++
  6005  		if tries >= 3 {
  6006  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  6007  			return result, err
  6008  		}
  6009  	}
  6010  
  6011  }
  6012  
  6013  func (s *RetryLayerPostStore) OverwriteMultiple(posts []*model.Post) ([]*model.Post, int, error) {
  6014  
  6015  	tries := 0
  6016  	for {
  6017  		result, resultVar1, err := s.PostStore.OverwriteMultiple(posts)
  6018  		if err == nil {
  6019  			return result, resultVar1, nil
  6020  		}
  6021  		if !isRepeatableError(err) {
  6022  			return result, resultVar1, err
  6023  		}
  6024  		tries++
  6025  		if tries >= 3 {
  6026  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  6027  			return result, resultVar1, err
  6028  		}
  6029  	}
  6030  
  6031  }
  6032  
  6033  func (s *RetryLayerPostStore) PermanentDeleteBatch(endTime int64, limit int64) (int64, error) {
  6034  
  6035  	tries := 0
  6036  	for {
  6037  		result, err := s.PostStore.PermanentDeleteBatch(endTime, limit)
  6038  		if err == nil {
  6039  			return result, nil
  6040  		}
  6041  		if !isRepeatableError(err) {
  6042  			return result, err
  6043  		}
  6044  		tries++
  6045  		if tries >= 3 {
  6046  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  6047  			return result, err
  6048  		}
  6049  	}
  6050  
  6051  }
  6052  
  6053  func (s *RetryLayerPostStore) PermanentDeleteBatchForRetentionPolicies(now int64, globalPolicyEndTime int64, limit int64, cursor model.RetentionPolicyCursor) (int64, model.RetentionPolicyCursor, error) {
  6054  
  6055  	tries := 0
  6056  	for {
  6057  		result, resultVar1, err := s.PostStore.PermanentDeleteBatchForRetentionPolicies(now, globalPolicyEndTime, limit, cursor)
  6058  		if err == nil {
  6059  			return result, resultVar1, nil
  6060  		}
  6061  		if !isRepeatableError(err) {
  6062  			return result, resultVar1, err
  6063  		}
  6064  		tries++
  6065  		if tries >= 3 {
  6066  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  6067  			return result, resultVar1, err
  6068  		}
  6069  	}
  6070  
  6071  }
  6072  
  6073  func (s *RetryLayerPostStore) PermanentDeleteByChannel(channelID string) error {
  6074  
  6075  	tries := 0
  6076  	for {
  6077  		err := s.PostStore.PermanentDeleteByChannel(channelID)
  6078  		if err == nil {
  6079  			return nil
  6080  		}
  6081  		if !isRepeatableError(err) {
  6082  			return err
  6083  		}
  6084  		tries++
  6085  		if tries >= 3 {
  6086  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  6087  			return err
  6088  		}
  6089  	}
  6090  
  6091  }
  6092  
  6093  func (s *RetryLayerPostStore) PermanentDeleteByUser(userID string) error {
  6094  
  6095  	tries := 0
  6096  	for {
  6097  		err := s.PostStore.PermanentDeleteByUser(userID)
  6098  		if err == nil {
  6099  			return nil
  6100  		}
  6101  		if !isRepeatableError(err) {
  6102  			return err
  6103  		}
  6104  		tries++
  6105  		if tries >= 3 {
  6106  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  6107  			return err
  6108  		}
  6109  	}
  6110  
  6111  }
  6112  
  6113  func (s *RetryLayerPostStore) Save(post *model.Post) (*model.Post, error) {
  6114  
  6115  	tries := 0
  6116  	for {
  6117  		result, err := s.PostStore.Save(post)
  6118  		if err == nil {
  6119  			return result, nil
  6120  		}
  6121  		if !isRepeatableError(err) {
  6122  			return result, err
  6123  		}
  6124  		tries++
  6125  		if tries >= 3 {
  6126  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  6127  			return result, err
  6128  		}
  6129  	}
  6130  
  6131  }
  6132  
  6133  func (s *RetryLayerPostStore) SaveMultiple(posts []*model.Post) ([]*model.Post, int, error) {
  6134  
  6135  	tries := 0
  6136  	for {
  6137  		result, resultVar1, err := s.PostStore.SaveMultiple(posts)
  6138  		if err == nil {
  6139  			return result, resultVar1, nil
  6140  		}
  6141  		if !isRepeatableError(err) {
  6142  			return result, resultVar1, err
  6143  		}
  6144  		tries++
  6145  		if tries >= 3 {
  6146  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  6147  			return result, resultVar1, err
  6148  		}
  6149  	}
  6150  
  6151  }
  6152  
  6153  func (s *RetryLayerPostStore) Search(teamID string, userID string, params *model.SearchParams) (*model.PostList, error) {
  6154  
  6155  	tries := 0
  6156  	for {
  6157  		result, err := s.PostStore.Search(teamID, userID, params)
  6158  		if err == nil {
  6159  			return result, nil
  6160  		}
  6161  		if !isRepeatableError(err) {
  6162  			return result, err
  6163  		}
  6164  		tries++
  6165  		if tries >= 3 {
  6166  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  6167  			return result, err
  6168  		}
  6169  	}
  6170  
  6171  }
  6172  
  6173  func (s *RetryLayerPostStore) SearchPostsInTeamForUser(paramsList []*model.SearchParams, userID string, teamID string, page int, perPage int) (*model.PostSearchResults, error) {
  6174  
  6175  	tries := 0
  6176  	for {
  6177  		result, err := s.PostStore.SearchPostsInTeamForUser(paramsList, userID, teamID, page, perPage)
  6178  		if err == nil {
  6179  			return result, nil
  6180  		}
  6181  		if !isRepeatableError(err) {
  6182  			return result, err
  6183  		}
  6184  		tries++
  6185  		if tries >= 3 {
  6186  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  6187  			return result, err
  6188  		}
  6189  	}
  6190  
  6191  }
  6192  
  6193  func (s *RetryLayerPostStore) Update(newPost *model.Post, oldPost *model.Post) (*model.Post, error) {
  6194  
  6195  	tries := 0
  6196  	for {
  6197  		result, err := s.PostStore.Update(newPost, oldPost)
  6198  		if err == nil {
  6199  			return result, nil
  6200  		}
  6201  		if !isRepeatableError(err) {
  6202  			return result, err
  6203  		}
  6204  		tries++
  6205  		if tries >= 3 {
  6206  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  6207  			return result, err
  6208  		}
  6209  	}
  6210  
  6211  }
  6212  
  6213  func (s *RetryLayerPreferenceStore) CleanupFlagsBatch(limit int64) (int64, error) {
  6214  
  6215  	tries := 0
  6216  	for {
  6217  		result, err := s.PreferenceStore.CleanupFlagsBatch(limit)
  6218  		if err == nil {
  6219  			return result, nil
  6220  		}
  6221  		if !isRepeatableError(err) {
  6222  			return result, err
  6223  		}
  6224  		tries++
  6225  		if tries >= 3 {
  6226  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  6227  			return result, err
  6228  		}
  6229  	}
  6230  
  6231  }
  6232  
  6233  func (s *RetryLayerPreferenceStore) Delete(userID string, category string, name string) error {
  6234  
  6235  	tries := 0
  6236  	for {
  6237  		err := s.PreferenceStore.Delete(userID, category, name)
  6238  		if err == nil {
  6239  			return nil
  6240  		}
  6241  		if !isRepeatableError(err) {
  6242  			return err
  6243  		}
  6244  		tries++
  6245  		if tries >= 3 {
  6246  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  6247  			return err
  6248  		}
  6249  	}
  6250  
  6251  }
  6252  
  6253  func (s *RetryLayerPreferenceStore) DeleteCategory(userID string, category string) error {
  6254  
  6255  	tries := 0
  6256  	for {
  6257  		err := s.PreferenceStore.DeleteCategory(userID, category)
  6258  		if err == nil {
  6259  			return nil
  6260  		}
  6261  		if !isRepeatableError(err) {
  6262  			return err
  6263  		}
  6264  		tries++
  6265  		if tries >= 3 {
  6266  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  6267  			return err
  6268  		}
  6269  	}
  6270  
  6271  }
  6272  
  6273  func (s *RetryLayerPreferenceStore) DeleteCategoryAndName(category string, name string) error {
  6274  
  6275  	tries := 0
  6276  	for {
  6277  		err := s.PreferenceStore.DeleteCategoryAndName(category, name)
  6278  		if err == nil {
  6279  			return nil
  6280  		}
  6281  		if !isRepeatableError(err) {
  6282  			return err
  6283  		}
  6284  		tries++
  6285  		if tries >= 3 {
  6286  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  6287  			return err
  6288  		}
  6289  	}
  6290  
  6291  }
  6292  
  6293  func (s *RetryLayerPreferenceStore) DeleteOrphanedRows(limit int) (int64, error) {
  6294  
  6295  	tries := 0
  6296  	for {
  6297  		result, err := s.PreferenceStore.DeleteOrphanedRows(limit)
  6298  		if err == nil {
  6299  			return result, nil
  6300  		}
  6301  		if !isRepeatableError(err) {
  6302  			return result, err
  6303  		}
  6304  		tries++
  6305  		if tries >= 3 {
  6306  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  6307  			return result, err
  6308  		}
  6309  	}
  6310  
  6311  }
  6312  
  6313  func (s *RetryLayerPreferenceStore) Get(userID string, category string, name string) (*model.Preference, error) {
  6314  
  6315  	tries := 0
  6316  	for {
  6317  		result, err := s.PreferenceStore.Get(userID, category, name)
  6318  		if err == nil {
  6319  			return result, nil
  6320  		}
  6321  		if !isRepeatableError(err) {
  6322  			return result, err
  6323  		}
  6324  		tries++
  6325  		if tries >= 3 {
  6326  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  6327  			return result, err
  6328  		}
  6329  	}
  6330  
  6331  }
  6332  
  6333  func (s *RetryLayerPreferenceStore) GetAll(userID string) (model.Preferences, error) {
  6334  
  6335  	tries := 0
  6336  	for {
  6337  		result, err := s.PreferenceStore.GetAll(userID)
  6338  		if err == nil {
  6339  			return result, nil
  6340  		}
  6341  		if !isRepeatableError(err) {
  6342  			return result, err
  6343  		}
  6344  		tries++
  6345  		if tries >= 3 {
  6346  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  6347  			return result, err
  6348  		}
  6349  	}
  6350  
  6351  }
  6352  
  6353  func (s *RetryLayerPreferenceStore) GetCategory(userID string, category string) (model.Preferences, error) {
  6354  
  6355  	tries := 0
  6356  	for {
  6357  		result, err := s.PreferenceStore.GetCategory(userID, category)
  6358  		if err == nil {
  6359  			return result, nil
  6360  		}
  6361  		if !isRepeatableError(err) {
  6362  			return result, err
  6363  		}
  6364  		tries++
  6365  		if tries >= 3 {
  6366  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  6367  			return result, err
  6368  		}
  6369  	}
  6370  
  6371  }
  6372  
  6373  func (s *RetryLayerPreferenceStore) PermanentDeleteByUser(userID string) error {
  6374  
  6375  	tries := 0
  6376  	for {
  6377  		err := s.PreferenceStore.PermanentDeleteByUser(userID)
  6378  		if err == nil {
  6379  			return nil
  6380  		}
  6381  		if !isRepeatableError(err) {
  6382  			return err
  6383  		}
  6384  		tries++
  6385  		if tries >= 3 {
  6386  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  6387  			return err
  6388  		}
  6389  	}
  6390  
  6391  }
  6392  
  6393  func (s *RetryLayerPreferenceStore) Save(preferences *model.Preferences) error {
  6394  
  6395  	tries := 0
  6396  	for {
  6397  		err := s.PreferenceStore.Save(preferences)
  6398  		if err == nil {
  6399  			return nil
  6400  		}
  6401  		if !isRepeatableError(err) {
  6402  			return err
  6403  		}
  6404  		tries++
  6405  		if tries >= 3 {
  6406  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  6407  			return err
  6408  		}
  6409  	}
  6410  
  6411  }
  6412  
  6413  func (s *RetryLayerProductNoticesStore) Clear(notices []string) error {
  6414  
  6415  	tries := 0
  6416  	for {
  6417  		err := s.ProductNoticesStore.Clear(notices)
  6418  		if err == nil {
  6419  			return nil
  6420  		}
  6421  		if !isRepeatableError(err) {
  6422  			return err
  6423  		}
  6424  		tries++
  6425  		if tries >= 3 {
  6426  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  6427  			return err
  6428  		}
  6429  	}
  6430  
  6431  }
  6432  
  6433  func (s *RetryLayerProductNoticesStore) ClearOldNotices(currentNotices *model.ProductNotices) error {
  6434  
  6435  	tries := 0
  6436  	for {
  6437  		err := s.ProductNoticesStore.ClearOldNotices(currentNotices)
  6438  		if err == nil {
  6439  			return nil
  6440  		}
  6441  		if !isRepeatableError(err) {
  6442  			return err
  6443  		}
  6444  		tries++
  6445  		if tries >= 3 {
  6446  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  6447  			return err
  6448  		}
  6449  	}
  6450  
  6451  }
  6452  
  6453  func (s *RetryLayerProductNoticesStore) GetViews(userID string) ([]model.ProductNoticeViewState, error) {
  6454  
  6455  	tries := 0
  6456  	for {
  6457  		result, err := s.ProductNoticesStore.GetViews(userID)
  6458  		if err == nil {
  6459  			return result, nil
  6460  		}
  6461  		if !isRepeatableError(err) {
  6462  			return result, err
  6463  		}
  6464  		tries++
  6465  		if tries >= 3 {
  6466  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  6467  			return result, err
  6468  		}
  6469  	}
  6470  
  6471  }
  6472  
  6473  func (s *RetryLayerProductNoticesStore) View(userID string, notices []string) error {
  6474  
  6475  	tries := 0
  6476  	for {
  6477  		err := s.ProductNoticesStore.View(userID, notices)
  6478  		if err == nil {
  6479  			return nil
  6480  		}
  6481  		if !isRepeatableError(err) {
  6482  			return err
  6483  		}
  6484  		tries++
  6485  		if tries >= 3 {
  6486  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  6487  			return err
  6488  		}
  6489  	}
  6490  
  6491  }
  6492  
  6493  func (s *RetryLayerReactionStore) BulkGetForPosts(postIds []string) ([]*model.Reaction, error) {
  6494  
  6495  	tries := 0
  6496  	for {
  6497  		result, err := s.ReactionStore.BulkGetForPosts(postIds)
  6498  		if err == nil {
  6499  			return result, nil
  6500  		}
  6501  		if !isRepeatableError(err) {
  6502  			return result, err
  6503  		}
  6504  		tries++
  6505  		if tries >= 3 {
  6506  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  6507  			return result, err
  6508  		}
  6509  	}
  6510  
  6511  }
  6512  
  6513  func (s *RetryLayerReactionStore) Delete(reaction *model.Reaction) (*model.Reaction, error) {
  6514  
  6515  	tries := 0
  6516  	for {
  6517  		result, err := s.ReactionStore.Delete(reaction)
  6518  		if err == nil {
  6519  			return result, nil
  6520  		}
  6521  		if !isRepeatableError(err) {
  6522  			return result, err
  6523  		}
  6524  		tries++
  6525  		if tries >= 3 {
  6526  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  6527  			return result, err
  6528  		}
  6529  	}
  6530  
  6531  }
  6532  
  6533  func (s *RetryLayerReactionStore) DeleteAllWithEmojiName(emojiName string) error {
  6534  
  6535  	tries := 0
  6536  	for {
  6537  		err := s.ReactionStore.DeleteAllWithEmojiName(emojiName)
  6538  		if err == nil {
  6539  			return nil
  6540  		}
  6541  		if !isRepeatableError(err) {
  6542  			return err
  6543  		}
  6544  		tries++
  6545  		if tries >= 3 {
  6546  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  6547  			return err
  6548  		}
  6549  	}
  6550  
  6551  }
  6552  
  6553  func (s *RetryLayerReactionStore) DeleteOrphanedRows(limit int) (int64, error) {
  6554  
  6555  	tries := 0
  6556  	for {
  6557  		result, err := s.ReactionStore.DeleteOrphanedRows(limit)
  6558  		if err == nil {
  6559  			return result, nil
  6560  		}
  6561  		if !isRepeatableError(err) {
  6562  			return result, err
  6563  		}
  6564  		tries++
  6565  		if tries >= 3 {
  6566  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  6567  			return result, err
  6568  		}
  6569  	}
  6570  
  6571  }
  6572  
  6573  func (s *RetryLayerReactionStore) GetForPost(postID string, allowFromCache bool) ([]*model.Reaction, error) {
  6574  
  6575  	tries := 0
  6576  	for {
  6577  		result, err := s.ReactionStore.GetForPost(postID, allowFromCache)
  6578  		if err == nil {
  6579  			return result, nil
  6580  		}
  6581  		if !isRepeatableError(err) {
  6582  			return result, err
  6583  		}
  6584  		tries++
  6585  		if tries >= 3 {
  6586  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  6587  			return result, err
  6588  		}
  6589  	}
  6590  
  6591  }
  6592  
  6593  func (s *RetryLayerReactionStore) GetForPostSince(postId string, since int64, excludeRemoteId string, inclDeleted bool) ([]*model.Reaction, error) {
  6594  
  6595  	tries := 0
  6596  	for {
  6597  		result, err := s.ReactionStore.GetForPostSince(postId, since, excludeRemoteId, inclDeleted)
  6598  		if err == nil {
  6599  			return result, nil
  6600  		}
  6601  		if !isRepeatableError(err) {
  6602  			return result, err
  6603  		}
  6604  		tries++
  6605  		if tries >= 3 {
  6606  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  6607  			return result, err
  6608  		}
  6609  	}
  6610  
  6611  }
  6612  
  6613  func (s *RetryLayerReactionStore) PermanentDeleteBatch(endTime int64, limit int64) (int64, error) {
  6614  
  6615  	tries := 0
  6616  	for {
  6617  		result, err := s.ReactionStore.PermanentDeleteBatch(endTime, limit)
  6618  		if err == nil {
  6619  			return result, nil
  6620  		}
  6621  		if !isRepeatableError(err) {
  6622  			return result, err
  6623  		}
  6624  		tries++
  6625  		if tries >= 3 {
  6626  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  6627  			return result, err
  6628  		}
  6629  	}
  6630  
  6631  }
  6632  
  6633  func (s *RetryLayerReactionStore) Save(reaction *model.Reaction) (*model.Reaction, error) {
  6634  
  6635  	tries := 0
  6636  	for {
  6637  		result, err := s.ReactionStore.Save(reaction)
  6638  		if err == nil {
  6639  			return result, nil
  6640  		}
  6641  		if !isRepeatableError(err) {
  6642  			return result, err
  6643  		}
  6644  		tries++
  6645  		if tries >= 3 {
  6646  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  6647  			return result, err
  6648  		}
  6649  	}
  6650  
  6651  }
  6652  
  6653  func (s *RetryLayerRemoteClusterStore) Delete(remoteClusterId string) (bool, error) {
  6654  
  6655  	tries := 0
  6656  	for {
  6657  		result, err := s.RemoteClusterStore.Delete(remoteClusterId)
  6658  		if err == nil {
  6659  			return result, nil
  6660  		}
  6661  		if !isRepeatableError(err) {
  6662  			return result, err
  6663  		}
  6664  		tries++
  6665  		if tries >= 3 {
  6666  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  6667  			return result, err
  6668  		}
  6669  	}
  6670  
  6671  }
  6672  
  6673  func (s *RetryLayerRemoteClusterStore) Get(remoteClusterId string) (*model.RemoteCluster, error) {
  6674  
  6675  	tries := 0
  6676  	for {
  6677  		result, err := s.RemoteClusterStore.Get(remoteClusterId)
  6678  		if err == nil {
  6679  			return result, nil
  6680  		}
  6681  		if !isRepeatableError(err) {
  6682  			return result, err
  6683  		}
  6684  		tries++
  6685  		if tries >= 3 {
  6686  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  6687  			return result, err
  6688  		}
  6689  	}
  6690  
  6691  }
  6692  
  6693  func (s *RetryLayerRemoteClusterStore) GetAll(filter model.RemoteClusterQueryFilter) ([]*model.RemoteCluster, error) {
  6694  
  6695  	tries := 0
  6696  	for {
  6697  		result, err := s.RemoteClusterStore.GetAll(filter)
  6698  		if err == nil {
  6699  			return result, nil
  6700  		}
  6701  		if !isRepeatableError(err) {
  6702  			return result, err
  6703  		}
  6704  		tries++
  6705  		if tries >= 3 {
  6706  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  6707  			return result, err
  6708  		}
  6709  	}
  6710  
  6711  }
  6712  
  6713  func (s *RetryLayerRemoteClusterStore) Save(rc *model.RemoteCluster) (*model.RemoteCluster, error) {
  6714  
  6715  	tries := 0
  6716  	for {
  6717  		result, err := s.RemoteClusterStore.Save(rc)
  6718  		if err == nil {
  6719  			return result, nil
  6720  		}
  6721  		if !isRepeatableError(err) {
  6722  			return result, err
  6723  		}
  6724  		tries++
  6725  		if tries >= 3 {
  6726  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  6727  			return result, err
  6728  		}
  6729  	}
  6730  
  6731  }
  6732  
  6733  func (s *RetryLayerRemoteClusterStore) SetLastPingAt(remoteClusterId string) error {
  6734  
  6735  	tries := 0
  6736  	for {
  6737  		err := s.RemoteClusterStore.SetLastPingAt(remoteClusterId)
  6738  		if err == nil {
  6739  			return nil
  6740  		}
  6741  		if !isRepeatableError(err) {
  6742  			return err
  6743  		}
  6744  		tries++
  6745  		if tries >= 3 {
  6746  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  6747  			return err
  6748  		}
  6749  	}
  6750  
  6751  }
  6752  
  6753  func (s *RetryLayerRemoteClusterStore) Update(rc *model.RemoteCluster) (*model.RemoteCluster, error) {
  6754  
  6755  	tries := 0
  6756  	for {
  6757  		result, err := s.RemoteClusterStore.Update(rc)
  6758  		if err == nil {
  6759  			return result, nil
  6760  		}
  6761  		if !isRepeatableError(err) {
  6762  			return result, err
  6763  		}
  6764  		tries++
  6765  		if tries >= 3 {
  6766  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  6767  			return result, err
  6768  		}
  6769  	}
  6770  
  6771  }
  6772  
  6773  func (s *RetryLayerRemoteClusterStore) UpdateTopics(remoteClusterId string, topics string) (*model.RemoteCluster, error) {
  6774  
  6775  	tries := 0
  6776  	for {
  6777  		result, err := s.RemoteClusterStore.UpdateTopics(remoteClusterId, topics)
  6778  		if err == nil {
  6779  			return result, nil
  6780  		}
  6781  		if !isRepeatableError(err) {
  6782  			return result, err
  6783  		}
  6784  		tries++
  6785  		if tries >= 3 {
  6786  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  6787  			return result, err
  6788  		}
  6789  	}
  6790  
  6791  }
  6792  
  6793  func (s *RetryLayerRetentionPolicyStore) AddChannels(policyId string, channelIds []string) error {
  6794  
  6795  	tries := 0
  6796  	for {
  6797  		err := s.RetentionPolicyStore.AddChannels(policyId, channelIds)
  6798  		if err == nil {
  6799  			return nil
  6800  		}
  6801  		if !isRepeatableError(err) {
  6802  			return err
  6803  		}
  6804  		tries++
  6805  		if tries >= 3 {
  6806  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  6807  			return err
  6808  		}
  6809  	}
  6810  
  6811  }
  6812  
  6813  func (s *RetryLayerRetentionPolicyStore) AddTeams(policyId string, teamIds []string) error {
  6814  
  6815  	tries := 0
  6816  	for {
  6817  		err := s.RetentionPolicyStore.AddTeams(policyId, teamIds)
  6818  		if err == nil {
  6819  			return nil
  6820  		}
  6821  		if !isRepeatableError(err) {
  6822  			return err
  6823  		}
  6824  		tries++
  6825  		if tries >= 3 {
  6826  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  6827  			return err
  6828  		}
  6829  	}
  6830  
  6831  }
  6832  
  6833  func (s *RetryLayerRetentionPolicyStore) Delete(id string) error {
  6834  
  6835  	tries := 0
  6836  	for {
  6837  		err := s.RetentionPolicyStore.Delete(id)
  6838  		if err == nil {
  6839  			return nil
  6840  		}
  6841  		if !isRepeatableError(err) {
  6842  			return err
  6843  		}
  6844  		tries++
  6845  		if tries >= 3 {
  6846  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  6847  			return err
  6848  		}
  6849  	}
  6850  
  6851  }
  6852  
  6853  func (s *RetryLayerRetentionPolicyStore) DeleteOrphanedRows(limit int) (int64, error) {
  6854  
  6855  	tries := 0
  6856  	for {
  6857  		result, err := s.RetentionPolicyStore.DeleteOrphanedRows(limit)
  6858  		if err == nil {
  6859  			return result, nil
  6860  		}
  6861  		if !isRepeatableError(err) {
  6862  			return result, err
  6863  		}
  6864  		tries++
  6865  		if tries >= 3 {
  6866  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  6867  			return result, err
  6868  		}
  6869  	}
  6870  
  6871  }
  6872  
  6873  func (s *RetryLayerRetentionPolicyStore) Get(id string) (*model.RetentionPolicyWithTeamAndChannelCounts, error) {
  6874  
  6875  	tries := 0
  6876  	for {
  6877  		result, err := s.RetentionPolicyStore.Get(id)
  6878  		if err == nil {
  6879  			return result, nil
  6880  		}
  6881  		if !isRepeatableError(err) {
  6882  			return result, err
  6883  		}
  6884  		tries++
  6885  		if tries >= 3 {
  6886  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  6887  			return result, err
  6888  		}
  6889  	}
  6890  
  6891  }
  6892  
  6893  func (s *RetryLayerRetentionPolicyStore) GetAll(offset int, limit int) ([]*model.RetentionPolicyWithTeamAndChannelCounts, error) {
  6894  
  6895  	tries := 0
  6896  	for {
  6897  		result, err := s.RetentionPolicyStore.GetAll(offset, limit)
  6898  		if err == nil {
  6899  			return result, nil
  6900  		}
  6901  		if !isRepeatableError(err) {
  6902  			return result, err
  6903  		}
  6904  		tries++
  6905  		if tries >= 3 {
  6906  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  6907  			return result, err
  6908  		}
  6909  	}
  6910  
  6911  }
  6912  
  6913  func (s *RetryLayerRetentionPolicyStore) GetChannelPoliciesCountForUser(userID string) (int64, error) {
  6914  
  6915  	tries := 0
  6916  	for {
  6917  		result, err := s.RetentionPolicyStore.GetChannelPoliciesCountForUser(userID)
  6918  		if err == nil {
  6919  			return result, nil
  6920  		}
  6921  		if !isRepeatableError(err) {
  6922  			return result, err
  6923  		}
  6924  		tries++
  6925  		if tries >= 3 {
  6926  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  6927  			return result, err
  6928  		}
  6929  	}
  6930  
  6931  }
  6932  
  6933  func (s *RetryLayerRetentionPolicyStore) GetChannelPoliciesForUser(userID string, offset int, limit int) ([]*model.RetentionPolicyForChannel, error) {
  6934  
  6935  	tries := 0
  6936  	for {
  6937  		result, err := s.RetentionPolicyStore.GetChannelPoliciesForUser(userID, offset, limit)
  6938  		if err == nil {
  6939  			return result, nil
  6940  		}
  6941  		if !isRepeatableError(err) {
  6942  			return result, err
  6943  		}
  6944  		tries++
  6945  		if tries >= 3 {
  6946  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  6947  			return result, err
  6948  		}
  6949  	}
  6950  
  6951  }
  6952  
  6953  func (s *RetryLayerRetentionPolicyStore) GetChannels(policyId string, offset int, limit int) (model.ChannelListWithTeamData, error) {
  6954  
  6955  	tries := 0
  6956  	for {
  6957  		result, err := s.RetentionPolicyStore.GetChannels(policyId, offset, limit)
  6958  		if err == nil {
  6959  			return result, nil
  6960  		}
  6961  		if !isRepeatableError(err) {
  6962  			return result, err
  6963  		}
  6964  		tries++
  6965  		if tries >= 3 {
  6966  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  6967  			return result, err
  6968  		}
  6969  	}
  6970  
  6971  }
  6972  
  6973  func (s *RetryLayerRetentionPolicyStore) GetChannelsCount(policyId string) (int64, error) {
  6974  
  6975  	tries := 0
  6976  	for {
  6977  		result, err := s.RetentionPolicyStore.GetChannelsCount(policyId)
  6978  		if err == nil {
  6979  			return result, nil
  6980  		}
  6981  		if !isRepeatableError(err) {
  6982  			return result, err
  6983  		}
  6984  		tries++
  6985  		if tries >= 3 {
  6986  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  6987  			return result, err
  6988  		}
  6989  	}
  6990  
  6991  }
  6992  
  6993  func (s *RetryLayerRetentionPolicyStore) GetCount() (int64, error) {
  6994  
  6995  	tries := 0
  6996  	for {
  6997  		result, err := s.RetentionPolicyStore.GetCount()
  6998  		if err == nil {
  6999  			return result, nil
  7000  		}
  7001  		if !isRepeatableError(err) {
  7002  			return result, err
  7003  		}
  7004  		tries++
  7005  		if tries >= 3 {
  7006  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  7007  			return result, err
  7008  		}
  7009  	}
  7010  
  7011  }
  7012  
  7013  func (s *RetryLayerRetentionPolicyStore) GetTeamPoliciesCountForUser(userID string) (int64, error) {
  7014  
  7015  	tries := 0
  7016  	for {
  7017  		result, err := s.RetentionPolicyStore.GetTeamPoliciesCountForUser(userID)
  7018  		if err == nil {
  7019  			return result, nil
  7020  		}
  7021  		if !isRepeatableError(err) {
  7022  			return result, err
  7023  		}
  7024  		tries++
  7025  		if tries >= 3 {
  7026  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  7027  			return result, err
  7028  		}
  7029  	}
  7030  
  7031  }
  7032  
  7033  func (s *RetryLayerRetentionPolicyStore) GetTeamPoliciesForUser(userID string, offset int, limit int) ([]*model.RetentionPolicyForTeam, error) {
  7034  
  7035  	tries := 0
  7036  	for {
  7037  		result, err := s.RetentionPolicyStore.GetTeamPoliciesForUser(userID, offset, limit)
  7038  		if err == nil {
  7039  			return result, nil
  7040  		}
  7041  		if !isRepeatableError(err) {
  7042  			return result, err
  7043  		}
  7044  		tries++
  7045  		if tries >= 3 {
  7046  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  7047  			return result, err
  7048  		}
  7049  	}
  7050  
  7051  }
  7052  
  7053  func (s *RetryLayerRetentionPolicyStore) GetTeams(policyId string, offset int, limit int) ([]*model.Team, error) {
  7054  
  7055  	tries := 0
  7056  	for {
  7057  		result, err := s.RetentionPolicyStore.GetTeams(policyId, offset, limit)
  7058  		if err == nil {
  7059  			return result, nil
  7060  		}
  7061  		if !isRepeatableError(err) {
  7062  			return result, err
  7063  		}
  7064  		tries++
  7065  		if tries >= 3 {
  7066  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  7067  			return result, err
  7068  		}
  7069  	}
  7070  
  7071  }
  7072  
  7073  func (s *RetryLayerRetentionPolicyStore) GetTeamsCount(policyId string) (int64, error) {
  7074  
  7075  	tries := 0
  7076  	for {
  7077  		result, err := s.RetentionPolicyStore.GetTeamsCount(policyId)
  7078  		if err == nil {
  7079  			return result, nil
  7080  		}
  7081  		if !isRepeatableError(err) {
  7082  			return result, err
  7083  		}
  7084  		tries++
  7085  		if tries >= 3 {
  7086  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  7087  			return result, err
  7088  		}
  7089  	}
  7090  
  7091  }
  7092  
  7093  func (s *RetryLayerRetentionPolicyStore) Patch(patch *model.RetentionPolicyWithTeamAndChannelIDs) (*model.RetentionPolicyWithTeamAndChannelCounts, error) {
  7094  
  7095  	tries := 0
  7096  	for {
  7097  		result, err := s.RetentionPolicyStore.Patch(patch)
  7098  		if err == nil {
  7099  			return result, nil
  7100  		}
  7101  		if !isRepeatableError(err) {
  7102  			return result, err
  7103  		}
  7104  		tries++
  7105  		if tries >= 3 {
  7106  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  7107  			return result, err
  7108  		}
  7109  	}
  7110  
  7111  }
  7112  
  7113  func (s *RetryLayerRetentionPolicyStore) RemoveChannels(policyId string, channelIds []string) error {
  7114  
  7115  	tries := 0
  7116  	for {
  7117  		err := s.RetentionPolicyStore.RemoveChannels(policyId, channelIds)
  7118  		if err == nil {
  7119  			return nil
  7120  		}
  7121  		if !isRepeatableError(err) {
  7122  			return err
  7123  		}
  7124  		tries++
  7125  		if tries >= 3 {
  7126  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  7127  			return err
  7128  		}
  7129  	}
  7130  
  7131  }
  7132  
  7133  func (s *RetryLayerRetentionPolicyStore) RemoveTeams(policyId string, teamIds []string) error {
  7134  
  7135  	tries := 0
  7136  	for {
  7137  		err := s.RetentionPolicyStore.RemoveTeams(policyId, teamIds)
  7138  		if err == nil {
  7139  			return nil
  7140  		}
  7141  		if !isRepeatableError(err) {
  7142  			return err
  7143  		}
  7144  		tries++
  7145  		if tries >= 3 {
  7146  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  7147  			return err
  7148  		}
  7149  	}
  7150  
  7151  }
  7152  
  7153  func (s *RetryLayerRetentionPolicyStore) Save(policy *model.RetentionPolicyWithTeamAndChannelIDs) (*model.RetentionPolicyWithTeamAndChannelCounts, error) {
  7154  
  7155  	tries := 0
  7156  	for {
  7157  		result, err := s.RetentionPolicyStore.Save(policy)
  7158  		if err == nil {
  7159  			return result, nil
  7160  		}
  7161  		if !isRepeatableError(err) {
  7162  			return result, err
  7163  		}
  7164  		tries++
  7165  		if tries >= 3 {
  7166  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  7167  			return result, err
  7168  		}
  7169  	}
  7170  
  7171  }
  7172  
  7173  func (s *RetryLayerRoleStore) AllChannelSchemeRoles() ([]*model.Role, error) {
  7174  
  7175  	tries := 0
  7176  	for {
  7177  		result, err := s.RoleStore.AllChannelSchemeRoles()
  7178  		if err == nil {
  7179  			return result, nil
  7180  		}
  7181  		if !isRepeatableError(err) {
  7182  			return result, err
  7183  		}
  7184  		tries++
  7185  		if tries >= 3 {
  7186  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  7187  			return result, err
  7188  		}
  7189  	}
  7190  
  7191  }
  7192  
  7193  func (s *RetryLayerRoleStore) ChannelHigherScopedPermissions(roleNames []string) (map[string]*model.RolePermissions, error) {
  7194  
  7195  	tries := 0
  7196  	for {
  7197  		result, err := s.RoleStore.ChannelHigherScopedPermissions(roleNames)
  7198  		if err == nil {
  7199  			return result, nil
  7200  		}
  7201  		if !isRepeatableError(err) {
  7202  			return result, err
  7203  		}
  7204  		tries++
  7205  		if tries >= 3 {
  7206  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  7207  			return result, err
  7208  		}
  7209  	}
  7210  
  7211  }
  7212  
  7213  func (s *RetryLayerRoleStore) ChannelRolesUnderTeamRole(roleName string) ([]*model.Role, error) {
  7214  
  7215  	tries := 0
  7216  	for {
  7217  		result, err := s.RoleStore.ChannelRolesUnderTeamRole(roleName)
  7218  		if err == nil {
  7219  			return result, nil
  7220  		}
  7221  		if !isRepeatableError(err) {
  7222  			return result, err
  7223  		}
  7224  		tries++
  7225  		if tries >= 3 {
  7226  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  7227  			return result, err
  7228  		}
  7229  	}
  7230  
  7231  }
  7232  
  7233  func (s *RetryLayerRoleStore) Delete(roleID string) (*model.Role, error) {
  7234  
  7235  	tries := 0
  7236  	for {
  7237  		result, err := s.RoleStore.Delete(roleID)
  7238  		if err == nil {
  7239  			return result, nil
  7240  		}
  7241  		if !isRepeatableError(err) {
  7242  			return result, err
  7243  		}
  7244  		tries++
  7245  		if tries >= 3 {
  7246  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  7247  			return result, err
  7248  		}
  7249  	}
  7250  
  7251  }
  7252  
  7253  func (s *RetryLayerRoleStore) Get(roleID string) (*model.Role, error) {
  7254  
  7255  	tries := 0
  7256  	for {
  7257  		result, err := s.RoleStore.Get(roleID)
  7258  		if err == nil {
  7259  			return result, nil
  7260  		}
  7261  		if !isRepeatableError(err) {
  7262  			return result, err
  7263  		}
  7264  		tries++
  7265  		if tries >= 3 {
  7266  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  7267  			return result, err
  7268  		}
  7269  	}
  7270  
  7271  }
  7272  
  7273  func (s *RetryLayerRoleStore) GetAll() ([]*model.Role, error) {
  7274  
  7275  	tries := 0
  7276  	for {
  7277  		result, err := s.RoleStore.GetAll()
  7278  		if err == nil {
  7279  			return result, nil
  7280  		}
  7281  		if !isRepeatableError(err) {
  7282  			return result, err
  7283  		}
  7284  		tries++
  7285  		if tries >= 3 {
  7286  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  7287  			return result, err
  7288  		}
  7289  	}
  7290  
  7291  }
  7292  
  7293  func (s *RetryLayerRoleStore) GetByName(ctx context.Context, name string) (*model.Role, error) {
  7294  
  7295  	tries := 0
  7296  	for {
  7297  		result, err := s.RoleStore.GetByName(ctx, name)
  7298  		if err == nil {
  7299  			return result, nil
  7300  		}
  7301  		if !isRepeatableError(err) {
  7302  			return result, err
  7303  		}
  7304  		tries++
  7305  		if tries >= 3 {
  7306  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  7307  			return result, err
  7308  		}
  7309  	}
  7310  
  7311  }
  7312  
  7313  func (s *RetryLayerRoleStore) GetByNames(names []string) ([]*model.Role, error) {
  7314  
  7315  	tries := 0
  7316  	for {
  7317  		result, err := s.RoleStore.GetByNames(names)
  7318  		if err == nil {
  7319  			return result, nil
  7320  		}
  7321  		if !isRepeatableError(err) {
  7322  			return result, err
  7323  		}
  7324  		tries++
  7325  		if tries >= 3 {
  7326  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  7327  			return result, err
  7328  		}
  7329  	}
  7330  
  7331  }
  7332  
  7333  func (s *RetryLayerRoleStore) PermanentDeleteAll() error {
  7334  
  7335  	tries := 0
  7336  	for {
  7337  		err := s.RoleStore.PermanentDeleteAll()
  7338  		if err == nil {
  7339  			return nil
  7340  		}
  7341  		if !isRepeatableError(err) {
  7342  			return err
  7343  		}
  7344  		tries++
  7345  		if tries >= 3 {
  7346  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  7347  			return err
  7348  		}
  7349  	}
  7350  
  7351  }
  7352  
  7353  func (s *RetryLayerRoleStore) Save(role *model.Role) (*model.Role, error) {
  7354  
  7355  	tries := 0
  7356  	for {
  7357  		result, err := s.RoleStore.Save(role)
  7358  		if err == nil {
  7359  			return result, nil
  7360  		}
  7361  		if !isRepeatableError(err) {
  7362  			return result, err
  7363  		}
  7364  		tries++
  7365  		if tries >= 3 {
  7366  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  7367  			return result, err
  7368  		}
  7369  	}
  7370  
  7371  }
  7372  
  7373  func (s *RetryLayerSchemeStore) CountByScope(scope string) (int64, error) {
  7374  
  7375  	tries := 0
  7376  	for {
  7377  		result, err := s.SchemeStore.CountByScope(scope)
  7378  		if err == nil {
  7379  			return result, nil
  7380  		}
  7381  		if !isRepeatableError(err) {
  7382  			return result, err
  7383  		}
  7384  		tries++
  7385  		if tries >= 3 {
  7386  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  7387  			return result, err
  7388  		}
  7389  	}
  7390  
  7391  }
  7392  
  7393  func (s *RetryLayerSchemeStore) CountWithoutPermission(scope string, permissionID string, roleScope model.RoleScope, roleType model.RoleType) (int64, error) {
  7394  
  7395  	tries := 0
  7396  	for {
  7397  		result, err := s.SchemeStore.CountWithoutPermission(scope, permissionID, roleScope, roleType)
  7398  		if err == nil {
  7399  			return result, nil
  7400  		}
  7401  		if !isRepeatableError(err) {
  7402  			return result, err
  7403  		}
  7404  		tries++
  7405  		if tries >= 3 {
  7406  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  7407  			return result, err
  7408  		}
  7409  	}
  7410  
  7411  }
  7412  
  7413  func (s *RetryLayerSchemeStore) Delete(schemeID string) (*model.Scheme, error) {
  7414  
  7415  	tries := 0
  7416  	for {
  7417  		result, err := s.SchemeStore.Delete(schemeID)
  7418  		if err == nil {
  7419  			return result, nil
  7420  		}
  7421  		if !isRepeatableError(err) {
  7422  			return result, err
  7423  		}
  7424  		tries++
  7425  		if tries >= 3 {
  7426  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  7427  			return result, err
  7428  		}
  7429  	}
  7430  
  7431  }
  7432  
  7433  func (s *RetryLayerSchemeStore) Get(schemeID string) (*model.Scheme, error) {
  7434  
  7435  	tries := 0
  7436  	for {
  7437  		result, err := s.SchemeStore.Get(schemeID)
  7438  		if err == nil {
  7439  			return result, nil
  7440  		}
  7441  		if !isRepeatableError(err) {
  7442  			return result, err
  7443  		}
  7444  		tries++
  7445  		if tries >= 3 {
  7446  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  7447  			return result, err
  7448  		}
  7449  	}
  7450  
  7451  }
  7452  
  7453  func (s *RetryLayerSchemeStore) GetAllPage(scope string, offset int, limit int) ([]*model.Scheme, error) {
  7454  
  7455  	tries := 0
  7456  	for {
  7457  		result, err := s.SchemeStore.GetAllPage(scope, offset, limit)
  7458  		if err == nil {
  7459  			return result, nil
  7460  		}
  7461  		if !isRepeatableError(err) {
  7462  			return result, err
  7463  		}
  7464  		tries++
  7465  		if tries >= 3 {
  7466  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  7467  			return result, err
  7468  		}
  7469  	}
  7470  
  7471  }
  7472  
  7473  func (s *RetryLayerSchemeStore) GetByName(schemeName string) (*model.Scheme, error) {
  7474  
  7475  	tries := 0
  7476  	for {
  7477  		result, err := s.SchemeStore.GetByName(schemeName)
  7478  		if err == nil {
  7479  			return result, nil
  7480  		}
  7481  		if !isRepeatableError(err) {
  7482  			return result, err
  7483  		}
  7484  		tries++
  7485  		if tries >= 3 {
  7486  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  7487  			return result, err
  7488  		}
  7489  	}
  7490  
  7491  }
  7492  
  7493  func (s *RetryLayerSchemeStore) PermanentDeleteAll() error {
  7494  
  7495  	tries := 0
  7496  	for {
  7497  		err := s.SchemeStore.PermanentDeleteAll()
  7498  		if err == nil {
  7499  			return nil
  7500  		}
  7501  		if !isRepeatableError(err) {
  7502  			return err
  7503  		}
  7504  		tries++
  7505  		if tries >= 3 {
  7506  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  7507  			return err
  7508  		}
  7509  	}
  7510  
  7511  }
  7512  
  7513  func (s *RetryLayerSchemeStore) Save(scheme *model.Scheme) (*model.Scheme, error) {
  7514  
  7515  	tries := 0
  7516  	for {
  7517  		result, err := s.SchemeStore.Save(scheme)
  7518  		if err == nil {
  7519  			return result, nil
  7520  		}
  7521  		if !isRepeatableError(err) {
  7522  			return result, err
  7523  		}
  7524  		tries++
  7525  		if tries >= 3 {
  7526  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  7527  			return result, err
  7528  		}
  7529  	}
  7530  
  7531  }
  7532  
  7533  func (s *RetryLayerSessionStore) AnalyticsSessionCount() (int64, error) {
  7534  
  7535  	tries := 0
  7536  	for {
  7537  		result, err := s.SessionStore.AnalyticsSessionCount()
  7538  		if err == nil {
  7539  			return result, nil
  7540  		}
  7541  		if !isRepeatableError(err) {
  7542  			return result, err
  7543  		}
  7544  		tries++
  7545  		if tries >= 3 {
  7546  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  7547  			return result, err
  7548  		}
  7549  	}
  7550  
  7551  }
  7552  
  7553  func (s *RetryLayerSessionStore) Cleanup(expiryTime int64, batchSize int64) {
  7554  
  7555  	s.SessionStore.Cleanup(expiryTime, batchSize)
  7556  
  7557  }
  7558  
  7559  func (s *RetryLayerSessionStore) Get(ctx context.Context, sessionIDOrToken string) (*model.Session, error) {
  7560  
  7561  	tries := 0
  7562  	for {
  7563  		result, err := s.SessionStore.Get(ctx, sessionIDOrToken)
  7564  		if err == nil {
  7565  			return result, nil
  7566  		}
  7567  		if !isRepeatableError(err) {
  7568  			return result, err
  7569  		}
  7570  		tries++
  7571  		if tries >= 3 {
  7572  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  7573  			return result, err
  7574  		}
  7575  	}
  7576  
  7577  }
  7578  
  7579  func (s *RetryLayerSessionStore) GetSessions(userID string) ([]*model.Session, error) {
  7580  
  7581  	tries := 0
  7582  	for {
  7583  		result, err := s.SessionStore.GetSessions(userID)
  7584  		if err == nil {
  7585  			return result, nil
  7586  		}
  7587  		if !isRepeatableError(err) {
  7588  			return result, err
  7589  		}
  7590  		tries++
  7591  		if tries >= 3 {
  7592  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  7593  			return result, err
  7594  		}
  7595  	}
  7596  
  7597  }
  7598  
  7599  func (s *RetryLayerSessionStore) GetSessionsExpired(thresholdMillis int64, mobileOnly bool, unnotifiedOnly bool) ([]*model.Session, error) {
  7600  
  7601  	tries := 0
  7602  	for {
  7603  		result, err := s.SessionStore.GetSessionsExpired(thresholdMillis, mobileOnly, unnotifiedOnly)
  7604  		if err == nil {
  7605  			return result, nil
  7606  		}
  7607  		if !isRepeatableError(err) {
  7608  			return result, err
  7609  		}
  7610  		tries++
  7611  		if tries >= 3 {
  7612  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  7613  			return result, err
  7614  		}
  7615  	}
  7616  
  7617  }
  7618  
  7619  func (s *RetryLayerSessionStore) GetSessionsWithActiveDeviceIds(userID string) ([]*model.Session, error) {
  7620  
  7621  	tries := 0
  7622  	for {
  7623  		result, err := s.SessionStore.GetSessionsWithActiveDeviceIds(userID)
  7624  		if err == nil {
  7625  			return result, nil
  7626  		}
  7627  		if !isRepeatableError(err) {
  7628  			return result, err
  7629  		}
  7630  		tries++
  7631  		if tries >= 3 {
  7632  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  7633  			return result, err
  7634  		}
  7635  	}
  7636  
  7637  }
  7638  
  7639  func (s *RetryLayerSessionStore) PermanentDeleteSessionsByUser(teamID string) error {
  7640  
  7641  	tries := 0
  7642  	for {
  7643  		err := s.SessionStore.PermanentDeleteSessionsByUser(teamID)
  7644  		if err == nil {
  7645  			return nil
  7646  		}
  7647  		if !isRepeatableError(err) {
  7648  			return err
  7649  		}
  7650  		tries++
  7651  		if tries >= 3 {
  7652  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  7653  			return err
  7654  		}
  7655  	}
  7656  
  7657  }
  7658  
  7659  func (s *RetryLayerSessionStore) Remove(sessionIDOrToken string) error {
  7660  
  7661  	tries := 0
  7662  	for {
  7663  		err := s.SessionStore.Remove(sessionIDOrToken)
  7664  		if err == nil {
  7665  			return nil
  7666  		}
  7667  		if !isRepeatableError(err) {
  7668  			return err
  7669  		}
  7670  		tries++
  7671  		if tries >= 3 {
  7672  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  7673  			return err
  7674  		}
  7675  	}
  7676  
  7677  }
  7678  
  7679  func (s *RetryLayerSessionStore) RemoveAllSessions() error {
  7680  
  7681  	tries := 0
  7682  	for {
  7683  		err := s.SessionStore.RemoveAllSessions()
  7684  		if err == nil {
  7685  			return nil
  7686  		}
  7687  		if !isRepeatableError(err) {
  7688  			return err
  7689  		}
  7690  		tries++
  7691  		if tries >= 3 {
  7692  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  7693  			return err
  7694  		}
  7695  	}
  7696  
  7697  }
  7698  
  7699  func (s *RetryLayerSessionStore) Save(session *model.Session) (*model.Session, error) {
  7700  
  7701  	tries := 0
  7702  	for {
  7703  		result, err := s.SessionStore.Save(session)
  7704  		if err == nil {
  7705  			return result, nil
  7706  		}
  7707  		if !isRepeatableError(err) {
  7708  			return result, err
  7709  		}
  7710  		tries++
  7711  		if tries >= 3 {
  7712  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  7713  			return result, err
  7714  		}
  7715  	}
  7716  
  7717  }
  7718  
  7719  func (s *RetryLayerSessionStore) UpdateDeviceId(id string, deviceID string, expiresAt int64) (string, error) {
  7720  
  7721  	tries := 0
  7722  	for {
  7723  		result, err := s.SessionStore.UpdateDeviceId(id, deviceID, expiresAt)
  7724  		if err == nil {
  7725  			return result, nil
  7726  		}
  7727  		if !isRepeatableError(err) {
  7728  			return result, err
  7729  		}
  7730  		tries++
  7731  		if tries >= 3 {
  7732  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  7733  			return result, err
  7734  		}
  7735  	}
  7736  
  7737  }
  7738  
  7739  func (s *RetryLayerSessionStore) UpdateExpiredNotify(sessionid string, notified bool) error {
  7740  
  7741  	tries := 0
  7742  	for {
  7743  		err := s.SessionStore.UpdateExpiredNotify(sessionid, notified)
  7744  		if err == nil {
  7745  			return nil
  7746  		}
  7747  		if !isRepeatableError(err) {
  7748  			return err
  7749  		}
  7750  		tries++
  7751  		if tries >= 3 {
  7752  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  7753  			return err
  7754  		}
  7755  	}
  7756  
  7757  }
  7758  
  7759  func (s *RetryLayerSessionStore) UpdateExpiresAt(sessionID string, time int64) error {
  7760  
  7761  	tries := 0
  7762  	for {
  7763  		err := s.SessionStore.UpdateExpiresAt(sessionID, time)
  7764  		if err == nil {
  7765  			return nil
  7766  		}
  7767  		if !isRepeatableError(err) {
  7768  			return err
  7769  		}
  7770  		tries++
  7771  		if tries >= 3 {
  7772  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  7773  			return err
  7774  		}
  7775  	}
  7776  
  7777  }
  7778  
  7779  func (s *RetryLayerSessionStore) UpdateLastActivityAt(sessionID string, time int64) error {
  7780  
  7781  	tries := 0
  7782  	for {
  7783  		err := s.SessionStore.UpdateLastActivityAt(sessionID, time)
  7784  		if err == nil {
  7785  			return nil
  7786  		}
  7787  		if !isRepeatableError(err) {
  7788  			return err
  7789  		}
  7790  		tries++
  7791  		if tries >= 3 {
  7792  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  7793  			return err
  7794  		}
  7795  	}
  7796  
  7797  }
  7798  
  7799  func (s *RetryLayerSessionStore) UpdateProps(session *model.Session) error {
  7800  
  7801  	tries := 0
  7802  	for {
  7803  		err := s.SessionStore.UpdateProps(session)
  7804  		if err == nil {
  7805  			return nil
  7806  		}
  7807  		if !isRepeatableError(err) {
  7808  			return err
  7809  		}
  7810  		tries++
  7811  		if tries >= 3 {
  7812  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  7813  			return err
  7814  		}
  7815  	}
  7816  
  7817  }
  7818  
  7819  func (s *RetryLayerSessionStore) UpdateRoles(userID string, roles string) (string, error) {
  7820  
  7821  	tries := 0
  7822  	for {
  7823  		result, err := s.SessionStore.UpdateRoles(userID, roles)
  7824  		if err == nil {
  7825  			return result, nil
  7826  		}
  7827  		if !isRepeatableError(err) {
  7828  			return result, err
  7829  		}
  7830  		tries++
  7831  		if tries >= 3 {
  7832  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  7833  			return result, err
  7834  		}
  7835  	}
  7836  
  7837  }
  7838  
  7839  func (s *RetryLayerSharedChannelStore) Delete(channelId string) (bool, error) {
  7840  
  7841  	tries := 0
  7842  	for {
  7843  		result, err := s.SharedChannelStore.Delete(channelId)
  7844  		if err == nil {
  7845  			return result, nil
  7846  		}
  7847  		if !isRepeatableError(err) {
  7848  			return result, err
  7849  		}
  7850  		tries++
  7851  		if tries >= 3 {
  7852  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  7853  			return result, err
  7854  		}
  7855  	}
  7856  
  7857  }
  7858  
  7859  func (s *RetryLayerSharedChannelStore) DeleteRemote(remoteId string) (bool, error) {
  7860  
  7861  	tries := 0
  7862  	for {
  7863  		result, err := s.SharedChannelStore.DeleteRemote(remoteId)
  7864  		if err == nil {
  7865  			return result, nil
  7866  		}
  7867  		if !isRepeatableError(err) {
  7868  			return result, err
  7869  		}
  7870  		tries++
  7871  		if tries >= 3 {
  7872  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  7873  			return result, err
  7874  		}
  7875  	}
  7876  
  7877  }
  7878  
  7879  func (s *RetryLayerSharedChannelStore) Get(channelId string) (*model.SharedChannel, error) {
  7880  
  7881  	tries := 0
  7882  	for {
  7883  		result, err := s.SharedChannelStore.Get(channelId)
  7884  		if err == nil {
  7885  			return result, nil
  7886  		}
  7887  		if !isRepeatableError(err) {
  7888  			return result, err
  7889  		}
  7890  		tries++
  7891  		if tries >= 3 {
  7892  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  7893  			return result, err
  7894  		}
  7895  	}
  7896  
  7897  }
  7898  
  7899  func (s *RetryLayerSharedChannelStore) GetAll(offset int, limit int, opts model.SharedChannelFilterOpts) ([]*model.SharedChannel, error) {
  7900  
  7901  	tries := 0
  7902  	for {
  7903  		result, err := s.SharedChannelStore.GetAll(offset, limit, opts)
  7904  		if err == nil {
  7905  			return result, nil
  7906  		}
  7907  		if !isRepeatableError(err) {
  7908  			return result, err
  7909  		}
  7910  		tries++
  7911  		if tries >= 3 {
  7912  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  7913  			return result, err
  7914  		}
  7915  	}
  7916  
  7917  }
  7918  
  7919  func (s *RetryLayerSharedChannelStore) GetAllCount(opts model.SharedChannelFilterOpts) (int64, error) {
  7920  
  7921  	tries := 0
  7922  	for {
  7923  		result, err := s.SharedChannelStore.GetAllCount(opts)
  7924  		if err == nil {
  7925  			return result, nil
  7926  		}
  7927  		if !isRepeatableError(err) {
  7928  			return result, err
  7929  		}
  7930  		tries++
  7931  		if tries >= 3 {
  7932  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  7933  			return result, err
  7934  		}
  7935  	}
  7936  
  7937  }
  7938  
  7939  func (s *RetryLayerSharedChannelStore) GetAttachment(fileId string, remoteId string) (*model.SharedChannelAttachment, error) {
  7940  
  7941  	tries := 0
  7942  	for {
  7943  		result, err := s.SharedChannelStore.GetAttachment(fileId, remoteId)
  7944  		if err == nil {
  7945  			return result, nil
  7946  		}
  7947  		if !isRepeatableError(err) {
  7948  			return result, err
  7949  		}
  7950  		tries++
  7951  		if tries >= 3 {
  7952  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  7953  			return result, err
  7954  		}
  7955  	}
  7956  
  7957  }
  7958  
  7959  func (s *RetryLayerSharedChannelStore) GetRemote(id string) (*model.SharedChannelRemote, error) {
  7960  
  7961  	tries := 0
  7962  	for {
  7963  		result, err := s.SharedChannelStore.GetRemote(id)
  7964  		if err == nil {
  7965  			return result, nil
  7966  		}
  7967  		if !isRepeatableError(err) {
  7968  			return result, err
  7969  		}
  7970  		tries++
  7971  		if tries >= 3 {
  7972  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  7973  			return result, err
  7974  		}
  7975  	}
  7976  
  7977  }
  7978  
  7979  func (s *RetryLayerSharedChannelStore) GetRemoteByIds(channelId string, remoteId string) (*model.SharedChannelRemote, error) {
  7980  
  7981  	tries := 0
  7982  	for {
  7983  		result, err := s.SharedChannelStore.GetRemoteByIds(channelId, remoteId)
  7984  		if err == nil {
  7985  			return result, nil
  7986  		}
  7987  		if !isRepeatableError(err) {
  7988  			return result, err
  7989  		}
  7990  		tries++
  7991  		if tries >= 3 {
  7992  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  7993  			return result, err
  7994  		}
  7995  	}
  7996  
  7997  }
  7998  
  7999  func (s *RetryLayerSharedChannelStore) GetRemoteForUser(remoteId string, userId string) (*model.RemoteCluster, error) {
  8000  
  8001  	tries := 0
  8002  	for {
  8003  		result, err := s.SharedChannelStore.GetRemoteForUser(remoteId, userId)
  8004  		if err == nil {
  8005  			return result, nil
  8006  		}
  8007  		if !isRepeatableError(err) {
  8008  			return result, err
  8009  		}
  8010  		tries++
  8011  		if tries >= 3 {
  8012  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  8013  			return result, err
  8014  		}
  8015  	}
  8016  
  8017  }
  8018  
  8019  func (s *RetryLayerSharedChannelStore) GetRemotes(opts model.SharedChannelRemoteFilterOpts) ([]*model.SharedChannelRemote, error) {
  8020  
  8021  	tries := 0
  8022  	for {
  8023  		result, err := s.SharedChannelStore.GetRemotes(opts)
  8024  		if err == nil {
  8025  			return result, nil
  8026  		}
  8027  		if !isRepeatableError(err) {
  8028  			return result, err
  8029  		}
  8030  		tries++
  8031  		if tries >= 3 {
  8032  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  8033  			return result, err
  8034  		}
  8035  	}
  8036  
  8037  }
  8038  
  8039  func (s *RetryLayerSharedChannelStore) GetRemotesStatus(channelId string) ([]*model.SharedChannelRemoteStatus, error) {
  8040  
  8041  	tries := 0
  8042  	for {
  8043  		result, err := s.SharedChannelStore.GetRemotesStatus(channelId)
  8044  		if err == nil {
  8045  			return result, nil
  8046  		}
  8047  		if !isRepeatableError(err) {
  8048  			return result, err
  8049  		}
  8050  		tries++
  8051  		if tries >= 3 {
  8052  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  8053  			return result, err
  8054  		}
  8055  	}
  8056  
  8057  }
  8058  
  8059  func (s *RetryLayerSharedChannelStore) GetSingleUser(userID string, channelID string, remoteID string) (*model.SharedChannelUser, error) {
  8060  
  8061  	tries := 0
  8062  	for {
  8063  		result, err := s.SharedChannelStore.GetSingleUser(userID, channelID, remoteID)
  8064  		if err == nil {
  8065  			return result, nil
  8066  		}
  8067  		if !isRepeatableError(err) {
  8068  			return result, err
  8069  		}
  8070  		tries++
  8071  		if tries >= 3 {
  8072  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  8073  			return result, err
  8074  		}
  8075  	}
  8076  
  8077  }
  8078  
  8079  func (s *RetryLayerSharedChannelStore) GetUsersForSync(filter model.GetUsersForSyncFilter) ([]*model.User, error) {
  8080  
  8081  	tries := 0
  8082  	for {
  8083  		result, err := s.SharedChannelStore.GetUsersForSync(filter)
  8084  		if err == nil {
  8085  			return result, nil
  8086  		}
  8087  		if !isRepeatableError(err) {
  8088  			return result, err
  8089  		}
  8090  		tries++
  8091  		if tries >= 3 {
  8092  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  8093  			return result, err
  8094  		}
  8095  	}
  8096  
  8097  }
  8098  
  8099  func (s *RetryLayerSharedChannelStore) GetUsersForUser(userID string) ([]*model.SharedChannelUser, error) {
  8100  
  8101  	tries := 0
  8102  	for {
  8103  		result, err := s.SharedChannelStore.GetUsersForUser(userID)
  8104  		if err == nil {
  8105  			return result, nil
  8106  		}
  8107  		if !isRepeatableError(err) {
  8108  			return result, err
  8109  		}
  8110  		tries++
  8111  		if tries >= 3 {
  8112  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  8113  			return result, err
  8114  		}
  8115  	}
  8116  
  8117  }
  8118  
  8119  func (s *RetryLayerSharedChannelStore) HasChannel(channelID string) (bool, error) {
  8120  
  8121  	tries := 0
  8122  	for {
  8123  		result, err := s.SharedChannelStore.HasChannel(channelID)
  8124  		if err == nil {
  8125  			return result, nil
  8126  		}
  8127  		if !isRepeatableError(err) {
  8128  			return result, err
  8129  		}
  8130  		tries++
  8131  		if tries >= 3 {
  8132  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  8133  			return result, err
  8134  		}
  8135  	}
  8136  
  8137  }
  8138  
  8139  func (s *RetryLayerSharedChannelStore) HasRemote(channelID string, remoteId string) (bool, error) {
  8140  
  8141  	tries := 0
  8142  	for {
  8143  		result, err := s.SharedChannelStore.HasRemote(channelID, remoteId)
  8144  		if err == nil {
  8145  			return result, nil
  8146  		}
  8147  		if !isRepeatableError(err) {
  8148  			return result, err
  8149  		}
  8150  		tries++
  8151  		if tries >= 3 {
  8152  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  8153  			return result, err
  8154  		}
  8155  	}
  8156  
  8157  }
  8158  
  8159  func (s *RetryLayerSharedChannelStore) Save(sc *model.SharedChannel) (*model.SharedChannel, error) {
  8160  
  8161  	tries := 0
  8162  	for {
  8163  		result, err := s.SharedChannelStore.Save(sc)
  8164  		if err == nil {
  8165  			return result, nil
  8166  		}
  8167  		if !isRepeatableError(err) {
  8168  			return result, err
  8169  		}
  8170  		tries++
  8171  		if tries >= 3 {
  8172  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  8173  			return result, err
  8174  		}
  8175  	}
  8176  
  8177  }
  8178  
  8179  func (s *RetryLayerSharedChannelStore) SaveAttachment(remote *model.SharedChannelAttachment) (*model.SharedChannelAttachment, error) {
  8180  
  8181  	tries := 0
  8182  	for {
  8183  		result, err := s.SharedChannelStore.SaveAttachment(remote)
  8184  		if err == nil {
  8185  			return result, nil
  8186  		}
  8187  		if !isRepeatableError(err) {
  8188  			return result, err
  8189  		}
  8190  		tries++
  8191  		if tries >= 3 {
  8192  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  8193  			return result, err
  8194  		}
  8195  	}
  8196  
  8197  }
  8198  
  8199  func (s *RetryLayerSharedChannelStore) SaveRemote(remote *model.SharedChannelRemote) (*model.SharedChannelRemote, error) {
  8200  
  8201  	tries := 0
  8202  	for {
  8203  		result, err := s.SharedChannelStore.SaveRemote(remote)
  8204  		if err == nil {
  8205  			return result, nil
  8206  		}
  8207  		if !isRepeatableError(err) {
  8208  			return result, err
  8209  		}
  8210  		tries++
  8211  		if tries >= 3 {
  8212  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  8213  			return result, err
  8214  		}
  8215  	}
  8216  
  8217  }
  8218  
  8219  func (s *RetryLayerSharedChannelStore) SaveUser(remote *model.SharedChannelUser) (*model.SharedChannelUser, error) {
  8220  
  8221  	tries := 0
  8222  	for {
  8223  		result, err := s.SharedChannelStore.SaveUser(remote)
  8224  		if err == nil {
  8225  			return result, nil
  8226  		}
  8227  		if !isRepeatableError(err) {
  8228  			return result, err
  8229  		}
  8230  		tries++
  8231  		if tries >= 3 {
  8232  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  8233  			return result, err
  8234  		}
  8235  	}
  8236  
  8237  }
  8238  
  8239  func (s *RetryLayerSharedChannelStore) Update(sc *model.SharedChannel) (*model.SharedChannel, error) {
  8240  
  8241  	tries := 0
  8242  	for {
  8243  		result, err := s.SharedChannelStore.Update(sc)
  8244  		if err == nil {
  8245  			return result, nil
  8246  		}
  8247  		if !isRepeatableError(err) {
  8248  			return result, err
  8249  		}
  8250  		tries++
  8251  		if tries >= 3 {
  8252  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  8253  			return result, err
  8254  		}
  8255  	}
  8256  
  8257  }
  8258  
  8259  func (s *RetryLayerSharedChannelStore) UpdateAttachmentLastSyncAt(id string, syncTime int64) error {
  8260  
  8261  	tries := 0
  8262  	for {
  8263  		err := s.SharedChannelStore.UpdateAttachmentLastSyncAt(id, syncTime)
  8264  		if err == nil {
  8265  			return nil
  8266  		}
  8267  		if !isRepeatableError(err) {
  8268  			return err
  8269  		}
  8270  		tries++
  8271  		if tries >= 3 {
  8272  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  8273  			return err
  8274  		}
  8275  	}
  8276  
  8277  }
  8278  
  8279  func (s *RetryLayerSharedChannelStore) UpdateRemote(remote *model.SharedChannelRemote) (*model.SharedChannelRemote, error) {
  8280  
  8281  	tries := 0
  8282  	for {
  8283  		result, err := s.SharedChannelStore.UpdateRemote(remote)
  8284  		if err == nil {
  8285  			return result, nil
  8286  		}
  8287  		if !isRepeatableError(err) {
  8288  			return result, err
  8289  		}
  8290  		tries++
  8291  		if tries >= 3 {
  8292  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  8293  			return result, err
  8294  		}
  8295  	}
  8296  
  8297  }
  8298  
  8299  func (s *RetryLayerSharedChannelStore) UpdateRemoteCursor(id string, cursor model.GetPostsSinceForSyncCursor) error {
  8300  
  8301  	tries := 0
  8302  	for {
  8303  		err := s.SharedChannelStore.UpdateRemoteCursor(id, cursor)
  8304  		if err == nil {
  8305  			return nil
  8306  		}
  8307  		if !isRepeatableError(err) {
  8308  			return err
  8309  		}
  8310  		tries++
  8311  		if tries >= 3 {
  8312  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  8313  			return err
  8314  		}
  8315  	}
  8316  
  8317  }
  8318  
  8319  func (s *RetryLayerSharedChannelStore) UpdateUserLastSyncAt(userID string, channelID string, remoteID string) error {
  8320  
  8321  	tries := 0
  8322  	for {
  8323  		err := s.SharedChannelStore.UpdateUserLastSyncAt(userID, channelID, remoteID)
  8324  		if err == nil {
  8325  			return nil
  8326  		}
  8327  		if !isRepeatableError(err) {
  8328  			return err
  8329  		}
  8330  		tries++
  8331  		if tries >= 3 {
  8332  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  8333  			return err
  8334  		}
  8335  	}
  8336  
  8337  }
  8338  
  8339  func (s *RetryLayerSharedChannelStore) UpsertAttachment(remote *model.SharedChannelAttachment) (string, error) {
  8340  
  8341  	tries := 0
  8342  	for {
  8343  		result, err := s.SharedChannelStore.UpsertAttachment(remote)
  8344  		if err == nil {
  8345  			return result, nil
  8346  		}
  8347  		if !isRepeatableError(err) {
  8348  			return result, err
  8349  		}
  8350  		tries++
  8351  		if tries >= 3 {
  8352  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  8353  			return result, err
  8354  		}
  8355  	}
  8356  
  8357  }
  8358  
  8359  func (s *RetryLayerStatusStore) Get(userID string) (*model.Status, error) {
  8360  
  8361  	tries := 0
  8362  	for {
  8363  		result, err := s.StatusStore.Get(userID)
  8364  		if err == nil {
  8365  			return result, nil
  8366  		}
  8367  		if !isRepeatableError(err) {
  8368  			return result, err
  8369  		}
  8370  		tries++
  8371  		if tries >= 3 {
  8372  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  8373  			return result, err
  8374  		}
  8375  	}
  8376  
  8377  }
  8378  
  8379  func (s *RetryLayerStatusStore) GetByIds(userIds []string) ([]*model.Status, error) {
  8380  
  8381  	tries := 0
  8382  	for {
  8383  		result, err := s.StatusStore.GetByIds(userIds)
  8384  		if err == nil {
  8385  			return result, nil
  8386  		}
  8387  		if !isRepeatableError(err) {
  8388  			return result, err
  8389  		}
  8390  		tries++
  8391  		if tries >= 3 {
  8392  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  8393  			return result, err
  8394  		}
  8395  	}
  8396  
  8397  }
  8398  
  8399  func (s *RetryLayerStatusStore) GetTotalActiveUsersCount() (int64, error) {
  8400  
  8401  	tries := 0
  8402  	for {
  8403  		result, err := s.StatusStore.GetTotalActiveUsersCount()
  8404  		if err == nil {
  8405  			return result, nil
  8406  		}
  8407  		if !isRepeatableError(err) {
  8408  			return result, err
  8409  		}
  8410  		tries++
  8411  		if tries >= 3 {
  8412  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  8413  			return result, err
  8414  		}
  8415  	}
  8416  
  8417  }
  8418  
  8419  func (s *RetryLayerStatusStore) ResetAll() error {
  8420  
  8421  	tries := 0
  8422  	for {
  8423  		err := s.StatusStore.ResetAll()
  8424  		if err == nil {
  8425  			return nil
  8426  		}
  8427  		if !isRepeatableError(err) {
  8428  			return err
  8429  		}
  8430  		tries++
  8431  		if tries >= 3 {
  8432  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  8433  			return err
  8434  		}
  8435  	}
  8436  
  8437  }
  8438  
  8439  func (s *RetryLayerStatusStore) SaveOrUpdate(status *model.Status) error {
  8440  
  8441  	tries := 0
  8442  	for {
  8443  		err := s.StatusStore.SaveOrUpdate(status)
  8444  		if err == nil {
  8445  			return nil
  8446  		}
  8447  		if !isRepeatableError(err) {
  8448  			return err
  8449  		}
  8450  		tries++
  8451  		if tries >= 3 {
  8452  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  8453  			return err
  8454  		}
  8455  	}
  8456  
  8457  }
  8458  
  8459  func (s *RetryLayerStatusStore) UpdateExpiredDNDStatuses() ([]*model.Status, error) {
  8460  
  8461  	tries := 0
  8462  	for {
  8463  		result, err := s.StatusStore.UpdateExpiredDNDStatuses()
  8464  		if err == nil {
  8465  			return result, nil
  8466  		}
  8467  		if !isRepeatableError(err) {
  8468  			return result, err
  8469  		}
  8470  		tries++
  8471  		if tries >= 3 {
  8472  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  8473  			return result, err
  8474  		}
  8475  	}
  8476  
  8477  }
  8478  
  8479  func (s *RetryLayerStatusStore) UpdateLastActivityAt(userID string, lastActivityAt int64) error {
  8480  
  8481  	tries := 0
  8482  	for {
  8483  		err := s.StatusStore.UpdateLastActivityAt(userID, lastActivityAt)
  8484  		if err == nil {
  8485  			return nil
  8486  		}
  8487  		if !isRepeatableError(err) {
  8488  			return err
  8489  		}
  8490  		tries++
  8491  		if tries >= 3 {
  8492  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  8493  			return err
  8494  		}
  8495  	}
  8496  
  8497  }
  8498  
  8499  func (s *RetryLayerSystemStore) Get() (model.StringMap, error) {
  8500  
  8501  	tries := 0
  8502  	for {
  8503  		result, err := s.SystemStore.Get()
  8504  		if err == nil {
  8505  			return result, nil
  8506  		}
  8507  		if !isRepeatableError(err) {
  8508  			return result, err
  8509  		}
  8510  		tries++
  8511  		if tries >= 3 {
  8512  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  8513  			return result, err
  8514  		}
  8515  	}
  8516  
  8517  }
  8518  
  8519  func (s *RetryLayerSystemStore) GetByName(name string) (*model.System, error) {
  8520  
  8521  	tries := 0
  8522  	for {
  8523  		result, err := s.SystemStore.GetByName(name)
  8524  		if err == nil {
  8525  			return result, nil
  8526  		}
  8527  		if !isRepeatableError(err) {
  8528  			return result, err
  8529  		}
  8530  		tries++
  8531  		if tries >= 3 {
  8532  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  8533  			return result, err
  8534  		}
  8535  	}
  8536  
  8537  }
  8538  
  8539  func (s *RetryLayerSystemStore) InsertIfExists(system *model.System) (*model.System, error) {
  8540  
  8541  	tries := 0
  8542  	for {
  8543  		result, err := s.SystemStore.InsertIfExists(system)
  8544  		if err == nil {
  8545  			return result, nil
  8546  		}
  8547  		if !isRepeatableError(err) {
  8548  			return result, err
  8549  		}
  8550  		tries++
  8551  		if tries >= 3 {
  8552  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  8553  			return result, err
  8554  		}
  8555  	}
  8556  
  8557  }
  8558  
  8559  func (s *RetryLayerSystemStore) PermanentDeleteByName(name string) (*model.System, error) {
  8560  
  8561  	tries := 0
  8562  	for {
  8563  		result, err := s.SystemStore.PermanentDeleteByName(name)
  8564  		if err == nil {
  8565  			return result, nil
  8566  		}
  8567  		if !isRepeatableError(err) {
  8568  			return result, err
  8569  		}
  8570  		tries++
  8571  		if tries >= 3 {
  8572  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  8573  			return result, err
  8574  		}
  8575  	}
  8576  
  8577  }
  8578  
  8579  func (s *RetryLayerSystemStore) Save(system *model.System) error {
  8580  
  8581  	tries := 0
  8582  	for {
  8583  		err := s.SystemStore.Save(system)
  8584  		if err == nil {
  8585  			return nil
  8586  		}
  8587  		if !isRepeatableError(err) {
  8588  			return err
  8589  		}
  8590  		tries++
  8591  		if tries >= 3 {
  8592  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  8593  			return err
  8594  		}
  8595  	}
  8596  
  8597  }
  8598  
  8599  func (s *RetryLayerSystemStore) SaveOrUpdate(system *model.System) error {
  8600  
  8601  	tries := 0
  8602  	for {
  8603  		err := s.SystemStore.SaveOrUpdate(system)
  8604  		if err == nil {
  8605  			return nil
  8606  		}
  8607  		if !isRepeatableError(err) {
  8608  			return err
  8609  		}
  8610  		tries++
  8611  		if tries >= 3 {
  8612  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  8613  			return err
  8614  		}
  8615  	}
  8616  
  8617  }
  8618  
  8619  func (s *RetryLayerSystemStore) SaveOrUpdateWithWarnMetricHandling(system *model.System) error {
  8620  
  8621  	tries := 0
  8622  	for {
  8623  		err := s.SystemStore.SaveOrUpdateWithWarnMetricHandling(system)
  8624  		if err == nil {
  8625  			return nil
  8626  		}
  8627  		if !isRepeatableError(err) {
  8628  			return err
  8629  		}
  8630  		tries++
  8631  		if tries >= 3 {
  8632  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  8633  			return err
  8634  		}
  8635  	}
  8636  
  8637  }
  8638  
  8639  func (s *RetryLayerSystemStore) Update(system *model.System) error {
  8640  
  8641  	tries := 0
  8642  	for {
  8643  		err := s.SystemStore.Update(system)
  8644  		if err == nil {
  8645  			return nil
  8646  		}
  8647  		if !isRepeatableError(err) {
  8648  			return err
  8649  		}
  8650  		tries++
  8651  		if tries >= 3 {
  8652  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  8653  			return err
  8654  		}
  8655  	}
  8656  
  8657  }
  8658  
  8659  func (s *RetryLayerTeamStore) AnalyticsGetTeamCountForScheme(schemeID string) (int64, error) {
  8660  
  8661  	tries := 0
  8662  	for {
  8663  		result, err := s.TeamStore.AnalyticsGetTeamCountForScheme(schemeID)
  8664  		if err == nil {
  8665  			return result, nil
  8666  		}
  8667  		if !isRepeatableError(err) {
  8668  			return result, err
  8669  		}
  8670  		tries++
  8671  		if tries >= 3 {
  8672  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  8673  			return result, err
  8674  		}
  8675  	}
  8676  
  8677  }
  8678  
  8679  func (s *RetryLayerTeamStore) AnalyticsTeamCount(opts *model.TeamSearch) (int64, error) {
  8680  
  8681  	tries := 0
  8682  	for {
  8683  		result, err := s.TeamStore.AnalyticsTeamCount(opts)
  8684  		if err == nil {
  8685  			return result, nil
  8686  		}
  8687  		if !isRepeatableError(err) {
  8688  			return result, err
  8689  		}
  8690  		tries++
  8691  		if tries >= 3 {
  8692  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  8693  			return result, err
  8694  		}
  8695  	}
  8696  
  8697  }
  8698  
  8699  func (s *RetryLayerTeamStore) ClearAllCustomRoleAssignments() error {
  8700  
  8701  	tries := 0
  8702  	for {
  8703  		err := s.TeamStore.ClearAllCustomRoleAssignments()
  8704  		if err == nil {
  8705  			return nil
  8706  		}
  8707  		if !isRepeatableError(err) {
  8708  			return err
  8709  		}
  8710  		tries++
  8711  		if tries >= 3 {
  8712  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  8713  			return err
  8714  		}
  8715  	}
  8716  
  8717  }
  8718  
  8719  func (s *RetryLayerTeamStore) ClearCaches() {
  8720  
  8721  	s.TeamStore.ClearCaches()
  8722  
  8723  }
  8724  
  8725  func (s *RetryLayerTeamStore) Get(id string) (*model.Team, error) {
  8726  
  8727  	tries := 0
  8728  	for {
  8729  		result, err := s.TeamStore.Get(id)
  8730  		if err == nil {
  8731  			return result, nil
  8732  		}
  8733  		if !isRepeatableError(err) {
  8734  			return result, err
  8735  		}
  8736  		tries++
  8737  		if tries >= 3 {
  8738  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  8739  			return result, err
  8740  		}
  8741  	}
  8742  
  8743  }
  8744  
  8745  func (s *RetryLayerTeamStore) GetActiveMemberCount(teamID string, restrictions *model.ViewUsersRestrictions) (int64, error) {
  8746  
  8747  	tries := 0
  8748  	for {
  8749  		result, err := s.TeamStore.GetActiveMemberCount(teamID, restrictions)
  8750  		if err == nil {
  8751  			return result, nil
  8752  		}
  8753  		if !isRepeatableError(err) {
  8754  			return result, err
  8755  		}
  8756  		tries++
  8757  		if tries >= 3 {
  8758  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  8759  			return result, err
  8760  		}
  8761  	}
  8762  
  8763  }
  8764  
  8765  func (s *RetryLayerTeamStore) GetAll() ([]*model.Team, error) {
  8766  
  8767  	tries := 0
  8768  	for {
  8769  		result, err := s.TeamStore.GetAll()
  8770  		if err == nil {
  8771  			return result, nil
  8772  		}
  8773  		if !isRepeatableError(err) {
  8774  			return result, err
  8775  		}
  8776  		tries++
  8777  		if tries >= 3 {
  8778  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  8779  			return result, err
  8780  		}
  8781  	}
  8782  
  8783  }
  8784  
  8785  func (s *RetryLayerTeamStore) GetAllForExportAfter(limit int, afterID string) ([]*model.TeamForExport, error) {
  8786  
  8787  	tries := 0
  8788  	for {
  8789  		result, err := s.TeamStore.GetAllForExportAfter(limit, afterID)
  8790  		if err == nil {
  8791  			return result, nil
  8792  		}
  8793  		if !isRepeatableError(err) {
  8794  			return result, err
  8795  		}
  8796  		tries++
  8797  		if tries >= 3 {
  8798  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  8799  			return result, err
  8800  		}
  8801  	}
  8802  
  8803  }
  8804  
  8805  func (s *RetryLayerTeamStore) GetAllPage(offset int, limit int, opts *model.TeamSearch) ([]*model.Team, error) {
  8806  
  8807  	tries := 0
  8808  	for {
  8809  		result, err := s.TeamStore.GetAllPage(offset, limit, opts)
  8810  		if err == nil {
  8811  			return result, nil
  8812  		}
  8813  		if !isRepeatableError(err) {
  8814  			return result, err
  8815  		}
  8816  		tries++
  8817  		if tries >= 3 {
  8818  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  8819  			return result, err
  8820  		}
  8821  	}
  8822  
  8823  }
  8824  
  8825  func (s *RetryLayerTeamStore) GetAllPrivateTeamListing() ([]*model.Team, error) {
  8826  
  8827  	tries := 0
  8828  	for {
  8829  		result, err := s.TeamStore.GetAllPrivateTeamListing()
  8830  		if err == nil {
  8831  			return result, nil
  8832  		}
  8833  		if !isRepeatableError(err) {
  8834  			return result, err
  8835  		}
  8836  		tries++
  8837  		if tries >= 3 {
  8838  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  8839  			return result, err
  8840  		}
  8841  	}
  8842  
  8843  }
  8844  
  8845  func (s *RetryLayerTeamStore) GetAllTeamListing() ([]*model.Team, error) {
  8846  
  8847  	tries := 0
  8848  	for {
  8849  		result, err := s.TeamStore.GetAllTeamListing()
  8850  		if err == nil {
  8851  			return result, nil
  8852  		}
  8853  		if !isRepeatableError(err) {
  8854  			return result, err
  8855  		}
  8856  		tries++
  8857  		if tries >= 3 {
  8858  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  8859  			return result, err
  8860  		}
  8861  	}
  8862  
  8863  }
  8864  
  8865  func (s *RetryLayerTeamStore) GetByInviteId(inviteID string) (*model.Team, error) {
  8866  
  8867  	tries := 0
  8868  	for {
  8869  		result, err := s.TeamStore.GetByInviteId(inviteID)
  8870  		if err == nil {
  8871  			return result, nil
  8872  		}
  8873  		if !isRepeatableError(err) {
  8874  			return result, err
  8875  		}
  8876  		tries++
  8877  		if tries >= 3 {
  8878  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  8879  			return result, err
  8880  		}
  8881  	}
  8882  
  8883  }
  8884  
  8885  func (s *RetryLayerTeamStore) GetByName(name string) (*model.Team, error) {
  8886  
  8887  	tries := 0
  8888  	for {
  8889  		result, err := s.TeamStore.GetByName(name)
  8890  		if err == nil {
  8891  			return result, nil
  8892  		}
  8893  		if !isRepeatableError(err) {
  8894  			return result, err
  8895  		}
  8896  		tries++
  8897  		if tries >= 3 {
  8898  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  8899  			return result, err
  8900  		}
  8901  	}
  8902  
  8903  }
  8904  
  8905  func (s *RetryLayerTeamStore) GetByNames(name []string) ([]*model.Team, error) {
  8906  
  8907  	tries := 0
  8908  	for {
  8909  		result, err := s.TeamStore.GetByNames(name)
  8910  		if err == nil {
  8911  			return result, nil
  8912  		}
  8913  		if !isRepeatableError(err) {
  8914  			return result, err
  8915  		}
  8916  		tries++
  8917  		if tries >= 3 {
  8918  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  8919  			return result, err
  8920  		}
  8921  	}
  8922  
  8923  }
  8924  
  8925  func (s *RetryLayerTeamStore) GetChannelUnreadsForAllTeams(excludeTeamID string, userID string) ([]*model.ChannelUnread, error) {
  8926  
  8927  	tries := 0
  8928  	for {
  8929  		result, err := s.TeamStore.GetChannelUnreadsForAllTeams(excludeTeamID, userID)
  8930  		if err == nil {
  8931  			return result, nil
  8932  		}
  8933  		if !isRepeatableError(err) {
  8934  			return result, err
  8935  		}
  8936  		tries++
  8937  		if tries >= 3 {
  8938  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  8939  			return result, err
  8940  		}
  8941  	}
  8942  
  8943  }
  8944  
  8945  func (s *RetryLayerTeamStore) GetChannelUnreadsForTeam(teamID string, userID string) ([]*model.ChannelUnread, error) {
  8946  
  8947  	tries := 0
  8948  	for {
  8949  		result, err := s.TeamStore.GetChannelUnreadsForTeam(teamID, userID)
  8950  		if err == nil {
  8951  			return result, nil
  8952  		}
  8953  		if !isRepeatableError(err) {
  8954  			return result, err
  8955  		}
  8956  		tries++
  8957  		if tries >= 3 {
  8958  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  8959  			return result, err
  8960  		}
  8961  	}
  8962  
  8963  }
  8964  
  8965  func (s *RetryLayerTeamStore) GetCommonTeamIDsForTwoUsers(userID string, otherUserID string) ([]string, error) {
  8966  
  8967  	tries := 0
  8968  	for {
  8969  		result, err := s.TeamStore.GetCommonTeamIDsForTwoUsers(userID, otherUserID)
  8970  		if err == nil {
  8971  			return result, nil
  8972  		}
  8973  		if !isRepeatableError(err) {
  8974  			return result, err
  8975  		}
  8976  		tries++
  8977  		if tries >= 3 {
  8978  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  8979  			return result, err
  8980  		}
  8981  	}
  8982  
  8983  }
  8984  
  8985  func (s *RetryLayerTeamStore) GetMember(ctx context.Context, teamID string, userID string) (*model.TeamMember, error) {
  8986  
  8987  	tries := 0
  8988  	for {
  8989  		result, err := s.TeamStore.GetMember(ctx, teamID, userID)
  8990  		if err == nil {
  8991  			return result, nil
  8992  		}
  8993  		if !isRepeatableError(err) {
  8994  			return result, err
  8995  		}
  8996  		tries++
  8997  		if tries >= 3 {
  8998  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  8999  			return result, err
  9000  		}
  9001  	}
  9002  
  9003  }
  9004  
  9005  func (s *RetryLayerTeamStore) GetMembers(teamID string, offset int, limit int, teamMembersGetOptions *model.TeamMembersGetOptions) ([]*model.TeamMember, error) {
  9006  
  9007  	tries := 0
  9008  	for {
  9009  		result, err := s.TeamStore.GetMembers(teamID, offset, limit, teamMembersGetOptions)
  9010  		if err == nil {
  9011  			return result, nil
  9012  		}
  9013  		if !isRepeatableError(err) {
  9014  			return result, err
  9015  		}
  9016  		tries++
  9017  		if tries >= 3 {
  9018  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  9019  			return result, err
  9020  		}
  9021  	}
  9022  
  9023  }
  9024  
  9025  func (s *RetryLayerTeamStore) GetMembersByIds(teamID string, userIds []string, restrictions *model.ViewUsersRestrictions) ([]*model.TeamMember, error) {
  9026  
  9027  	tries := 0
  9028  	for {
  9029  		result, err := s.TeamStore.GetMembersByIds(teamID, userIds, restrictions)
  9030  		if err == nil {
  9031  			return result, nil
  9032  		}
  9033  		if !isRepeatableError(err) {
  9034  			return result, err
  9035  		}
  9036  		tries++
  9037  		if tries >= 3 {
  9038  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  9039  			return result, err
  9040  		}
  9041  	}
  9042  
  9043  }
  9044  
  9045  func (s *RetryLayerTeamStore) GetTeamMembersForExport(userID string) ([]*model.TeamMemberForExport, error) {
  9046  
  9047  	tries := 0
  9048  	for {
  9049  		result, err := s.TeamStore.GetTeamMembersForExport(userID)
  9050  		if err == nil {
  9051  			return result, nil
  9052  		}
  9053  		if !isRepeatableError(err) {
  9054  			return result, err
  9055  		}
  9056  		tries++
  9057  		if tries >= 3 {
  9058  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  9059  			return result, err
  9060  		}
  9061  	}
  9062  
  9063  }
  9064  
  9065  func (s *RetryLayerTeamStore) GetTeamsByScheme(schemeID string, offset int, limit int) ([]*model.Team, error) {
  9066  
  9067  	tries := 0
  9068  	for {
  9069  		result, err := s.TeamStore.GetTeamsByScheme(schemeID, offset, limit)
  9070  		if err == nil {
  9071  			return result, nil
  9072  		}
  9073  		if !isRepeatableError(err) {
  9074  			return result, err
  9075  		}
  9076  		tries++
  9077  		if tries >= 3 {
  9078  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  9079  			return result, err
  9080  		}
  9081  	}
  9082  
  9083  }
  9084  
  9085  func (s *RetryLayerTeamStore) GetTeamsByUserId(userID string) ([]*model.Team, error) {
  9086  
  9087  	tries := 0
  9088  	for {
  9089  		result, err := s.TeamStore.GetTeamsByUserId(userID)
  9090  		if err == nil {
  9091  			return result, nil
  9092  		}
  9093  		if !isRepeatableError(err) {
  9094  			return result, err
  9095  		}
  9096  		tries++
  9097  		if tries >= 3 {
  9098  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  9099  			return result, err
  9100  		}
  9101  	}
  9102  
  9103  }
  9104  
  9105  func (s *RetryLayerTeamStore) GetTeamsForUser(ctx context.Context, userID string) ([]*model.TeamMember, error) {
  9106  
  9107  	tries := 0
  9108  	for {
  9109  		result, err := s.TeamStore.GetTeamsForUser(ctx, userID)
  9110  		if err == nil {
  9111  			return result, nil
  9112  		}
  9113  		if !isRepeatableError(err) {
  9114  			return result, err
  9115  		}
  9116  		tries++
  9117  		if tries >= 3 {
  9118  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  9119  			return result, err
  9120  		}
  9121  	}
  9122  
  9123  }
  9124  
  9125  func (s *RetryLayerTeamStore) GetTeamsForUserWithPagination(userID string, page int, perPage int) ([]*model.TeamMember, error) {
  9126  
  9127  	tries := 0
  9128  	for {
  9129  		result, err := s.TeamStore.GetTeamsForUserWithPagination(userID, page, perPage)
  9130  		if err == nil {
  9131  			return result, nil
  9132  		}
  9133  		if !isRepeatableError(err) {
  9134  			return result, err
  9135  		}
  9136  		tries++
  9137  		if tries >= 3 {
  9138  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  9139  			return result, err
  9140  		}
  9141  	}
  9142  
  9143  }
  9144  
  9145  func (s *RetryLayerTeamStore) GetTotalMemberCount(teamID string, restrictions *model.ViewUsersRestrictions) (int64, error) {
  9146  
  9147  	tries := 0
  9148  	for {
  9149  		result, err := s.TeamStore.GetTotalMemberCount(teamID, restrictions)
  9150  		if err == nil {
  9151  			return result, nil
  9152  		}
  9153  		if !isRepeatableError(err) {
  9154  			return result, err
  9155  		}
  9156  		tries++
  9157  		if tries >= 3 {
  9158  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  9159  			return result, err
  9160  		}
  9161  	}
  9162  
  9163  }
  9164  
  9165  func (s *RetryLayerTeamStore) GetUserTeamIds(userID string, allowFromCache bool) ([]string, error) {
  9166  
  9167  	tries := 0
  9168  	for {
  9169  		result, err := s.TeamStore.GetUserTeamIds(userID, allowFromCache)
  9170  		if err == nil {
  9171  			return result, nil
  9172  		}
  9173  		if !isRepeatableError(err) {
  9174  			return result, err
  9175  		}
  9176  		tries++
  9177  		if tries >= 3 {
  9178  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  9179  			return result, err
  9180  		}
  9181  	}
  9182  
  9183  }
  9184  
  9185  func (s *RetryLayerTeamStore) GroupSyncedTeamCount() (int64, error) {
  9186  
  9187  	tries := 0
  9188  	for {
  9189  		result, err := s.TeamStore.GroupSyncedTeamCount()
  9190  		if err == nil {
  9191  			return result, nil
  9192  		}
  9193  		if !isRepeatableError(err) {
  9194  			return result, err
  9195  		}
  9196  		tries++
  9197  		if tries >= 3 {
  9198  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  9199  			return result, err
  9200  		}
  9201  	}
  9202  
  9203  }
  9204  
  9205  func (s *RetryLayerTeamStore) InvalidateAllTeamIdsForUser(userID string) {
  9206  
  9207  	s.TeamStore.InvalidateAllTeamIdsForUser(userID)
  9208  
  9209  }
  9210  
  9211  func (s *RetryLayerTeamStore) MigrateTeamMembers(fromTeamID string, fromUserID string) (map[string]string, error) {
  9212  
  9213  	tries := 0
  9214  	for {
  9215  		result, err := s.TeamStore.MigrateTeamMembers(fromTeamID, fromUserID)
  9216  		if err == nil {
  9217  			return result, nil
  9218  		}
  9219  		if !isRepeatableError(err) {
  9220  			return result, err
  9221  		}
  9222  		tries++
  9223  		if tries >= 3 {
  9224  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  9225  			return result, err
  9226  		}
  9227  	}
  9228  
  9229  }
  9230  
  9231  func (s *RetryLayerTeamStore) PermanentDelete(teamID string) error {
  9232  
  9233  	tries := 0
  9234  	for {
  9235  		err := s.TeamStore.PermanentDelete(teamID)
  9236  		if err == nil {
  9237  			return nil
  9238  		}
  9239  		if !isRepeatableError(err) {
  9240  			return err
  9241  		}
  9242  		tries++
  9243  		if tries >= 3 {
  9244  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  9245  			return err
  9246  		}
  9247  	}
  9248  
  9249  }
  9250  
  9251  func (s *RetryLayerTeamStore) RemoveAllMembersByTeam(teamID string) error {
  9252  
  9253  	tries := 0
  9254  	for {
  9255  		err := s.TeamStore.RemoveAllMembersByTeam(teamID)
  9256  		if err == nil {
  9257  			return nil
  9258  		}
  9259  		if !isRepeatableError(err) {
  9260  			return err
  9261  		}
  9262  		tries++
  9263  		if tries >= 3 {
  9264  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  9265  			return err
  9266  		}
  9267  	}
  9268  
  9269  }
  9270  
  9271  func (s *RetryLayerTeamStore) RemoveAllMembersByUser(userID string) error {
  9272  
  9273  	tries := 0
  9274  	for {
  9275  		err := s.TeamStore.RemoveAllMembersByUser(userID)
  9276  		if err == nil {
  9277  			return nil
  9278  		}
  9279  		if !isRepeatableError(err) {
  9280  			return err
  9281  		}
  9282  		tries++
  9283  		if tries >= 3 {
  9284  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  9285  			return err
  9286  		}
  9287  	}
  9288  
  9289  }
  9290  
  9291  func (s *RetryLayerTeamStore) RemoveMember(teamID string, userID string) error {
  9292  
  9293  	tries := 0
  9294  	for {
  9295  		err := s.TeamStore.RemoveMember(teamID, userID)
  9296  		if err == nil {
  9297  			return nil
  9298  		}
  9299  		if !isRepeatableError(err) {
  9300  			return err
  9301  		}
  9302  		tries++
  9303  		if tries >= 3 {
  9304  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  9305  			return err
  9306  		}
  9307  	}
  9308  
  9309  }
  9310  
  9311  func (s *RetryLayerTeamStore) RemoveMembers(teamID string, userIds []string) error {
  9312  
  9313  	tries := 0
  9314  	for {
  9315  		err := s.TeamStore.RemoveMembers(teamID, userIds)
  9316  		if err == nil {
  9317  			return nil
  9318  		}
  9319  		if !isRepeatableError(err) {
  9320  			return err
  9321  		}
  9322  		tries++
  9323  		if tries >= 3 {
  9324  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  9325  			return err
  9326  		}
  9327  	}
  9328  
  9329  }
  9330  
  9331  func (s *RetryLayerTeamStore) ResetAllTeamSchemes() error {
  9332  
  9333  	tries := 0
  9334  	for {
  9335  		err := s.TeamStore.ResetAllTeamSchemes()
  9336  		if err == nil {
  9337  			return nil
  9338  		}
  9339  		if !isRepeatableError(err) {
  9340  			return err
  9341  		}
  9342  		tries++
  9343  		if tries >= 3 {
  9344  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  9345  			return err
  9346  		}
  9347  	}
  9348  
  9349  }
  9350  
  9351  func (s *RetryLayerTeamStore) Save(team *model.Team) (*model.Team, error) {
  9352  
  9353  	tries := 0
  9354  	for {
  9355  		result, err := s.TeamStore.Save(team)
  9356  		if err == nil {
  9357  			return result, nil
  9358  		}
  9359  		if !isRepeatableError(err) {
  9360  			return result, err
  9361  		}
  9362  		tries++
  9363  		if tries >= 3 {
  9364  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  9365  			return result, err
  9366  		}
  9367  	}
  9368  
  9369  }
  9370  
  9371  func (s *RetryLayerTeamStore) SaveMember(member *model.TeamMember, maxUsersPerTeam int) (*model.TeamMember, error) {
  9372  
  9373  	tries := 0
  9374  	for {
  9375  		result, err := s.TeamStore.SaveMember(member, maxUsersPerTeam)
  9376  		if err == nil {
  9377  			return result, nil
  9378  		}
  9379  		if !isRepeatableError(err) {
  9380  			return result, err
  9381  		}
  9382  		tries++
  9383  		if tries >= 3 {
  9384  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  9385  			return result, err
  9386  		}
  9387  	}
  9388  
  9389  }
  9390  
  9391  func (s *RetryLayerTeamStore) SaveMultipleMembers(members []*model.TeamMember, maxUsersPerTeam int) ([]*model.TeamMember, error) {
  9392  
  9393  	tries := 0
  9394  	for {
  9395  		result, err := s.TeamStore.SaveMultipleMembers(members, maxUsersPerTeam)
  9396  		if err == nil {
  9397  			return result, nil
  9398  		}
  9399  		if !isRepeatableError(err) {
  9400  			return result, err
  9401  		}
  9402  		tries++
  9403  		if tries >= 3 {
  9404  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  9405  			return result, err
  9406  		}
  9407  	}
  9408  
  9409  }
  9410  
  9411  func (s *RetryLayerTeamStore) SearchAll(opts *model.TeamSearch) ([]*model.Team, error) {
  9412  
  9413  	tries := 0
  9414  	for {
  9415  		result, err := s.TeamStore.SearchAll(opts)
  9416  		if err == nil {
  9417  			return result, nil
  9418  		}
  9419  		if !isRepeatableError(err) {
  9420  			return result, err
  9421  		}
  9422  		tries++
  9423  		if tries >= 3 {
  9424  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  9425  			return result, err
  9426  		}
  9427  	}
  9428  
  9429  }
  9430  
  9431  func (s *RetryLayerTeamStore) SearchAllPaged(opts *model.TeamSearch) ([]*model.Team, int64, error) {
  9432  
  9433  	tries := 0
  9434  	for {
  9435  		result, resultVar1, err := s.TeamStore.SearchAllPaged(opts)
  9436  		if err == nil {
  9437  			return result, resultVar1, nil
  9438  		}
  9439  		if !isRepeatableError(err) {
  9440  			return result, resultVar1, err
  9441  		}
  9442  		tries++
  9443  		if tries >= 3 {
  9444  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  9445  			return result, resultVar1, err
  9446  		}
  9447  	}
  9448  
  9449  }
  9450  
  9451  func (s *RetryLayerTeamStore) SearchOpen(opts *model.TeamSearch) ([]*model.Team, error) {
  9452  
  9453  	tries := 0
  9454  	for {
  9455  		result, err := s.TeamStore.SearchOpen(opts)
  9456  		if err == nil {
  9457  			return result, nil
  9458  		}
  9459  		if !isRepeatableError(err) {
  9460  			return result, err
  9461  		}
  9462  		tries++
  9463  		if tries >= 3 {
  9464  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  9465  			return result, err
  9466  		}
  9467  	}
  9468  
  9469  }
  9470  
  9471  func (s *RetryLayerTeamStore) SearchPrivate(opts *model.TeamSearch) ([]*model.Team, error) {
  9472  
  9473  	tries := 0
  9474  	for {
  9475  		result, err := s.TeamStore.SearchPrivate(opts)
  9476  		if err == nil {
  9477  			return result, nil
  9478  		}
  9479  		if !isRepeatableError(err) {
  9480  			return result, err
  9481  		}
  9482  		tries++
  9483  		if tries >= 3 {
  9484  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  9485  			return result, err
  9486  		}
  9487  	}
  9488  
  9489  }
  9490  
  9491  func (s *RetryLayerTeamStore) Update(team *model.Team) (*model.Team, error) {
  9492  
  9493  	tries := 0
  9494  	for {
  9495  		result, err := s.TeamStore.Update(team)
  9496  		if err == nil {
  9497  			return result, nil
  9498  		}
  9499  		if !isRepeatableError(err) {
  9500  			return result, err
  9501  		}
  9502  		tries++
  9503  		if tries >= 3 {
  9504  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  9505  			return result, err
  9506  		}
  9507  	}
  9508  
  9509  }
  9510  
  9511  func (s *RetryLayerTeamStore) UpdateLastTeamIconUpdate(teamID string, curTime int64) error {
  9512  
  9513  	tries := 0
  9514  	for {
  9515  		err := s.TeamStore.UpdateLastTeamIconUpdate(teamID, curTime)
  9516  		if err == nil {
  9517  			return nil
  9518  		}
  9519  		if !isRepeatableError(err) {
  9520  			return err
  9521  		}
  9522  		tries++
  9523  		if tries >= 3 {
  9524  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  9525  			return err
  9526  		}
  9527  	}
  9528  
  9529  }
  9530  
  9531  func (s *RetryLayerTeamStore) UpdateMember(member *model.TeamMember) (*model.TeamMember, error) {
  9532  
  9533  	tries := 0
  9534  	for {
  9535  		result, err := s.TeamStore.UpdateMember(member)
  9536  		if err == nil {
  9537  			return result, nil
  9538  		}
  9539  		if !isRepeatableError(err) {
  9540  			return result, err
  9541  		}
  9542  		tries++
  9543  		if tries >= 3 {
  9544  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  9545  			return result, err
  9546  		}
  9547  	}
  9548  
  9549  }
  9550  
  9551  func (s *RetryLayerTeamStore) UpdateMembersRole(teamID string, userIDs []string) error {
  9552  
  9553  	tries := 0
  9554  	for {
  9555  		err := s.TeamStore.UpdateMembersRole(teamID, userIDs)
  9556  		if err == nil {
  9557  			return nil
  9558  		}
  9559  		if !isRepeatableError(err) {
  9560  			return err
  9561  		}
  9562  		tries++
  9563  		if tries >= 3 {
  9564  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  9565  			return err
  9566  		}
  9567  	}
  9568  
  9569  }
  9570  
  9571  func (s *RetryLayerTeamStore) UpdateMultipleMembers(members []*model.TeamMember) ([]*model.TeamMember, error) {
  9572  
  9573  	tries := 0
  9574  	for {
  9575  		result, err := s.TeamStore.UpdateMultipleMembers(members)
  9576  		if err == nil {
  9577  			return result, nil
  9578  		}
  9579  		if !isRepeatableError(err) {
  9580  			return result, err
  9581  		}
  9582  		tries++
  9583  		if tries >= 3 {
  9584  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  9585  			return result, err
  9586  		}
  9587  	}
  9588  
  9589  }
  9590  
  9591  func (s *RetryLayerTeamStore) UserBelongsToTeams(userID string, teamIds []string) (bool, error) {
  9592  
  9593  	tries := 0
  9594  	for {
  9595  		result, err := s.TeamStore.UserBelongsToTeams(userID, teamIds)
  9596  		if err == nil {
  9597  			return result, nil
  9598  		}
  9599  		if !isRepeatableError(err) {
  9600  			return result, err
  9601  		}
  9602  		tries++
  9603  		if tries >= 3 {
  9604  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  9605  			return result, err
  9606  		}
  9607  	}
  9608  
  9609  }
  9610  
  9611  func (s *RetryLayerTermsOfServiceStore) Get(id string, allowFromCache bool) (*model.TermsOfService, error) {
  9612  
  9613  	tries := 0
  9614  	for {
  9615  		result, err := s.TermsOfServiceStore.Get(id, allowFromCache)
  9616  		if err == nil {
  9617  			return result, nil
  9618  		}
  9619  		if !isRepeatableError(err) {
  9620  			return result, err
  9621  		}
  9622  		tries++
  9623  		if tries >= 3 {
  9624  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  9625  			return result, err
  9626  		}
  9627  	}
  9628  
  9629  }
  9630  
  9631  func (s *RetryLayerTermsOfServiceStore) GetLatest(allowFromCache bool) (*model.TermsOfService, error) {
  9632  
  9633  	tries := 0
  9634  	for {
  9635  		result, err := s.TermsOfServiceStore.GetLatest(allowFromCache)
  9636  		if err == nil {
  9637  			return result, nil
  9638  		}
  9639  		if !isRepeatableError(err) {
  9640  			return result, err
  9641  		}
  9642  		tries++
  9643  		if tries >= 3 {
  9644  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  9645  			return result, err
  9646  		}
  9647  	}
  9648  
  9649  }
  9650  
  9651  func (s *RetryLayerTermsOfServiceStore) Save(termsOfService *model.TermsOfService) (*model.TermsOfService, error) {
  9652  
  9653  	tries := 0
  9654  	for {
  9655  		result, err := s.TermsOfServiceStore.Save(termsOfService)
  9656  		if err == nil {
  9657  			return result, nil
  9658  		}
  9659  		if !isRepeatableError(err) {
  9660  			return result, err
  9661  		}
  9662  		tries++
  9663  		if tries >= 3 {
  9664  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  9665  			return result, err
  9666  		}
  9667  	}
  9668  
  9669  }
  9670  
  9671  func (s *RetryLayerThreadStore) CollectThreadsWithNewerReplies(userId string, channelIds []string, timestamp int64) ([]string, error) {
  9672  
  9673  	tries := 0
  9674  	for {
  9675  		result, err := s.ThreadStore.CollectThreadsWithNewerReplies(userId, channelIds, timestamp)
  9676  		if err == nil {
  9677  			return result, nil
  9678  		}
  9679  		if !isRepeatableError(err) {
  9680  			return result, err
  9681  		}
  9682  		tries++
  9683  		if tries >= 3 {
  9684  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  9685  			return result, err
  9686  		}
  9687  	}
  9688  
  9689  }
  9690  
  9691  func (s *RetryLayerThreadStore) Delete(postID string) error {
  9692  
  9693  	tries := 0
  9694  	for {
  9695  		err := s.ThreadStore.Delete(postID)
  9696  		if err == nil {
  9697  			return nil
  9698  		}
  9699  		if !isRepeatableError(err) {
  9700  			return err
  9701  		}
  9702  		tries++
  9703  		if tries >= 3 {
  9704  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  9705  			return err
  9706  		}
  9707  	}
  9708  
  9709  }
  9710  
  9711  func (s *RetryLayerThreadStore) DeleteMembershipForUser(userId string, postID string) error {
  9712  
  9713  	tries := 0
  9714  	for {
  9715  		err := s.ThreadStore.DeleteMembershipForUser(userId, postID)
  9716  		if err == nil {
  9717  			return nil
  9718  		}
  9719  		if !isRepeatableError(err) {
  9720  			return err
  9721  		}
  9722  		tries++
  9723  		if tries >= 3 {
  9724  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  9725  			return err
  9726  		}
  9727  	}
  9728  
  9729  }
  9730  
  9731  func (s *RetryLayerThreadStore) DeleteOrphanedRows(limit int) (int64, error) {
  9732  
  9733  	tries := 0
  9734  	for {
  9735  		result, err := s.ThreadStore.DeleteOrphanedRows(limit)
  9736  		if err == nil {
  9737  			return result, nil
  9738  		}
  9739  		if !isRepeatableError(err) {
  9740  			return result, err
  9741  		}
  9742  		tries++
  9743  		if tries >= 3 {
  9744  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  9745  			return result, err
  9746  		}
  9747  	}
  9748  
  9749  }
  9750  
  9751  func (s *RetryLayerThreadStore) Get(id string) (*model.Thread, error) {
  9752  
  9753  	tries := 0
  9754  	for {
  9755  		result, err := s.ThreadStore.Get(id)
  9756  		if err == nil {
  9757  			return result, nil
  9758  		}
  9759  		if !isRepeatableError(err) {
  9760  			return result, err
  9761  		}
  9762  		tries++
  9763  		if tries >= 3 {
  9764  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  9765  			return result, err
  9766  		}
  9767  	}
  9768  
  9769  }
  9770  
  9771  func (s *RetryLayerThreadStore) GetMembershipForUser(userId string, postID string) (*model.ThreadMembership, error) {
  9772  
  9773  	tries := 0
  9774  	for {
  9775  		result, err := s.ThreadStore.GetMembershipForUser(userId, postID)
  9776  		if err == nil {
  9777  			return result, nil
  9778  		}
  9779  		if !isRepeatableError(err) {
  9780  			return result, err
  9781  		}
  9782  		tries++
  9783  		if tries >= 3 {
  9784  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  9785  			return result, err
  9786  		}
  9787  	}
  9788  
  9789  }
  9790  
  9791  func (s *RetryLayerThreadStore) GetMembershipsForUser(userId string, teamID string) ([]*model.ThreadMembership, error) {
  9792  
  9793  	tries := 0
  9794  	for {
  9795  		result, err := s.ThreadStore.GetMembershipsForUser(userId, teamID)
  9796  		if err == nil {
  9797  			return result, nil
  9798  		}
  9799  		if !isRepeatableError(err) {
  9800  			return result, err
  9801  		}
  9802  		tries++
  9803  		if tries >= 3 {
  9804  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  9805  			return result, err
  9806  		}
  9807  	}
  9808  
  9809  }
  9810  
  9811  func (s *RetryLayerThreadStore) GetPosts(threadID string, since int64) ([]*model.Post, error) {
  9812  
  9813  	tries := 0
  9814  	for {
  9815  		result, err := s.ThreadStore.GetPosts(threadID, since)
  9816  		if err == nil {
  9817  			return result, nil
  9818  		}
  9819  		if !isRepeatableError(err) {
  9820  			return result, err
  9821  		}
  9822  		tries++
  9823  		if tries >= 3 {
  9824  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  9825  			return result, err
  9826  		}
  9827  	}
  9828  
  9829  }
  9830  
  9831  func (s *RetryLayerThreadStore) GetThreadFollowers(threadID string) ([]string, error) {
  9832  
  9833  	tries := 0
  9834  	for {
  9835  		result, err := s.ThreadStore.GetThreadFollowers(threadID)
  9836  		if err == nil {
  9837  			return result, nil
  9838  		}
  9839  		if !isRepeatableError(err) {
  9840  			return result, err
  9841  		}
  9842  		tries++
  9843  		if tries >= 3 {
  9844  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  9845  			return result, err
  9846  		}
  9847  	}
  9848  
  9849  }
  9850  
  9851  func (s *RetryLayerThreadStore) GetThreadForUser(teamID string, threadMembership *model.ThreadMembership, extended bool) (*model.ThreadResponse, error) {
  9852  
  9853  	tries := 0
  9854  	for {
  9855  		result, err := s.ThreadStore.GetThreadForUser(teamID, threadMembership, extended)
  9856  		if err == nil {
  9857  			return result, nil
  9858  		}
  9859  		if !isRepeatableError(err) {
  9860  			return result, err
  9861  		}
  9862  		tries++
  9863  		if tries >= 3 {
  9864  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  9865  			return result, err
  9866  		}
  9867  	}
  9868  
  9869  }
  9870  
  9871  func (s *RetryLayerThreadStore) GetThreadsForUser(userId string, teamID string, opts model.GetUserThreadsOpts) (*model.Threads, error) {
  9872  
  9873  	tries := 0
  9874  	for {
  9875  		result, err := s.ThreadStore.GetThreadsForUser(userId, teamID, opts)
  9876  		if err == nil {
  9877  			return result, nil
  9878  		}
  9879  		if !isRepeatableError(err) {
  9880  			return result, err
  9881  		}
  9882  		tries++
  9883  		if tries >= 3 {
  9884  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  9885  			return result, err
  9886  		}
  9887  	}
  9888  
  9889  }
  9890  
  9891  func (s *RetryLayerThreadStore) MaintainMembership(userID string, postID string, opts store.ThreadMembershipOpts) (*model.ThreadMembership, error) {
  9892  
  9893  	tries := 0
  9894  	for {
  9895  		result, err := s.ThreadStore.MaintainMembership(userID, postID, opts)
  9896  		if err == nil {
  9897  			return result, nil
  9898  		}
  9899  		if !isRepeatableError(err) {
  9900  			return result, err
  9901  		}
  9902  		tries++
  9903  		if tries >= 3 {
  9904  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  9905  			return result, err
  9906  		}
  9907  	}
  9908  
  9909  }
  9910  
  9911  func (s *RetryLayerThreadStore) MarkAllAsRead(userID string, teamID string) error {
  9912  
  9913  	tries := 0
  9914  	for {
  9915  		err := s.ThreadStore.MarkAllAsRead(userID, teamID)
  9916  		if err == nil {
  9917  			return nil
  9918  		}
  9919  		if !isRepeatableError(err) {
  9920  			return err
  9921  		}
  9922  		tries++
  9923  		if tries >= 3 {
  9924  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  9925  			return err
  9926  		}
  9927  	}
  9928  
  9929  }
  9930  
  9931  func (s *RetryLayerThreadStore) MarkAllAsReadInChannels(userID string, channelIDs []string) error {
  9932  
  9933  	tries := 0
  9934  	for {
  9935  		err := s.ThreadStore.MarkAllAsReadInChannels(userID, channelIDs)
  9936  		if err == nil {
  9937  			return nil
  9938  		}
  9939  		if !isRepeatableError(err) {
  9940  			return err
  9941  		}
  9942  		tries++
  9943  		if tries >= 3 {
  9944  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  9945  			return err
  9946  		}
  9947  	}
  9948  
  9949  }
  9950  
  9951  func (s *RetryLayerThreadStore) MarkAsRead(userID string, threadID string, timestamp int64) error {
  9952  
  9953  	tries := 0
  9954  	for {
  9955  		err := s.ThreadStore.MarkAsRead(userID, threadID, timestamp)
  9956  		if err == nil {
  9957  			return nil
  9958  		}
  9959  		if !isRepeatableError(err) {
  9960  			return err
  9961  		}
  9962  		tries++
  9963  		if tries >= 3 {
  9964  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  9965  			return err
  9966  		}
  9967  	}
  9968  
  9969  }
  9970  
  9971  func (s *RetryLayerThreadStore) PermanentDeleteBatchForRetentionPolicies(now int64, globalPolicyEndTime int64, limit int64, cursor model.RetentionPolicyCursor) (int64, model.RetentionPolicyCursor, error) {
  9972  
  9973  	tries := 0
  9974  	for {
  9975  		result, resultVar1, err := s.ThreadStore.PermanentDeleteBatchForRetentionPolicies(now, globalPolicyEndTime, limit, cursor)
  9976  		if err == nil {
  9977  			return result, resultVar1, nil
  9978  		}
  9979  		if !isRepeatableError(err) {
  9980  			return result, resultVar1, err
  9981  		}
  9982  		tries++
  9983  		if tries >= 3 {
  9984  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
  9985  			return result, resultVar1, err
  9986  		}
  9987  	}
  9988  
  9989  }
  9990  
  9991  func (s *RetryLayerThreadStore) PermanentDeleteBatchThreadMembershipsForRetentionPolicies(now int64, globalPolicyEndTime int64, limit int64, cursor model.RetentionPolicyCursor) (int64, model.RetentionPolicyCursor, error) {
  9992  
  9993  	tries := 0
  9994  	for {
  9995  		result, resultVar1, err := s.ThreadStore.PermanentDeleteBatchThreadMembershipsForRetentionPolicies(now, globalPolicyEndTime, limit, cursor)
  9996  		if err == nil {
  9997  			return result, resultVar1, nil
  9998  		}
  9999  		if !isRepeatableError(err) {
 10000  			return result, resultVar1, err
 10001  		}
 10002  		tries++
 10003  		if tries >= 3 {
 10004  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
 10005  			return result, resultVar1, err
 10006  		}
 10007  	}
 10008  
 10009  }
 10010  
 10011  func (s *RetryLayerThreadStore) Save(thread *model.Thread) (*model.Thread, error) {
 10012  
 10013  	tries := 0
 10014  	for {
 10015  		result, err := s.ThreadStore.Save(thread)
 10016  		if err == nil {
 10017  			return result, nil
 10018  		}
 10019  		if !isRepeatableError(err) {
 10020  			return result, err
 10021  		}
 10022  		tries++
 10023  		if tries >= 3 {
 10024  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
 10025  			return result, err
 10026  		}
 10027  	}
 10028  
 10029  }
 10030  
 10031  func (s *RetryLayerThreadStore) SaveMembership(membership *model.ThreadMembership) (*model.ThreadMembership, error) {
 10032  
 10033  	tries := 0
 10034  	for {
 10035  		result, err := s.ThreadStore.SaveMembership(membership)
 10036  		if err == nil {
 10037  			return result, nil
 10038  		}
 10039  		if !isRepeatableError(err) {
 10040  			return result, err
 10041  		}
 10042  		tries++
 10043  		if tries >= 3 {
 10044  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
 10045  			return result, err
 10046  		}
 10047  	}
 10048  
 10049  }
 10050  
 10051  func (s *RetryLayerThreadStore) SaveMultiple(thread []*model.Thread) ([]*model.Thread, int, error) {
 10052  
 10053  	tries := 0
 10054  	for {
 10055  		result, resultVar1, err := s.ThreadStore.SaveMultiple(thread)
 10056  		if err == nil {
 10057  			return result, resultVar1, nil
 10058  		}
 10059  		if !isRepeatableError(err) {
 10060  			return result, resultVar1, err
 10061  		}
 10062  		tries++
 10063  		if tries >= 3 {
 10064  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
 10065  			return result, resultVar1, err
 10066  		}
 10067  	}
 10068  
 10069  }
 10070  
 10071  func (s *RetryLayerThreadStore) Update(thread *model.Thread) (*model.Thread, error) {
 10072  
 10073  	tries := 0
 10074  	for {
 10075  		result, err := s.ThreadStore.Update(thread)
 10076  		if err == nil {
 10077  			return result, nil
 10078  		}
 10079  		if !isRepeatableError(err) {
 10080  			return result, err
 10081  		}
 10082  		tries++
 10083  		if tries >= 3 {
 10084  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
 10085  			return result, err
 10086  		}
 10087  	}
 10088  
 10089  }
 10090  
 10091  func (s *RetryLayerThreadStore) UpdateMembership(membership *model.ThreadMembership) (*model.ThreadMembership, error) {
 10092  
 10093  	tries := 0
 10094  	for {
 10095  		result, err := s.ThreadStore.UpdateMembership(membership)
 10096  		if err == nil {
 10097  			return result, nil
 10098  		}
 10099  		if !isRepeatableError(err) {
 10100  			return result, err
 10101  		}
 10102  		tries++
 10103  		if tries >= 3 {
 10104  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
 10105  			return result, err
 10106  		}
 10107  	}
 10108  
 10109  }
 10110  
 10111  func (s *RetryLayerThreadStore) UpdateUnreadsByChannel(userId string, changedThreads []string, timestamp int64, updateViewedTimestamp bool) error {
 10112  
 10113  	tries := 0
 10114  	for {
 10115  		err := s.ThreadStore.UpdateUnreadsByChannel(userId, changedThreads, timestamp, updateViewedTimestamp)
 10116  		if err == nil {
 10117  			return nil
 10118  		}
 10119  		if !isRepeatableError(err) {
 10120  			return err
 10121  		}
 10122  		tries++
 10123  		if tries >= 3 {
 10124  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
 10125  			return err
 10126  		}
 10127  	}
 10128  
 10129  }
 10130  
 10131  func (s *RetryLayerTokenStore) Cleanup() {
 10132  
 10133  	s.TokenStore.Cleanup()
 10134  
 10135  }
 10136  
 10137  func (s *RetryLayerTokenStore) Delete(token string) error {
 10138  
 10139  	tries := 0
 10140  	for {
 10141  		err := s.TokenStore.Delete(token)
 10142  		if err == nil {
 10143  			return nil
 10144  		}
 10145  		if !isRepeatableError(err) {
 10146  			return err
 10147  		}
 10148  		tries++
 10149  		if tries >= 3 {
 10150  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
 10151  			return err
 10152  		}
 10153  	}
 10154  
 10155  }
 10156  
 10157  func (s *RetryLayerTokenStore) GetAllTokensByType(tokenType string) ([]*model.Token, error) {
 10158  
 10159  	tries := 0
 10160  	for {
 10161  		result, err := s.TokenStore.GetAllTokensByType(tokenType)
 10162  		if err == nil {
 10163  			return result, nil
 10164  		}
 10165  		if !isRepeatableError(err) {
 10166  			return result, err
 10167  		}
 10168  		tries++
 10169  		if tries >= 3 {
 10170  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
 10171  			return result, err
 10172  		}
 10173  	}
 10174  
 10175  }
 10176  
 10177  func (s *RetryLayerTokenStore) GetByToken(token string) (*model.Token, error) {
 10178  
 10179  	tries := 0
 10180  	for {
 10181  		result, err := s.TokenStore.GetByToken(token)
 10182  		if err == nil {
 10183  			return result, nil
 10184  		}
 10185  		if !isRepeatableError(err) {
 10186  			return result, err
 10187  		}
 10188  		tries++
 10189  		if tries >= 3 {
 10190  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
 10191  			return result, err
 10192  		}
 10193  	}
 10194  
 10195  }
 10196  
 10197  func (s *RetryLayerTokenStore) RemoveAllTokensByType(tokenType string) error {
 10198  
 10199  	tries := 0
 10200  	for {
 10201  		err := s.TokenStore.RemoveAllTokensByType(tokenType)
 10202  		if err == nil {
 10203  			return nil
 10204  		}
 10205  		if !isRepeatableError(err) {
 10206  			return err
 10207  		}
 10208  		tries++
 10209  		if tries >= 3 {
 10210  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
 10211  			return err
 10212  		}
 10213  	}
 10214  
 10215  }
 10216  
 10217  func (s *RetryLayerTokenStore) Save(recovery *model.Token) error {
 10218  
 10219  	tries := 0
 10220  	for {
 10221  		err := s.TokenStore.Save(recovery)
 10222  		if err == nil {
 10223  			return nil
 10224  		}
 10225  		if !isRepeatableError(err) {
 10226  			return err
 10227  		}
 10228  		tries++
 10229  		if tries >= 3 {
 10230  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
 10231  			return err
 10232  		}
 10233  	}
 10234  
 10235  }
 10236  
 10237  func (s *RetryLayerUploadSessionStore) Delete(id string) error {
 10238  
 10239  	tries := 0
 10240  	for {
 10241  		err := s.UploadSessionStore.Delete(id)
 10242  		if err == nil {
 10243  			return nil
 10244  		}
 10245  		if !isRepeatableError(err) {
 10246  			return err
 10247  		}
 10248  		tries++
 10249  		if tries >= 3 {
 10250  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
 10251  			return err
 10252  		}
 10253  	}
 10254  
 10255  }
 10256  
 10257  func (s *RetryLayerUploadSessionStore) Get(id string) (*model.UploadSession, error) {
 10258  
 10259  	tries := 0
 10260  	for {
 10261  		result, err := s.UploadSessionStore.Get(id)
 10262  		if err == nil {
 10263  			return result, nil
 10264  		}
 10265  		if !isRepeatableError(err) {
 10266  			return result, err
 10267  		}
 10268  		tries++
 10269  		if tries >= 3 {
 10270  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
 10271  			return result, err
 10272  		}
 10273  	}
 10274  
 10275  }
 10276  
 10277  func (s *RetryLayerUploadSessionStore) GetForUser(userID string) ([]*model.UploadSession, error) {
 10278  
 10279  	tries := 0
 10280  	for {
 10281  		result, err := s.UploadSessionStore.GetForUser(userID)
 10282  		if err == nil {
 10283  			return result, nil
 10284  		}
 10285  		if !isRepeatableError(err) {
 10286  			return result, err
 10287  		}
 10288  		tries++
 10289  		if tries >= 3 {
 10290  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
 10291  			return result, err
 10292  		}
 10293  	}
 10294  
 10295  }
 10296  
 10297  func (s *RetryLayerUploadSessionStore) Save(session *model.UploadSession) (*model.UploadSession, error) {
 10298  
 10299  	tries := 0
 10300  	for {
 10301  		result, err := s.UploadSessionStore.Save(session)
 10302  		if err == nil {
 10303  			return result, nil
 10304  		}
 10305  		if !isRepeatableError(err) {
 10306  			return result, err
 10307  		}
 10308  		tries++
 10309  		if tries >= 3 {
 10310  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
 10311  			return result, err
 10312  		}
 10313  	}
 10314  
 10315  }
 10316  
 10317  func (s *RetryLayerUploadSessionStore) Update(session *model.UploadSession) error {
 10318  
 10319  	tries := 0
 10320  	for {
 10321  		err := s.UploadSessionStore.Update(session)
 10322  		if err == nil {
 10323  			return nil
 10324  		}
 10325  		if !isRepeatableError(err) {
 10326  			return err
 10327  		}
 10328  		tries++
 10329  		if tries >= 3 {
 10330  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
 10331  			return err
 10332  		}
 10333  	}
 10334  
 10335  }
 10336  
 10337  func (s *RetryLayerUserStore) AnalyticsActiveCount(time int64, options model.UserCountOptions) (int64, error) {
 10338  
 10339  	tries := 0
 10340  	for {
 10341  		result, err := s.UserStore.AnalyticsActiveCount(time, options)
 10342  		if err == nil {
 10343  			return result, nil
 10344  		}
 10345  		if !isRepeatableError(err) {
 10346  			return result, err
 10347  		}
 10348  		tries++
 10349  		if tries >= 3 {
 10350  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
 10351  			return result, err
 10352  		}
 10353  	}
 10354  
 10355  }
 10356  
 10357  func (s *RetryLayerUserStore) AnalyticsActiveCountForPeriod(startTime int64, endTime int64, options model.UserCountOptions) (int64, error) {
 10358  
 10359  	tries := 0
 10360  	for {
 10361  		result, err := s.UserStore.AnalyticsActiveCountForPeriod(startTime, endTime, options)
 10362  		if err == nil {
 10363  			return result, nil
 10364  		}
 10365  		if !isRepeatableError(err) {
 10366  			return result, err
 10367  		}
 10368  		tries++
 10369  		if tries >= 3 {
 10370  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
 10371  			return result, err
 10372  		}
 10373  	}
 10374  
 10375  }
 10376  
 10377  func (s *RetryLayerUserStore) AnalyticsGetExternalUsers(hostDomain string) (bool, error) {
 10378  
 10379  	tries := 0
 10380  	for {
 10381  		result, err := s.UserStore.AnalyticsGetExternalUsers(hostDomain)
 10382  		if err == nil {
 10383  			return result, nil
 10384  		}
 10385  		if !isRepeatableError(err) {
 10386  			return result, err
 10387  		}
 10388  		tries++
 10389  		if tries >= 3 {
 10390  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
 10391  			return result, err
 10392  		}
 10393  	}
 10394  
 10395  }
 10396  
 10397  func (s *RetryLayerUserStore) AnalyticsGetGuestCount() (int64, error) {
 10398  
 10399  	tries := 0
 10400  	for {
 10401  		result, err := s.UserStore.AnalyticsGetGuestCount()
 10402  		if err == nil {
 10403  			return result, nil
 10404  		}
 10405  		if !isRepeatableError(err) {
 10406  			return result, err
 10407  		}
 10408  		tries++
 10409  		if tries >= 3 {
 10410  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
 10411  			return result, err
 10412  		}
 10413  	}
 10414  
 10415  }
 10416  
 10417  func (s *RetryLayerUserStore) AnalyticsGetInactiveUsersCount() (int64, error) {
 10418  
 10419  	tries := 0
 10420  	for {
 10421  		result, err := s.UserStore.AnalyticsGetInactiveUsersCount()
 10422  		if err == nil {
 10423  			return result, nil
 10424  		}
 10425  		if !isRepeatableError(err) {
 10426  			return result, err
 10427  		}
 10428  		tries++
 10429  		if tries >= 3 {
 10430  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
 10431  			return result, err
 10432  		}
 10433  	}
 10434  
 10435  }
 10436  
 10437  func (s *RetryLayerUserStore) AnalyticsGetSystemAdminCount() (int64, error) {
 10438  
 10439  	tries := 0
 10440  	for {
 10441  		result, err := s.UserStore.AnalyticsGetSystemAdminCount()
 10442  		if err == nil {
 10443  			return result, nil
 10444  		}
 10445  		if !isRepeatableError(err) {
 10446  			return result, err
 10447  		}
 10448  		tries++
 10449  		if tries >= 3 {
 10450  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
 10451  			return result, err
 10452  		}
 10453  	}
 10454  
 10455  }
 10456  
 10457  func (s *RetryLayerUserStore) AutocompleteUsersInChannel(teamID string, channelID string, term string, options *model.UserSearchOptions) (*model.UserAutocompleteInChannel, error) {
 10458  
 10459  	tries := 0
 10460  	for {
 10461  		result, err := s.UserStore.AutocompleteUsersInChannel(teamID, channelID, term, options)
 10462  		if err == nil {
 10463  			return result, nil
 10464  		}
 10465  		if !isRepeatableError(err) {
 10466  			return result, err
 10467  		}
 10468  		tries++
 10469  		if tries >= 3 {
 10470  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
 10471  			return result, err
 10472  		}
 10473  	}
 10474  
 10475  }
 10476  
 10477  func (s *RetryLayerUserStore) ClearAllCustomRoleAssignments() error {
 10478  
 10479  	tries := 0
 10480  	for {
 10481  		err := s.UserStore.ClearAllCustomRoleAssignments()
 10482  		if err == nil {
 10483  			return nil
 10484  		}
 10485  		if !isRepeatableError(err) {
 10486  			return err
 10487  		}
 10488  		tries++
 10489  		if tries >= 3 {
 10490  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
 10491  			return err
 10492  		}
 10493  	}
 10494  
 10495  }
 10496  
 10497  func (s *RetryLayerUserStore) ClearCaches() {
 10498  
 10499  	s.UserStore.ClearCaches()
 10500  
 10501  }
 10502  
 10503  func (s *RetryLayerUserStore) Count(options model.UserCountOptions) (int64, error) {
 10504  
 10505  	tries := 0
 10506  	for {
 10507  		result, err := s.UserStore.Count(options)
 10508  		if err == nil {
 10509  			return result, nil
 10510  		}
 10511  		if !isRepeatableError(err) {
 10512  			return result, err
 10513  		}
 10514  		tries++
 10515  		if tries >= 3 {
 10516  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
 10517  			return result, err
 10518  		}
 10519  	}
 10520  
 10521  }
 10522  
 10523  func (s *RetryLayerUserStore) DeactivateGuests() ([]string, error) {
 10524  
 10525  	tries := 0
 10526  	for {
 10527  		result, err := s.UserStore.DeactivateGuests()
 10528  		if err == nil {
 10529  			return result, nil
 10530  		}
 10531  		if !isRepeatableError(err) {
 10532  			return result, err
 10533  		}
 10534  		tries++
 10535  		if tries >= 3 {
 10536  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
 10537  			return result, err
 10538  		}
 10539  	}
 10540  
 10541  }
 10542  
 10543  func (s *RetryLayerUserStore) DemoteUserToGuest(userID string) (*model.User, error) {
 10544  
 10545  	tries := 0
 10546  	for {
 10547  		result, err := s.UserStore.DemoteUserToGuest(userID)
 10548  		if err == nil {
 10549  			return result, nil
 10550  		}
 10551  		if !isRepeatableError(err) {
 10552  			return result, err
 10553  		}
 10554  		tries++
 10555  		if tries >= 3 {
 10556  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
 10557  			return result, err
 10558  		}
 10559  	}
 10560  
 10561  }
 10562  
 10563  func (s *RetryLayerUserStore) Get(ctx context.Context, id string) (*model.User, error) {
 10564  
 10565  	tries := 0
 10566  	for {
 10567  		result, err := s.UserStore.Get(ctx, id)
 10568  		if err == nil {
 10569  			return result, nil
 10570  		}
 10571  		if !isRepeatableError(err) {
 10572  			return result, err
 10573  		}
 10574  		tries++
 10575  		if tries >= 3 {
 10576  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
 10577  			return result, err
 10578  		}
 10579  	}
 10580  
 10581  }
 10582  
 10583  func (s *RetryLayerUserStore) GetAll() ([]*model.User, error) {
 10584  
 10585  	tries := 0
 10586  	for {
 10587  		result, err := s.UserStore.GetAll()
 10588  		if err == nil {
 10589  			return result, nil
 10590  		}
 10591  		if !isRepeatableError(err) {
 10592  			return result, err
 10593  		}
 10594  		tries++
 10595  		if tries >= 3 {
 10596  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
 10597  			return result, err
 10598  		}
 10599  	}
 10600  
 10601  }
 10602  
 10603  func (s *RetryLayerUserStore) GetAllAfter(limit int, afterID string) ([]*model.User, error) {
 10604  
 10605  	tries := 0
 10606  	for {
 10607  		result, err := s.UserStore.GetAllAfter(limit, afterID)
 10608  		if err == nil {
 10609  			return result, nil
 10610  		}
 10611  		if !isRepeatableError(err) {
 10612  			return result, err
 10613  		}
 10614  		tries++
 10615  		if tries >= 3 {
 10616  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
 10617  			return result, err
 10618  		}
 10619  	}
 10620  
 10621  }
 10622  
 10623  func (s *RetryLayerUserStore) GetAllNotInAuthService(authServices []string) ([]*model.User, error) {
 10624  
 10625  	tries := 0
 10626  	for {
 10627  		result, err := s.UserStore.GetAllNotInAuthService(authServices)
 10628  		if err == nil {
 10629  			return result, nil
 10630  		}
 10631  		if !isRepeatableError(err) {
 10632  			return result, err
 10633  		}
 10634  		tries++
 10635  		if tries >= 3 {
 10636  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
 10637  			return result, err
 10638  		}
 10639  	}
 10640  
 10641  }
 10642  
 10643  func (s *RetryLayerUserStore) GetAllProfiles(options *model.UserGetOptions) ([]*model.User, error) {
 10644  
 10645  	tries := 0
 10646  	for {
 10647  		result, err := s.UserStore.GetAllProfiles(options)
 10648  		if err == nil {
 10649  			return result, nil
 10650  		}
 10651  		if !isRepeatableError(err) {
 10652  			return result, err
 10653  		}
 10654  		tries++
 10655  		if tries >= 3 {
 10656  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
 10657  			return result, err
 10658  		}
 10659  	}
 10660  
 10661  }
 10662  
 10663  func (s *RetryLayerUserStore) GetAllProfilesInChannel(ctx context.Context, channelID string, allowFromCache bool) (map[string]*model.User, error) {
 10664  
 10665  	tries := 0
 10666  	for {
 10667  		result, err := s.UserStore.GetAllProfilesInChannel(ctx, channelID, allowFromCache)
 10668  		if err == nil {
 10669  			return result, nil
 10670  		}
 10671  		if !isRepeatableError(err) {
 10672  			return result, err
 10673  		}
 10674  		tries++
 10675  		if tries >= 3 {
 10676  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
 10677  			return result, err
 10678  		}
 10679  	}
 10680  
 10681  }
 10682  
 10683  func (s *RetryLayerUserStore) GetAllUsingAuthService(authService string) ([]*model.User, error) {
 10684  
 10685  	tries := 0
 10686  	for {
 10687  		result, err := s.UserStore.GetAllUsingAuthService(authService)
 10688  		if err == nil {
 10689  			return result, nil
 10690  		}
 10691  		if !isRepeatableError(err) {
 10692  			return result, err
 10693  		}
 10694  		tries++
 10695  		if tries >= 3 {
 10696  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
 10697  			return result, err
 10698  		}
 10699  	}
 10700  
 10701  }
 10702  
 10703  func (s *RetryLayerUserStore) GetAnyUnreadPostCountForChannel(userID string, channelID string) (int64, error) {
 10704  
 10705  	tries := 0
 10706  	for {
 10707  		result, err := s.UserStore.GetAnyUnreadPostCountForChannel(userID, channelID)
 10708  		if err == nil {
 10709  			return result, nil
 10710  		}
 10711  		if !isRepeatableError(err) {
 10712  			return result, err
 10713  		}
 10714  		tries++
 10715  		if tries >= 3 {
 10716  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
 10717  			return result, err
 10718  		}
 10719  	}
 10720  
 10721  }
 10722  
 10723  func (s *RetryLayerUserStore) GetByAuth(authData *string, authService string) (*model.User, error) {
 10724  
 10725  	tries := 0
 10726  	for {
 10727  		result, err := s.UserStore.GetByAuth(authData, authService)
 10728  		if err == nil {
 10729  			return result, nil
 10730  		}
 10731  		if !isRepeatableError(err) {
 10732  			return result, err
 10733  		}
 10734  		tries++
 10735  		if tries >= 3 {
 10736  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
 10737  			return result, err
 10738  		}
 10739  	}
 10740  
 10741  }
 10742  
 10743  func (s *RetryLayerUserStore) GetByEmail(email string) (*model.User, error) {
 10744  
 10745  	tries := 0
 10746  	for {
 10747  		result, err := s.UserStore.GetByEmail(email)
 10748  		if err == nil {
 10749  			return result, nil
 10750  		}
 10751  		if !isRepeatableError(err) {
 10752  			return result, err
 10753  		}
 10754  		tries++
 10755  		if tries >= 3 {
 10756  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
 10757  			return result, err
 10758  		}
 10759  	}
 10760  
 10761  }
 10762  
 10763  func (s *RetryLayerUserStore) GetByUsername(username string) (*model.User, error) {
 10764  
 10765  	tries := 0
 10766  	for {
 10767  		result, err := s.UserStore.GetByUsername(username)
 10768  		if err == nil {
 10769  			return result, nil
 10770  		}
 10771  		if !isRepeatableError(err) {
 10772  			return result, err
 10773  		}
 10774  		tries++
 10775  		if tries >= 3 {
 10776  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
 10777  			return result, err
 10778  		}
 10779  	}
 10780  
 10781  }
 10782  
 10783  func (s *RetryLayerUserStore) GetChannelGroupUsers(channelID string) ([]*model.User, error) {
 10784  
 10785  	tries := 0
 10786  	for {
 10787  		result, err := s.UserStore.GetChannelGroupUsers(channelID)
 10788  		if err == nil {
 10789  			return result, nil
 10790  		}
 10791  		if !isRepeatableError(err) {
 10792  			return result, err
 10793  		}
 10794  		tries++
 10795  		if tries >= 3 {
 10796  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
 10797  			return result, err
 10798  		}
 10799  	}
 10800  
 10801  }
 10802  
 10803  func (s *RetryLayerUserStore) GetEtagForAllProfiles() string {
 10804  
 10805  	return s.UserStore.GetEtagForAllProfiles()
 10806  
 10807  }
 10808  
 10809  func (s *RetryLayerUserStore) GetEtagForProfiles(teamID string) string {
 10810  
 10811  	return s.UserStore.GetEtagForProfiles(teamID)
 10812  
 10813  }
 10814  
 10815  func (s *RetryLayerUserStore) GetEtagForProfilesNotInTeam(teamID string) string {
 10816  
 10817  	return s.UserStore.GetEtagForProfilesNotInTeam(teamID)
 10818  
 10819  }
 10820  
 10821  func (s *RetryLayerUserStore) GetForLogin(loginID string, allowSignInWithUsername bool, allowSignInWithEmail bool) (*model.User, error) {
 10822  
 10823  	tries := 0
 10824  	for {
 10825  		result, err := s.UserStore.GetForLogin(loginID, allowSignInWithUsername, allowSignInWithEmail)
 10826  		if err == nil {
 10827  			return result, nil
 10828  		}
 10829  		if !isRepeatableError(err) {
 10830  			return result, err
 10831  		}
 10832  		tries++
 10833  		if tries >= 3 {
 10834  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
 10835  			return result, err
 10836  		}
 10837  	}
 10838  
 10839  }
 10840  
 10841  func (s *RetryLayerUserStore) GetKnownUsers(userID string) ([]string, error) {
 10842  
 10843  	tries := 0
 10844  	for {
 10845  		result, err := s.UserStore.GetKnownUsers(userID)
 10846  		if err == nil {
 10847  			return result, nil
 10848  		}
 10849  		if !isRepeatableError(err) {
 10850  			return result, err
 10851  		}
 10852  		tries++
 10853  		if tries >= 3 {
 10854  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
 10855  			return result, err
 10856  		}
 10857  	}
 10858  
 10859  }
 10860  
 10861  func (s *RetryLayerUserStore) GetMany(ctx context.Context, ids []string) ([]*model.User, error) {
 10862  
 10863  	tries := 0
 10864  	for {
 10865  		result, err := s.UserStore.GetMany(ctx, ids)
 10866  		if err == nil {
 10867  			return result, nil
 10868  		}
 10869  		if !isRepeatableError(err) {
 10870  			return result, err
 10871  		}
 10872  		tries++
 10873  		if tries >= 3 {
 10874  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
 10875  			return result, err
 10876  		}
 10877  	}
 10878  
 10879  }
 10880  
 10881  func (s *RetryLayerUserStore) GetNewUsersForTeam(teamID string, offset int, limit int, viewRestrictions *model.ViewUsersRestrictions) ([]*model.User, error) {
 10882  
 10883  	tries := 0
 10884  	for {
 10885  		result, err := s.UserStore.GetNewUsersForTeam(teamID, offset, limit, viewRestrictions)
 10886  		if err == nil {
 10887  			return result, nil
 10888  		}
 10889  		if !isRepeatableError(err) {
 10890  			return result, err
 10891  		}
 10892  		tries++
 10893  		if tries >= 3 {
 10894  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
 10895  			return result, err
 10896  		}
 10897  	}
 10898  
 10899  }
 10900  
 10901  func (s *RetryLayerUserStore) GetProfileByGroupChannelIdsForUser(userID string, channelIds []string) (map[string][]*model.User, error) {
 10902  
 10903  	tries := 0
 10904  	for {
 10905  		result, err := s.UserStore.GetProfileByGroupChannelIdsForUser(userID, channelIds)
 10906  		if err == nil {
 10907  			return result, nil
 10908  		}
 10909  		if !isRepeatableError(err) {
 10910  			return result, err
 10911  		}
 10912  		tries++
 10913  		if tries >= 3 {
 10914  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
 10915  			return result, err
 10916  		}
 10917  	}
 10918  
 10919  }
 10920  
 10921  func (s *RetryLayerUserStore) GetProfileByIds(ctx context.Context, userIds []string, options *store.UserGetByIdsOpts, allowFromCache bool) ([]*model.User, error) {
 10922  
 10923  	tries := 0
 10924  	for {
 10925  		result, err := s.UserStore.GetProfileByIds(ctx, userIds, options, allowFromCache)
 10926  		if err == nil {
 10927  			return result, nil
 10928  		}
 10929  		if !isRepeatableError(err) {
 10930  			return result, err
 10931  		}
 10932  		tries++
 10933  		if tries >= 3 {
 10934  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
 10935  			return result, err
 10936  		}
 10937  	}
 10938  
 10939  }
 10940  
 10941  func (s *RetryLayerUserStore) GetProfiles(options *model.UserGetOptions) ([]*model.User, error) {
 10942  
 10943  	tries := 0
 10944  	for {
 10945  		result, err := s.UserStore.GetProfiles(options)
 10946  		if err == nil {
 10947  			return result, nil
 10948  		}
 10949  		if !isRepeatableError(err) {
 10950  			return result, err
 10951  		}
 10952  		tries++
 10953  		if tries >= 3 {
 10954  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
 10955  			return result, err
 10956  		}
 10957  	}
 10958  
 10959  }
 10960  
 10961  func (s *RetryLayerUserStore) GetProfilesByUsernames(usernames []string, viewRestrictions *model.ViewUsersRestrictions) ([]*model.User, error) {
 10962  
 10963  	tries := 0
 10964  	for {
 10965  		result, err := s.UserStore.GetProfilesByUsernames(usernames, viewRestrictions)
 10966  		if err == nil {
 10967  			return result, nil
 10968  		}
 10969  		if !isRepeatableError(err) {
 10970  			return result, err
 10971  		}
 10972  		tries++
 10973  		if tries >= 3 {
 10974  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
 10975  			return result, err
 10976  		}
 10977  	}
 10978  
 10979  }
 10980  
 10981  func (s *RetryLayerUserStore) GetProfilesInChannel(options *model.UserGetOptions) ([]*model.User, error) {
 10982  
 10983  	tries := 0
 10984  	for {
 10985  		result, err := s.UserStore.GetProfilesInChannel(options)
 10986  		if err == nil {
 10987  			return result, nil
 10988  		}
 10989  		if !isRepeatableError(err) {
 10990  			return result, err
 10991  		}
 10992  		tries++
 10993  		if tries >= 3 {
 10994  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
 10995  			return result, err
 10996  		}
 10997  	}
 10998  
 10999  }
 11000  
 11001  func (s *RetryLayerUserStore) GetProfilesInChannelByStatus(options *model.UserGetOptions) ([]*model.User, error) {
 11002  
 11003  	tries := 0
 11004  	for {
 11005  		result, err := s.UserStore.GetProfilesInChannelByStatus(options)
 11006  		if err == nil {
 11007  			return result, nil
 11008  		}
 11009  		if !isRepeatableError(err) {
 11010  			return result, err
 11011  		}
 11012  		tries++
 11013  		if tries >= 3 {
 11014  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
 11015  			return result, err
 11016  		}
 11017  	}
 11018  
 11019  }
 11020  
 11021  func (s *RetryLayerUserStore) GetProfilesNotInChannel(teamID string, channelId string, groupConstrained bool, offset int, limit int, viewRestrictions *model.ViewUsersRestrictions) ([]*model.User, error) {
 11022  
 11023  	tries := 0
 11024  	for {
 11025  		result, err := s.UserStore.GetProfilesNotInChannel(teamID, channelId, groupConstrained, offset, limit, viewRestrictions)
 11026  		if err == nil {
 11027  			return result, nil
 11028  		}
 11029  		if !isRepeatableError(err) {
 11030  			return result, err
 11031  		}
 11032  		tries++
 11033  		if tries >= 3 {
 11034  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
 11035  			return result, err
 11036  		}
 11037  	}
 11038  
 11039  }
 11040  
 11041  func (s *RetryLayerUserStore) GetProfilesNotInTeam(teamID string, groupConstrained bool, offset int, limit int, viewRestrictions *model.ViewUsersRestrictions) ([]*model.User, error) {
 11042  
 11043  	tries := 0
 11044  	for {
 11045  		result, err := s.UserStore.GetProfilesNotInTeam(teamID, groupConstrained, offset, limit, viewRestrictions)
 11046  		if err == nil {
 11047  			return result, nil
 11048  		}
 11049  		if !isRepeatableError(err) {
 11050  			return result, err
 11051  		}
 11052  		tries++
 11053  		if tries >= 3 {
 11054  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
 11055  			return result, err
 11056  		}
 11057  	}
 11058  
 11059  }
 11060  
 11061  func (s *RetryLayerUserStore) GetProfilesWithoutTeam(options *model.UserGetOptions) ([]*model.User, error) {
 11062  
 11063  	tries := 0
 11064  	for {
 11065  		result, err := s.UserStore.GetProfilesWithoutTeam(options)
 11066  		if err == nil {
 11067  			return result, nil
 11068  		}
 11069  		if !isRepeatableError(err) {
 11070  			return result, err
 11071  		}
 11072  		tries++
 11073  		if tries >= 3 {
 11074  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
 11075  			return result, err
 11076  		}
 11077  	}
 11078  
 11079  }
 11080  
 11081  func (s *RetryLayerUserStore) GetRecentlyActiveUsersForTeam(teamID string, offset int, limit int, viewRestrictions *model.ViewUsersRestrictions) ([]*model.User, error) {
 11082  
 11083  	tries := 0
 11084  	for {
 11085  		result, err := s.UserStore.GetRecentlyActiveUsersForTeam(teamID, offset, limit, viewRestrictions)
 11086  		if err == nil {
 11087  			return result, nil
 11088  		}
 11089  		if !isRepeatableError(err) {
 11090  			return result, err
 11091  		}
 11092  		tries++
 11093  		if tries >= 3 {
 11094  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
 11095  			return result, err
 11096  		}
 11097  	}
 11098  
 11099  }
 11100  
 11101  func (s *RetryLayerUserStore) GetSystemAdminProfiles() (map[string]*model.User, error) {
 11102  
 11103  	tries := 0
 11104  	for {
 11105  		result, err := s.UserStore.GetSystemAdminProfiles()
 11106  		if err == nil {
 11107  			return result, nil
 11108  		}
 11109  		if !isRepeatableError(err) {
 11110  			return result, err
 11111  		}
 11112  		tries++
 11113  		if tries >= 3 {
 11114  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
 11115  			return result, err
 11116  		}
 11117  	}
 11118  
 11119  }
 11120  
 11121  func (s *RetryLayerUserStore) GetTeamGroupUsers(teamID string) ([]*model.User, error) {
 11122  
 11123  	tries := 0
 11124  	for {
 11125  		result, err := s.UserStore.GetTeamGroupUsers(teamID)
 11126  		if err == nil {
 11127  			return result, nil
 11128  		}
 11129  		if !isRepeatableError(err) {
 11130  			return result, err
 11131  		}
 11132  		tries++
 11133  		if tries >= 3 {
 11134  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
 11135  			return result, err
 11136  		}
 11137  	}
 11138  
 11139  }
 11140  
 11141  func (s *RetryLayerUserStore) GetUnreadCount(userID string) (int64, error) {
 11142  
 11143  	tries := 0
 11144  	for {
 11145  		result, err := s.UserStore.GetUnreadCount(userID)
 11146  		if err == nil {
 11147  			return result, nil
 11148  		}
 11149  		if !isRepeatableError(err) {
 11150  			return result, err
 11151  		}
 11152  		tries++
 11153  		if tries >= 3 {
 11154  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
 11155  			return result, err
 11156  		}
 11157  	}
 11158  
 11159  }
 11160  
 11161  func (s *RetryLayerUserStore) GetUnreadCountForChannel(userID string, channelID string) (int64, error) {
 11162  
 11163  	tries := 0
 11164  	for {
 11165  		result, err := s.UserStore.GetUnreadCountForChannel(userID, channelID)
 11166  		if err == nil {
 11167  			return result, nil
 11168  		}
 11169  		if !isRepeatableError(err) {
 11170  			return result, err
 11171  		}
 11172  		tries++
 11173  		if tries >= 3 {
 11174  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
 11175  			return result, err
 11176  		}
 11177  	}
 11178  
 11179  }
 11180  
 11181  func (s *RetryLayerUserStore) GetUsersBatchForIndexing(startTime int64, endTime int64, limit int) ([]*model.UserForIndexing, error) {
 11182  
 11183  	tries := 0
 11184  	for {
 11185  		result, err := s.UserStore.GetUsersBatchForIndexing(startTime, endTime, limit)
 11186  		if err == nil {
 11187  			return result, nil
 11188  		}
 11189  		if !isRepeatableError(err) {
 11190  			return result, err
 11191  		}
 11192  		tries++
 11193  		if tries >= 3 {
 11194  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
 11195  			return result, err
 11196  		}
 11197  	}
 11198  
 11199  }
 11200  
 11201  func (s *RetryLayerUserStore) InferSystemInstallDate() (int64, error) {
 11202  
 11203  	tries := 0
 11204  	for {
 11205  		result, err := s.UserStore.InferSystemInstallDate()
 11206  		if err == nil {
 11207  			return result, nil
 11208  		}
 11209  		if !isRepeatableError(err) {
 11210  			return result, err
 11211  		}
 11212  		tries++
 11213  		if tries >= 3 {
 11214  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
 11215  			return result, err
 11216  		}
 11217  	}
 11218  
 11219  }
 11220  
 11221  func (s *RetryLayerUserStore) InvalidateProfileCacheForUser(userID string) {
 11222  
 11223  	s.UserStore.InvalidateProfileCacheForUser(userID)
 11224  
 11225  }
 11226  
 11227  func (s *RetryLayerUserStore) InvalidateProfilesInChannelCache(channelID string) {
 11228  
 11229  	s.UserStore.InvalidateProfilesInChannelCache(channelID)
 11230  
 11231  }
 11232  
 11233  func (s *RetryLayerUserStore) InvalidateProfilesInChannelCacheByUser(userID string) {
 11234  
 11235  	s.UserStore.InvalidateProfilesInChannelCacheByUser(userID)
 11236  
 11237  }
 11238  
 11239  func (s *RetryLayerUserStore) PermanentDelete(userID string) error {
 11240  
 11241  	tries := 0
 11242  	for {
 11243  		err := s.UserStore.PermanentDelete(userID)
 11244  		if err == nil {
 11245  			return nil
 11246  		}
 11247  		if !isRepeatableError(err) {
 11248  			return err
 11249  		}
 11250  		tries++
 11251  		if tries >= 3 {
 11252  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
 11253  			return err
 11254  		}
 11255  	}
 11256  
 11257  }
 11258  
 11259  func (s *RetryLayerUserStore) PromoteGuestToUser(userID string) error {
 11260  
 11261  	tries := 0
 11262  	for {
 11263  		err := s.UserStore.PromoteGuestToUser(userID)
 11264  		if err == nil {
 11265  			return nil
 11266  		}
 11267  		if !isRepeatableError(err) {
 11268  			return err
 11269  		}
 11270  		tries++
 11271  		if tries >= 3 {
 11272  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
 11273  			return err
 11274  		}
 11275  	}
 11276  
 11277  }
 11278  
 11279  func (s *RetryLayerUserStore) ResetAuthDataToEmailForUsers(service string, userIDs []string, includeDeleted bool, dryRun bool) (int, error) {
 11280  
 11281  	tries := 0
 11282  	for {
 11283  		result, err := s.UserStore.ResetAuthDataToEmailForUsers(service, userIDs, includeDeleted, dryRun)
 11284  		if err == nil {
 11285  			return result, nil
 11286  		}
 11287  		if !isRepeatableError(err) {
 11288  			return result, err
 11289  		}
 11290  		tries++
 11291  		if tries >= 3 {
 11292  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
 11293  			return result, err
 11294  		}
 11295  	}
 11296  
 11297  }
 11298  
 11299  func (s *RetryLayerUserStore) ResetLastPictureUpdate(userID string) error {
 11300  
 11301  	tries := 0
 11302  	for {
 11303  		err := s.UserStore.ResetLastPictureUpdate(userID)
 11304  		if err == nil {
 11305  			return nil
 11306  		}
 11307  		if !isRepeatableError(err) {
 11308  			return err
 11309  		}
 11310  		tries++
 11311  		if tries >= 3 {
 11312  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
 11313  			return err
 11314  		}
 11315  	}
 11316  
 11317  }
 11318  
 11319  func (s *RetryLayerUserStore) Save(user *model.User) (*model.User, error) {
 11320  
 11321  	tries := 0
 11322  	for {
 11323  		result, err := s.UserStore.Save(user)
 11324  		if err == nil {
 11325  			return result, nil
 11326  		}
 11327  		if !isRepeatableError(err) {
 11328  			return result, err
 11329  		}
 11330  		tries++
 11331  		if tries >= 3 {
 11332  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
 11333  			return result, err
 11334  		}
 11335  	}
 11336  
 11337  }
 11338  
 11339  func (s *RetryLayerUserStore) Search(teamID string, term string, options *model.UserSearchOptions) ([]*model.User, error) {
 11340  
 11341  	tries := 0
 11342  	for {
 11343  		result, err := s.UserStore.Search(teamID, term, options)
 11344  		if err == nil {
 11345  			return result, nil
 11346  		}
 11347  		if !isRepeatableError(err) {
 11348  			return result, err
 11349  		}
 11350  		tries++
 11351  		if tries >= 3 {
 11352  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
 11353  			return result, err
 11354  		}
 11355  	}
 11356  
 11357  }
 11358  
 11359  func (s *RetryLayerUserStore) SearchInChannel(channelID string, term string, options *model.UserSearchOptions) ([]*model.User, error) {
 11360  
 11361  	tries := 0
 11362  	for {
 11363  		result, err := s.UserStore.SearchInChannel(channelID, term, options)
 11364  		if err == nil {
 11365  			return result, nil
 11366  		}
 11367  		if !isRepeatableError(err) {
 11368  			return result, err
 11369  		}
 11370  		tries++
 11371  		if tries >= 3 {
 11372  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
 11373  			return result, err
 11374  		}
 11375  	}
 11376  
 11377  }
 11378  
 11379  func (s *RetryLayerUserStore) SearchInGroup(groupID string, term string, options *model.UserSearchOptions) ([]*model.User, error) {
 11380  
 11381  	tries := 0
 11382  	for {
 11383  		result, err := s.UserStore.SearchInGroup(groupID, term, options)
 11384  		if err == nil {
 11385  			return result, nil
 11386  		}
 11387  		if !isRepeatableError(err) {
 11388  			return result, err
 11389  		}
 11390  		tries++
 11391  		if tries >= 3 {
 11392  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
 11393  			return result, err
 11394  		}
 11395  	}
 11396  
 11397  }
 11398  
 11399  func (s *RetryLayerUserStore) SearchNotInChannel(teamID string, channelID string, term string, options *model.UserSearchOptions) ([]*model.User, error) {
 11400  
 11401  	tries := 0
 11402  	for {
 11403  		result, err := s.UserStore.SearchNotInChannel(teamID, channelID, term, options)
 11404  		if err == nil {
 11405  			return result, nil
 11406  		}
 11407  		if !isRepeatableError(err) {
 11408  			return result, err
 11409  		}
 11410  		tries++
 11411  		if tries >= 3 {
 11412  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
 11413  			return result, err
 11414  		}
 11415  	}
 11416  
 11417  }
 11418  
 11419  func (s *RetryLayerUserStore) SearchNotInTeam(notInTeamID string, term string, options *model.UserSearchOptions) ([]*model.User, error) {
 11420  
 11421  	tries := 0
 11422  	for {
 11423  		result, err := s.UserStore.SearchNotInTeam(notInTeamID, term, options)
 11424  		if err == nil {
 11425  			return result, nil
 11426  		}
 11427  		if !isRepeatableError(err) {
 11428  			return result, err
 11429  		}
 11430  		tries++
 11431  		if tries >= 3 {
 11432  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
 11433  			return result, err
 11434  		}
 11435  	}
 11436  
 11437  }
 11438  
 11439  func (s *RetryLayerUserStore) SearchWithoutTeam(term string, options *model.UserSearchOptions) ([]*model.User, error) {
 11440  
 11441  	tries := 0
 11442  	for {
 11443  		result, err := s.UserStore.SearchWithoutTeam(term, options)
 11444  		if err == nil {
 11445  			return result, nil
 11446  		}
 11447  		if !isRepeatableError(err) {
 11448  			return result, err
 11449  		}
 11450  		tries++
 11451  		if tries >= 3 {
 11452  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
 11453  			return result, err
 11454  		}
 11455  	}
 11456  
 11457  }
 11458  
 11459  func (s *RetryLayerUserStore) Update(user *model.User, allowRoleUpdate bool) (*model.UserUpdate, error) {
 11460  
 11461  	tries := 0
 11462  	for {
 11463  		result, err := s.UserStore.Update(user, allowRoleUpdate)
 11464  		if err == nil {
 11465  			return result, nil
 11466  		}
 11467  		if !isRepeatableError(err) {
 11468  			return result, err
 11469  		}
 11470  		tries++
 11471  		if tries >= 3 {
 11472  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
 11473  			return result, err
 11474  		}
 11475  	}
 11476  
 11477  }
 11478  
 11479  func (s *RetryLayerUserStore) UpdateAuthData(userID string, service string, authData *string, email string, resetMfa bool) (string, error) {
 11480  
 11481  	tries := 0
 11482  	for {
 11483  		result, err := s.UserStore.UpdateAuthData(userID, service, authData, email, resetMfa)
 11484  		if err == nil {
 11485  			return result, nil
 11486  		}
 11487  		if !isRepeatableError(err) {
 11488  			return result, err
 11489  		}
 11490  		tries++
 11491  		if tries >= 3 {
 11492  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
 11493  			return result, err
 11494  		}
 11495  	}
 11496  
 11497  }
 11498  
 11499  func (s *RetryLayerUserStore) UpdateFailedPasswordAttempts(userID string, attempts int) error {
 11500  
 11501  	tries := 0
 11502  	for {
 11503  		err := s.UserStore.UpdateFailedPasswordAttempts(userID, attempts)
 11504  		if err == nil {
 11505  			return nil
 11506  		}
 11507  		if !isRepeatableError(err) {
 11508  			return err
 11509  		}
 11510  		tries++
 11511  		if tries >= 3 {
 11512  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
 11513  			return err
 11514  		}
 11515  	}
 11516  
 11517  }
 11518  
 11519  func (s *RetryLayerUserStore) UpdateLastPictureUpdate(userID string) error {
 11520  
 11521  	tries := 0
 11522  	for {
 11523  		err := s.UserStore.UpdateLastPictureUpdate(userID)
 11524  		if err == nil {
 11525  			return nil
 11526  		}
 11527  		if !isRepeatableError(err) {
 11528  			return err
 11529  		}
 11530  		tries++
 11531  		if tries >= 3 {
 11532  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
 11533  			return err
 11534  		}
 11535  	}
 11536  
 11537  }
 11538  
 11539  func (s *RetryLayerUserStore) UpdateMfaActive(userID string, active bool) error {
 11540  
 11541  	tries := 0
 11542  	for {
 11543  		err := s.UserStore.UpdateMfaActive(userID, active)
 11544  		if err == nil {
 11545  			return nil
 11546  		}
 11547  		if !isRepeatableError(err) {
 11548  			return err
 11549  		}
 11550  		tries++
 11551  		if tries >= 3 {
 11552  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
 11553  			return err
 11554  		}
 11555  	}
 11556  
 11557  }
 11558  
 11559  func (s *RetryLayerUserStore) UpdateMfaSecret(userID string, secret string) error {
 11560  
 11561  	tries := 0
 11562  	for {
 11563  		err := s.UserStore.UpdateMfaSecret(userID, secret)
 11564  		if err == nil {
 11565  			return nil
 11566  		}
 11567  		if !isRepeatableError(err) {
 11568  			return err
 11569  		}
 11570  		tries++
 11571  		if tries >= 3 {
 11572  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
 11573  			return err
 11574  		}
 11575  	}
 11576  
 11577  }
 11578  
 11579  func (s *RetryLayerUserStore) UpdatePassword(userID string, newPassword string) error {
 11580  
 11581  	tries := 0
 11582  	for {
 11583  		err := s.UserStore.UpdatePassword(userID, newPassword)
 11584  		if err == nil {
 11585  			return nil
 11586  		}
 11587  		if !isRepeatableError(err) {
 11588  			return err
 11589  		}
 11590  		tries++
 11591  		if tries >= 3 {
 11592  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
 11593  			return err
 11594  		}
 11595  	}
 11596  
 11597  }
 11598  
 11599  func (s *RetryLayerUserStore) UpdateUpdateAt(userID string) (int64, error) {
 11600  
 11601  	tries := 0
 11602  	for {
 11603  		result, err := s.UserStore.UpdateUpdateAt(userID)
 11604  		if err == nil {
 11605  			return result, nil
 11606  		}
 11607  		if !isRepeatableError(err) {
 11608  			return result, err
 11609  		}
 11610  		tries++
 11611  		if tries >= 3 {
 11612  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
 11613  			return result, err
 11614  		}
 11615  	}
 11616  
 11617  }
 11618  
 11619  func (s *RetryLayerUserStore) VerifyEmail(userID string, email string) (string, error) {
 11620  
 11621  	tries := 0
 11622  	for {
 11623  		result, err := s.UserStore.VerifyEmail(userID, email)
 11624  		if err == nil {
 11625  			return result, nil
 11626  		}
 11627  		if !isRepeatableError(err) {
 11628  			return result, err
 11629  		}
 11630  		tries++
 11631  		if tries >= 3 {
 11632  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
 11633  			return result, err
 11634  		}
 11635  	}
 11636  
 11637  }
 11638  
 11639  func (s *RetryLayerUserAccessTokenStore) Delete(tokenID string) error {
 11640  
 11641  	tries := 0
 11642  	for {
 11643  		err := s.UserAccessTokenStore.Delete(tokenID)
 11644  		if err == nil {
 11645  			return nil
 11646  		}
 11647  		if !isRepeatableError(err) {
 11648  			return err
 11649  		}
 11650  		tries++
 11651  		if tries >= 3 {
 11652  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
 11653  			return err
 11654  		}
 11655  	}
 11656  
 11657  }
 11658  
 11659  func (s *RetryLayerUserAccessTokenStore) DeleteAllForUser(userID string) error {
 11660  
 11661  	tries := 0
 11662  	for {
 11663  		err := s.UserAccessTokenStore.DeleteAllForUser(userID)
 11664  		if err == nil {
 11665  			return nil
 11666  		}
 11667  		if !isRepeatableError(err) {
 11668  			return err
 11669  		}
 11670  		tries++
 11671  		if tries >= 3 {
 11672  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
 11673  			return err
 11674  		}
 11675  	}
 11676  
 11677  }
 11678  
 11679  func (s *RetryLayerUserAccessTokenStore) Get(tokenID string) (*model.UserAccessToken, error) {
 11680  
 11681  	tries := 0
 11682  	for {
 11683  		result, err := s.UserAccessTokenStore.Get(tokenID)
 11684  		if err == nil {
 11685  			return result, nil
 11686  		}
 11687  		if !isRepeatableError(err) {
 11688  			return result, err
 11689  		}
 11690  		tries++
 11691  		if tries >= 3 {
 11692  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
 11693  			return result, err
 11694  		}
 11695  	}
 11696  
 11697  }
 11698  
 11699  func (s *RetryLayerUserAccessTokenStore) GetAll(offset int, limit int) ([]*model.UserAccessToken, error) {
 11700  
 11701  	tries := 0
 11702  	for {
 11703  		result, err := s.UserAccessTokenStore.GetAll(offset, limit)
 11704  		if err == nil {
 11705  			return result, nil
 11706  		}
 11707  		if !isRepeatableError(err) {
 11708  			return result, err
 11709  		}
 11710  		tries++
 11711  		if tries >= 3 {
 11712  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
 11713  			return result, err
 11714  		}
 11715  	}
 11716  
 11717  }
 11718  
 11719  func (s *RetryLayerUserAccessTokenStore) GetByToken(tokenString string) (*model.UserAccessToken, error) {
 11720  
 11721  	tries := 0
 11722  	for {
 11723  		result, err := s.UserAccessTokenStore.GetByToken(tokenString)
 11724  		if err == nil {
 11725  			return result, nil
 11726  		}
 11727  		if !isRepeatableError(err) {
 11728  			return result, err
 11729  		}
 11730  		tries++
 11731  		if tries >= 3 {
 11732  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
 11733  			return result, err
 11734  		}
 11735  	}
 11736  
 11737  }
 11738  
 11739  func (s *RetryLayerUserAccessTokenStore) GetByUser(userID string, page int, perPage int) ([]*model.UserAccessToken, error) {
 11740  
 11741  	tries := 0
 11742  	for {
 11743  		result, err := s.UserAccessTokenStore.GetByUser(userID, page, perPage)
 11744  		if err == nil {
 11745  			return result, nil
 11746  		}
 11747  		if !isRepeatableError(err) {
 11748  			return result, err
 11749  		}
 11750  		tries++
 11751  		if tries >= 3 {
 11752  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
 11753  			return result, err
 11754  		}
 11755  	}
 11756  
 11757  }
 11758  
 11759  func (s *RetryLayerUserAccessTokenStore) Save(token *model.UserAccessToken) (*model.UserAccessToken, error) {
 11760  
 11761  	tries := 0
 11762  	for {
 11763  		result, err := s.UserAccessTokenStore.Save(token)
 11764  		if err == nil {
 11765  			return result, nil
 11766  		}
 11767  		if !isRepeatableError(err) {
 11768  			return result, err
 11769  		}
 11770  		tries++
 11771  		if tries >= 3 {
 11772  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
 11773  			return result, err
 11774  		}
 11775  	}
 11776  
 11777  }
 11778  
 11779  func (s *RetryLayerUserAccessTokenStore) Search(term string) ([]*model.UserAccessToken, error) {
 11780  
 11781  	tries := 0
 11782  	for {
 11783  		result, err := s.UserAccessTokenStore.Search(term)
 11784  		if err == nil {
 11785  			return result, nil
 11786  		}
 11787  		if !isRepeatableError(err) {
 11788  			return result, err
 11789  		}
 11790  		tries++
 11791  		if tries >= 3 {
 11792  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
 11793  			return result, err
 11794  		}
 11795  	}
 11796  
 11797  }
 11798  
 11799  func (s *RetryLayerUserAccessTokenStore) UpdateTokenDisable(tokenID string) error {
 11800  
 11801  	tries := 0
 11802  	for {
 11803  		err := s.UserAccessTokenStore.UpdateTokenDisable(tokenID)
 11804  		if err == nil {
 11805  			return nil
 11806  		}
 11807  		if !isRepeatableError(err) {
 11808  			return err
 11809  		}
 11810  		tries++
 11811  		if tries >= 3 {
 11812  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
 11813  			return err
 11814  		}
 11815  	}
 11816  
 11817  }
 11818  
 11819  func (s *RetryLayerUserAccessTokenStore) UpdateTokenEnable(tokenID string) error {
 11820  
 11821  	tries := 0
 11822  	for {
 11823  		err := s.UserAccessTokenStore.UpdateTokenEnable(tokenID)
 11824  		if err == nil {
 11825  			return nil
 11826  		}
 11827  		if !isRepeatableError(err) {
 11828  			return err
 11829  		}
 11830  		tries++
 11831  		if tries >= 3 {
 11832  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
 11833  			return err
 11834  		}
 11835  	}
 11836  
 11837  }
 11838  
 11839  func (s *RetryLayerUserTermsOfServiceStore) Delete(userID string, termsOfServiceId string) error {
 11840  
 11841  	tries := 0
 11842  	for {
 11843  		err := s.UserTermsOfServiceStore.Delete(userID, termsOfServiceId)
 11844  		if err == nil {
 11845  			return nil
 11846  		}
 11847  		if !isRepeatableError(err) {
 11848  			return err
 11849  		}
 11850  		tries++
 11851  		if tries >= 3 {
 11852  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
 11853  			return err
 11854  		}
 11855  	}
 11856  
 11857  }
 11858  
 11859  func (s *RetryLayerUserTermsOfServiceStore) GetByUser(userID string) (*model.UserTermsOfService, error) {
 11860  
 11861  	tries := 0
 11862  	for {
 11863  		result, err := s.UserTermsOfServiceStore.GetByUser(userID)
 11864  		if err == nil {
 11865  			return result, nil
 11866  		}
 11867  		if !isRepeatableError(err) {
 11868  			return result, err
 11869  		}
 11870  		tries++
 11871  		if tries >= 3 {
 11872  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
 11873  			return result, err
 11874  		}
 11875  	}
 11876  
 11877  }
 11878  
 11879  func (s *RetryLayerUserTermsOfServiceStore) Save(userTermsOfService *model.UserTermsOfService) (*model.UserTermsOfService, error) {
 11880  
 11881  	tries := 0
 11882  	for {
 11883  		result, err := s.UserTermsOfServiceStore.Save(userTermsOfService)
 11884  		if err == nil {
 11885  			return result, nil
 11886  		}
 11887  		if !isRepeatableError(err) {
 11888  			return result, err
 11889  		}
 11890  		tries++
 11891  		if tries >= 3 {
 11892  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
 11893  			return result, err
 11894  		}
 11895  	}
 11896  
 11897  }
 11898  
 11899  func (s *RetryLayerWebhookStore) AnalyticsIncomingCount(teamID string) (int64, error) {
 11900  
 11901  	tries := 0
 11902  	for {
 11903  		result, err := s.WebhookStore.AnalyticsIncomingCount(teamID)
 11904  		if err == nil {
 11905  			return result, nil
 11906  		}
 11907  		if !isRepeatableError(err) {
 11908  			return result, err
 11909  		}
 11910  		tries++
 11911  		if tries >= 3 {
 11912  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
 11913  			return result, err
 11914  		}
 11915  	}
 11916  
 11917  }
 11918  
 11919  func (s *RetryLayerWebhookStore) AnalyticsOutgoingCount(teamID string) (int64, error) {
 11920  
 11921  	tries := 0
 11922  	for {
 11923  		result, err := s.WebhookStore.AnalyticsOutgoingCount(teamID)
 11924  		if err == nil {
 11925  			return result, nil
 11926  		}
 11927  		if !isRepeatableError(err) {
 11928  			return result, err
 11929  		}
 11930  		tries++
 11931  		if tries >= 3 {
 11932  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
 11933  			return result, err
 11934  		}
 11935  	}
 11936  
 11937  }
 11938  
 11939  func (s *RetryLayerWebhookStore) ClearCaches() {
 11940  
 11941  	s.WebhookStore.ClearCaches()
 11942  
 11943  }
 11944  
 11945  func (s *RetryLayerWebhookStore) DeleteIncoming(webhookID string, time int64) error {
 11946  
 11947  	tries := 0
 11948  	for {
 11949  		err := s.WebhookStore.DeleteIncoming(webhookID, time)
 11950  		if err == nil {
 11951  			return nil
 11952  		}
 11953  		if !isRepeatableError(err) {
 11954  			return err
 11955  		}
 11956  		tries++
 11957  		if tries >= 3 {
 11958  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
 11959  			return err
 11960  		}
 11961  	}
 11962  
 11963  }
 11964  
 11965  func (s *RetryLayerWebhookStore) DeleteOutgoing(webhookID string, time int64) error {
 11966  
 11967  	tries := 0
 11968  	for {
 11969  		err := s.WebhookStore.DeleteOutgoing(webhookID, time)
 11970  		if err == nil {
 11971  			return nil
 11972  		}
 11973  		if !isRepeatableError(err) {
 11974  			return err
 11975  		}
 11976  		tries++
 11977  		if tries >= 3 {
 11978  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
 11979  			return err
 11980  		}
 11981  	}
 11982  
 11983  }
 11984  
 11985  func (s *RetryLayerWebhookStore) GetIncoming(id string, allowFromCache bool) (*model.IncomingWebhook, error) {
 11986  
 11987  	tries := 0
 11988  	for {
 11989  		result, err := s.WebhookStore.GetIncoming(id, allowFromCache)
 11990  		if err == nil {
 11991  			return result, nil
 11992  		}
 11993  		if !isRepeatableError(err) {
 11994  			return result, err
 11995  		}
 11996  		tries++
 11997  		if tries >= 3 {
 11998  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
 11999  			return result, err
 12000  		}
 12001  	}
 12002  
 12003  }
 12004  
 12005  func (s *RetryLayerWebhookStore) GetIncomingByChannel(channelID string) ([]*model.IncomingWebhook, error) {
 12006  
 12007  	tries := 0
 12008  	for {
 12009  		result, err := s.WebhookStore.GetIncomingByChannel(channelID)
 12010  		if err == nil {
 12011  			return result, nil
 12012  		}
 12013  		if !isRepeatableError(err) {
 12014  			return result, err
 12015  		}
 12016  		tries++
 12017  		if tries >= 3 {
 12018  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
 12019  			return result, err
 12020  		}
 12021  	}
 12022  
 12023  }
 12024  
 12025  func (s *RetryLayerWebhookStore) GetIncomingByTeam(teamID string, offset int, limit int) ([]*model.IncomingWebhook, error) {
 12026  
 12027  	tries := 0
 12028  	for {
 12029  		result, err := s.WebhookStore.GetIncomingByTeam(teamID, offset, limit)
 12030  		if err == nil {
 12031  			return result, nil
 12032  		}
 12033  		if !isRepeatableError(err) {
 12034  			return result, err
 12035  		}
 12036  		tries++
 12037  		if tries >= 3 {
 12038  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
 12039  			return result, err
 12040  		}
 12041  	}
 12042  
 12043  }
 12044  
 12045  func (s *RetryLayerWebhookStore) GetIncomingByTeamByUser(teamID string, userID string, offset int, limit int) ([]*model.IncomingWebhook, error) {
 12046  
 12047  	tries := 0
 12048  	for {
 12049  		result, err := s.WebhookStore.GetIncomingByTeamByUser(teamID, userID, offset, limit)
 12050  		if err == nil {
 12051  			return result, nil
 12052  		}
 12053  		if !isRepeatableError(err) {
 12054  			return result, err
 12055  		}
 12056  		tries++
 12057  		if tries >= 3 {
 12058  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
 12059  			return result, err
 12060  		}
 12061  	}
 12062  
 12063  }
 12064  
 12065  func (s *RetryLayerWebhookStore) GetIncomingList(offset int, limit int) ([]*model.IncomingWebhook, error) {
 12066  
 12067  	tries := 0
 12068  	for {
 12069  		result, err := s.WebhookStore.GetIncomingList(offset, limit)
 12070  		if err == nil {
 12071  			return result, nil
 12072  		}
 12073  		if !isRepeatableError(err) {
 12074  			return result, err
 12075  		}
 12076  		tries++
 12077  		if tries >= 3 {
 12078  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
 12079  			return result, err
 12080  		}
 12081  	}
 12082  
 12083  }
 12084  
 12085  func (s *RetryLayerWebhookStore) GetIncomingListByUser(userID string, offset int, limit int) ([]*model.IncomingWebhook, error) {
 12086  
 12087  	tries := 0
 12088  	for {
 12089  		result, err := s.WebhookStore.GetIncomingListByUser(userID, offset, limit)
 12090  		if err == nil {
 12091  			return result, nil
 12092  		}
 12093  		if !isRepeatableError(err) {
 12094  			return result, err
 12095  		}
 12096  		tries++
 12097  		if tries >= 3 {
 12098  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
 12099  			return result, err
 12100  		}
 12101  	}
 12102  
 12103  }
 12104  
 12105  func (s *RetryLayerWebhookStore) GetOutgoing(id string) (*model.OutgoingWebhook, error) {
 12106  
 12107  	tries := 0
 12108  	for {
 12109  		result, err := s.WebhookStore.GetOutgoing(id)
 12110  		if err == nil {
 12111  			return result, nil
 12112  		}
 12113  		if !isRepeatableError(err) {
 12114  			return result, err
 12115  		}
 12116  		tries++
 12117  		if tries >= 3 {
 12118  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
 12119  			return result, err
 12120  		}
 12121  	}
 12122  
 12123  }
 12124  
 12125  func (s *RetryLayerWebhookStore) GetOutgoingByChannel(channelID string, offset int, limit int) ([]*model.OutgoingWebhook, error) {
 12126  
 12127  	tries := 0
 12128  	for {
 12129  		result, err := s.WebhookStore.GetOutgoingByChannel(channelID, offset, limit)
 12130  		if err == nil {
 12131  			return result, nil
 12132  		}
 12133  		if !isRepeatableError(err) {
 12134  			return result, err
 12135  		}
 12136  		tries++
 12137  		if tries >= 3 {
 12138  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
 12139  			return result, err
 12140  		}
 12141  	}
 12142  
 12143  }
 12144  
 12145  func (s *RetryLayerWebhookStore) GetOutgoingByChannelByUser(channelID string, userID string, offset int, limit int) ([]*model.OutgoingWebhook, error) {
 12146  
 12147  	tries := 0
 12148  	for {
 12149  		result, err := s.WebhookStore.GetOutgoingByChannelByUser(channelID, userID, offset, limit)
 12150  		if err == nil {
 12151  			return result, nil
 12152  		}
 12153  		if !isRepeatableError(err) {
 12154  			return result, err
 12155  		}
 12156  		tries++
 12157  		if tries >= 3 {
 12158  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
 12159  			return result, err
 12160  		}
 12161  	}
 12162  
 12163  }
 12164  
 12165  func (s *RetryLayerWebhookStore) GetOutgoingByTeam(teamID string, offset int, limit int) ([]*model.OutgoingWebhook, error) {
 12166  
 12167  	tries := 0
 12168  	for {
 12169  		result, err := s.WebhookStore.GetOutgoingByTeam(teamID, offset, limit)
 12170  		if err == nil {
 12171  			return result, nil
 12172  		}
 12173  		if !isRepeatableError(err) {
 12174  			return result, err
 12175  		}
 12176  		tries++
 12177  		if tries >= 3 {
 12178  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
 12179  			return result, err
 12180  		}
 12181  	}
 12182  
 12183  }
 12184  
 12185  func (s *RetryLayerWebhookStore) GetOutgoingByTeamByUser(teamID string, userID string, offset int, limit int) ([]*model.OutgoingWebhook, error) {
 12186  
 12187  	tries := 0
 12188  	for {
 12189  		result, err := s.WebhookStore.GetOutgoingByTeamByUser(teamID, userID, offset, limit)
 12190  		if err == nil {
 12191  			return result, nil
 12192  		}
 12193  		if !isRepeatableError(err) {
 12194  			return result, err
 12195  		}
 12196  		tries++
 12197  		if tries >= 3 {
 12198  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
 12199  			return result, err
 12200  		}
 12201  	}
 12202  
 12203  }
 12204  
 12205  func (s *RetryLayerWebhookStore) GetOutgoingList(offset int, limit int) ([]*model.OutgoingWebhook, error) {
 12206  
 12207  	tries := 0
 12208  	for {
 12209  		result, err := s.WebhookStore.GetOutgoingList(offset, limit)
 12210  		if err == nil {
 12211  			return result, nil
 12212  		}
 12213  		if !isRepeatableError(err) {
 12214  			return result, err
 12215  		}
 12216  		tries++
 12217  		if tries >= 3 {
 12218  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
 12219  			return result, err
 12220  		}
 12221  	}
 12222  
 12223  }
 12224  
 12225  func (s *RetryLayerWebhookStore) GetOutgoingListByUser(userID string, offset int, limit int) ([]*model.OutgoingWebhook, error) {
 12226  
 12227  	tries := 0
 12228  	for {
 12229  		result, err := s.WebhookStore.GetOutgoingListByUser(userID, offset, limit)
 12230  		if err == nil {
 12231  			return result, nil
 12232  		}
 12233  		if !isRepeatableError(err) {
 12234  			return result, err
 12235  		}
 12236  		tries++
 12237  		if tries >= 3 {
 12238  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
 12239  			return result, err
 12240  		}
 12241  	}
 12242  
 12243  }
 12244  
 12245  func (s *RetryLayerWebhookStore) InvalidateWebhookCache(webhook string) {
 12246  
 12247  	s.WebhookStore.InvalidateWebhookCache(webhook)
 12248  
 12249  }
 12250  
 12251  func (s *RetryLayerWebhookStore) PermanentDeleteIncomingByChannel(channelID string) error {
 12252  
 12253  	tries := 0
 12254  	for {
 12255  		err := s.WebhookStore.PermanentDeleteIncomingByChannel(channelID)
 12256  		if err == nil {
 12257  			return nil
 12258  		}
 12259  		if !isRepeatableError(err) {
 12260  			return err
 12261  		}
 12262  		tries++
 12263  		if tries >= 3 {
 12264  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
 12265  			return err
 12266  		}
 12267  	}
 12268  
 12269  }
 12270  
 12271  func (s *RetryLayerWebhookStore) PermanentDeleteIncomingByUser(userID string) error {
 12272  
 12273  	tries := 0
 12274  	for {
 12275  		err := s.WebhookStore.PermanentDeleteIncomingByUser(userID)
 12276  		if err == nil {
 12277  			return nil
 12278  		}
 12279  		if !isRepeatableError(err) {
 12280  			return err
 12281  		}
 12282  		tries++
 12283  		if tries >= 3 {
 12284  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
 12285  			return err
 12286  		}
 12287  	}
 12288  
 12289  }
 12290  
 12291  func (s *RetryLayerWebhookStore) PermanentDeleteOutgoingByChannel(channelID string) error {
 12292  
 12293  	tries := 0
 12294  	for {
 12295  		err := s.WebhookStore.PermanentDeleteOutgoingByChannel(channelID)
 12296  		if err == nil {
 12297  			return nil
 12298  		}
 12299  		if !isRepeatableError(err) {
 12300  			return err
 12301  		}
 12302  		tries++
 12303  		if tries >= 3 {
 12304  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
 12305  			return err
 12306  		}
 12307  	}
 12308  
 12309  }
 12310  
 12311  func (s *RetryLayerWebhookStore) PermanentDeleteOutgoingByUser(userID string) error {
 12312  
 12313  	tries := 0
 12314  	for {
 12315  		err := s.WebhookStore.PermanentDeleteOutgoingByUser(userID)
 12316  		if err == nil {
 12317  			return nil
 12318  		}
 12319  		if !isRepeatableError(err) {
 12320  			return err
 12321  		}
 12322  		tries++
 12323  		if tries >= 3 {
 12324  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
 12325  			return err
 12326  		}
 12327  	}
 12328  
 12329  }
 12330  
 12331  func (s *RetryLayerWebhookStore) SaveIncoming(webhook *model.IncomingWebhook) (*model.IncomingWebhook, error) {
 12332  
 12333  	tries := 0
 12334  	for {
 12335  		result, err := s.WebhookStore.SaveIncoming(webhook)
 12336  		if err == nil {
 12337  			return result, nil
 12338  		}
 12339  		if !isRepeatableError(err) {
 12340  			return result, err
 12341  		}
 12342  		tries++
 12343  		if tries >= 3 {
 12344  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
 12345  			return result, err
 12346  		}
 12347  	}
 12348  
 12349  }
 12350  
 12351  func (s *RetryLayerWebhookStore) SaveOutgoing(webhook *model.OutgoingWebhook) (*model.OutgoingWebhook, error) {
 12352  
 12353  	tries := 0
 12354  	for {
 12355  		result, err := s.WebhookStore.SaveOutgoing(webhook)
 12356  		if err == nil {
 12357  			return result, nil
 12358  		}
 12359  		if !isRepeatableError(err) {
 12360  			return result, err
 12361  		}
 12362  		tries++
 12363  		if tries >= 3 {
 12364  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
 12365  			return result, err
 12366  		}
 12367  	}
 12368  
 12369  }
 12370  
 12371  func (s *RetryLayerWebhookStore) UpdateIncoming(webhook *model.IncomingWebhook) (*model.IncomingWebhook, error) {
 12372  
 12373  	tries := 0
 12374  	for {
 12375  		result, err := s.WebhookStore.UpdateIncoming(webhook)
 12376  		if err == nil {
 12377  			return result, nil
 12378  		}
 12379  		if !isRepeatableError(err) {
 12380  			return result, err
 12381  		}
 12382  		tries++
 12383  		if tries >= 3 {
 12384  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
 12385  			return result, err
 12386  		}
 12387  	}
 12388  
 12389  }
 12390  
 12391  func (s *RetryLayerWebhookStore) UpdateOutgoing(hook *model.OutgoingWebhook) (*model.OutgoingWebhook, error) {
 12392  
 12393  	tries := 0
 12394  	for {
 12395  		result, err := s.WebhookStore.UpdateOutgoing(hook)
 12396  		if err == nil {
 12397  			return result, nil
 12398  		}
 12399  		if !isRepeatableError(err) {
 12400  			return result, err
 12401  		}
 12402  		tries++
 12403  		if tries >= 3 {
 12404  			err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
 12405  			return result, err
 12406  		}
 12407  	}
 12408  
 12409  }
 12410  
 12411  func (s *RetryLayer) Close() {
 12412  	s.Store.Close()
 12413  }
 12414  
 12415  func (s *RetryLayer) DropAllTables() {
 12416  	s.Store.DropAllTables()
 12417  }
 12418  
 12419  func (s *RetryLayer) GetCurrentSchemaVersion() string {
 12420  	return s.Store.GetCurrentSchemaVersion()
 12421  }
 12422  
 12423  func (s *RetryLayer) LockToMaster() {
 12424  	s.Store.LockToMaster()
 12425  }
 12426  
 12427  func (s *RetryLayer) MarkSystemRanUnitTests() {
 12428  	s.Store.MarkSystemRanUnitTests()
 12429  }
 12430  
 12431  func (s *RetryLayer) SetContext(context context.Context) {
 12432  	s.Store.SetContext(context)
 12433  }
 12434  
 12435  func (s *RetryLayer) TotalMasterDbConnections() int {
 12436  	return s.Store.TotalMasterDbConnections()
 12437  }
 12438  
 12439  func (s *RetryLayer) TotalReadDbConnections() int {
 12440  	return s.Store.TotalReadDbConnections()
 12441  }
 12442  
 12443  func (s *RetryLayer) TotalSearchDbConnections() int {
 12444  	return s.Store.TotalSearchDbConnections()
 12445  }
 12446  
 12447  func (s *RetryLayer) UnlockFromMaster() {
 12448  	s.Store.UnlockFromMaster()
 12449  }
 12450  
 12451  func New(childStore store.Store) *RetryLayer {
 12452  	newStore := RetryLayer{
 12453  		Store: childStore,
 12454  	}
 12455  
 12456  	newStore.AuditStore = &RetryLayerAuditStore{AuditStore: childStore.Audit(), Root: &newStore}
 12457  	newStore.BotStore = &RetryLayerBotStore{BotStore: childStore.Bot(), Root: &newStore}
 12458  	newStore.ChannelStore = &RetryLayerChannelStore{ChannelStore: childStore.Channel(), Root: &newStore}
 12459  	newStore.ChannelMemberHistoryStore = &RetryLayerChannelMemberHistoryStore{ChannelMemberHistoryStore: childStore.ChannelMemberHistory(), Root: &newStore}
 12460  	newStore.ClusterDiscoveryStore = &RetryLayerClusterDiscoveryStore{ClusterDiscoveryStore: childStore.ClusterDiscovery(), Root: &newStore}
 12461  	newStore.CommandStore = &RetryLayerCommandStore{CommandStore: childStore.Command(), Root: &newStore}
 12462  	newStore.CommandWebhookStore = &RetryLayerCommandWebhookStore{CommandWebhookStore: childStore.CommandWebhook(), Root: &newStore}
 12463  	newStore.ComplianceStore = &RetryLayerComplianceStore{ComplianceStore: childStore.Compliance(), Root: &newStore}
 12464  	newStore.EmojiStore = &RetryLayerEmojiStore{EmojiStore: childStore.Emoji(), Root: &newStore}
 12465  	newStore.FileInfoStore = &RetryLayerFileInfoStore{FileInfoStore: childStore.FileInfo(), Root: &newStore}
 12466  	newStore.GroupStore = &RetryLayerGroupStore{GroupStore: childStore.Group(), Root: &newStore}
 12467  	newStore.JobStore = &RetryLayerJobStore{JobStore: childStore.Job(), Root: &newStore}
 12468  	newStore.LicenseStore = &RetryLayerLicenseStore{LicenseStore: childStore.License(), Root: &newStore}
 12469  	newStore.LinkMetadataStore = &RetryLayerLinkMetadataStore{LinkMetadataStore: childStore.LinkMetadata(), Root: &newStore}
 12470  	newStore.OAuthStore = &RetryLayerOAuthStore{OAuthStore: childStore.OAuth(), Root: &newStore}
 12471  	newStore.PluginStore = &RetryLayerPluginStore{PluginStore: childStore.Plugin(), Root: &newStore}
 12472  	newStore.PostStore = &RetryLayerPostStore{PostStore: childStore.Post(), Root: &newStore}
 12473  	newStore.PreferenceStore = &RetryLayerPreferenceStore{PreferenceStore: childStore.Preference(), Root: &newStore}
 12474  	newStore.ProductNoticesStore = &RetryLayerProductNoticesStore{ProductNoticesStore: childStore.ProductNotices(), Root: &newStore}
 12475  	newStore.ReactionStore = &RetryLayerReactionStore{ReactionStore: childStore.Reaction(), Root: &newStore}
 12476  	newStore.RemoteClusterStore = &RetryLayerRemoteClusterStore{RemoteClusterStore: childStore.RemoteCluster(), Root: &newStore}
 12477  	newStore.RetentionPolicyStore = &RetryLayerRetentionPolicyStore{RetentionPolicyStore: childStore.RetentionPolicy(), Root: &newStore}
 12478  	newStore.RoleStore = &RetryLayerRoleStore{RoleStore: childStore.Role(), Root: &newStore}
 12479  	newStore.SchemeStore = &RetryLayerSchemeStore{SchemeStore: childStore.Scheme(), Root: &newStore}
 12480  	newStore.SessionStore = &RetryLayerSessionStore{SessionStore: childStore.Session(), Root: &newStore}
 12481  	newStore.SharedChannelStore = &RetryLayerSharedChannelStore{SharedChannelStore: childStore.SharedChannel(), Root: &newStore}
 12482  	newStore.StatusStore = &RetryLayerStatusStore{StatusStore: childStore.Status(), Root: &newStore}
 12483  	newStore.SystemStore = &RetryLayerSystemStore{SystemStore: childStore.System(), Root: &newStore}
 12484  	newStore.TeamStore = &RetryLayerTeamStore{TeamStore: childStore.Team(), Root: &newStore}
 12485  	newStore.TermsOfServiceStore = &RetryLayerTermsOfServiceStore{TermsOfServiceStore: childStore.TermsOfService(), Root: &newStore}
 12486  	newStore.ThreadStore = &RetryLayerThreadStore{ThreadStore: childStore.Thread(), Root: &newStore}
 12487  	newStore.TokenStore = &RetryLayerTokenStore{TokenStore: childStore.Token(), Root: &newStore}
 12488  	newStore.UploadSessionStore = &RetryLayerUploadSessionStore{UploadSessionStore: childStore.UploadSession(), Root: &newStore}
 12489  	newStore.UserStore = &RetryLayerUserStore{UserStore: childStore.User(), Root: &newStore}
 12490  	newStore.UserAccessTokenStore = &RetryLayerUserAccessTokenStore{UserAccessTokenStore: childStore.UserAccessToken(), Root: &newStore}
 12491  	newStore.UserTermsOfServiceStore = &RetryLayerUserTermsOfServiceStore{UserTermsOfServiceStore: childStore.UserTermsOfService(), Root: &newStore}
 12492  	newStore.WebhookStore = &RetryLayerWebhookStore{WebhookStore: childStore.Webhook(), Root: &newStore}
 12493  	return &newStore
 12494  }