Search code examples
redisrethinkdbdeepstream.io

deepstream.io redis & rethink not ready


I am trying to set up deepstream.io. My goal is to have a 4 docker container:

  • deepstream
  • the deepstream search
  • redis
  • rethink

Redis as well as rethink are running and are accepting connections. Starting deepstream now states that the cache as well as the storage are not ready. I do not get why and what "dependency description provided" is supposed to tell me.

Why does deepstream not accept the connection?

{
  "deepstreamVersion": "3.1.0",
  "gitRef": "2557412988b128b3331f6079ff1bd26b0b49302d",
  "buildTime": "Mon Sep 25 2017 14:42:10 GMT+0000 (UTC)",
  "platform": "linux",
  "arch": "x64",
  "nodeVersion": "v6.11.3",
  "libs": [
    "deepstream.io-cache-hazelcast:1.0.2",
    "deepstream.io-cache-memcached:1.0.0",
    "deepstream.io-cache-redis:1.1.0",
    "deepstream.io-logger-winston:1.1.0",
    "deepstream.io-storage-elasticsearch:1.0.1",
    "deepstream.io-storage-mongodb:1.1.0",
    "deepstream.io-storage-postgres:1.1.3",
    "deepstream.io-storage-rethinkdb:1.0.2"
  ]
}

Running deepstream start

      _                     _
   __| | ___  ___ _ __  ___| |_ _ __ ___  __ _ _ __ ____
  / _` |/ _ \/ _ \ '_ \/ __| __| '__/ _ \/ _` | '_ ` _  \
 | (_| |  __/  __/ |_) \__ \ |_| | |  __/ (_| | | | | | |
  \__,_|\___|\___| .__/|___/\__|_|  \___|\__,_|_| |_| |_|
                 |_|
 =====================   starting   =====================
INFO | State transition (start): Stopped -> LoggerInit
INFO | logger ready: std out/err
INFO | State transition (logger-started): LoggerInit -> PluginInit
INFO | deepstream version: 3.1.0
INFO | configuration file loaded from /etc/deepstream/config.yml
INFO | library directory set to: /var/lib/deepstream
INFO | authenticationHandler ready: none
INFO | permissionHandler ready: valve permissions loaded from /etc/deepstream/permissions.yml
INFO | cache ready: no dependency description provided
INFO | storage ready: no dependency description provided
INFO | State transition (plugins-started): PluginInit -> ServiceInit
INFO | State transition (services-started): ServiceInit -> ConnectionEndpointInit
iconv-lite warning: javascript files use encoding different from utf-8. See https://github.com/ashtuchkin/iconv-lite/wiki/Javascript-source-file-encodings for more info.
INFO | Listening for websocket connections on 0.0.0.0:6020/deepstream
INFO | Listening for health checks on path /health-check
INFO | connectionEndpoint ready: WebSocket Connection Endpoint
INFO | Listening for http connections on 0.0.0.0:8080
INFO | Listening for health checks on path /health-check
INFO | connectionEndpoint ready: HTTP connection endpoint
INFO | State transition (connection-endpoints-started): ConnectionEndpointInit -> Running
INFO | Deepstream started

The config file:

# General
# Show the deepstream logo on startup (highly recommended)
showLogo: true
# Log messages with this level and above. Valid levels are DEBUG, INFO, WARN, ERROR, OFF
logLevel: DEBUG
# Directory where all plugins reside
libDir: /var/lib/deepstream

# Connectivity
# webfacing URL under which this client is reachable. Used for loadbalancing / failover
externalUrl: null

# SSL Configuration
sslKey: null
sslCert: null
sslCa: null

# Connection Endpoint Configuration
# to disable, replace configuration with null eg. `http: null`
connectionEndpoints:
  websocket:
    name: uws
    options:
        # port for the websocket server
        port: 6020
        # host for the websocket server
        host: 0.0.0.0
        # url path websocket connections connect to
        urlPath: /deepstream
        # url path for http health-checks, GET requests to this path will return 200 if deepstream is alive
        healthCheckPath: /health-check
        # the amount of milliseconds between each ping/heartbeat message
        heartbeatInterval: 30000
        # the amount of milliseconds that writes to sockets are buffered
        outgoingBufferTimeout: 0

        # Security
        # amount of time a connection can remain open while not being logged in
        # or false for no timeout
        unauthenticatedClientTimeout: 180000
        # invalid login attempts before the connection is cut
        maxAuthAttempts: 3
        # if true, the logs will contain the cleartext username / password of invalid login attempts
        logInvalidAuthData: false
        # maximum allowed size of an individual message in bytes
        maxMessageSize: 1048576
  http:
    name: http
    options:
      # port for the http server
      port: 8080
      # host for the http server
      host: 0.0.0.0
      # allow 'authData' parameter in POST requests, if disabled only token and OPEN auth is
      # possible
      allowAuthData: true
      # enable the authentication endpoint for requesting tokens/userData.
      # note: a custom authentication handler is required for token generation
      enableAuthEndpoint: false
      # path for authentication requests
      authPath: /auth
      # path for POST requests
      postPath: /
      # path for GET requests
      getPath: /
      # url path for http health-checks, GET requests to this path will return 200 if deepstream is alive
      healthCheckPath: /health-check

      # -- CORS --
      # if disabled, only requests with an 'Origin' header matching one specified under 'origins'
      # below will be permitted and the 'Access-Control-Allow-Credentials' response header will be
      # enabled
      allowAllOrigins: true
      # a list of allowed origins
      origins:
        - 'https://example.com'

# Logger Configuration
# logger:
#   # use either the default logger
#   name: default
#    options:
#      colors: true
#      # value of logLevel (line 4) will always overwrite this value
#      logLevel: INFO

#   # or the winston logger
#   name: winston
#   options:
#     # specify a list of transports (console, file, time)
#     -
#       type: console
#       options:
#         # value of logLevel (line 4) will always overwrite this value
#         level: info
#         colorize: true
#     -
#       type: time
#       options:
#         filename: ../var/deepstream

#   # or a custom logger
#   path: ./my-custom-logger

# Plugin Configuration
plugins:
 cache:
   name: redis
   options:
     host: Redis-Redis-1
     port: 6379

 storage:
   name: rethinkdb
   options:
     host: rethinkdb-rethinkdb-proxy-1
     port: 28015
     splitChar: /

# Storage options
# a RegExp that matches recordNames. If it matches, the record's data won't be stored in the db
storageExclusion: null

auth:
  type: none

  # getting permissions from a http webhook
  # type: http
  # options:
  #   # a post request will be send to this url on every incoming connection
  #   endpointUrl: http://localhost:6004
  #   # any of these will be treated as access granted
  #   permittedStatusCodes: [ 200 ]
  #   # if the webhook didn't respond after this amount of milliseconds, the connection will be rejected
  #   requestTimeout: 2000

# Permissioning
permission:
  # Only config or custom permissionHandler at the moment
  type: config
  options:
    # Path to the permissionFile. Can be json, js or yml
    path: ./permissions.yml
    # Amount of times nested cross-references will be loaded. Avoids endless loops
    maxRuleIterations: 3
    # PermissionResults are cached to increase performance. Lower number means more loading
    cacheEvacuationInterval: 60000

# Timeouts (in milliseconds)
# Timeout for client RPC acknownledgement
rpcAckTimeout: 1000
# Timeout for actual RPC provider response
rpcTimeout: 10000
# Maximum time permitted to fetch from cache
cacheRetrievalTimeout: 1000
# Maximum time permitted to fetch from storage
storageRetrievalTimeout: 2000
# Plugin startup timeout – deepstream init will fail if any plugins fail to emit a 'done' event within this timeout
dependencyInitialisationTimeout: 10000
# The amount of time to wait for a provider to acknowledge or reject a listen request
listenResponseTimeout: 500
# The amount of time a broadcast will wait (to allow broadcast coalescing). -1 means disabled.
broadcastTimeout: 0
# A list of prefixes that, when a record is updated via setData and it matches one of the prefixes
# it will be permissioned and written directly to the cache and storage layers
# storageHotPathPatterns:
  # - analytics/
  # - metrics/

Redis PING

ping Redis-Redis-1
PING redis-redis-1.rancher.internal (10.42.230.105): 56 data bytes
64 bytes from 10.42.230.105: icmp_seq=0 ttl=62 time=12.676 ms
64 bytes from 10.42.230.105: icmp_seq=1 ttl=62 time=12.751 ms
64 bytes from 10.42.230.105: icmp_seq=2 ttl=62 time=15.441 ms
64 bytes from 10.42.230.105: icmp_seq=3 ttl=62 time=12.838 ms
^C--- redis-redis-1.rancher.internal ping statistics ---
4 packets transmitted, 4 packets received, 0% packet loss
round-trip min/avg/max/stddev = 12.676/13.427/15.441/1.164 ms

Solution

  • The message no dependency description provided just means that under the hood, the connector has no description property.

    I'd recommend trying to set some data via a deepstream client and see if it is written to the database.