// 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, // }) // }