Mirror of @tangled.org/core. Running on a Raspberry Pi Zero 2

appview/indexer: force bleve index rebuild when mapping changes

Signed-off-by: Thomas Karpiniec <tkarpiniec@icloud.com>

authored by octet-stream.net and committed by tangled.org 79d5bed4 1f5feacc

+28 -4
+14 -2
appview/indexer/issues/indexer.go
··· 29 29 issueIndexerDocType = "issueIndexerDocType" 30 30 31 31 unicodeNormalizeName = "uicodeNormalize" 32 + 33 + // Bump this when the index mapping changes to trigger a rebuild. 34 + issueIndexerVersion = 2 32 35 ) 33 36 34 37 type Indexer struct { ··· 121 118 return false, errors.New("indexer is already initialized") 122 119 } 123 120 124 - indexer, err := openIndexer(ctx, ix.path) 121 + indexer, err := openIndexer(ctx, ix.path, issueIndexerVersion) 125 122 if err != nil { 126 123 return false, err 127 124 } ··· 138 135 if err != nil { 139 136 return false, err 140 137 } 138 + indexer.SetInternal([]byte("mapping_version"), []byte{byte(issueIndexerVersion)}) 141 139 142 140 ix.indexer = indexer 143 141 144 142 return false, nil 145 143 } 146 144 147 - func openIndexer(ctx context.Context, path string) (bleve.Index, error) { 145 + func openIndexer(ctx context.Context, path string, version int) (bleve.Index, error) { 148 146 l := tlog.FromContext(ctx) 149 147 indexer, err := bleve.Open(path) 150 148 if err != nil { ··· 155 151 } 156 152 return nil, nil 157 153 } 154 + 155 + storedVersion, _ := indexer.GetInternal([]byte("mapping_version")) 156 + if storedVersion == nil || int(storedVersion[0]) != version { 157 + l.Info("Indexer mapping version changed, deleting and rebuilding") 158 + indexer.Close() 159 + return nil, os.RemoveAll(path) 160 + } 161 + 158 162 return indexer, nil 159 163 } 160 164
+14 -2
appview/indexer/pulls/indexer.go
··· 28 28 pullIndexerDocType = "pullIndexerDocType" 29 29 30 30 unicodeNormalizeName = "uicodeNormalize" 31 + 32 + // Bump this when the index mapping changes to trigger a rebuild. 33 + pullIndexerVersion = 2 31 34 ) 32 35 33 36 type Indexer struct { ··· 116 113 return false, errors.New("indexer is already initialized") 117 114 } 118 115 119 - indexer, err := openIndexer(ctx, ix.path) 116 + indexer, err := openIndexer(ctx, ix.path, pullIndexerVersion) 120 117 if err != nil { 121 118 return false, err 122 119 } ··· 133 130 if err != nil { 134 131 return false, err 135 132 } 133 + indexer.SetInternal([]byte("mapping_version"), []byte{byte(pullIndexerVersion)}) 136 134 137 135 ix.indexer = indexer 138 136 139 137 return false, nil 140 138 } 141 139 142 - func openIndexer(ctx context.Context, path string) (bleve.Index, error) { 140 + func openIndexer(ctx context.Context, path string, version int) (bleve.Index, error) { 143 141 l := tlog.FromContext(ctx) 144 142 indexer, err := bleve.Open(path) 145 143 if err != nil { ··· 150 146 } 151 147 return nil, nil 152 148 } 149 + 150 + storedVersion, _ := indexer.GetInternal([]byte("mapping_version")) 151 + if storedVersion == nil || int(storedVersion[0]) != version { 152 + l.Info("Indexer mapping version changed, deleting and rebuilding") 153 + indexer.Close() 154 + return nil, os.RemoveAll(path) 155 + } 156 + 153 157 return indexer, nil 154 158 } 155 159