@@ -619,6 +619,18 @@ func prepareBoltSnapshot(snapshot *IndexSnapshot, tx *bolt.Tx, path string,
619619 return nil , nil , err
620620 }
621621 }
622+
623+ // store updated field info
624+ if segmentSnapshot .updatedFields != nil {
625+ b , err := json .Marshal (segmentSnapshot .updatedFields )
626+ if err != nil {
627+ return nil , nil , err
628+ }
629+ err = snapshotSegmentBucket .Put (boltUpdatedFieldsKey , b )
630+ if err != nil {
631+ return nil , nil , err
632+ }
633+ }
622634 }
623635
624636 return filenames , newSegmentPaths , nil
@@ -722,6 +734,7 @@ var boltMetaDataSegmentTypeKey = []byte("type")
722734var boltMetaDataSegmentVersionKey = []byte ("version" )
723735var boltMetaDataTimeStamp = []byte ("timeStamp" )
724736var boltStatsKey = []byte ("stats" )
737+ var boltUpdatedFieldsKey = []byte ("fields" )
725738var TotBytesWrittenKey = []byte ("TotBytesWritten" )
726739
727740func (s * Scorch ) loadFromBolt () error {
@@ -860,6 +873,9 @@ func (s *Scorch) loadSnapshot(snapshot *bolt.Bucket) (*IndexSnapshot, error) {
860873 }
861874 rv .segment = append (rv .segment , segmentSnapshot )
862875 rv .offsets = append (rv .offsets , running )
876+ if segmentSnapshot .updatedFields != nil {
877+ rv .updatedFields = segmentSnapshot .updatedFields
878+ }
863879 running += segmentSnapshot .segment .Count ()
864880 }
865881 }
@@ -872,13 +888,13 @@ func (s *Scorch) loadSegment(segmentBucket *bolt.Bucket) (*SegmentSnapshot, erro
872888 return nil , fmt .Errorf ("segment path missing" )
873889 }
874890 segmentPath := s .path + string (os .PathSeparator ) + string (pathBytes )
875- segment , err := s .segPlugin .Open (segmentPath )
891+ seg , err := s .segPlugin .Open (segmentPath )
876892 if err != nil {
877893 return nil , fmt .Errorf ("error opening bolt segment: %v" , err )
878894 }
879895
880896 rv := & SegmentSnapshot {
881- segment : segment ,
897+ segment : seg ,
882898 cachedDocs : & cachedDocs {cache : nil },
883899 cachedMeta : & cachedMeta {meta : nil },
884900 }
@@ -888,7 +904,7 @@ func (s *Scorch) loadSegment(segmentBucket *bolt.Bucket) (*SegmentSnapshot, erro
888904 r := bytes .NewReader (deletedBytes )
889905 _ , err := deletedBitmap .ReadFrom (r )
890906 if err != nil {
891- _ = segment .Close ()
907+ _ = seg .Close ()
892908 return nil , fmt .Errorf ("error reading deleted bytes: %v" , err )
893909 }
894910 if ! deletedBitmap .IsEmpty () {
@@ -902,11 +918,22 @@ func (s *Scorch) loadSegment(segmentBucket *bolt.Bucket) (*SegmentSnapshot, erro
902918 err := json .Unmarshal (statBytes , & statsMap )
903919 stats := & fieldStats {statMap : statsMap }
904920 if err != nil {
905- _ = segment .Close ()
921+ _ = seg .Close ()
906922 return nil , fmt .Errorf ("error reading stat bytes: %v" , err )
907923 }
908924 rv .stats = stats
909925 }
926+ updatedFieldBytes := segmentBucket .Get (boltUpdatedFieldsKey )
927+ if updatedFieldBytes != nil {
928+ var updatedFields map [string ]index.FieldInfo
929+
930+ err := json .Unmarshal (updatedFieldBytes , & updatedFields )
931+ if err != nil {
932+ _ = seg .Close ()
933+ return nil , fmt .Errorf ("error reading updated field bytes: %v" , err )
934+ }
935+ rv .updatedFields = updatedFields
936+ }
910937
911938 return rv , nil
912939}
0 commit comments