Many hyperlinks are disabled.
Use anonymous login
to enable hyperlinks.
Overview
Comment: | Refactor zettel notification in boxes |
---|---|
Timelines: | family | ancestors | descendants | both | trunk |
Files: | files | file ages | folders |
SHA3-256: |
e154f55f38757bb9e718fd4b36e82ad2 |
User & Date: | stern 2024-09-26 11:42:19 |
Context
2024-09-26
| ||
11:48 | Refactor kernel to remove some warnings ... (check-in: 105f0b6440 user: stern tags: trunk) | |
11:42 | Refactor zettel notification in boxes ... (check-in: e154f55f38 user: stern tags: trunk) | |
2024-09-23
| ||
16:59 | Enlarge index queue to remove chance of deadlock ... (check-in: d7cedf7bce user: stern tags: trunk) | |
Changes
Changes to box/box.go.
︙ | ︙ | |||
215 216 217 218 219 220 221 222 223 224 225 226 227 228 | Box BaseBox Reason UpdateReason Zid id.Zid } // UpdateFunc is a function to be called when a change is detected. type UpdateFunc func(UpdateInfo) // Subject is a box that notifies observers about changes. type Subject interface { // RegisterObserver registers an observer that will be notified // if one or all zettel are found to be changed. RegisterObserver(UpdateFunc) } | > > > | 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 | Box BaseBox Reason UpdateReason Zid id.Zid } // UpdateFunc is a function to be called when a change is detected. type UpdateFunc func(UpdateInfo) // UpdateNotifier is an UpdateFunc, but with separate values. type UpdateNotifier func(BaseBox, id.Zid, UpdateReason) // Subject is a box that notifies observers about changes. type Subject interface { // RegisterObserver registers an observer that will be notified // if one or all zettel are found to be changed. RegisterObserver(UpdateFunc) } |
︙ | ︙ |
Changes to box/dirbox/dirbox.go.
︙ | ︙ | |||
200 201 202 203 204 205 206 | func (dp *dirBox) stopFileServices() { for _, c := range dp.fCmds { close(c) } } func (dp *dirBox) notifyChanged(zid id.Zid, reason box.UpdateReason) { | | | | 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 | func (dp *dirBox) stopFileServices() { for _, c := range dp.fCmds { close(c) } } func (dp *dirBox) notifyChanged(zid id.Zid, reason box.UpdateReason) { if notify := dp.cdata.Notify; notify != nil { dp.log.Trace().Zid(zid).Uint("reason", uint64(reason)).Msg("notifyChanged") notify(dp, zid, reason) } } func (dp *dirBox) getFileChan(zid id.Zid) chan fileCmd { // Based on https://en.wikipedia.org/wiki/Fowler%E2%80%93Noll%E2%80%93Vo_hash_function sum := 2166136261 ^ uint32(zid) sum *= 16777619 |
︙ | ︙ |
Changes to box/filebox/zipbox.go.
︙ | ︙ | |||
31 32 33 34 35 36 37 | ) type zipBox struct { log *logger.Logger number int name string enricher box.Enricher | | | 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 | ) type zipBox struct { log *logger.Logger number int name string enricher box.Enricher notify box.UpdateNotifier dirSrv *notify.DirService } func (zb *zipBox) Location() string { if strings.HasPrefix(zb.name, "/") { return "file://" + zb.name } |
︙ | ︙ |
Changes to box/manager/manager.go.
︙ | ︙ | |||
36 37 38 39 40 41 42 | ) // ConnectData contains all administration related values. type ConnectData struct { Number int // number of the box, starting with 1. Config config.Config Enricher box.Enricher | | | 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 | ) // ConnectData contains all administration related values. type ConnectData struct { Number int // number of the box, starting with 1. Config config.Config Enricher box.Enricher Notify box.UpdateNotifier Mapper Mapper } // Mapper allows to inspect the mapping between old-style and new-style zettel identifier. type Mapper interface { Warnings(context.Context) (*id.Set, error) // Fetch problematic zettel identifier |
︙ | ︙ | |||
142 143 144 145 146 147 148 | propertyKeys.Set(kd.Name) } } boxLog := kernel.Main.GetLogger(kernel.BoxService) mgr := &Manager{ mgrLog: boxLog.Clone().Str("box", "manager").Child(), rtConfig: rtConfig, | | | | 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 | propertyKeys.Set(kd.Name) } } boxLog := kernel.Main.GetLogger(kernel.BoxService) mgr := &Manager{ mgrLog: boxLog.Clone().Str("box", "manager").Child(), rtConfig: rtConfig, infos: make(chan box.UpdateInfo, len(boxURIs)*10), propertyKeys: propertyKeys, idxLog: boxLog.Clone().Str("box", "index").Child(), idxStore: createIdxStore(rtConfig), idxAr: newAnteroomQueue(1000), idxReady: make(chan struct{}, 1), } mgr.zidMapper = NewZidMapper(mgr) cdata := ConnectData{Number: 1, Config: rtConfig, Enricher: mgr, Notify: mgr.notifyChanged, Mapper: mgr.zidMapper} boxes := make([]box.ManagedBox, 0, len(boxURIs)+2) for _, uri := range boxURIs { p, err := Connect(uri, authManager, &cdata) if err != nil { return nil, err } if p != nil { |
︙ | ︙ | |||
484 485 486 487 488 489 490 | func (mgr *Manager) checkContinue(ctx context.Context) error { if mgr.State() != box.StartStateStarted { return box.ErrStopped } return ctx.Err() } | > > > > > > | 484 485 486 487 488 489 490 491 492 493 494 495 496 | func (mgr *Manager) checkContinue(ctx context.Context) error { if mgr.State() != box.StartStateStarted { return box.ErrStopped } return ctx.Err() } func (mgr *Manager) notifyChanged(bbox box.BaseBox, zid id.Zid, reason box.UpdateReason) { if infos := mgr.infos; infos != nil && zid != id.MappingZid { mgr.infos <- box.UpdateInfo{Box: bbox, Reason: reason, Zid: zid} } } |
Changes to box/membox/membox.go.
︙ | ︙ | |||
51 52 53 54 55 56 57 | maxBytes int mx sync.RWMutex // Protects the following fields zettel map[id.Zid]zettel.Zettel curBytes int } func (mb *memBox) notifyChanged(zid id.Zid, reason box.UpdateReason) { | | | | 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 | maxBytes int mx sync.RWMutex // Protects the following fields zettel map[id.Zid]zettel.Zettel curBytes int } func (mb *memBox) notifyChanged(zid id.Zid, reason box.UpdateReason) { if notify := mb.cdata.Notify; notify != nil { notify(mb, zid, reason) } } func (mb *memBox) Location() string { return mb.u.String() } |
︙ | ︙ |
Changes to box/notify/directory.go.
︙ | ︙ | |||
52 53 54 55 56 57 58 | // DirService specifies a directory service for file based zettel. type DirService struct { box box.ManagedBox log *logger.Logger dirPath string notifier Notifier | | | | | 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 | // DirService specifies a directory service for file based zettel. type DirService struct { box box.ManagedBox log *logger.Logger dirPath string notifier Notifier infos box.UpdateNotifier mx sync.RWMutex // protects status, entries state DirServiceState entries entrySet } // ErrNoDirectory signals missing directory data. var ErrNoDirectory = errors.New("unable to retrieve zettel directory information") // NewDirService creates a new directory service. func NewDirService(box box.ManagedBox, log *logger.Logger, notifier Notifier, notify box.UpdateNotifier) *DirService { return &DirService{ box: box, log: log, notifier: notifier, infos: notify, state: DsCreated, } } // State the current service state. func (ds *DirService) State() DirServiceState { ds.mx.RLock() |
︙ | ︙ | |||
571 572 573 574 575 576 577 | if oldLen != newLen { return newLen < oldLen } return newExt < oldExt } func (ds *DirService) notifyChange(zid id.Zid, reason box.UpdateReason) { | | | | 571 572 573 574 575 576 577 578 579 580 581 582 | if oldLen != newLen { return newLen < oldLen } return newExt < oldExt } func (ds *DirService) notifyChange(zid id.Zid, reason box.UpdateReason) { if notify := ds.infos; notify != nil { ds.log.Trace().Zid(zid).Uint("reason", uint64(reason)).Msg("notifyChange") notify(ds.box, zid, reason) } } |