Changeset 423 in code for trunk/user.go


Ignore:
Timestamp:
Oct 25, 2020, 4:47:38 PM (5 years ago)
Author:
contact
Message:

Add message store abstraction

Introduce a messageStore type, which will allow for multiple
implementations (e.g. in the DB or in-memory instead of on-disk).

The message store is per-user so that we don't need to deal with locking
and it's easier to implement per-user limits.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/user.go

    r421 r423  
    250250        networks        []*network
    251251        downstreamConns []*downstreamConn
     252        msgStore        *messageStore
    252253
    253254        // LIST commands in progress
     
    262263
    263264func newUser(srv *Server, record *User) *user {
     265        var msgStore *messageStore
     266        if srv.LogPath != "" {
     267                msgStore = newMessageStore(srv.LogPath, record.Username)
     268        }
     269
    264270        return &user{
    265                 User:   *record,
    266                 srv:    srv,
    267                 events: make(chan event, 64),
    268                 done:   make(chan struct{}),
     271                User:     *record,
     272                srv:      srv,
     273                events:   make(chan event, 64),
     274                done:     make(chan struct{}),
     275                msgStore: msgStore,
    269276        }
    270277}
     
    313320
    314321func (u *user) run() {
    315         defer close(u.done)
     322        defer func() {
     323                if u.msgStore != nil {
     324                        if err := u.msgStore.Close(); err != nil {
     325                                u.srv.Logger.Printf("failed to close message store for user %q: %v", u.Username, err)
     326                        }
     327                }
     328                close(u.done)
     329        }()
    316330
    317331        networks, err := u.srv.db.ListNetworks(u.ID)
     
    460474        uc.network.conn = nil
    461475
    462         for _, ml := range uc.messageLoggers {
    463                 if err := ml.Close(); err != nil {
    464                         uc.logger.Printf("failed to close message logger: %v", err)
    465                 }
    466         }
    467 
    468476        uc.endPendingLISTs(true)
    469477
Note: See TracChangeset for help on using the changeset viewer.