Orion CB 不改变属性值(修正)
Orion CB does not change the value of an attribute (corrected)
更新:问题现在似乎已在 "global" Orion 实例中得到纠正。
我尝试更改实体的属性,但它似乎没有
想要的效果。我记得,相同的代码在 2 个月前运行良好。现在怎么办?
我在 "global" Orion Broker http://orion.lab.fi-ware.org:1026
中拥有具有浮动属性 test_1
的实体 cie_test_1
。我了解经纪人的目的是传播不断变化的价值。但是,该值似乎无法更改。交易详情如下。
代理的版本信息是
{
"orion" : {
"version" : "0.19.0",
"uptime" : "0 d, 0 h, 2 m, 31 s",
"git_hash" : "1ad73b298cd261861203fbffb9c789f6ade2796d",
"compile_time" : "Wed Feb 11 13:00:19 CET 2015",
"compiled_by" : "fermin",
"compiled_in" : "centollo"
}
}
传输值请求
要求
POST http://orion.lab.fi-ware.org:1026/ngsi10/contextEntities/cie_test_1/attributes/test_1
Host: orion.lab.fi-ware.org:1026
User-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64; rv:35.0) Gecko/20100101 Firefox/35.0
Accept: application/json
Accept-Language: en-us,en;q=0.7,fi;q=0.3
Accept-Encoding: gzip, deflate
DNT: 0
Content-Type: application/json; charset=UTF-8
X-Auth-Token: <my auth token>
Content-Length: 14
Origin: null
Connection: keep-alive
Pragma: no-cache
Cache-Control: no-cache
有效负载:
{"value":"50"}
注意: 试图设置 value
= 50
猎户座的回应
Access-Control-Allow-Headers: origin, content-type, X-Auth-Token, Tenant-ID
Access-Control-Allow-Methods: HEAD, POST, GET, OPTIONS, DELETE
Access-Control-Allow-Origin: *
Connection: keep-alive
Content-Length: 61
Content-Type: application/json
Date: Fri, 13 Feb 2015 07:52:29 GMT
X-Powered-By: Express
有效负载:
"statusCode" : {
"code" : "200",
"reasonPhrase" : "OK"
}
Firefox 浏览器不喜欢响应:
SyntaxError: JSON.parse: unexpected non-whitespace character after
JSON data at line 1 column 14 of the JSON data
更好的 JSON 响应可能是:
{
"statusCode" : {
"code" : "200",
"reasonPhrase" : "OK"
}
}
来自猎户座的价值查询
查询
GET http://orion.lab.fi-ware.org:1026/ngsi10/contextEntities/cie_test_1
Host: orion.lab.fi-ware.org:1026
User-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64; rv:35.0) Gecko/20100101 Firefox/35.0
Accept: application/json
Accept-Language: en-us,en;q=0.7,fi;q=0.3
Accept-Encoding: gzip, deflate
DNT: 0
Content-Type: application/json
X-Auth-Token: <my auth token>
Origin: null
Connection: keep-alive
猎户座的回应
Access-Control-Allow-Headers: origin, content-type, X-Auth-Token, Tenant-ID
Access-Control-Allow-Methods: HEAD, POST, GET, OPTIONS, DELETE
Access-Control-Allow-Origin: *
Connection: keep-alive
Content-Length: 289
Content-Type: application/json
Date: Fri, 13 Feb 2015 10:09:27 GMT
X-Powered-By: Express
有效负载:
{
"Success: {
"contextElement" : {
"type" : "",
"isPattern" : "false",
"id" : "cie_test_1",
"attributes" : [
{
"name" : "test_1",
"type" : "float",
"value" : "10"
}
]
},
"statusCode" : {
"code" : "200",
"reasonPhrase" : "OK"
}
}
}
注意: value
仍然是 10
此问题与 service path functionality 有关,特别是与 0.19.0 版本中引入的以下修复有关:
Fix: internal substitution of servicePath defaults ("/" for
update-like operations, "/#" for query-like operations)
我们考虑以下情况:数据库中存在一个实体文档,但它是使用0.19.0之前的Orion版本生成的,因此没有servicePath字段,即:
- id = E1
- 类型 = T1
- servicePath = [null]
- 属性test_1 = 10
现在,Orion 0.19.0 在 [E1, T1] 上处理 updateContext APPEND(请注意您问题中的 POST 具有 APPEND 语义)。这不会导致更新以前的实体文档,而是会创建一个新的实体文档:
- id = E1
- 类型 = T1
- servicePath = "/"
- 属性test_1 = 50
因此,现在我们在数据库中的实体集合中有 2 个文档,几乎相等但不完全相等。事实上,如果你在 [E1, T1] 上使用带有服务路径“/”或不带 servicePath(隐含意思是 "service path is not relevant for the query")的 queryContext,你将在响应中得到两个,一个是 10,另一个是 50 fo test_1属性。
但是,基于 GET 的便利操作与 queryContext 的工作方式不同(至少在当前的 Orion 版本中)。便利 GET 假设只有一个文档将被放入响应中,在这种模棱两可的情况下,它采用较旧的文档(即数据库中注释的修改日期较旧的文档)。换句话说,test_1值为10。
此问题的解决方案是修复数据库,以便 "merge" 将 2 个实体文档合二为一(使用 servicePath =“/”)。对于 orion.lab.fi-ware.org(您问题中的情况),FIWARE 实验室工作人员将在接下来的几天内完成。对于私有 Orion 实例,提供了 merge_default_sp_dups.py 脚本来执行此操作(查看 database migration procedure for 0.19.0 了解更多信息)。
更新: orion.lab.fi-ware.org 数据库已修复。您应该不会再遇到问题中描述的更新问题了。
更新:问题现在似乎已在 "global" Orion 实例中得到纠正。
我尝试更改实体的属性,但它似乎没有 想要的效果。我记得,相同的代码在 2 个月前运行良好。现在怎么办?
我在 "global" Orion Broker http://orion.lab.fi-ware.org:1026
中拥有具有浮动属性 test_1
的实体 cie_test_1
。我了解经纪人的目的是传播不断变化的价值。但是,该值似乎无法更改。交易详情如下。
代理的版本信息是
{
"orion" : {
"version" : "0.19.0",
"uptime" : "0 d, 0 h, 2 m, 31 s",
"git_hash" : "1ad73b298cd261861203fbffb9c789f6ade2796d",
"compile_time" : "Wed Feb 11 13:00:19 CET 2015",
"compiled_by" : "fermin",
"compiled_in" : "centollo"
}
}
传输值请求
要求
POST http://orion.lab.fi-ware.org:1026/ngsi10/contextEntities/cie_test_1/attributes/test_1
Host: orion.lab.fi-ware.org:1026
User-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64; rv:35.0) Gecko/20100101 Firefox/35.0
Accept: application/json
Accept-Language: en-us,en;q=0.7,fi;q=0.3
Accept-Encoding: gzip, deflate
DNT: 0
Content-Type: application/json; charset=UTF-8
X-Auth-Token: <my auth token>
Content-Length: 14
Origin: null
Connection: keep-alive
Pragma: no-cache
Cache-Control: no-cache
有效负载:
{"value":"50"}
注意: 试图设置 value
= 50
猎户座的回应
Access-Control-Allow-Headers: origin, content-type, X-Auth-Token, Tenant-ID
Access-Control-Allow-Methods: HEAD, POST, GET, OPTIONS, DELETE
Access-Control-Allow-Origin: *
Connection: keep-alive
Content-Length: 61
Content-Type: application/json
Date: Fri, 13 Feb 2015 07:52:29 GMT
X-Powered-By: Express
有效负载:
"statusCode" : {
"code" : "200",
"reasonPhrase" : "OK"
}
Firefox 浏览器不喜欢响应:
SyntaxError: JSON.parse: unexpected non-whitespace character after JSON data at line 1 column 14 of the JSON data
更好的 JSON 响应可能是:
{
"statusCode" : {
"code" : "200",
"reasonPhrase" : "OK"
}
}
来自猎户座的价值查询
查询
GET http://orion.lab.fi-ware.org:1026/ngsi10/contextEntities/cie_test_1
Host: orion.lab.fi-ware.org:1026
User-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64; rv:35.0) Gecko/20100101 Firefox/35.0
Accept: application/json
Accept-Language: en-us,en;q=0.7,fi;q=0.3
Accept-Encoding: gzip, deflate
DNT: 0
Content-Type: application/json
X-Auth-Token: <my auth token>
Origin: null
Connection: keep-alive
猎户座的回应
Access-Control-Allow-Headers: origin, content-type, X-Auth-Token, Tenant-ID
Access-Control-Allow-Methods: HEAD, POST, GET, OPTIONS, DELETE
Access-Control-Allow-Origin: *
Connection: keep-alive
Content-Length: 289
Content-Type: application/json
Date: Fri, 13 Feb 2015 10:09:27 GMT
X-Powered-By: Express
有效负载:
{
"Success: {
"contextElement" : {
"type" : "",
"isPattern" : "false",
"id" : "cie_test_1",
"attributes" : [
{
"name" : "test_1",
"type" : "float",
"value" : "10"
}
]
},
"statusCode" : {
"code" : "200",
"reasonPhrase" : "OK"
}
}
}
注意: value
仍然是 10
此问题与 service path functionality 有关,特别是与 0.19.0 版本中引入的以下修复有关:
Fix: internal substitution of servicePath defaults ("/" for update-like operations, "/#" for query-like operations)
我们考虑以下情况:数据库中存在一个实体文档,但它是使用0.19.0之前的Orion版本生成的,因此没有servicePath字段,即:
- id = E1
- 类型 = T1
- servicePath = [null]
- 属性test_1 = 10
现在,Orion 0.19.0 在 [E1, T1] 上处理 updateContext APPEND(请注意您问题中的 POST 具有 APPEND 语义)。这不会导致更新以前的实体文档,而是会创建一个新的实体文档:
- id = E1
- 类型 = T1
- servicePath = "/"
- 属性test_1 = 50
因此,现在我们在数据库中的实体集合中有 2 个文档,几乎相等但不完全相等。事实上,如果你在 [E1, T1] 上使用带有服务路径“/”或不带 servicePath(隐含意思是 "service path is not relevant for the query")的 queryContext,你将在响应中得到两个,一个是 10,另一个是 50 fo test_1属性。
但是,基于 GET 的便利操作与 queryContext 的工作方式不同(至少在当前的 Orion 版本中)。便利 GET 假设只有一个文档将被放入响应中,在这种模棱两可的情况下,它采用较旧的文档(即数据库中注释的修改日期较旧的文档)。换句话说,test_1值为10。
此问题的解决方案是修复数据库,以便 "merge" 将 2 个实体文档合二为一(使用 servicePath =“/”)。对于 orion.lab.fi-ware.org(您问题中的情况),FIWARE 实验室工作人员将在接下来的几天内完成。对于私有 Orion 实例,提供了 merge_default_sp_dups.py 脚本来执行此操作(查看 database migration procedure for 0.19.0 了解更多信息)。
更新: orion.lab.fi-ware.org 数据库已修复。您应该不会再遇到问题中描述的更新问题了。