Monorepo for Tangled

appview/indexer: force bleve index rebuild when mapping changes

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

authored by

Thomas Karpiniec 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 { ··· 118 121 return false, errors.New("indexer is already initialized") 119 122 } 120 123 121 - indexer, err := openIndexer(ctx, ix.path) 124 + indexer, err := openIndexer(ctx, ix.path, issueIndexerVersion) 122 125 if err != nil { 123 126 return false, err 124 127 } ··· 135 138 if err != nil { 136 139 return false, err 137 140 } 141 + indexer.SetInternal([]byte("mapping_version"), []byte{byte(issueIndexerVersion)}) 138 142 139 143 ix.indexer = indexer 140 144 141 145 return false, nil 142 146 } 143 147 144 - func openIndexer(ctx context.Context, path string) (bleve.Index, error) { 148 + func openIndexer(ctx context.Context, path string, version int) (bleve.Index, error) { 145 149 l := tlog.FromContext(ctx) 146 150 indexer, err := bleve.Open(path) 147 151 if err != nil { ··· 151 155 } 152 156 return nil, nil 153 157 } 158 + 159 + storedVersion, _ := indexer.GetInternal([]byte("mapping_version")) 160 + if storedVersion == nil || int(storedVersion[0]) != version { 161 + l.Info("Indexer mapping version changed, deleting and rebuilding") 162 + indexer.Close() 163 + return nil, os.RemoveAll(path) 164 + } 165 + 154 166 return indexer, nil 155 167 } 156 168
+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 { ··· 113 116 return false, errors.New("indexer is already initialized") 114 117 } 115 118 116 - indexer, err := openIndexer(ctx, ix.path) 119 + indexer, err := openIndexer(ctx, ix.path, pullIndexerVersion) 117 120 if err != nil { 118 121 return false, err 119 122 } ··· 130 133 if err != nil { 131 134 return false, err 132 135 } 136 + indexer.SetInternal([]byte("mapping_version"), []byte{byte(pullIndexerVersion)}) 133 137 134 138 ix.indexer = indexer 135 139 136 140 return false, nil 137 141 } 138 142 139 - func openIndexer(ctx context.Context, path string) (bleve.Index, error) { 143 + func openIndexer(ctx context.Context, path string, version int) (bleve.Index, error) { 140 144 l := tlog.FromContext(ctx) 141 145 indexer, err := bleve.Open(path) 142 146 if err != nil { ··· 146 150 } 147 151 return nil, nil 148 152 } 153 + 154 + storedVersion, _ := indexer.GetInternal([]byte("mapping_version")) 155 + if storedVersion == nil || int(storedVersion[0]) != version { 156 + l.Info("Indexer mapping version changed, deleting and rebuilding") 157 + indexer.Close() 158 + return nil, os.RemoveAll(path) 159 + } 160 + 149 161 return indexer, nil 150 162 } 151 163