func (s *DynamoStore) Root() ref.Ref { result, err := s.ddbsvc.GetItem(&dynamodb.GetItemInput{ TableName: aws.String(s.table), Key: map[string]*dynamodb.AttributeValue{ refAttr: {B: s.rootKey}, }, }) d.Exp.NoError(err) if len(result.Item) == 0 { return ref.Ref{} } itemLen := len(result.Item) d.Chk.True(itemLen == 2 || itemLen == 3, "Root should have 2 or three attributes on it: %+v", result.Item) if itemLen == 3 { d.Chk.NotNil(result.Item[compAttr]) d.Chk.NotNil(result.Item[compAttr].S) d.Chk.Equal(noneValue, *result.Item[compAttr].S) } return ref.FromSlice(result.Item[chunkAttr].B) }
func (s *DynamoStore) processResponses(responses []map[string]*dynamodb.AttributeValue, batch readBatch) { for _, item := range responses { p := item[refAttr] d.Chk.NotNil(p) r := ref.FromSlice(s.removeNamespace(p.B)) p = item[chunkAttr] d.Chk.NotNil(p) b := p.B if p = item[compAttr]; p != nil && *p.S == gzipValue { gr, err := gzip.NewReader(bytes.NewReader(b)) d.Chk.NoError(err) buf := &bytes.Buffer{} _, err = io.Copy(buf, gr) d.Chk.NoError(err) b = buf.Bytes() } c := NewChunkWithRef(r, b) for _, reqChan := range batch[r] { reqChan.Satisfy(c) } delete(batch, r) } }