~raghavendra-prabhu/percona-xtradb-cluster/release-5.5.30-galera-2.x

« back to all changes in this revision

Viewing changes to galera/src/write_set.cpp

  • Committer: Raghavendra D Prabhu
  • Date: 2013-04-05 13:55:24 UTC
  • mfrom: (95.2.22 2.x)
  • Revision ID: raghavendra.prabhu@percona.com-20130405135524-aa4f4y9rko7t3cvt
Merge galera/2.x branch.

We merge upto r148 of galera/2.x branch for 5.5.30-23.7.4 PXC release.

Show diffs side-by-side

added added

removed removed

Lines of Context:
37
37
    return (gu::serial_size4(ws.keys_) + gu::serial_size4(ws.data_));
38
38
}
39
39
 
 
40
std::pair<size_t, size_t>
 
41
galera::WriteSet::segment(const gu::byte_t* buf, size_t buf_len, size_t offset)
 
42
{
 
43
    uint32_t data_len;
 
44
    offset = gu::unserialize4(buf, buf_len, offset, data_len);
 
45
    if (offset + data_len > buf_len) gu_throw_error(EMSGSIZE);
 
46
    return std::pair<size_t, size_t>(offset, data_len);
 
47
}
 
48
 
 
49
size_t galera::WriteSet::keys(const gu::byte_t* buf,
 
50
                              size_t buf_len, size_t offset, int version,
 
51
                              KeySequence& ks)
 
52
{
 
53
    std::pair<size_t, size_t> seg(segment(buf, buf_len, offset));
 
54
    offset = seg.first;
 
55
    const size_t seg_end(seg.first + seg.second);
 
56
    assert(seg_end <= buf_len);
 
57
 
 
58
    while (offset < seg_end)
 
59
    {
 
60
        Key key(version);
 
61
        if ((offset = unserialize(buf, buf_len, offset, key)) == 0)
 
62
        {
 
63
            gu_throw_fatal << "failed to unserialize key";
 
64
        }
 
65
        ks.push_back(key);
 
66
    }
 
67
    assert(offset == seg_end);
 
68
    return offset;
 
69
}
40
70
 
41
71
void galera::WriteSet::append_key(const Key& key)
42
72
{