charts/graphscope-store/templates/configmap.yaml (157 lines of code) (raw):
apiVersion: v1
kind: ConfigMap
metadata:
name: {{ include "graphscope-store.fullname" . }}
namespace: {{ .Release.Namespace }}
labels: {{- include "common.labels.standard" . | nindent 4 }}
app.kubernetes.io/component: configmap
{{- if .Values.commonLabels }}
{{- include "common.tplvalues.render" ( dict "value" .Values.commonLabels "context" $ ) | nindent 4 }}
{{- end }}
{{- if .Values.commonAnnotations }}
annotations: {{- include "common.tplvalues.render" ( dict "value" .Values.commonAnnotations "context" $ ) | nindent 4 }}
{{- end }}
data:
groot.config: |-
## Common Config
{{- if .Values.distributed.enabled }}
rpc.port=55555
discovery.mode={{ .Values.discoveryMode }}
role.name=ROLE
node.idx=INDEX
release.full.name={{ include "graphscope-store.fullname" . }}
{{- else }}
rpc.port=0
discovery.mode=zookeeper
role.name=""
node.idx=0
release.full.name=localhost
{{- end }}
store.node.count={{ .Values.store.replicaCount }}
frontend.node.count={{ .Values.frontend.replicaCount }}
coordinator.node.count={{ .Values.coordinator.replicaCount }}
partition.count={{ .Values.store.replicaCount | mul 16 }}
## Frontend Config
frontend.service.port={{ .Values.frontend.service.servicePort }}
frontend.service.httpPort={{ .Values.frontend.service.httpPort }}
frontend.server.id=INDEX
frontend.server.num={{ .Values.frontend.replicaCount }}
## Store Config
store.data.path={{ .Values.storeDataPath }}
store.write.thread.count={{ .Values.storeWriteThreadCount }}
store.queue.buffer.size={{ .Values.storeQueueBufferSize }}
## Zk Config
zk.base.path={{ .Values.zkBasePath }}
zk.connect.string={{ printf "%s-headless" (include "graphscope-store.zookeeper.fullname" .) }}
## Kafka Config
kafka.servers={{ include "graphscope-store.kafka.brokerlist" . }}
kafka.topic={{ .Values.kafkaTopic }}
kafka.producer.custom.configs={{ .Values.kafkaProducerCustomConfigs }}
kafka.test.cluster.enable=false
## Frontend Config
gremlin.server.port=12312
## disable neo4j when launching groot server by default
neo4j.bolt.server.disabled=true
## GOpt config
graph.planner.is.on={{ .Values.graphPlannerIsOn }}
graph.planner.opt={{ .Values.graphPlannerOpt }}
graph.planner.rules={{ .Values.graphPlannerRules }}
graph.physical.opt={{ .Values.graphPhysicalOpt }}
gremlin.script.language.name={{ .Values.gremlinScriptLanguageName }}
query.execution.timeout.ms={{ .Values.queryExecutionTimeoutMs }}
graph.planner.join.min.pattern.size={{ .Values.graphPlannerJoinMinPatternSize }}
graph.planner.cbo.glogue.size={{ .Values.graphPlannerCboGlogueSize }}
log4rs.config=LOG4RS_CONFIG
## Auth config
auth.username={{ .Values.auth.username }}
auth.password={{ .Values.auth.password }}
# Pegasus config
pegasus.hosts=PEGASUS_HOSTS # this is used by ir server to compute the server size
pegasus.worker.num={{ .Values.pegasus.worker.num }}
pegasus.timeout={{ .Values.pegasus.timeout }}
pegasus.batch.size=1024
pegasus.output.capacity=16
gaia.rpc.port=60000
gaia.engine.port=60001
gaia.write.timeout.ms=5000
## Secondary config
secondary.instance.enabled={{ .Values.secondary.enabled }}
store.data.secondary.path={{ .Values.secondary.storeDataPath }}
store.gc.interval.ms={{ .Values.storeGcIntervalMs }}
store.catchup.interval.ms={{ .Values.storeCatchupIntervalMs }}
write.ha.enabled={{ .Values.backup.enabled }}
## Coordinator Config
rpc.max.bytes.mb={{ .Values.rpcMaxBytesMb }}
snapshot.increase.interval.ms={{ .Values.snapshotIncreaseIntervalMs }}
offsets.persist.interval.ms={{ .Values.offsetsPersistIntervalMs }}
file.meta.store.path={{ .Values.fileMetaStorePath }}
log.recycle.enable={{ .Values.logRecycleEnable }}
collect.statistics={{ .Values.collect.statistics.enabled }}
collect.statistics.interval.min={{ .Values.collect.statistics.interval }}
collect.statistics.initial.delay.min={{ .Values.collect.statistics.initial.delay }}
log.recycle.offset.reserve={{ .Values.logRecycleOffsetReserve }}
## Extra Config
{{- if .Values.extraConfig }}
{{- $config_list := regexSplit ";" .Values.extraConfig -1 }}
{{- range $config_list }}
{{ . }}
{{- end }}
{{- end }}
setup.sh: |-
#!/bin/bash
sudo chown -R graphscope:graphscope {{ .Values.storeDataPath }} || true
sudo chown -R graphscope:graphscope /etc/groot || true
sudo chown -R graphscope:graphscope /var/log/graphscope || true
[[ `hostname` =~ -([0-9]+)$ ]] || exit 1
ordinal=${BASH_REMATCH[1]}
pegasus_hosts=""
i=0
while [ $i -ne $STORE_COUNT ]; do
pod=`echo $DNS_NAME_PREFIX_STORE | sed -e "s/{}/$i/g"`
# 60001 is fixed gaia engine port
pegasus_hosts="${pegasus_hosts},${pod}:60001"
i=$(($i+1))
done
pegasus_hosts=${pegasus_hosts:1}
sudo sed -e "s/ROLE/${ROLE}/g" \
-e "s/INDEX/${ordinal}/g" \
-e "s/PEGASUS_HOSTS/${pegasus_hosts}/g" \
-e "s@LOG4RS_CONFIG@${GRAPHSCOPE_HOME}/groot/conf/log4rs.yml@g" \
/etc/groot/groot.config.tpl | sudo tee -a /etc/groot/groot.config
export LOG_NAME=graphscope-store
export GROOT_CONF_FILE=/etc/groot/groot.config
export OTEL_SDK_DISABLED={{ not .Values.otel.enabled }}
{{- if .Values.otel.enabled }}
export OTEL_TRACES_SAMPLER={{ .Values.otel.traces.sampler.name }}
export OTEL_TRACES_SAMPLER_ARG={{ .Values.otel.traces.sampler.arg }}
export OTEL_SERVICE_NAME=groot
export OTEL_RESOURCE_ATTRIBUTES=service.name=groot,service.version=1.0.0
export OTEL_TRACES_EXPORTER=otlp
export OTEL_METRICS_EXPORTER=otlp
export OTEL_LOGS_EXPORTER=otlp
export OTEL_EXPORTER_OTLP_METRICS_TEMPORALITY_PREFERENCE=DELTA
export OTEL_EXPORTER_OTLP_METRICS_DEFAULT_HISTOGRAM_AGGREGATION=BASE2_EXPONENTIAL_BUCKET_HISTOGRAM
# export OTEL_EXPORTER_OTLP_COMPRESSION=gzip
{{- end }}
{{- if .Values.uptrace.enabled }}
export UPTRACE_DSN=http://{{ .Values.uptrace.token }}@${{ .Values.uptrace.service }}:14318?grpc=14317
export OTEL_EXPORTER_OTLP_ENDPOINT=http://{{ .Values.uptrace.service }}:14317
export OTEL_EXPORTER_OTLP_HEADERS=uptrace-dsn=${UPTRACE_DSN}
{{- end }}
# For core and heap profiling
# ulimit -c unlimited
# sudo mkdir -p /apsara/cloud/data/corefile/ && sudo chown -R graphscope:graphscope /apsara/cloud/data/corefile/
# export _RJEM_MALLOC_CONF=prof:true,lg_prof_interval:29,lg_prof_sample:19,prof_prefix=/tmp
# export MALLOC_CONF=prof:true,lg_prof_interval:29,lg_prof_sample:19,prof_prefix=/tmp
export RUST_BACKTRACE=1
if [ "$ROLE" = "frontend" ]; then
echo "Starting groot-http Spring Boot service..."
${GRAPHSCOPE_HOME}/groot/bin/store_ctl.sh start_http &
fi
${GRAPHSCOPE_HOME}/groot/bin/store_ctl.sh start ${ROLE} # || sleep infinity
portal_setup.sh: |-
#!/bin/bash
while true
do
{{- if .Values.distributed.enabled }}
export HOST="${INSTANCE_NAME}-graphscope-store-frontend-0.${INSTANCE_NAME}-graphscope-store-frontend-headless"
{{- else }}
export HOST="localhost"
{{- end }}
export GRPC_PORT=${GROOT_GRPC_PORT}
export GREMLIN_PORT=${GROOT_GREMLIN_PORT}
echo "${HOST} ${GRPC_PORT} ${GREMLIN_PORT}"
cmd="nc -zv ${HOST} ${GREMLIN_PORT}"
res=$(eval $cmd 2>&1)
if [[ $res == *succeeded* ]]; then
# Expected Output is <Connection to localhost (::1) 8182 port [tcp/*] succeeded!>
break
fi
sleep 3
done
export CONFIG_FILE=/tmp/coordinator_config.yaml
echo "coordinator:" > ${CONFIG_FILE}
echo " http_port: ${SERVICE_PORT}" >> ${CONFIG_FILE}
echo "" >> ${CONFIG_FILE}
echo "launcher_type: hosts" >> ${CONFIG_FILE}
echo "" >> ${CONFIG_FILE}
echo "session:" >> ${CONFIG_FILE}
echo " instance_id: demo" >> ${CONFIG_FILE}
python3 -m gscoordinator --config-file ${CONFIG_FILE}