func (t *BleveDestPartition) OpaqueSet(partition string, value []byte) error { t.m.Lock() t.lastOpaque = append(t.lastOpaque[0:0], value...) t.lastUUID = cbgt.ParseOpaqueToUUID(value) t.batch.SetInternal(t.partitionOpaque, t.lastOpaque) t.m.Unlock() return nil }
func (t *BleveDestPartition) OpaqueGet(partition string) ([]byte, uint64, error) { t.m.Lock() if t.lastOpaque == nil { // TODO: Need way to control memory alloc during GetInternal(), // perhaps with optional memory allocator func() parameter? value, err := t.bindex.GetInternal(t.partitionOpaque) if err != nil { t.m.Unlock() return nil, 0, err } t.lastOpaque = append([]byte(nil), value...) // Note: copies value. t.lastUUID = cbgt.ParseOpaqueToUUID(value) } if t.seqMax <= 0 { // TODO: Need way to control memory alloc during GetInternal(), // perhaps with optional memory allocator func() parameter? buf, err := t.bindex.GetInternal([]byte(t.partition)) if err != nil { t.m.Unlock() return nil, 0, err } if len(buf) <= 0 { t.m.Unlock() return t.lastOpaque, 0, nil // No seqMax buf is a valid case. } if len(buf) != 8 { t.m.Unlock() return nil, 0, fmt.Errorf("bleve: unexpected size for seqMax bytes") } t.seqMax = binary.BigEndian.Uint64(buf[0:8]) binary.BigEndian.PutUint64(t.seqMaxBuf, t.seqMax) } lastOpaque, seqMax := t.lastOpaque, t.seqMax t.m.Unlock() return lastOpaque, seqMax, nil }