github.com/keybase/client/go@v0.0.0-20241007131713-f10651d043c8/kbfs/search/init.go (about) 1 // Copyright 2019 Keybase Inc. All rights reserved. 2 // Use of this source code is governed by a BSD 3 // license that can be found in the LICENSE file. 4 5 package search 6 7 import ( 8 "context" 9 "path/filepath" 10 11 "github.com/keybase/client/go/kbfs/data" 12 "github.com/keybase/client/go/kbfs/libcontext" 13 "github.com/keybase/client/go/kbfs/libkbfs" 14 "github.com/keybase/client/go/logger" 15 "github.com/keybase/client/go/protocol/keybase1" 16 ) 17 18 const ( 19 indexStorageDir = "kbfs_index" 20 bleveIndexDir = "bleve" 21 bserverStorageDir = "bserver" 22 mdserverStorageDir = "mdserver" 23 24 currentIndexVersion = "v1" 25 26 indexBlocksInCache = 100 27 ) 28 29 // Params returns a set of default parameters for search-related 30 // operations. 31 func Params(kbCtx libkbfs.Context, storageRoot string, uid keybase1.UID) ( 32 params libkbfs.InitParams, err error) { 33 params = libkbfs.DefaultInitParams(kbCtx) 34 params.Debug = true 35 params.LogToFile = true 36 37 params.EnableJournal = false 38 params.DiskCacheMode = libkbfs.DiskCacheModeOff 39 40 // Try to balance not using too much memory vs. the time/CPU it 41 // takes to keep pulling in index blocks from the disk. 42 params.CleanBlockCacheCapacity = 43 uint64(data.MaxBlockSizeBytesDefault) * indexBlocksInCache 44 45 // Make a per-user index for all the TLFs indexed locally by that 46 // user. This means on one hand that the user can get 47 // high-quality, ranked search results across all TLFs, all 48 // encrypted just for that user; on the other hand, different 49 // users with access to the same synced TLFs will have to re-index 50 // them. 51 params.StorageRoot = filepath.Join( 52 storageRoot, indexStorageDir, currentIndexVersion, uid.String()) 53 54 params.BServerAddr = "dir:" + filepath.Join( 55 params.StorageRoot, bserverStorageDir) 56 params.MDServerAddr = "dir:" + filepath.Join( 57 params.StorageRoot, mdserverStorageDir) 58 params.Mode = libkbfs.InitSingleOpWithQRString 59 60 return params, nil 61 } 62 63 // Init initializes a context and a libkbfs.Config for search 64 // operations. The config should be shutdown when it is done being 65 // used. 66 func Init(ctx context.Context, kbCtx libkbfs.Context, params libkbfs.InitParams, 67 keybaseServiceCn libkbfs.KeybaseServiceCn, 68 log logger.Logger, vlogLevel string) ( 69 context.Context, libkbfs.Config, error) { 70 ctx, err := libcontext.NewContextWithCancellationDelayer( 71 libcontext.NewContextReplayable( 72 ctx, func(ctx context.Context) context.Context { 73 return ctx 74 })) 75 if err != nil { 76 return ctx, nil, err 77 } 78 79 config, err := libkbfs.InitWithLogPrefix( 80 ctx, kbCtx, params, keybaseServiceCn, nil, log, "search") 81 if err != nil { 82 return ctx, nil, err 83 } 84 config.SetVLogLevel(vlogLevel) 85 86 return ctx, config, nil 87 }