From 10d3287b4d5370ec2faf28066d0e6ce152052266 Mon Sep 17 00:00:00 2001 From: Lion Date: Wed, 22 Jun 2022 10:22:40 +0800 Subject: [PATCH] record the start and end segment index ptr --- data/ip2region.xdb | Bin 11065998 -> 11065998 bytes maker/golang/xdb/maker.go | 28 ++++++++++++++++++++++++++-- 2 files changed, 26 insertions(+), 2 deletions(-) diff --git a/data/ip2region.xdb b/data/ip2region.xdb index e9e125e8dda12aaaea0400fce5c6e5e48c169b23..31f96a1fb1695b14c86a73a0cc14fa6c600263c1 100644 GIT binary patch delta 535 zcmWN==T;5?0D$4INJd)9s_cqHHfhP0j8HTvk&uy;hEVio#8;7!kRtu=oGwN;(H*?; zobv>y#=?UCM}-DL0u61G)h)A;fsW~k{+O9gF$6<#4$j3eoQL5!9~a<4T!az07$Y$X zqcH|!aS6s@JTAp$xExpDN=(2+Ou|*T8rR@jT!-s%114h%rs782glV`L({T%K#SGkr z+i?f(#9g=>_uyXKhnct^voITTFc zKEy_B!bjMQE!c`}_!!&q2|mSV*nyq+9A97;g5CHMU*T(fgFW~b-(e7Yu@C$4J$}Fe n{D_122|wc(9Kx?SjNkA({=gCZiK94%zwkGXRwz$x4`qf zZ{Y7tL|}eYXb2(Z{Amov{|}}`_aO5^B}~F4LLy~>L`k&7$U=#gMG_~AWr@VgQb~|y zvRqckN=cL?NtRWTBCBPMq)M8k%Ua2hb&@ITWrJkNM%g6UvRSssR>_fVk}KOKPx7Te z3Z+PPNU`jcU9wyD$X?ke`=vw<$U!NULvmP-NSTz&QK^thsgi1`kz-OTb#h!z$VsV} zQ*v4w_y^B#-5ZbjwqDCeP)C^vFx;l~iDG9&?cE5j0$5gC;+8J7u}ly~x8 fKFCM;B%ftUzQ|XZmTxj6-{pt=lwbe&9hjX1eJ7e5 diff --git a/maker/golang/xdb/maker.go b/maker/golang/xdb/maker.go index 841cd57..7cf086b 100644 --- a/maker/golang/xdb/maker.go +++ b/maker/golang/xdb/maker.go @@ -260,7 +260,7 @@ func (m *Maker) Start() error { // 2, write the index block and cache the super index block log.Printf("try to write the segment index block ... ") - var counter = 0 + var counter, startIndexPtr, endIndexPtr = 0, int64(-1), int64(-1) for _, seg := range m.segments { dataPtr, has := m.regionPool[seg.Region] if !has { @@ -296,10 +296,18 @@ func (m *Maker) Start() error { log.Printf("|-segment index: %d, ptr: %d, segment: %s\n", counter, pos, s.String()) m.setVectorIndex(s.StartIP, uint32(pos)) counter++ + + // check and record the start index ptr + if startIndexPtr == -1 { + startIndexPtr = pos + } + + endIndexPtr = pos } } // synchronized the vector index block + log.Printf("try to write the vector index block ... ") _, err = m.dstHandle.Seek(int64(HeaderInfoLength), 0) if err != nil { return fmt.Errorf("seek vector index first ptr: %w", err) @@ -314,7 +322,23 @@ func (m *Maker) Start() error { } } - log.Printf("write done, with %d data blocks and (%d, %d) index blocks", len(m.regionPool), len(m.segments), counter) + // synchronized the segment index info + log.Printf("try to write the segment index ptr ... ") + var buff = make([]byte, 8) + binary.LittleEndian.PutUint32(buff, uint32(startIndexPtr)) + binary.LittleEndian.PutUint32(buff[4:], uint32(endIndexPtr)) + _, err = m.dstHandle.Seek(8, 0) + if err != nil { + return fmt.Errorf("seek segment index ptr: %w", err) + } + + _, err = m.dstHandle.Write(buff) + if err != nil { + return fmt.Errorf("write segment index ptr: %w", err) + } + + log.Printf("write done, dataBlocks: %d, indexBlocks: (%d, %d), indexPtr: (%d, %d)", + len(m.regionPool), len(m.segments), counter, startIndexPtr, endIndexPtr) return nil }