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