Skip to content

InitStore should be able to skip local init in PD/HStore deployments #3118

Description

@bitflicker64

Problem

bin/init-store.sh always runs full local setup (scan ./conf/graphs, init non-hstore backends, create admin user). That is right for standalone / tarball installs.

For HStore / PD mode the storage side already owns metadata. Server should start and register with PD. Forcing a full local init on every path makes Kubernetes and Helm harder than they need to be (one-shot Jobs, skip-init workarounds on Server pods).

There is already a Server option for local graph config:

  • key: graph.load_from_local_config
  • ServerOptions.GRAPH_LOAD_FROM_LOCAL_CONFIG
  • used by GraphManager when deciding whether to load graphs from ./conf/graphs

InitStore does not look at that flag today.

Proposal

Teach InitStore to honor the same property, with standalone-safe defaults:

rest-server.properties init-store
key unset (current shipped defaults) full init (same as master)
explicit false no-op, WARN, exit 0
explicit true full init

Details:

  • Skip only when the key is present and false. Missing key must not skip. ServerOptions typed default is false for GraphManager; treating "missing" as skip would break bare tarball init-store.sh.
  • Map Docker env HG_SERVER_LOAD_FROM_LOCAL_CONFIG into rest-server.properties (the file init-store.sh already passes to Java).
  • Helm / distributed can set the env (or property) to false so Server does not re-init local storage.
  • No change to the ServerOptions default itself.

Scope

In scope:

  • InitStore.java early exit
  • Docker entrypoint env mapping
  • unit tests for unset / false / true

Out of scope:

Why this shape

Community still supports standalone and multi-backend installs, so default behavior of init-store should stay as it is today. Distributed / HStore needs an explicit opt-out so cluster installs do not fight local init.

Related

I can open a PR that implements the above once this issue is filed.


Update: dedicated option instead of reusing graph.load_from_local_config

The proposal above reuses graph.load_from_local_config. #3119 implements a
dedicated init_store.enabled instead.

graph.load_from_local_config governs whether GraphManager loads graphs from
./conf/graphs. Whether init-store should run is a different decision, and a
deployment can reasonably want one without the other. Overloading one key for
both would have made the two impossible to set independently later.

The behavior table is otherwise unchanged: key unset means full init, explicit
false is a no-op, explicit true is full init. The Docker env variable is
HG_SERVER_INIT_STORE_ENABLED.

The entrypoint auth-bootstrap work that shared the #3119 branch has moved to
#3133.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions