KeyValueStore: Add KEY_ENDING sign to the end of key
Keys stored in alphabetical order and need to follow ghobject_t comparison
rule. "generation" and "shard_id" are optional fields for object key, but
a default ghobject with UINT64_MAX generation(by default) will larger than
the same ghobject with other generation. GenericObjectMap rejects to store
generation if generation is UINT64_MAX in order to reduce too much words
in key. So we need to add a MAX sign to the end of key to make ordering
is same with ghobject's comparison rule.
For example:
_GHOBJTOSEQ_:1%e1ds0_head!
D168A7E8!!1!!benchmark_last_metadata!head
_GHOBJTOSEQ_:1%e1ds0_head!
D168A7E8!!1!!benchmark_last_metadata!head!78!0
The first key should larger than the second in ghobject_t ordering because
of generation. But the first key less than the second in GenericObjectMap.
_GHOBJTOSEQ_:1%e1ds0_head!
D168A7E8!!1!!benchmark_last_metadata!head
_GHOBJTOSEQ_:1%e1ds0_head!
D168A7E8!!1!!benchmark_last_metadata!head!78!0
After we add KEY_ENDING, '!' is (21) in hexadecimal:
_GHOBJTOSEQ_:1%e1ds0_head!
D168A7E8!!1!!benchmark_last_metadata!head(21)78!0(FF)
_GHOBJTOSEQ_:1%e1ds0_head!
D168A7E8!!1!!benchmark_last_metadata!head(FF)
Fix bug #10119
Signed-off-by: Haomai Wang <haomaiwang@gmail.com>