我在升级应用程序以支持Android Lollipop时遇到问题.该应用程序实现了一个SyncAdapter,它通过内容提供程序在数据库上写入.同时,用户正在浏览应用程序的前端,其中加载程序从数据库中读取相同的数据.加载程序还可以监听数据更改.
现在,如果我在前Lollipop设备上运行该程序,一切正常,没有任何错误输出.
在Lollipop上,我收到以下logcat消息:
11:20:59.344 22341-22376/com.example.com E/SQLiteLog? (10) POSIX Error : 11 SQLite Error : 3850
11:20:59.364 22341-22376/com.example.com E/SQLiteLog? (10) POSIX Error : 11 SQLite Error : 3850
11:20:59.364 22341-22376/com.example.com E/SQLiteLog? (10) POSIX Error : 11 SQLite Error : 3850
11:20:59.364 22341-22376/com.example.com E/SQLiteLog? (10) POSIX Error : 11 SQLite Error : 3850
Run Code Online (Sandbox Code Playgroud)
现在,来自SQLite文档:
(3850)SQLITE_IOERR_LOCK
SQLITE_IOERR_LOCK错误代码是SQLITE_IOERR的扩展错误代码,表示咨询文件锁定逻辑中的I/O错误.通常SQLITE_IOERR_LOCK错误表示获取PENDING锁定时出现问题.但是,它也可以指示Mac上使用的某些专用VFS上的各种锁定错误.一切似乎都在高水平上正常工作(即执行读取和写入)
和:
PENDING锁意味着持有锁的进程想要尽快写入数据库,并且只是等待所有当前的SHARED锁清除,以便它可以获得EXCLUSIVE锁.如果PENDING锁处于活动状态,则不允许对数据库使用新的SHARED锁,但允许继续使用现有的SHARED锁.
我知道SQLite版本已经被Lollipop中的几个主要版本更新了,所以我很容易认为错误是由于我无法隔离的SQLite的一些新行为.
但是,从更高级别的角度看,一切似乎都运行良好(App不会崩溃,执行读写操作,帧率不会下降 - 至少对人眼来说)但我不想忽略这个问题发布应用程序,直到我确定它不会导致数据损坏或麻烦.
也许我对棒棒糖关于锁和多进程数据库访问的一些重要更改缺失了,但我觉得这是一个关于Art/Dalvik域的较低级别的问题,因此必须在NDK上下文中修复.
有没有办法解决这个问题而不分发特定版本的SQLite?是否有任何清单/ SQLite选项来避免错误?
提前致谢
根据Google App Engine标准环境(Go API)的官方文档," 部署项目的首选工具 "现在是Cloud SDK,因此我们从goapp迁移到gcloud.
我们无法将Go项目部署到GAE,因为在"部署时"无法找到每个给定项目的所有子包.我们为每个GAE项目使用的典型文件夹结构如下:
-project-name
--app.yaml
--main.go
--assets
---package1
---package2
Run Code Online (Sandbox Code Playgroud)
当全局图书馆被放入系统时,GOPATH一切顺利.
gcloud app deploy我们现在运行得到这个:
You are about to deploy the following services:
- yourproject/default/123456789 (from [/Path/to/app.yaml])
Deploying to URL: [https://yourproject.appspot.com]
Do you want to continue (Y/n)? Y
Beginning deployment of service [default]...
ERROR: (gcloud.app.deploy) Staging command [/path/to/yourproject/app.yaml /var/folders/b6/5ydn0wdn64jd32sxzzz48b7c0000gn/T/tmpbd4oiG] failed with return code [1].
------------------------------------ STDOUT ------------------------------------
------------------------------------ STDERR ------------------------------------
2017/03/24 10:25:58 failed analyzing /path/to/yourproject: cannot find package "yourpackage" in any of:
($GOROOT not …Run Code Online (Sandbox Code Playgroud) 我正在几个平台上尝试并发请求处理.
该实验的目的是广泛衡量某些选定技术的能力范围.
我成立了一个Linux VM我的机器上有一个基本的围棋http服务器(香草http.HandleFunc中的http默认包).然后,服务器将计算fasta算法的修改版本,该算法将线程和进程限制为1,并返回结果.N设置为100000.算法运行大约2秒钟.我在Google App Engine项目中使用了相同的算法和逻辑.
该算法使用相同的代码编写,只是处理程序设置完成init()而不是main()根据GAE要求.
另一方面,Android客户端产生500个线程,每个线程并行发送一个GET请求到fasta计算服务器,请求超时为5000毫秒.
我期待GAE应用程序扩展并回答每个请求,并且本地Go服务器在500个请求中的一些请求失败但结果相反:本地服务器正确地回复了超时范围内的每个请求,而GAE应用程序是能够处理500个中的160个请求.其余请求超时.
我检查了云控制台,并确认已生成18个GAE实例,但绝大多数请求仍然失败.
我认为他们中的大多数都因为每个GAE实例的启动时间而失败,所以我在之后重复实验但是我得到了相同的结果:大多数请求超时.
我期待GAE扩展以适应所有请求,相信如果一个本地VM可以成功回复500个并发请求,GAE会做同样的事情,但这不是发生的事情.
GAE控制台不显示任何错误,并正确报告传入请求的数量.
可能是什么原因造成的? 此外,如果单个实例只能通过goroutines处理我机器上的所有传入请求,那么GAE需要如何扩展呢?