Git Product home page Git Product logo

uniqush-push's People

Contributors

dhanui avatar jerbob92 avatar lexcc avatar louy2 avatar mishan avatar monnand avatar or-else avatar orsonwang avatar tysonandre avatar tysonandre-tmg avatar victorlang avatar wonderli avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

uniqush-push's Issues

Error on Redis storing data with version 1.5.2

Hi Monnand,
I've just downloaded last project version and if I try to push messages about service/users already registered everything is ok but if I try to add a new service or a new subscriber I always receive Failed: Redis Error: Expecting Prefix '$' or ':'

Add new service:
[root@dev014v0 uniqush-push]# curl http://10.20.50.xx:9898/addpsp -d service=scriptim_android2 -d pushservicetype=gcm -d projectid=639408364245 -d apikey=AIzaSyDFvaVHvDsxanglIEt7hkZ_k5RQp17x6Yw

[AddPushServiceProvider][Error] 2014/07/07 15:32:03 From=10.20.50.58:53931 Failed: Redis Error: Expecting Prefix '$' or ':'

Add new subscriber:
[root@dev014v0 uniqush-push]# curl http://10.20.50.xx:9898/subscribe -d service=scriptim_android -d subscriber=maurizio5 -d pushservicetype=gcm -d regid=APA91bEz6G0lDNrrk-92E0xVnAES8g0LyH0zE1lbs35m8IY4gvp3PqBL4BXvi3ARVy5vy6UJ6ROlslYjpxJX8h2rpELrVIbGSgCEg_oc7oUeHAtSU41uAdMyysyhgcb8NSmz7l-sGQvGtlSCAQOaF1Yh-WjT76ZBnA

[Subscribe][Error] 2014/07/07 15:18:43 From=10.20.50.58:42169 Failed: Redis Error: Expecting Prefix '$' or ':'

Can you please check

Thanks
Maurizio

perdp.* feature

When push to a certain user, some field needs to be vary on different delivery point.

perdp.* features are a kind of parameter containing a list of values, for each delivery point, it will randomly received one of the value in the list and there is no duplication if the list size is less than the number of delivery points.

Example:

User monnand under service news has 3 devices, then if we execute the following command:

curl http://127.0.0.1:9898/push -d service=news -d subscriber=monnand -d perdp.mid="1,2,3" -d msg="News!"

Then 3 of the devices under monnand will received notifications with a parameter named perdp.mid whose value will be 1 or 2 or 3 respectively. Since there are 3 devices and 3 values under perdp.mid, there will be no two devices receiving perdp.mid parameter with same value.

This feature is specifically useful for uniqush-conn to send the message id.

No Tag for Version 1.4.3

Hello,

although there is a git tag for version 1.4.2, there is no such tag for 1.4.3. This makes it more difficult to check out a specific version.

Maybe you could add a tag for 1.4.3, too?
Thanks a lot!

自己编译错误

configparser.go:21:2: cannot find package "code.google.com/p/goconf/conf" in any of:
这个库好像在google上面没有了, github上面有几个config库, 应该可以取代吧

Uniqush doesn't handle invalid payload received by apns server

GCM is ok but apns has restrictions of maximum payload of 256 bytes. This happens when the user sends a huge message or simply messages that are utf8-encoded. Uniqush should complain about this issue.

Uniqush will be OOM killed by the kernel if handling this 'invalid payload'. We tested this with concurrent connections sending messages via celery. We had 8 workers and with 4 concurrency running each worker. When trying to send an invalid payload size, uniqush will crash and killed by the kernel.

Push status inquiry

Can uniqush-push has webservice for inquiring the status by service and each of subscriber

Failed lookup on gcm on autoscale

Hi @monnand

We have problems when we try to autoscale the uniqush servers:
Here's the error:

[Push][Error] 2014/02/14 12:29:22 RequestID=52fd9ba2-oP7j5BcX4kTn4Ls1-YAgQw== Service=0839899613932562 Subscriber=52db1f733dc9e12b8c5e271a PushServiceProvider=gcm:321c686a5eb5a03ef5d447d19182de600a69e65d DeliveryPoint=gcm:27f83d2a6ae6dec20e57e99aad2968fac6a37f3b Failed: Post https://android.googleapis.com/gcm/send: dial tcp: lookup android.googleapis.com: no such host

These errors only happen on new instances spawned by the Amazon AutoScale. The only remedy was to restart uniqush manually. We also tested it launching the instance with uniqush manually it seems to be having the same problem.

Errors on GCM only.

Uniqush having problems with concurrency

Hi @monnand our uniqush seems to be failing at some point. Probably because of the load we give to it. Before, we had load balancer between two uniqush servers and it seems ok. Our setup today was just having only 1 servers and having multiple workers requesting to push. The following is the log error: ( Sorry if its too long)

goroutine 4510 [select]:
net/http.(_persistConn).writeLoop(0xc201b72680)
/home/monnand/soft/golang/go/src/pkg/net/http/transport.go:774 +0x26f
created by net/http.(_Transport).dialConn
/home/monnand/soft/golang/go/src/pkg/net/http/transport.go:512 +0x58b

goroutine 4883 [IO wait]:
net.runtime_pollWait(0x7f305c2805a0, 0x72, 0x0)
/home/monnand/soft/golang/go/src/pkg/runtime/znetpoll_linux_amd64.c:118 +0x82
net.(_pollDesc).WaitRead(0xc201d847d0, 0xb, 0xc2000fd390)
/home/monnand/soft/golang/go/src/pkg/net/fd_poll_runtime.go:75 +0x31
net.(_netFD).Read(0xc201d84750, 0xc201650000, 0x400, 0x400, 0x0, ...)
/home/monnand/soft/golang/go/src/pkg/net/fd_unix.go:195 +0x2b3
net.(_conn).Read(0xc200399b00, 0xc201650000, 0x400, 0x400, 0x48f351, ...)
/home/monnand/soft/golang/go/src/pkg/net/net.go:123 +0xc3
crypto/tls.(_block).readFromUntil(0xc2013b13f0, 0xc2000fd690, 0xc200399b00, 0x5, 0xc200399b00, ...)
/home/monnand/soft/golang/go/src/pkg/crypto/tls/conn.go:401 +0xbd
crypto/tls.(_Conn).readRecord(0xc201d0e280, 0x17, 0x0, 0x413ae5)
/home/monnand/soft/golang/go/src/pkg/crypto/tls/conn.go:481 +0xfa
crypto/tls.(_Conn).Read(0xc201d0e280, 0xc2016ed000, 0x1000, 0x1000, 0x0, ...)
/home/monnand/soft/golang/go/src/pkg/crypto/tls/conn.go:796 +0x102
bufio.(_Reader).fill(0xc2008bfc00)
/home/monnand/soft/golang/go/src/pkg/bufio/bufio.go:79 +0x10c
bufio.(_Reader).Peek(0xc2008bfc00, 0x1, 0x0, 0x0, 0x0, ...)
/home/monnand/soft/golang/go/src/pkg/bufio/bufio.go:107 +0xc9
net/http.(_persistConn).readLoop(0xc201e4dc00)
/home/monnand/soft/golang/go/src/pkg/net/http/transport.go:670 +0xc4
created by net/http.(_Transport).dialConn
/home/monnand/soft/golang/go/src/pkg/net/http/transport.go:511 +0x574

goroutine 5114 [semacquire]:
sync.runtime_Semacquire(0xc2025ff7e8)
/home/monnand/soft/golang/go/src/pkg/runtime/zsema_linux_amd64.c:165 +0x2e
sync.(_WaitGroup).Wait(0xc202310e20)
/home/monnand/soft/golang/go/src/pkg/sync/waitgroup.go:109 +0xf2
main.(_PushBackEnd).pushImpl(0xc2000fa440, 0xc20231a060, 0x24, 0xc202315407, 0x10, ...)
/home/monnand/goproj/src/github.com/uniqush/uniqush-push/build/tmpgopath/src/github.com/uniqush/uniqush-push/pushbackend.go:269 +0x497
main.(_PushBackEnd).Push(0xc2000fa440, 0xc20231a060, 0x24, 0xc202315407, 0x10, ...)
/home/monnand/goproj/src/github.com/uniqush/uniqush-push/build/tmpgopath/src/github.com/uniqush/uniqush-push/pushbackend.go:199 +0xd7
main.(_RestAPI).pushNotification(0xc2000fea50, 0xc20231a060, 0x24, 0xc202317780, 0xc2023177c0, ...)
/home/monnand/goproj/src/github.com/uniqush/uniqush-push/build/tmpgopath/src/github.com/uniqush/uniqush-push/restapi.go:242 +0x9ef
main.(_RestAPI).ServeHTTP(0xc2000fea50, 0xc2000fa9c0, 0xc2023147e0, 0xc2023190d0)
/home/monnand/goproj/src/github.com/uniqush/uniqush-push/build/tmpgopath/src/github.com/uniqush/uniqush-push/restapi.go:338 +0xc52
net/http.(_ServeMux).ServeHTTP(0xc2000b7540, 0xc2000fa9c0, 0xc2023147e0, 0xc2023190d0)
/home/monnand/soft/golang/go/src/pkg/net/http/server.go:1416 +0x11d
net/http.serverHandler.ServeHTTP(0xc2000feaa0, 0xc2000fa9c0, 0xc2023147e0, 0xc2023190d0)
/home/monnand/soft/golang/go/src/pkg/net/http/server.go:1517 +0x16c
net/http.(_conn).serve(0xc20202b870)
/home/monnand/soft/golang/go/src/pkg/net/http/server.go:1096 +0x765
created by net/http.(_Server).Serve
/home/monnand/soft/golang/go/src/pkg/net/http/server.go:1564 +0x266

goroutine 4689 [sleep]:
time.Sleep(0x165a0bc00)
/home/monnand/soft/golang/go/src/pkg/runtime/ztime_linux_amd64.c:19 +0x2f
github.com/uniqush/uniqush-push/srv.clearRequest(0xc201ca0a80, 0xc200159c00)
/home/monnand/goproj/src/github.com/uniqush/uniqush-push/build/tmpgopath/src/github.com/uniqush/uniqush-push/srv/apns.go:475 +0x2a
created by github.com/uniqush/uniqush-push/srv.(*apnsPushService).pushWorker
/home/monnand/goproj/src/github.com/uniqush/uniqush-push/build/tmpgopath/src/github.com/uniqush/uniqush-push/srv/apns.go:615 +0x37c

goroutine 5005 [IO wait]:
net.runtime_pollWait(0x7f305c2d10a0, 0x72, 0x0)
/home/monnand/soft/golang/go/src/pkg/runtime/znetpoll_linux_amd64.c:118 +0x82
net.(_pollDesc).WaitRead(0xc2017c0350, 0xb, 0xc2000fd390)
/home/monnand/soft/golang/go/src/pkg/net/fd_poll_runtime.go:75 +0x31
net.(_netFD).Read(0xc2017c02d0, 0xc201a82000, 0x400, 0x400, 0x0, ...)
/home/monnand/soft/golang/go/src/pkg/net/fd_unix.go:195 +0x2b3
net.(_conn).Read(0xc2001ec880, 0xc201a82000, 0x400, 0x400, 0x48f351, ...)
/home/monnand/soft/golang/go/src/pkg/net/net.go:123 +0xc3
crypto/tls.(_block).readFromUntil(0xc20191dcc0, 0xc2000fd690, 0xc2001ec880, 0x5, 0xc2001ec880, ...)
/home/monnand/soft/golang/go/src/pkg/crypto/tls/conn.go:401 +0xbd
crypto/tls.(_Conn).readRecord(0xc201061500, 0x17, 0x0, 0x413ae5)
/home/monnand/soft/golang/go/src/pkg/crypto/tls/conn.go:481 +0xfa
crypto/tls.(_Conn).Read(0xc201061500, 0xc20168e000, 0x1000, 0x1000, 0x0, ...)
/home/monnand/soft/golang/go/src/pkg/crypto/tls/conn.go:796 +0x102
bufio.(_Reader).fill(0xc2012c6de0)
/home/monnand/soft/golang/go/src/pkg/bufio/bufio.go:79 +0x10c
bufio.(_Reader).Peek(0xc2012c6de0, 0x1, 0x0, 0x0, 0x0, ...)
/home/monnand/soft/golang/go/src/pkg/bufio/bufio.go:107 +0xc9
net/http.(_persistConn).readLoop(0xc20041f500)
/home/monnand/soft/golang/go/src/pkg/net/http/transport.go:670 +0xc4
created by net/http.(_Transport).dialConn
/home/monnand/soft/golang/go/src/pkg/net/http/transport.go:511 +0x574

goroutine 4905 [IO wait]:
net.runtime_pollWait(0x7f305c22f1e0, 0x72, 0x0)
/home/monnand/soft/golang/go/src/pkg/runtime/znetpoll_linux_amd64.c:118 +0x82
net.(_pollDesc).WaitRead(0xc20125d620, 0xb, 0xc2000fd390)
/home/monnand/soft/golang/go/src/pkg/net/fd_poll_runtime.go:75 +0x31
net.(_netFD).Read(0xc20125d5a0, 0xc2013a2000, 0x400, 0x400, 0x0, ...)
/home/monnand/soft/golang/go/src/pkg/net/fd_unix.go:195 +0x2b3
net.(_conn).Read(0xc20031add0, 0xc2013a2000, 0x400, 0x400, 0x48f351, ...)
/home/monnand/soft/golang/go/src/pkg/net/net.go:123 +0xc3
crypto/tls.(_block).readFromUntil(0xc2003e5630, 0xc2000fd690, 0xc20031add0, 0x5, 0xc20031add0, ...)
/home/monnand/soft/golang/go/src/pkg/crypto/tls/conn.go:401 +0xbd
crypto/tls.(_Conn).readRecord(0xc201d0ea00, 0x17, 0x0, 0x41efd0)
/home/monnand/soft/golang/go/src/pkg/crypto/tls/conn.go:481 +0xfa
crypto/tls.(_Conn).Read(0xc201d0ea00, 0xc201a11000, 0x1000, 0x1000, 0x0, ...)
/home/monnand/soft/golang/go/src/pkg/crypto/tls/conn.go:796 +0x102
bufio.(_Reader).fill(0xc200943de0)
/home/monnand/soft/golang/go/src/pkg/bufio/bufio.go:79 +0x10c
bufio.(_Reader).Peek(0xc200943de0, 0x1, 0x0, 0x0, 0x0, ...)
/home/monnand/soft/golang/go/src/pkg/bufio/bufio.go:107 +0xc9
net/http.(_persistConn).readLoop(0xc2005d1b80)
/home/monnand/soft/golang/go/src/pkg/net/http/transport.go:670 +0xc4
created by net/http.(_Transport).dialConn
/home/monnand/soft/golang/go/src/pkg/net/http/transport.go:511 +0x574

goroutine 4624 [select]:
github.com/uniqush/uniqush-push/srv.(_apnsPushService).waitResults(0xc2000b7f30, 0xc2019164e0, 0xc2019e0000, 0x1, 0xa, ...)
/home/monnand/goproj/src/github.com/uniqush/uniqush-push/build/tmpgopath/src/github.com/uniqush/uniqush-push/srv/apns.go:211 +0x207
created by github.com/uniqush/uniqush-push/srv.(_apnsPushService).Push
/home/monnand/goproj/src/github.com/uniqush/uniqush-push/build/tmpgopath/src/github.com/uniqush/uniqush-push/srv/apns.go:329 +0xd7d

goroutine 4622 [sleep]:
time.Sleep(0x165a0bc00)
/home/monnand/soft/golang/go/src/pkg/runtime/ztime_linux_amd64.c:19 +0x2f
github.com/uniqush/uniqush-push/srv.clearRequest(0xc2014e4540, 0xc200159c00)
/home/monnand/goproj/src/github.com/uniqush/uniqush-push/build/tmpgopath/src/github.com/uniqush/uniqush-push/srv/apns.go:475 +0x2a
created by github.com/uniqush/uniqush-push/srv.(*apnsPushService).pushWorker
/home/monnand/goproj/src/github.com/uniqush/uniqush-push/build/tmpgopath/src/github.com/uniqush/uniqush-push/srv/apns.go:615 +0x37c

goroutine 4660 [sleep]:
time.Sleep(0x165a0bc00)
/home/monnand/soft/golang/go/src/pkg/runtime/ztime_linux_amd64.c:19 +0x2f
github.com/uniqush/uniqush-push/srv.clearRequest(0xc201a70a80, 0xc200159c00)
/home/monnand/goproj/src/github.com/uniqush/uniqush-push/build/tmpgopath/src/github.com/uniqush/uniqush-push/srv/apns.go:475 +0x2a
created by github.com/uniqush/uniqush-push/srv.(*apnsPushService).pushWorker
/home/monnand/goproj/src/github.com/uniqush/uniqush-push/build/tmpgopath/src/github.com/uniqush/uniqush-push/srv/apns.go:615 +0x37c

goroutine 4768 [select]:
github.com/uniqush/uniqush-push/srv.(_apnsPushService).waitResults(0xc2000b7f30, 0xc201928c30, 0xc201b684b0, 0x1, 0xa, ...)
/home/monnand/goproj/src/github.com/uniqush/uniqush-push/build/tmpgopath/src/github.com/uniqush/uniqush-push/srv/apns.go:211 +0x207
created by github.com/uniqush/uniqush-push/srv.(_apnsPushService).Push
/home/monnand/goproj/src/github.com/uniqush/uniqush-push/build/tmpgopath/src/github.com/uniqush/uniqush-push/srv/apns.go:329 +0xd7d

goroutine 4759 [sleep]:
time.Sleep(0x165a0bc00)
/home/monnand/soft/golang/go/src/pkg/runtime/ztime_linux_amd64.c:19 +0x2f
github.com/uniqush/uniqush-push/srv.clearRequest(0xc20190fc40, 0xc200159c00)
/home/monnand/goproj/src/github.com/uniqush/uniqush-push/build/tmpgopath/src/github.com/uniqush/uniqush-push/srv/apns.go:475 +0x2a
created by github.com/uniqush/uniqush-push/srv.(*apnsPushService).pushWorker
/home/monnand/goproj/src/github.com/uniqush/uniqush-push/build/tmpgopath/src/github.com/uniqush/uniqush-push/srv/apns.go:615 +0x37c

goroutine 4766 [sleep]:
time.Sleep(0x165a0bc00)
/home/monnand/soft/golang/go/src/pkg/runtime/ztime_linux_amd64.c:19 +0x2f
github.com/uniqush/uniqush-push/srv.clearRequest(0xc201d74f50, 0xc200159c00)
/home/monnand/goproj/src/github.com/uniqush/uniqush-push/build/tmpgopath/src/github.com/uniqush/uniqush-push/srv/apns.go:475 +0x2a
created by github.com/uniqush/uniqush-push/srv.(*apnsPushService).pushWorker
/home/monnand/goproj/src/github.com/uniqush/uniqush-push/build/tmpgopath/src/github.com/uniqush/uniqush-push/srv/apns.go:615 +0x37c

goroutine 4864 [select]:
github.com/uniqush/uniqush-push/srv.(_apnsPushService).waitResults(0xc2000b7f30, 0xc200578b10, 0xc200268460, 0x1, 0xa, ...)
/home/monnand/goproj/src/github.com/uniqush/uniqush-push/build/tmpgopath/src/github.com/uniqush/uniqush-push/srv/apns.go:211 +0x207
created by github.com/uniqush/uniqush-push/srv.(_apnsPushService).Push
/home/monnand/goproj/src/github.com/uniqush/uniqush-push/build/tmpgopath/src/github.com/uniqush/uniqush-push/srv/apns.go:329 +0xd7d

goroutine 4796 [select]:
github.com/uniqush/uniqush-push/srv.(_apnsPushService).waitResults(0xc2000b7f30, 0xc201bdd3f0, 0xc201a464b0, 0x1, 0xa, ...)
/home/monnand/goproj/src/github.com/uniqush/uniqush-push/build/tmpgopath/src/github.com/uniqush/uniqush-push/srv/apns.go:211 +0x207
created by github.com/uniqush/uniqush-push/srv.(_apnsPushService).Push
/home/monnand/goproj/src/github.com/uniqush/uniqush-push/build/tmpgopath/src/github.com/uniqush/uniqush-push/srv/apns.go:329 +0xd7d

goroutine 4794 [sleep]:
time.Sleep(0x165a0bc00)
/home/monnand/soft/golang/go/src/pkg/runtime/ztime_linux_amd64.c:19 +0x2f
github.com/uniqush/uniqush-push/srv.clearRequest(0xc201c49b60, 0xc200159c00)
/home/monnand/goproj/src/github.com/uniqush/uniqush-push/build/tmpgopath/src/github.com/uniqush/uniqush-push/srv/apns.go:475 +0x2a
created by github.com/uniqush/uniqush-push/srv.(*apnsPushService).pushWorker
/home/monnand/goproj/src/github.com/uniqush/uniqush-push/build/tmpgopath/src/github.com/uniqush/uniqush-push/srv/apns.go:615 +0x37c

goroutine 4862 [sleep]:
time.Sleep(0x165a0bc00)
/home/monnand/soft/golang/go/src/pkg/runtime/ztime_linux_amd64.c:19 +0x2f
github.com/uniqush/uniqush-push/srv.clearRequest(0xc200e7f150, 0xc200159c00)
/home/monnand/goproj/src/github.com/uniqush/uniqush-push/build/tmpgopath/src/github.com/uniqush/uniqush-push/srv/apns.go:475 +0x2a
created by github.com/uniqush/uniqush-push/srv.(*apnsPushService).pushWorker
/home/monnand/goproj/src/github.com/uniqush/uniqush-push/build/tmpgopath/src/github.com/uniqush/uniqush-push/srv/apns.go:615 +0x37c

goroutine 4920 [IO wait]:
net.runtime_pollWait(0x7f305c22f000, 0x72, 0x0)
/home/monnand/soft/golang/go/src/pkg/runtime/znetpoll_linux_amd64.c:118 +0x82
net.(_pollDesc).WaitRead(0xc20125d860, 0xb, 0xc2000fd390)
/home/monnand/soft/golang/go/src/pkg/net/fd_poll_runtime.go:75 +0x31
net.(_netFD).Read[Push][Info] 2013/07/25 11:44:17 RequestId=ca04e629-aa9e-44b6-62e0-18aacd554e86 From=54.215.171.37:13298 Service=7883932819531353 Subscribers="[518a9dc63dc9e1468444bbdb]"
[Push][Info] 2013/07/25 11:44:17 RequestId=4123f2da-7663-4454-5450-89129c595896 From=54.215.167.223:46202 Service=7883932819531353 Subscribers="[5180a8293dc9e107b1533f2a]"
[Push][Info] 2013/07/25 11:44:17 RequestId=34b80aba-1fe5-47e6-4d08-10ace9e192a8 From=54.215.171.37:13300 Service=7883932819531353 Subscribers="[518deb683dc9e12c476d41f6]"
(0xc20125d7e0, 0xc201062000, 0x400, 0x400, 0x0, ...)
/home/monnand/soft/golang/go/src/pkg/net/fd_unix.go:195 +0x2b3
net.(_conn).Read(0xc2000002f8, 0xc201062000, 0x400, 0x400, 0x48f351, ...)
/home/monnand/soft/golang/go/src/pkg/net/net.go:123 +0xc3
crypto/tls.(_block).readFromUntil(0xc2003e5c90, 0xc2000fd690, 0xc2000002f8, 0x5, 0xc2000002f8, ...)
/home/monnand/soft/golang/go/src/pkg/crypto/tls/conn.go:401 +0xbd
crypto/tls.(_Conn).readRecord(0xc201061000, 0x17, 0x0, 0x413ae5)
/home/monnand/soft/golang/go/src/pkg/crypto/tls/conn.go:481 +0xfa
crypto/tls.(_Conn).Read(0xc201061000, 0xc201a35000, 0x1000, 0x1000, 0x0, ...)
/home/monnand/soft/golang/go/src/pkg/crypto/tls/conn.go:796 +0x102
bufio.(_Reader).fill(0xc201d5c9c0)
/home/monnand/soft/golang/go/src/pkg/bufio/bufio.go:79 +0x10c
bufio.(_Reader).Peek(0xc201d5c9c0, 0x1, 0x0, 0x0, 0x0, ...)
/home/monnand/soft/golang/go/src/pkg/bufio/bufio.go:107 +0xc9
net/http.(_persistConn).readLoop(0xc2005d1d00)
/home/monnand/soft/golang/go/src/pkg/net/http/transport.go:670 +0xc4
created by net/http.(_Transport).dialConn
/home/monnand/soft/golang/go/src/pkg/net/http/transport.go:511 +0x574

goroutine 5103 [select]:
github.com/uniqush/uniqush-push/srv.(_apnsPushService).waitResults(0xc2000b7f30, 0xc201cc73c0, 0xc2017cca50, 0x1, 0xa, ...)
/home/monnand/goproj/src/github.com/uniqush/uniqush-push/build/tmpgopath/src/github.com/uniqush/uniqush-push/srv/apns.go:211 +0x207
created by github.com/uniqush/uniqush-push/srv.(_apnsPushService).Push
/home/monnand/goproj/src/github.com/uniqush/uniqush-push/build/tmpgopath/src/github.com/uniqush/uniqush-push/srv/apns.go:329 +0xd7d

goroutine 4921 [select]:
net/http.(_persistConn).writeLoop(0xc2005d1d00)
/home/monnand/soft/golang/go/src/pkg/net/http/transport.go:774 +0x26f
created by net/http.(_Transport).dialConn
/home/monnand/soft/golang/go/src/pkg/net/http/transport.go:512 +0x58b

goroutine 4909 [IO wait]:
net.runtime_pollWait(0x7f305c22f140, 0x72, 0x0)
/home/monnand/soft/golang/go/src/pkg/runtime/znetpoll_linux_amd64.c:118 +0x82
net.(_pollDesc).WaitRead(0xc20125d6b0, 0xb, 0xc2000fd390)
/home/monnand/soft/golang/go/src/pkg/net/fd_poll_runtime.go:75 +0x31
net.(_netFD).Read(0xc20125d630, 0xc2015c9000, 0x400, 0x400, 0x0, ...)
/home/monnand/soft/golang/go/src/pkg/net/fd_unix.go:195 +0x2b3
net.(_conn).Read(0xc20031ae58, 0xc2015c9000, 0x400, 0x400, 0x48f351, ...)
/home/monnand/soft/golang/go/src/pkg/net/net.go:123 +0xc3
crypto/tls.(_block).readFromUntil(0xc201696ba0, 0xc2000fd690, 0xc20031ae58, 0x5, 0xc20031ae58, ...)
/home/monnand/soft/golang/go/src/pkg/crypto/tls/conn.go:401 +0xbd
crypto/tls.(_Conn).readRecord(0xc201d0ec80, 0x17, 0x0, 0x41efd0)
/home/monnand/soft/golang/go/src/pkg/crypto/tls/conn.go:481 +0xfa
crypto/tls.(_Conn).Read(0xc201d0ec80, 0xc201e4e000, 0x1000, 0x1000, 0x0, ...)
/home/monnand/soft/golang/go/src/pkg/crypto/tls/conn.go:796 +0x102
bufio.(_Reader).fill(0xc20195b540)
/home/monnand/soft/golang/go/src/pkg/bufio/bufio.go:79 +0x10c
bufio.(_Reader).Peek(0xc20195b540, 0x1, 0x0, 0x0, 0x0, ...)
/home/monnand/soft/golang/go/src/pkg/bufio/bufio.go:107 +0xc9
net/http.(_persistConn).readLoop(0xc2005d1c80)
/home/monnand/soft/golang/go/src/pkg/net/http/transport.go:670 +0xc4
created by net/http.(_Transport).dialConn
/home/monnand/soft/golang/go/src/pkg/net/http/transport.go:511 +0x574

goroutine 4910 [select]:
net/http.(_persistConn).writeLoop(0xc2005d1c80)
/home/monnand/soft/golang/go/src/pkg/net/http/transport.go:774 +0x26f
created by net/http.(_Transport).dialConn
/home/monnand/soft/golang/go/src/pkg/net/http/transport.go:512 +0x58b

goroutine 4959 [sleep]:
time.Sleep(0x165a0bc00)
/home/monnand/soft/golang/go/src/pkg/runtime/ztime_linux_amd64.c:19 +0x2f
github.com/uniqush/uniqush-push/srv.clearRequest(0xc2017098c0, 0xc200159c00)
/home/monnand/goproj/src/github.com/uniqush/uniqush-push/build/tmpgopath/src/github.com/uniqush/uniqush-push/srv/apns.go:475 +0x2a
created by github.com/uniqush/uniqush-push/srv.(*apnsPushService).pushWorker
/home/monnand/goproj/src/github.com/uniqush/uniqush-push/build/tmpgopath/src/github.com/uniqush/uniqush-push/srv/apns.go:615 +0x37c

goroutine 5293 [select]:
github.com/uniqush/uniqush-push/srv.(_apnsPushService).waitResults(0xc2000b7f30, 0xc203e792d0, 0xc203e74370, 0x1, 0xa, ...)
/home/monnand/goproj/src/github.com/uniqush/uniqush-push/build/tmpgopath/src/github.com/uniqush/uniqush-push/srv/apns.go:211 +0x207
created by github.com/uniqush/uniqush-push/srv.(_apnsPushService).Push
/home/monnand/goproj/src/github.com/uniqush/uniqush-push/build/tmpgopath/src/github.com/uniqush/uniqush-push/srv/apns.go:329 +0xd7d

goroutine 5096 [select]:
github.com/uniqush/uniqush-push/srv.(_apnsPushService).waitResults(0xc2000b7f30, 0xc201cc71e0, 0xc2017cc960, 0x1, 0xa, ...)
/home/monnand/goproj/src/github.com/uniqush/uniqush-push/build/tmpgopath/src/github.com/uniqush/uniqush-push/srv/apns.go:211 +0x207
created by github.com/uniqush/uniqush-push/srv.(_apnsPushService).Push
/home/monnand/goproj/src/github.com/uniqush/uniqush-push/build/tmpgopath/src/github.com/uniqush/uniqush-push/srv/apns.go:329 +0xd7d

goroutine 4881 [IO wait]:
net.runtime_pollWait(0x7f305c22fbe0, 0x72, 0x0)
/home/monnand/soft/golang/go/src/pkg/runtime/znetpoll_linux_amd64.c:118 +0x82
net.(_pollDesc).WaitRead(0xc201d84860, 0xb, 0xc2000fd390)
/home/monnand/soft/golang/go/src/pkg/net/fd_poll_runtime.go:75 +0x31
net.(_netFD).Read(0xc201d847e0, 0xc2018c7400, 0x400, 0x400, 0x0, ...)
/home/monnand/soft/golang/go/src/pkg/net/fd_unix.go:195 +0x2b3
net.(_conn).Read(0xc200399aa0, 0xc2018c7400, 0x400, 0x400, 0x48f351, ...)
/home/monnand/soft/golang/go/src/pkg/net/net.go:123 +0xc3
crypto/tls.(_block).readFromUntil(0xc2013b1120, 0xc2000fd690, 0xc200399aa0, 0x5, 0xc200399aa0, ...)
/home/monnand/soft/golang/go/src/pkg/crypto/tls/conn.go:401 +0xbd
crypto/tls.(_Conn).readRecord(0xc201d0e000, 0x17, 0x0, 0x41efd0)
/home/monnand/soft/golang/go/src/pkg/crypto/tls/conn.go:481 +0xfa
crypto/tls.(_Conn).Read(0xc201d0e000, 0xc2018e7000, 0x1000, 0x1000, 0x0, ...)
/home/monnand/soft/golang/go/src/pkg/crypto/tls/conn.go:796 +0x102
bufio.(_Reader).fill(0xc2008bf360)
/home/monnand/soft/golang/go/src/pkg/bufio/bufio.go:79 +0x10c
bufio.(_Reader).Peek(0xc2008bf360, 0x1, 0x0, 0x0, 0x0, ...)
/home/monnand/soft/golang/go/src/pkg/bufio/bufio.go:107 +0xc9
net/http.(_persistConn).readLoop(0xc201e4db00)
/home/monnand/soft/golang/go/src/pkg/net/http/transport.go:670 +0xc4
created by net/http.(_Transport).dialConn
/home/monnand/soft/golang/go/src/pkg/net/http/transport.go:511 +0x574

goroutine 4882 [select]:
net/http.(_persistConn).writeLoop(0xc201e4db00)
/home/monnand/soft/golang/go/src/pkg/net/http/transport.go:774 +0x26f
created by net/http.(_Transport).dialConn
/home/monnand/soft/golang/go/src/pkg/net/http/transport.go:512 +0x58b

goroutine 4884 [select]:
net/http.(_persistConn).writeLoop(0xc201e4dc00)
/home/monnand/soft/golang/go/src/pkg/net/http/transport.go:774 +0x26f
created by net/http.(_Transport).dialConn
/home/monnand/soft/golang/go/src/pkg/net/http/transport.go:512 +0x58b

goroutine 5039 [select]:
net/http.(_persistConn).writeLoop(0xc201cd2d80)
/home/monnand/soft/golang/go/src/pkg/net/http/transport.go:774 +0x26f
created by net/http.(_Transport).dialConn
/home/monnand/soft/golang/go/src/pkg/net/http/transport.go:512 +0x58b

goroutine 4972 [select]:
github.com/uniqush/uniqush-push/srv.(_apnsPushService).waitResults(0xc2000b7f30, 0xc201656390, 0xc2012c5050, 0x1, 0xa, ...)
/home/monnand/goproj/src/github.com/uniqush/uniqush-push/build/tmpgopath/src/github.com/uniqush/uniqush-push/srv/apns.go:211 +0x207
created by github.com/uniqush/uniqush-push/srv.(_apnsPushService).Push
/home/monnand/goproj/src/github.com/uniqush/uniqush-push/build/tmpgopath/src/github.com/uniqush/uniqush-push/srv/apns.go:329 +0xd7d

goroutine 4970 [sleep]:
time.Sleep(0x165a0bc00)
/home/monnand/soft/golang/go/src/pkg/runtime/ztime_linux_amd64.c:19 +0x2f
github.com/uniqush/uniqush-push/srv.clearRequest(0xc20155c310, 0xc200159c00)
/home/monnand/goproj/src/github.com/uniqush/uniqush-push/build/tmpgopath/src/github.com/uniqush/uniqush-push/srv/apns.go:475 +0x2a
created by github.com/uniqush/uniqush-push/srv.(*apnsPushService).pushWorker
/home/monnand/goproj/src/github.com/uniqush/uniqush-push/build/tmpgopath/src/github.com/uniqush/uniqush-push/srv/apns.go:615 +0x37c

goroutine 4946 [select]:
github.com/uniqush/uniqush-push/srv.(_apnsPushService).waitResults(0xc2000b7f30, 0xc20191d0c0, 0xc201bb0b90, 0x1, 0xa, ...)
/home/monnand/goproj/src/github.com/uniqush/uniqush-push/build/tmpgopath/src/github.com/uniqush/uniqush-push/srv/apns.go:211 +0x207
created by github.com/uniqush/uniqush-push/srv.(_apnsPushService).Push
/home/monnand/goproj/src/github.com/uniqush/uniqush-push/build/tmpgopath/src/github.com/uniqush/uniqush-push/srv/apns.go:329 +0xd7d

goroutine 4944 [sleep]:
time.Sleep(0x165a0bc00)
/home/monnand/soft/golang/go/src/pkg/runtime/ztime_linux_amd64.c:19 +0x2f
github.com/uniqush/uniqush-push/srv.clearRequest(0xc201a348c0, 0xc200159c00)
/home/monnand/goproj/src/github.com/uniqush/uniqush-push/build/tmpgopath/src/github.com/uniqush/uniqush-push/srv/apns.go:475 +0x2a
created by github.com/uniqush/uniqush-push/srv.(*apnsPushService).pushWorker
/home/monnand/goproj/src/github.com/uniqush/uniqush-push/build/tmpgopath/src/github.com/uniqush/uniqush-push/srv/apns.go:615 +0x37c

goroutine 5249 [select]:
net/http.(_persistConn).writeLoop(0xc203816580)
/home/monnand/soft/golang/go/src/pkg/net/http/transport.go:774 +0x26f
created by net/http.(_Transport).dialConn
/home/monnand/soft/golang/go/src/pkg/net/http/transport.go:512 +0x58b

goroutine 5277 [chan receive]:
main.(_PushBackEnd).collectResult(0xc2000fa440, 0xc203e00780, 0x24, 0xc203e1f097, 0x10, ...)
/home/monnand/goproj/src/github.com/uniqush/uniqush-push/build/tmpgopath/src/github.com/uniqush/uniqush-push/pushbackend.go:161 +0x51
main.func·003()
/home/monnand/goproj/src/github.com/uniqush/uniqush-push/build/tmpgopath/src/github.com/uniqush/uniqush-push/pushbackend.go:259 +0x79
created by main.(_PushBackEnd).pushImpl
/home/monnand/goproj/src/github.com/uniqush/uniqush-push/build/tmpgopath/src/github.com/uniqush/uniqush-push/pushbackend.go:261 +0xbc6

goroutine 5162 [semacquire]:
sync.runtime_Semacquire(0xc2000fd314)
/home/monnand/soft/golang/go/src/pkg/runtime/zsema_linux_amd64.c:165 +0x2e
sync.(_Mutex).Lock(0xc2000fd310)
/home/monnand/soft/golang/go/src/pkg/sync/mutex.go:66 +0xbb
sync.(_RWMutex).Lock(0xc2000fd310)
/home/monnand/soft/golang/go/src/pkg/sync/rwmutex.go:78 +0x25
github.com/uniqush/uniqush-push/db.(_pushDatabaseOpts).RemoveDeliveryPointFromService(0xc2000fd300, 0xc202937c40, 0x10, 0xc2029374e0, 0x18, ...)
/home/monnand/goproj/src/github.com/uniqush/uniqush-push/build/tmpgopath/src/github.com/uniqush/uniqush-push/db/pushdb.go:197 +0x102
main.(_PushBackEnd).Unsubscribe(0xc2000fa440, 0xc202937c40, 0x10, 0xc2029374e0, 0x18, ...)
/home/monnand/goproj/src/github.com/uniqush/uniqush-push/build/tmpgopath/src/github.com/uniqush/uniqush-push/pushbackend.go:77 +0x65
main.(_PushBackEnd).fixError(0xc2000fa440, 0xc20290ad50, 0x24, 0xc2003960c0, 0xc20352a6f0, ...)
/home/monnand/goproj/src/github.com/uniqush/uniqush-push/build/tmpgopath/src/github.com/uniqush/uniqush-push/pushbackend.go:148 +0x101d
main.(_PushBackEnd).collectResult(0xc2000fa440, 0xc20290ad50, 0x24, 0xc20291d147, 0x10, ...)
/home/monnand/goproj/src/github.com/uniqush/uniqush-push/build/tmpgopath/src/github.com/uniqush/uniqush-push/pushbackend.go:174 +0x560
main.func·003()
/home/monnand/goproj/src/github.com/uniqush/uniqush-push/build/tmpgopath/src/github.com/uniqush/uniqush-push/pushbackend.go:259 +0x79
created by main.(*PushBackEnd).pushImpl
/home/monnand/goproj/src/github.com/uniqush/uniqush-push/build/tmpgopath/src/github.com/uniqush/uniqush-push/pushbackend.go:261 +0xbc6

goroutine 5072 [sleep]:
time.Sleep(0x165a0bc00)
/home/monnand/soft/golang/go/src/pkg/runtime/ztime_linux_amd64.c:19 +0x2f
github.com/uniqush/uniqush-push/srv.clearRequest(0xc201d36a80, 0xc200159c00)
/home/monnand/goproj/src/github.com/uniqush/uniqush-push/build/tmpgopath/src/github.com/uniqush/uniqush-push/srv/apns.go:475 +0x2a
created by github.com/uniqush/uniqush-push/srv.(*apnsPushService).pushWorker
/home/monnand/goproj/src/github.com/uniqush/uniqush-push/build/tmpgopath/src/github.com/uniqush/uniqush-push/srv/apns.go:615 +0x37c

goroutine 4983 [IO wait]:
net.runtime_pollWait(0x7f305c280c80, 0x72, 0x0)
/home/monnand/soft/golang/go/src/pkg/runtime/znetpoll_linux_amd64.c:118 +0x82
net.(_pollDesc).WaitRead(0xc2017c0110, 0xb, 0xc2000fd390)
/home/monnand/soft/golang/go/src/pkg/net/fd_poll_runtime.go:75 +0x31
net.(_netFD).Read(0xc2017c0090, 0xc201a33400, 0x400, 0x400, 0x0, ...)
/home/monnand/soft/golang/go/src/pkg/net/fd_unix.go:195 +0x2b3
net.(_conn).Read(0xc200229c30, 0xc201a33400, 0x400, 0x400, 0x48f351, ...)
/home/monnand/soft/golang/go/src/pkg/net/net.go:123 +0xc3
crypto/tls.(_block).readFromUntil(0xc201bb1d50, 0xc2000fd690, 0xc200229c30, 0x5, 0xc200229c30, ...)
/home/monnand/soft/golang/go/src/pkg/crypto/tls/conn.go:401 +0xbd
crypto/tls.(_Conn).readRecord(0xc201061280, 0x17, 0x0, 0x413ae5)
/home/monnand/soft/golang/go/src/pkg/crypto/tls/conn.go:481 +0xfa
crypto/tls.(_Conn).Read(0xc201061280, 0xc201d9f000, 0x1000, 0x1000, 0x0, ...)
/home/monnand/soft/golang/go/src/pkg/crypto/tls/conn.go:796 +0x102
bufio.(_Reader).fill(0xc201a08420)
/home/monnand/soft/golang/go/src/pkg/bufio/bufio.go:79 +0x10c
bufio.(_Reader).Peek(0xc201a08420, 0x1, 0x0, 0x0, 0x0, ...)
/home/monnand/soft/golang/go/src/pkg/bufio/bufio.go:107 +0xc9
net/http.(_persistConn).readLoop(0xc20041f300)
/home/monnand/soft/golang/go/src/pkg/net/http/transport.go:670 +0xc4
created by net/http.(_Transport).dialConn
/home/monnand/soft/golang/go/src/pkg/net/http/transport.go:511 +0x574

goroutine 4984 [select]:
net/http.(_persistConn).writeLoop(0xc20041f300)
/home/monnand/soft/golang/go/src/pkg/net/http/transport.go:774 +0x26f
created by net/http.(_Transport).dialConn
/home/monnand/soft/golang/go/src/pkg/net/http/transport.go:512 +0x58b

goroutine 5015 [sleep]:
time.Sleep(0x165a0bc00)
/home/monnand/soft/golang/go/src/pkg/runtime/ztime_linux_amd64.c:19 +0x2f
github.com/uniqush/uniqush-push/srv.clearRequest(0xc2013de620, 0xc200159c00)
/home/monnand/goproj/src/github.com/uniqush/uniqush-push/build/tmpgopath/src/github.com/uniqush/uniqush-push/srv/apns.go:475 +0x2a
created by github.com/uniqush/uniqush-push/srv.(*apnsPushService).pushWorker
/home/monnand/goproj/src/github.com/uniqush/uniqush-push/build/tmpgopath/src/github.com/uniqush/uniqush-push/srv/apns.go:615 +0x37c

goroutine 5031 [select]:
github.com/uniqush/uniqush-push/srv.(_apnsPushService).waitResults(0xc2000b7f30, 0xc20083a180, 0xc2002121e0, 0x1, 0xa, ...)
/home/monnand/goproj/src/github.com/uniqush/uniqush-push/build/tmpgopath/src/github.com/uniqush/uniqush-push/srv/apns.go:211 +0x207
created by github.com/uniqush/uniqush-push/srv.(_apnsPushService).Push
/home/monnand/goproj/src/github.com/uniqush/uniqush-push/build/tmpgopath/src/github.com/uniqush/uniqush-push/srv/apns.go:329 +0xd7d

goroutine 5085 [select]:
github.com/uniqush/uniqush-push/srv.(_apnsPushService).waitResults(0xc2000b7f30, 0xc201bd0360, 0xc201d325f0, 0x1, 0xa, ...)
/home/monnand/goproj/src/github.com/uniqush/uniqush-push/build/tmpgopath/src/github.com/uniqush/uniqush-push/srv/apns.go:211 +0x207
created by github.com/uniqush/uniqush-push/srv.(_apnsPushService).Push
/home/monnand/goproj/src/github.com/uniqush/uniqush-push/build/tmpgopath/src/github.com/uniqush/uniqush-push/srv/apns.go:329 +0xd7d

goroutine 5083 [sleep]:
time.Sleep(0x165a0bc00)
/home/monnand/soft/golang/go/src/pkg/runtime/ztime_linux_amd64.c:19 +0x2f
github.com/uniqush/uniqush-push/srv.clearRequest(0xc201bd1310, 0xc200159c00)
/home/monnand/goproj/src/github.com/uniqush/uniqush-push/build/tmpgopath/src/github.com/uniqush/uniqush-push/srv/apns.go:475 +0x2a
created by github.com/uniqush/uniqush-push/srv.(*apnsPushService).pushWorker
/home/monnand/goproj/src/github.com/uniqush/uniqush-push/build/tmpgopath/src/github.com/uniqush/uniqush-push/srv/apns.go:615 +0x37c

goroutine 5025 [sleep]:
time.Sleep(0x165a0bc00)
/home/monnand/soft/golang/go/src/pkg/runtime/ztime_linux_amd64.c:19 +0x2f
github.com/uniqush/uniqush-push/srv.clearRequest(0xc20059bf50, 0xc200159c00)
/home/monnand/goproj/src/github.com/uniqush/uniqush-push/build/tmpgopath/src/github.com/uniqush/uniqush-push/srv/apns.go:475 +0x2a
created by github.com/uniqush/uniqush-push/srv.(*apnsPushService).pushWorker
/home/monnand/goproj/src/github.com/uniqush/uniqush-push/build/tmpgopath/src/github.com/uniqush/uniqush-push/srv/apns.go:615 +0x37c

goroutine 5030 [select]:
github.com/uniqush/uniqush-push/srv.(_apnsPushService).waitResults(0xc2000b7f30, 0xc20083a0c0, 0xc200212190, 0x1, 0xa, ...)
/home/monnand/goproj/src/github.com/uniqush/uniqush-push/build/tmpgopath/src/github.com/uniqush/uniqush-push/srv/apns.go:211 +0x207
created by github.com/uniqush/uniqush-push/srv.(_apnsPushService).Push
/home/monnand/goproj/src/github.com/uniqush/uniqush-push/build/tmpgopath/src/github.com/uniqush/uniqush-push/srv/apns.go:329 +0xd7d

goroutine 5027 [sleep]:
time.Sleep(0x165a0bc00)
/home/monnand/soft/golang/go/src/pkg/runtime/ztime_linux_amd64.c:19 +0x2f
github.com/uniqush/uniqush-push/srv.clearRequest(0xc2006cb000, 0xc200159c00)
/home/monnand/goproj/src/github.com/uniqush/uniqush-push/build/tmpgopath/src/github.com/uniqush/uniqush-push/srv/apns.go:475 +0x2a
created by github.com/uniqush/uniqush-push/srv.(*apnsPushService).pushWorker
/home/monnand/goproj/src/github.com/uniqush/uniqush-push/build/tmpgopath/src/github.com/uniqush/uniqush-push/srv/apns.go:615 +0x37c

goroutine 5101 [sleep]:
time.Sleep(0x165a0bc00)
/home/monnand/soft/golang/go/src/pkg/runtime/ztime_linux_amd64.c:19 +0x2f
github.com/uniqush/uniqush-push/srv.clearRequest(0xc201ccd460, 0xc200159c00)
/home/monnand/goproj/src/github.com/uniqush/uniqush-push/build/tmpgopath/src/github.com/uniqush/uniqush-push/srv/apns.go:475 +0x2a
created by github.com/uniqush/uniqush-push/srv.(*apnsPushService).pushWorker
/home/monnand/goproj/src/github.com/uniqush/uniqush-push/build/tmpgopath/src/github.com/uniqush/uniqush-push/srv/apns.go:615 +0x37c

goroutine 5094 [sleep]:
time.Sleep(0x165a0bc00)
/home/monnand/soft/golang/go/src/pkg/runtime/ztime_linux_amd64.c:19 +0x2f
github.com/uniqush/uniqush-push/srv.clearRequest(0xc201ccd000, 0xc200159c00)
/home/monnand/goproj/src/github.com/uniqush/uniqush-push/build/tmpgopath/src/github.com/uniqush/uniqush-push/srv/apns.go:475 +0x2a
created by github.com/uniqush/uniqush-push/srv.(*apnsPushService).pushWorker
/home/monnand/goproj/src/github.com/uniqush/uniqush-push/build/tmpgopath/src/github.com/uniqush/uniqush-push/srv/apns.go:615 +0x37c

goroutine 5108 [sleep]:
time.Sleep(0x165a0bc00)
/home/monnand/soft/golang/go/src/pkg/runtime/ztime_linux_amd64.c:19 +0x2f
github.com/uniqush/uniqush-push/srv.clearRequest(0xc201ccd930, 0xc200159c00)
/home/monnand/goproj/src/github.com/uniqush/uniqush-push/build/tmpgopath/src/github.com/uniqush/uniqush-push/srv/apns.go:475 +0x2a
created by github.com/uniqush/uniqush-push/srv.(*apnsPushService).pushWorker
/home/monnand/goproj/src/github.com/uniqush/uniqush-push/build/tmpgopath/src/github.com/uniqush/uniqush-push/srv/apns.go:615 +0x37c

APNS: check feedback service less frequently

Right now, after sending every APNS notification, uniqush-push will check the feedback service. However, this is extremely inefficient and is probably the reason why APNS is so slow as mentioned in #24. Try to fix it ASAP.

Sending messages from remote machine

I can push message from local machine, but I can't push from remote machine.
I changed config file, but still it timeouts.

This is my config:
....
[WebFrontend]
log=on
loglevel=standard
addr=0.0.0.0:9898
....

and my command from remote machine, ip.ip.ip.ip is my ip address, masked.
curl http://ip.ip.ip.ip:9898/push -d service=myservice -d subscriber=* -d msg="this is a message"

Duplicate documentation

There are two different versions of the documentation online:

  1. http://uniqush.org/documentation/install.html
    this is also linked from https://github.com/uniqush/uniqush-push/blob/master/INSTALL.md
  2. http://uniqush.org/docs/install.html

Please reduce confusion and remove the outdated version.

Besides, both state sudo apt-get install redis as the command to install redis on debian and ubuntu, whereas the package redis does not exist. The correct command is sudo apt-get install redis-server

Failed:subscriber missing

hi,i'm a uniqush-push user from china.
when i push msg,i often got this error:

[Push][Info] 2014/03/24 10:43:27 RequestId=4d4d95e9-ff4d-49ff-73ba-e837256f5110 From=xxx.xxx.xxx.xxx:32985 Service=g29 Subscribers="[tdsjh2]"
push to device:g29 dps:[]string{"apns:fa426c10f17bac6e9ed155c589e79649329498cd"}
[Push][Info] 2014/03/24 10:43:27 RequestID=4d4d95e9-ff4d-49ff-73ba-e837256f5110 Service=g29 Subscriber= PushServiceProvider=apns:1d32b88ac2f296e602d63174b502aa57e9d2fb3e DeliveryPoint=Unknown Failed: EOF

it seems like the subscribe in in the first log:" Subscribers=[tdsjh2]" ;but in the third log the subscriber is null.

Using asterisk to send to all takes too long to prepare

Hi,

We got a pretty huge number of users and we try to send the * to send to all. Unfortunately doing an http requests will timeout the client because the server will try to prepare its stuff.

I like how the gcm push works because its so fast. Except for APNS which is so slow.

APNS push fails after inactive period

Uniqush is a great project - thank you!
Currently in version 1.5.1 we observe for APNS following reliability issue.

When Uniqush is inactive within 2 hours (i.e. does no push) APNS server seems to close the connection. The next push request will then fail. The subcriber is missing and the delivery point is unknown. Also the retries will fail. The retry after 20 s fails due to i/o timeout. And then the sleep time seems to be calculated wrong. Two more tries happen immediately.

After that the next push request succeeds again.

This is the logging of the scenario descibed above:

[Push][Info] 2014/06/04 11:11:19 RequestId=538ee2b7-m67KDaMlSzW8k7nEhwhCXA== From=127.0.0.1:52617 Service=ajoy Subscribers="[41786377584]"

[Push][Info] 2014/06/04 11:11:19 RequestID=538ee2b7-m67KDaMlSzW8k7nEhwhCXA== Service=ajoy Subscriber=41786377584 PushServiceProvider=apns:85532e46d56583e1d66a0c07be4eb27a4d325ef7 DeliveryPoint=apns:98e33a0cad66bc695e9ba781efa48a4252eb70ba MsgId=apns:apns:85532e46d56583e1d66a0c07be4eb27a4d325ef7-56 Success!


[Push][Info] 2014/06/04 13:11:19 Connection closed by APNS: EOF

[Push][Info] 2014/06/04 13:42:35 RequestId=538f062b-dsI1O6Q5RvBfVW2uWABqyw== From=127.0.0.1:55461 Service=ajoy Subscribers="[41786377584]"

[Push][Error] 2014/06/04 13:42:35 RequestID=538f062b-dsI1O6Q5RvBfVW2uWABqyw== Service=ajoy Subscriber= PushServiceProvider=apns:85532e46d56583e1d66a0c07be4eb27a4d325ef7 DeliveryPoint=Unknown Failed: error on connection with 17.149.34.189:2195: EOF. Will retry within 20s

[Push][Error] 2014/06/04 13:42:56 Error: error on connection with 17.172.232.46:2195: write tcp 17.172.232.46:2195: i/o timeout. Will retry within -1618991h33m41.610135552s

[Push][Info] 2014/06/04 13:42:56 Connection closed by APNS: read tcp 17.172.232.46:2195: use of closed network connection
[Push][Error] 2014/06/04 13:42:56 Error: error on connection with 17.172.232.45:2195: write tcp 17.172.232.45:2195: i/o timeout. Will retry within -1934822h49m41.49584896s

[Push][Info] 2014/06/04 13:42:56 Connection closed by APNS: read tcp 17.172.232.45:2195: use of closed network connection

[Push][Info] 2014/06/04 13:42:57 Connection closed by APNS: read tcp 17.172.232.18:2195: use of closed network connection


[Push][Info] 2014/06/04 13:43:15 RequestId=538f0653--PVGYfvtdivXRJKHu5LEnQ== From=127.0.0.1:55461 Service=ajoy Subscribers="[41786377584]"

[Push][Info] 2014/06/04 13:43:16 RequestID=538f0653--PVGYfvtdivXRJKHu5LEnQ== Service=ajoy Subscriber=41786377584 PushServiceProvider=apns:85532e46d56583e1d66a0c07be4eb27a4d325ef7 DeliveryPoint=apns:98e33a0cad66bc695e9ba781efa48a4252eb70ba MsgId=apns:apns:85532e46d56583e1d66a0c07be4eb27a4d325ef7-58 Success! 

Failed: BadDeliveryPoint

Hello,

I'm using uniqush-push and after sometimes when I send a push message I got the following error:

[Push][Info] 2014/03/25 00:49:58 
RequestId=5330d2b6-kMqh8mR2TH6-ey5wgumQ6w== From=127.0.0.1:50509 Service=meetapp 
Subscribers=\"[100002076768728]\"\n[Push][Error] 2014/03/25 00:49:58 RequestID=5330d2b6-kMqh8mR2TH6-ey5wgumQ6w== Service=meetapp Subscriber=100002076768728 PushServiceProvider=apns:531023ac704aca3571969e739a1faa35dc59a0ff 
DeliveryPoint=apns:e63490774c4147962068b4338b95263c6281e77a Failed: BadDeliveryPoint apns:e63490774c4147962068b4338b95263c6281e77a: encoding/hex: invalid byte: U+0028 '('\n[Push][Info] 2014/03/25 00:49:58 RequestID=5330d2b6-kMqh8mR2TH6-ey5wgumQ6w== Service=meetapp Subscriber=100002076768728 PushServiceProvider=apns:531023ac704aca3571969e739a1faa35dc59a0ff DeliveryPoint=apns:1cc8ea4cec388ba5df6c8ddd0b9f42c40a853666 MsgId=apns:apns:531023ac704aca3571969e739a1faa35dc59a0ff-126 Success!

The error occur only sometimes, but when it happen, all the nexts push aren't delivery with the same error. After a while the pushs notifications start working again (the previous messages aren't delivered).

Just for the record, my messages does not have parentheses '(' (U+0028). And I'm able to send messages with parentheses.

Report error on APNS if key/cert file(s) is(are) missing

When add a new APNS push service provider, it will success even the key or certificate files cannot be found. It will report this error until the first notification is pushed using the provider. This error should be detected and reported immediately.

OOM killed

Hi @monnand

Nov 14 11:00:46 push-notification kernel: [1100089.772898] Node 0 DMA: 2_4kB 2_8kB 2_16kB 1_32kB 3_64kB 3_128kB 2_256kB 0_512kB 1_1024kB 1_2048kB 1_4096kB = 8344kB
Nov 14 11:00:46 push-notification kernel: [1100089.772920] Node 0 DMA32: 446_4kB 0_8kB 1_16kB 2_32kB 1_64kB 0_128kB 1_256kB 1_512kB 1_1024kB 0_2048kB 1_4096kB = 7816kB
Nov 14 11:00:46 push-notification kernel: [1100089.772945] 160 total pagecache pages
Nov 14 11:00:46 push-notification kernel: [1100089.772949] 0 pages in swap cache
Nov 14 11:00:46 push-notification kernel: [1100089.772956] Swap cache stats: add 0, delete 0, find 0/0
Nov 14 11:00:46 push-notification kernel: [1100089.772961] Free swap = 0kB
Nov 14 11:00:46 push-notification kernel: [1100089.772964] Total swap = 0kB
Nov 14 11:00:46 push-notification kernel: [1100089.784492] 985072 pages RAM
Nov 14 11:00:46 push-notification kernel: [1100089.784502] 23923 pages reserved
Nov 14 11:00:46 push-notification kernel: [1100089.784505] 132 pages shared
Nov 14 11:00:46 push-notification kernel: [1100089.784509] 956829 pages non-shared
Nov 14 11:00:46 push-notification kernel: [1100089.784513] [ pid ] uid tgid total_vm rss cpu oom_adj oom_score_adj name
Nov 14 11:00:46 push-notification kernel: [1100089.784532] [ 672] 0 672 3729 106 0 -17 -1000 udevd
Nov 14 11:00:46 push-notification kernel: [1100089.784544] [ 852] 0 852 3728 106 0 -17 -1000 udevd
Nov 14 11:00:46 push-notification kernel: [1100089.784554] [ 853] 0 853 3728 106 0 -17 -1000 udevd
Nov 14 11:00:46 push-notification kernel: [1100089.784564] [ 1366] 0 1366 2280 126 0 0 0 dhclient
Nov 14 11:00:46 push-notification kernel: [1100089.784574] [ 1429] 0 1429 22265 52 0 -17 -1000 auditd
Nov 14 11:00:46 push-notification kernel: [1100089.784583] [ 1444] 0 1444 60832 641 0 0 0 rsyslogd
Nov 14 11:00:46 push-notification kernel: [1100089.784593] [ 1470] 81 1470 5353 59 0 0 0 dbus-daemon
Nov 14 11:00:46 push-notification kernel: [1100089.784605] [ 1559] 0 1559 18860 191 0 -17 -1000 sshd
Nov 14 11:00:46 push-notification kernel: [1100089.784613] [ 1577] 38 1577 7651 148 0 0 0 ntpd
Nov 14 11:00:46 push-notification kernel: [1100089.784623] [ 1584] 220 1584 37654 137 0 0 0 gmond
Nov 14 11:00:46 push-notification kernel: [1100089.784631] [ 1591] 215 1591 10296 150 0 0 0 nrpe
Nov 14 11:00:46 push-notification kernel: [1100089.784639] [ 1617] 219 1617 2708 29 0 0 0 epmd
Nov 14 11:00:46 push-notification kernel: [1100089.784647] [ 1764] 0 1764 29292 152 0 0 0 crond
Nov 14 11:00:46 push-notification kernel: [1100089.784655] [ 1790] 0 1790 5367 44 0 0 0 atd
Nov 14 11:00:46 push-notification kernel: [1100089.784663] [ 1808] 0 1808 1021 24 0 0 0 agetty
Nov 14 11:00:46 push-notification kernel: [1100089.784671] [ 1811] 0 1811 1018 23 0 0 0 mingetty
Nov 14 11:00:46 push-notification kernel: [1100089.784679] [ 1814] 0 1814 1018 22 0 0 0 mingetty
Nov 14 11:00:46 push-notification kernel: [1100089.784686] [ 1817] 0 1817 1018 23 0 0 0 mingetty
Nov 14 11:00:46 push-notification kernel: [1100089.784694] [ 1819] 0 1819 1018 22 0 0 0 mingetty
Nov 14 11:00:46 push-notification kernel: [1100089.784702] [ 1821] 0 1821 1018 23 0 0 0 mingetty
Nov 14 11:00:46 push-notification kernel: [1100089.784710] [ 1823] 0 1823 1018 22 0 0 0 mingetty
Nov 14 11:00:46 push-notification kernel: [1100089.784718] [ 1839] 0 1839 35248 1638 0 0 0 munin-node
Nov 14 11:00:46 push-notification kernel: [1100089.784726] [ 2317] 0 2317 27639 126 0 0 0 uniqush-push
Nov 14 11:00:46 push-notification kernel: [1100089.784734] [ 2319] 0 2319 27572 51 0 0 0 bash
Nov 14 11:00:46 push-notification kernel: [1100089.784742] [ 2320] 0 2320 1163030 940269 0 0 0 uniqush-push
Nov 14 11:00:46 push-notification kernel: [1100089.784750] Out of memory: Kill process 2320 (uniqush-push) score 950 or sacrifice child
Nov 14 11:00:46 push-notification kernel: [1100089.784758] Killed process 2320 (uniqush-push) total-vm:4652120kB, anon-rss:3761076kB, file-rss:0kB

I really can't pinned it down why, but it happens when we try to send a push to 500k devices. It just runs out of memory, and we have a cron to revive it. It happens time to time.

redis should not be a dependency

redis should not be required to be installed on the same machine with uniqush-push. (You can safely run uniqush-push on a node and run redis on another one and let them communicate through network.)

The build script should be changed.

APNS memory leak: remove the request info when timeout

APNS may not reply any message on success (esp. for sandbox environment). We have a time out mechanism to make sure to reply a status to the client. However, on time out, we will never delete the request information which is stored as an element in map[uint32]*pushRequest. The size of this map will keep increasing if the sandbox environment was used.

The related code could be found in srv/apns.go:apnsPushService.pushWorker(). It might be the cause of OOM mentioned in #24.

Send notifications in batch rather than one-by-one

Hello!

I'm using uniqush 1.5.0 (and now 1.5.1) on a large-scale android app (sorry, but I can't provide the name :() and we sent almost 50 millions push notifications in a lapse of time of around 2 months.

The only problem I encountered with the app is that while GCM allows to send up to 1000 IDs at once, Uniqush just send them one by one. It will be great to check first if uniqush receives a request to send a notification to all registered devices and, rather than send them one-by-one, send them in batch of 1000 devices each time...

I'm not such a good programmer and I don't know Go lang either so I couldn't help updating the app :(

Install instructions

A couple of questions on the install instructions. I'm using INSTALL.md

  1. To install redis.go, do I have to use the Makefile like the instructions say? I had trouble getting that to work but using goinstall worked.
  2. I don't see a build.sh to build uniqush

Thanks.

Load configuration from URL rather than local file

I'm running uniqush under docker, and to keep the dockerfile as generic as possible, it would be useful to load the config from a URL rather than a local file.

Eg,

$ uniqush-push http://path/to/remote/uniqush-push.conf

1.4.3

  • Re-arrange push service providers' and delivery points' database format. Let then has attributions like creation time etc. But it has to be backward compatible with old format.
  • Bug fix.

[Improvement]push to multi-subscribers hurt performance

Fst, Thx for your hard work on such excellent project.

When I try pushing msg to multi-subscribers, function GetDeliveryPointsNameByServiceSubscriber use KEYS to fetch all delivery points that matched.
But KEYS blocks redis when db is large. According to manual, SCAN is suggested instead.
However goredis doesn't support SCAN....

Will you consider that?

Stop on /stop

Yes, the interface was broken. It should stop on /stop.

/nrdp

Add new feature, which replies number of delivery points under a certain subscriber.

remove unnecessary parameters in the notification

In current version, when use /push to push notification, it will (accidentally) send two additional parameters: service and subscriber (or subscribers) to the app. This feature is not intended and may lead to security/privacy issues.

iOS 8 issue: unsubscribing unrelated tokens due to APNS response error of first push

iOS users who upgrade to iOS 8 may run into following problem where they no not receive push notifications anymore.

In short

If a user gets a push after upgrading to iOS 8 and then subscribes within some minutes, Uniqush unsubscibes due to APNS response error of first push.

In details

  1. User has upgraded to iOS 8 and gets a message. The device token is invalid and the push is finally not delivered (behavior as expected).
[Push][Info] 2014/09/22 22:55:09 RequestId=54208cad-v18_vLRliIG43_UOEmCU6Q== From=127.0.0.1:48987 Service=ajoy NrSubscribers=1 Subscribers="[41795338138]"
[Push][Info] 2014/09/22 22:55:10 RequestID=54208cad-v18_vLRliIG43_UOEmCU6Q== Service=ajoy Subscriber=41795338138 PushServiceProvider=apns:980b5e38a4d563d98d9a543ac0b0d191db9b5991 DeliveryPoint=apns:8b5528db2c8553347e7264f1eecf66f736f5bd0a MsgId=apns:apns:980b5e38a4d563d98d9a543ac0b0d191db9b5991-188 Success!
  1. The user subscibes within some minutes. Now he receives another push successfully. :)
[Subscribe][Info] 2014/09/22 22:55:36 From=127.0.0.1:56078 Service=ajoy Subscriber=41795338138 PushServiceProvider=apns:980b5e38a4d563d98d9a543ac0b0d191db9b5991 DeliveryPoint=apns:8b5528db2c8553347e7264f1eecf66f736f5bd0a Success!
[Push][Info] 2014/09/22 22:55:49 RequestId=54208cd5-x0z76WVdub975ja9ndtuaA== From=127.0.0.1:48987 Service=ajoy NrSubscribers=1 Subscribers="[41795338138]"
[Push][Info] 2014/09/22 22:55:49 RequestID=54208cd5-x0z76WVdub975ja9ndtuaA== Service=ajoy Subscriber=41795338138 PushServiceProvider=apns:980b5e38a4d563d98d9a543ac0b0d191db9b5991 DeliveryPoint=apns:8b5528db2c8553347e7264f1eecf66f736f5bd0a MsgId=apns:apns:980b5e38a4d563d98d9a543ac0b0d191db9b5991-189 Success!
  1. After some minutes APNS responds to the first push with an invalid token error and Uniqush unsubscribes even though it was subscribed with a valid token in the meantime (to be fixed).
[Push][Info] 2014/09/22 23:03:56 Service=ajoy Subscriber=41795338138 DeliveryPoint=apns:8b5528db2c8553347e7264f1eecf66f736f5bd0a Unsubscribe success
[Push][Error] 2014/09/22 23:03:56 Error: <nil>
  1. From now on no more push is delivered anymore. :(
[Push][Info] 2014/09/22 23:09:17 RequestId=54208ffd-Z0LCRgoYofwoXKJ2J88Xgg== From=127.0.0.1:35372 Service=ajoy NrSubscribers=1 Subscribers="[41795338138]"
[Push][Error] 2014/09/22 23:09:17 RequestID=54208ffd-Z0LCRgoYofwoXKJ2J88Xgg== Service=ajoy Subscriber=41795338138 Failed: No device

[Push][Info] 2014/09/22 23:10:29 RequestId=54209045-etOx-f0G6C5Kqm22jjtmsA== From=127.0.0.1:35372 Service=ajoy NrSubscribers=1 Subscribers="[41795338138]"
[Push][Error] 2014/09/22 23:10:29 RequestID=54209045-etOx-f0G6C5Kqm22jjtmsA== Service=ajoy Subscriber=41795338138 Failed: No device

Fix

Uniqush should only unsubscribe if subscriber was not updated.

Change the interface: PushServiceType

The Push() method in this interface should take delivery points in its argument not from a channel. This may reduce some memory usage, which may partially fix #40.

APNS: does not change the server's address when switch from sandbox to production

  1. Put cert.pem and key.pem under some directory, say /top/secret/cert.pem and /top/secret/key.pem, respectively.

  2. Use the following command to add a sandbox provider:

    curl http://127.0.0.1:9898/addpsp -d service=myservice -d pushservicetype=apns -d cert=/top/secret/cert.pem -d key=/top/secret/key.pem -d sandbox=true

  3. Download the production certificate and key. Put them under the exact same path as sandbox certificate/key. i.e. overwrite the sandbox certificate/key

  4. Use the following command to add the production provider:

    curl http://127.0.0.1:9898/addpsp -d service=myservice -d pushservicetype=apns -d cert=/top/secret/cert.pem -d key=/top/secret/key.pem

  5. Now, push message through that provider, the sandbox certificate/key will be used even if it has updated the database.

This bug is discovered through this thread

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.