93 lines
2.4 KiB
Plaintext
93 lines
2.4 KiB
Plaintext
|
|
// IN APPEND MEASURES
|
||
|
|
// if len(s.buffer) < storage.DataPageSize {
|
||
|
|
// // allocate bigger buffer
|
||
|
|
// buf, databuf := growBuffers(growBuffersIn{
|
||
|
|
// databuf: s.buffer,
|
||
|
|
// tSize: timestamps.Size(),
|
||
|
|
// vSize: values.Size(),
|
||
|
|
// requiredSpace: totalRequiredSpace,
|
||
|
|
// })
|
||
|
|
|
||
|
|
// s.buffer = buf
|
||
|
|
// // replace buffer in timestamps and values
|
||
|
|
// timestamps.Rotate(databuf) // fix pos
|
||
|
|
// values.Rotate(databuf) // fix pos
|
||
|
|
// } else {
|
||
|
|
|
||
|
|
// IN DATABASE
|
||
|
|
|
||
|
|
// FIX
|
||
|
|
// УВАГА!
|
||
|
|
// Якщо буфер metric.buffer < розміру сторінки - для timestamps доступний весь буфер.
|
||
|
|
// Якщо буфер досяг розміру сторінки - в timestamps я передаю buffer[:DataPagePayloadSize]
|
||
|
|
|
||
|
|
// var dataBufferSizes = []int{
|
||
|
|
// 1024,
|
||
|
|
// 2048,
|
||
|
|
// 4096,
|
||
|
|
// 8192,
|
||
|
|
// }
|
||
|
|
|
||
|
|
// func calculateDataBufferSize(payloadSize int) int {
|
||
|
|
// for _, bufferSize := range dataBufferSizes {
|
||
|
|
// if payloadSize <= bufferSize {
|
||
|
|
// return bufferSize
|
||
|
|
// }
|
||
|
|
// }
|
||
|
|
// return storage.DataPageSize
|
||
|
|
// }
|
||
|
|
|
||
|
|
// func allocateBuffers(requiredSpace int) (buf, databuf []byte) {
|
||
|
|
// bufferSize := calculateDataBufferSize(requiredSpace)
|
||
|
|
// buf = make([]byte, bufferSize)
|
||
|
|
// if bufferSize == storage.DataPageSize {
|
||
|
|
// databuf = buf[:storage.DataPagePayloadSize]
|
||
|
|
// } else {
|
||
|
|
// databuf = buf
|
||
|
|
// }
|
||
|
|
// return
|
||
|
|
// }
|
||
|
|
|
||
|
|
// // src - databuf
|
||
|
|
// type growBuffersIn struct {
|
||
|
|
// databuf []byte
|
||
|
|
// tSize int
|
||
|
|
// vSize int
|
||
|
|
// requiredSpace int
|
||
|
|
// }
|
||
|
|
|
||
|
|
// func growBuffers(in growBuffersIn) (buf, databuf []byte) {
|
||
|
|
// buf, databuf = allocateBuffers(in.requiredSpace)
|
||
|
|
// copy(databuf[len(databuf)-in.tSize:], in.databuf[len(in.databuf)-in.tSize:])
|
||
|
|
// copy(databuf, in.databuf[:in.vSize])
|
||
|
|
// return
|
||
|
|
// }
|
||
|
|
|
||
|
|
// type shrinkBufferIn struct {
|
||
|
|
// Buffer []byte
|
||
|
|
// TimestampsSize int
|
||
|
|
// ValuesSize int
|
||
|
|
// NewBufferSize int
|
||
|
|
// }
|
||
|
|
|
||
|
|
// func shrinkBuffer(in shrinkBufferIn) []byte {
|
||
|
|
// buf := make([]byte, in.NewBufferSize)
|
||
|
|
// copy(buf, in.Buffer[:in.ValuesSize])
|
||
|
|
// copy(buf[:len(buf)-in.TimestampsSize], in.Buffer[len(in.Buffer)-in.TimestampsSize:])
|
||
|
|
// return buf
|
||
|
|
// }
|
||
|
|
|
||
|
|
// IN REPLAY_METRIC.TO_METRIC
|
||
|
|
|
||
|
|
// var (
|
||
|
|
// requiredSpace = s.tSize + s.vSize
|
||
|
|
// )
|
||
|
|
// bufferSize := calculateDataBufferSize(requiredSpace)
|
||
|
|
// if len(s.buf) > bufferSize {
|
||
|
|
// s.buf = shrinkBuffer(shrinkBufferIn{
|
||
|
|
// Buffer: s.buf,
|
||
|
|
// TimestampsSize: s.tSize,
|
||
|
|
// ValuesSize: s.vSize,
|
||
|
|
// NewBufferSize: bufferSize,
|
||
|
|
// })
|
||
|
|
// }
|