【环境】
SequoiaDB shell version: 2.0
Release: 22001
2016-02-03-17.22.40(Enterprise)
【问题描述】
当集合已经被设置了 shardingkey 和shardingType 后,再次执行 alter 命令,会报告 -6 错误(参数错误)
【重现步骤】
> db.snapshot(8,{Name:"foo.bar"})
{
"Attribute": 0,
"CataInfo": [
{
"GroupID": 1000,
"GroupName": "group1",
"LowBound": {
"": 0
},
"UpBound": {
"": 4096
}
}
],
"CompressionType": 0,
"EnsureShardingIndex": true,
"InternalV": 3,
"Name": "foo.bar",
"Partition": 4096,
"ReplSize": 1,
"ShardingKey": {
"id": 1
},
"ShardingType": "hash",
"Version": 2,
"_id": {
"$oid": "56d653856ef57da76a816705"
}
}
Return 1 row(s).
Takes 0.993s.
> db.foo.bar.alter ({ShardingKey:{dd:1},ShardingType:"hash"})
(nofile):0 uncaught exception: -6
Invalid Argument
Takes 0.869s.
【预期结果】
错误信息建议更改为其他信息,能够让用户直接了解错误原因,例如该集合已经设置了 shardingKey 和shardingType
【实际结果】
直接报告 -6 错误(参数错误),用户无法明白错误在哪里
【解决方法】
原因:
collection 的alter操作,不支持
1,修改shardingkey
2,把普通表转换成主子表
3,修改压缩属性
本单问题在于 alter尝试去修改 shardingkey,故抛出-6错误
错误码不会详细到对应某个特定的错误,而是对应一类错误,具体的错误原因有错误消息来描述。后面会优化从服务端向客户端返回的错误消息,增加具体的错误原因描述。
【参考链接】
错误码
常见错误处理指南